OpenSea MCP server
24 operations0 webhooks
Read collections, NFTs, listings, offers and marketplace events, and search OpenSea's catalogue.
Try OpenSea with your agent
Connect OpenSea, then paste this into Claude, ChatGPT or Cursor. For ideas from other apps, see the use cases.
Using Corsair, show me what you can do in OpenSea on my account, then run one read-only example and show me the result.
OpenSea tools and triggers
Tools are what your agent can do in OpenSea through Corsair's MCP server. Triggers are the OpenSea events a routine can start from.
Collections
- Floor PricesRead-only
Floor price over time for one collection, as points carrying a float unix timestamp, a USD string and a token-unit price. Narrow with `timeframe`, and set how many points come back with `resolution`.
collections.floorPrices
- GetRead-only
One collection by slug, with its contract addresses, links and NFT counts. The answer is a bare object, not an array, and an unknown slug is a 404.
collections.get
- HoldersRead-only
Wallet addresses holding one collection, with each amount and its share of supply as a fraction (`0.0127` is 1.27%). Sort by quantity either way. This route pages with `cursor`, not `next`.
collections.holders
- ListRead-only
Collections, paged with the returned `next` cursor. Filter by chain, creator or hidden status, and sort with `order_by`. OpenSea defaults the page size to 50.
collections.list
- StatsRead-only
Volume, sales, owner count and floor price for one collection, as an all-time total plus per-interval rows.
collections.stats
- TopRead-only
Collections ranked by a metric, `one_day_volume` by default. This route pages with `cursor`, which is the previous response’s `next`.
collections.top
- TrendingRead-only
Collections ranked by momentum over a window, `one_day` by default. Same page shape as `collections.top`, and it pages with `cursor` too.
collections.trending
Offers
- AllRead-only
Every active offer on a collection, paged with `next`, including trait and per-token offers. Filter by `maker` for one bidder. `offers.collection` gives only the collection-wide ones.
offers.all
- BestRead-only
The highest active offer on one token in a collection, as a single order object. Answers an empty or 404 result when nobody has bid on that token.
offers.best
- CollectionRead-only
Active collection-wide offers, paged with `next`. Same order shape as listings, with `remaining_quantity` for how much of the offer is unfilled.
offers.collection
Accounts
- GetRead-only
One OpenSea profile by wallet address or username, with its display name, bio, follower counts and verification flag. `is_agent` is a self-declaration, not a check by OpenSea.
accounts.get
- PortfolioRead-only
USD value of one wallet’s NFTs and tokens, with profit and loss over a timeframe. Every figure is a string. `pnl_absolute` and `pnl_percentage` are absent, not zero, when the account has no history.
accounts.portfolio
Events
- CollectionRead-only
Marketplace events limited to one collection, paged with `next`. Narrow by event type, trait filter or a time window. The account-wide `events.list` is the same shape without the collection scope.
events.collection
- ListRead-only
Marketplace events, newest first, paged with `next`. Narrow by event type and by an `after` or `before` unix timestamp.
events.list
Listings
- AllRead-only
Every active listing in a collection, paged with `next`, including private ones when asked. Filter by `maker` to see one seller’s listings. `listings.best` gives only the cheapest per token.
listings.all
- BestRead-only
The cheapest active listings in one collection, paged with `next`. Each order carries a Seaport `protocol_data` payload and its `order_hash` for a later fulfilment call.
listings.best
Nfts
- GetRead-only
One NFT by chain, contract address and token id, with its owners and traits. The token id goes in as a string, because some collections use ids beyond the safe integer range.
nfts.get
- OwnersRead-only
Wallets holding one token, with the quantity each holds. Useful for an ERC-1155 or a fractionalised token, where more than one address holds the same id.
nfts.owners
Chains
- ListRead-only
The chains OpenSea indexes, with each one’s symbol and block explorer. No input; the list is the valid source for every `chain` argument elsewhere.
chains.list
Collection
- NftsRead-only
The NFTs in one collection, paged with `next`. Filter by trait with `traits`, a JSON array of `traitType` and `value` pairs sent as a string.
collection.nfts
Contract
- NftsRead-only
Every NFT a contract has issued, paged with `next`. Use this to walk a contract whose collection slug you do not have; `collection.nfts` is the same rows keyed by slug.
contract.nfts
Orders
- GetRead-only
One order by chain, Seaport contract address and order hash, as a single object rather than an array. Takes the `order_hash` from a listing or offer row; a cancelled or filled order still answers with its final state.
orders.get
Search
- SearchRead-only
Search across collections, NFTs, tokens and accounts. Each result carries a `type` and one payload key, so branch on `type` before reading the rest.
search.search
Traits
- ListRead-only
The trait names on one collection, the type of each, and under `counts` every value with how many NFTs carry it (`min` and `max` for a numeric trait). Use `collection.nfts` with a `traits` filter to select NFTs by value.
traits.list
Connect OpenSea to Claude, ChatGPT or Cursor
- 1
Connect OpenSea in Corsair
Add your OpenSea API key once in Corsair. Corsair stores the credential encrypted and makes the OpenSea API calls for your agent, so it never goes into a prompt or a config file. Connect OpenSea
If your link lets the agent add apps, you can skip this: it gives you a sign-in link the first time it needs OpenSea. On a ChatGPT personal plan, connect OpenSea here first.
- 2
Add Corsair's MCP server to your agent
Every client uses the same address:
https://mcp.corsair.dev/mcpOpen Customize → Connectors → Add custom connector, paste the address, then select Connect.Add a custom MCP server with the address and choose OAuth. Personal plans get read tools only.Add to CursorOr add this to~/.cursor/mcp.json. Cursor opens Corsair to sign in the first time it connects.{ "mcpServers": { "corsair": { "url": "https://mcp.corsair.dev/mcp" } } }Run this, then run/mcpin Claude Code to sign in.claude mcp add --transport http corsair https://mcp.corsair.dev/mcpCodex, Gemini CLI, VS Code, Zed and other clients with OAuth sign-in work the same way. Clients without it, such as GitHub Copilot's coding agent, use a link's own address and an API key. Setup for every client
- 3
Sign in and choose what needs your approval
Your client opens Corsair to sign in. Pick a link: the apps your agent can use and a mode that decides what it may do without asking. Every OpenSea operation only reads data, so it runs right away in every mode.
FAQ
Install corsair and @corsair-dev/opensea, add the OpenSea plugin, and connect with an API key. Then call methods like corsair.opensea.api.accounts.get() from your app. Corsair keeps each tenant isolated.
Yes. OpenSea requires an API key from your OpenSea account or developer dashboard. Create credentials with access that matches what you automate, then paste them into Corsair or connect through managed auth in Hub.
Yes. One Corsair client can hit OpenSea, GitHub, Notion, Stripe, and the rest. Trigger OpenSea from a webhook, push updates to Slack, or chain actions across plugins. Same tenant context across integrations, plain TypeScript.
Teams use Corsair for read collections, NFTs, listings, offers and marketplace events, and search OpenSea's catalogue. Common builds include sync jobs, admin tooling, and agents that call OpenSea APIs from your backend.
The SDK is open source. Self-host and you pay Corsair nothing for the integration layer. Hub bills for hosted auth and execution, not per OpenSea API call. Hub has a generous free tier. For hobby projects you can probably run the whole thing on free. Paid plans start to matter with more tenants or heavier traffic.
We maintain @corsair-dev/opensea in the open repo. When OpenSea ships API changes, upgrade the package. Your call sites stay typed. You should not need to rewrite the integration layer each time.
No. Corsair does not read your OpenSea data or hold individual access credentials. Credentials stay in your database. API calls run on your instance. We do not store OpenSea data on your behalf.
Yes. Add https://mcp.corsair.dev/mcp as a custom connector or MCP server in Claude, ChatGPT, Cursor, VS Code, Claude Code, Codex or any client that supports remote MCP servers with OAuth sign-in, then sign in to Corsair. On ChatGPT personal plans, custom servers currently get read tools only.
Yes. Put OpenSea on a link in Strict mode and every write waits for your approval, while destructive actions are refused. Every OpenSea operation only reads data, so there are no changes to approve today. You can change a link's mode at hub.corsair.dev/me.