Connect your AI tools to OpenSea using the Model Context Protocol (MCP), an open standard that lets AI assistants interact with NFTs, tokens, and blockchain data across multiple chains.
What is OpenSea MCP?
OpenSea MCP is a hosted server that gives AI tools secure access to blockchain data across NFTs, tokens, and wallets. Query real-time prices, swap tokens, analyze portfolios, and mint NFTs, all through natural language. It works with popular AI assistants like ChatGPT, Cursor, Claude, and Chorus.
Why use OpenSea MCP?
- Easy setup: Connect through a simple URL configuration
- Real-time data: Access live prices for NFTs, tokens, and cryptocurrencies
- Broad blockchain coverage: Support for Ethereum, Polygon, Base, Solana and other major chains
- Built for AI: Efficient data formatting and natural language search designed for AI agents
What can you do with OpenSea MCP?
- Analyze tokens and cryptocurrencies: Look up ERC-20 tokens, meme coins, and get real-time price data
- Swap tokens: Get quotes and transaction data for token swaps across supported chains
- Research NFT collections: Get floor prices, volume data, and trending collections
- Check wallet portfolios: View complete holdings including NFTs, tokens, and balances for any address
- Track market trends: Identify trending tokens, NFT collections, and monitor trading activity
- Mint NFTs from drops: Get drop details, check eligibility, and generate mint transactions
- Deploy NFT contracts: Deploy new SeaDrop NFT contracts and track deployment status
- Discover AI agent tools: Search the onchain Tool Registry (ERC-8257) for registered tools, check access requirements, and verify wallet eligibility
Getting Started
To use OpenSea MCP, you need an OpenSea API key. The same key works for both the REST API and MCP. No separate MCP token is required.
Quickest way (for agents): Get an instant key with no signup:
curl -X POST https://api.opensea.io/api/v2/auth/keysThis returns a free-tier key (60/min read, 5/min write, 30-day expiry) you can use immediately. Agents can also mint this key from within a session by calling the built-in
get_instant_api_keytool (see Providing your API key).For higher rate limits: Sign in to opensea.io, go to Settings → Developer, and create a full API key.
Connect through your AI tool
To connect OpenSea MCP to your AI assistant, use one of these connection methods.
Streamable HTTP (Recommended)
- URL:
https://mcp.opensea.io/mcp - JSON config:
{
"mcpServers": {
"OpenSea": {
"url": "https://mcp.opensea.io/mcp",
"headers": {
"X-API-KEY": "YOUR_API_KEY"
}
}
}
}SSE (Server-Sent Events)
- URL:
https://mcp.opensea.io/sse - JSON config:
{
"mcpServers": {
"OpenSea": {
"url": "https://mcp.opensea.io/sse",
"headers": {
"X-API-KEY": "YOUR_API_KEY"
}
}
}
}Providing your API key
You can present your OpenSea API key in whichever way your client supports:
X-API-KEYheader (shown above): recommended.Authorization: Bearer YOUR_API_KEYheader: use this if your client only supports bearer-token auth (for example, Perplexity's connector). The same OpenSea API key is accepted here.
The same OpenSea API key works for both the REST API and MCP. There is no separate MCP token.
Don't have a key yet? You can still connect. The MCP handshake and tool discovery (
tools/list) work without authentication, so an agent can connect with no key, call the built-inget_instant_api_keytool to mint a free-tier key, then reconnect using that key as theX-API-KEYorAuthorization: Bearerheader. The other (data) tools stay gated until a key is provided.
Quick Start Examples
Once connected, try these prompts to explore OpenSea MCP capabilities:
- "What's the price of PEPE token on Ethereum?"
- "Show me trending tokens on Base"
- "Quote a swap of 1 ETH to USDC"
- "Check the complete portfolio for wallet 0x123..."
- "What's the floor price of Pudgy Penguins?"
- "Find the top meme coins by trading volume"
Sample Project
Prefer a working app? Try the Next.js + Vercel AI SDK starter preconfigured with OpenSea MCP:
https://github.com/ProjectOpenSea/opensea-mcp-next-sample
Supported Tools
Now that you have installed the OpenSea MCP, let's explore how AI assistants can use OpenSea MCP tools to search, analyze, and interact with blockchain and marketplace data.
These tools work together through prompts, and they are most useful in combination. With a single prompt, you can search for collections, check token prices, analyze wallet holdings, and get swap quotes across multiple blockchains.
| Name | Description | Sample prompts |
|---|---|---|
| get_instant_api_key | Create a free-tier OpenSea API key instantly with no signup or wallet required. Use this to bootstrap access when you don't have a key yet, then reconnect with the returned key. Free-tier keys have lower rate limits and expire after 30 days. | "Get me an OpenSea API key" "Bootstrap access to OpenSea so I can use the other tools" |
| search | AI-powered search across OpenSea marketplace data. The AI agent analyzes your query and uses multiple GraphQL endpoints to find relevant results. | "Find BONK token on Solana" "Show me trending NFTs" "Search for gaming NFT collections" "Find Pudgy Penguins collection" |
| fetch | Retrieve full details of a specific OpenSea entity by its unique identifier with maximum data including activity, analytics, offers, and all other available information. | "Get details for entity abc123" |
| search_collections | Search for NFT collections by name, description, or metadata. Returns minimal information (slug + name) for context efficiency. | "Search for Azuki collections" "Find art NFT collections on Ethereum" |
| get_collections | Retrieve detailed information about multiple NFT collections at once. Supports lightweight includes like recent_sales, sample_items, top_holders, basic_stats, and attributes. | "Get details for boredapeyachtclub" "Show me stats for cryptopunks with trading activity" "What's the floor price of doodles-official?" |
| get_collection_stats | Retrieve detailed statistics for an NFT collection, including floor price, volume, sales counts, and owner counts. | "Get stats for boredapeyachtclub" "What's the 24h volume for doodles-official?" |
| get_collection_floor_prices | Retrieve floor prices for an NFT collection, including per-trait floor pricing where available. | "What's the floor price of pudgypenguins?" "Show trait floor prices for Azuki" |
| search_items | Search for individual NFT items/tokens across OpenSea. Returns minimal information (id + name + collection) for context efficiency. | "Find Bored Ape #1234" "Search for rare traits in Azuki" "Look for NFTs priced under 0.1 ETH" |
| get_items | Retrieve detailed information about multiple NFT items at once. Supports includes like recent_activity, active_offers, and ownership_info. | "Get details for BAYC token 5678" "Show me CryptoPunk #100 with price history" "Check the owner of this NFT at 0x123..." |
| search_tokens | Search for cryptocurrencies and tokens by name or symbol, including ERC-20 tokens and meme coins. Returns minimal information (id + name + symbol) for context efficiency. | "Find USDC token" "Search for PEPE coin" "Look up SHIB token address" |
| get_tokens | Retrieve detailed information about multiple cryptocurrencies/tokens at once, including current prices. | "Get info for USDT at 0xdac17f..." "Show WETH token with price history" "What's the contract for DAI?" |
| get_token_swap_quote | Get a swap quote and blockchain actions needed to perform a token swap. Requires sufficient wallet balance to cover amount and gas fees. | "Quote swap 1 ETH to USDC" "How much WETH can I get for 1000 USDT?" "Calculate gas for swapping tokens" |
| get_token_balances | Retrieve token balances for a specific wallet address with USD values and detailed currency metadata. Supports filtering by contracts and sorting by various metrics. | "Check token balances for 0x123..." "Show my wallet's token portfolio" |
| get_nft_balances | Retrieve all NFTs owned by a specific wallet address with metadata, collection details, current listings, and offers. Sortable by price, recency, or rarity. | "Show NFTs owned by 0x789..." "What NFTs does snoop.eth own?" "Check my NFT collection" |
| get_activity | Retrieve trading activity (sales, transfers, listings) for collections, items, profiles, or tokens. Supports pagination and timeframe filtering. | "Show recent sales for Bored Apes" "Get trading history for wallet 0x123..." "Find all USDC transfer activity" |
| get_top_collections | Retrieve top NFT collections with stats explaining why they're top-ranked. Filter by category, chains, verification status and sort by various metrics. | "Show top NFT collections by volume" "What are the highest floor price collections?" "Top trending collections today" |
| get_trending_collections | Retrieve trending NFT collections with stats explaining why they're trending. Filter by category, chains, and specify timeframes (ONE_HOUR, ONE_DAY, SEVEN_DAYS, THIRTY_DAYS). | "Show trending NFTs in the last hour" "What collections are hot this week?" "Find collections trending on Polygon" |
| get_top_tokens | Retrieve top cryptocurrencies and tokens sorted by ONE_DAY_VOLUME in descending order. Filter by chains to identify highest volume tokens. | "Show top tokens by daily volume" "What are the most traded tokens on Ethereum?" "Find high volume meme coins" |
| get_trending_tokens | Retrieve trending cryptocurrencies and tokens sorted by ONE_DAY_PRICE_CHANGE in descending order. Filter by chains to identify tokens with highest price increases. | "Show tokens with biggest gains today" "What cryptocurrencies are pumping?" "Find trending tokens on Base" |
| get_profile | Retrieve comprehensive profile information for a wallet address including basic details and optionally additional data like NFT holdings, trading activity, listings, offers, balances, and favorites. | "Show profile for wallet 0xabc..." "Get trading activity for vitalik.eth" "Check complete portfolio for this address" |
| account_lookup | Look up account information by ENS name, wallet address, or username. Resolves ENS names to addresses and finds usernames associated with addresses. | "Look up vitalik.eth" "Find username for wallet 0x123..." "Resolve ENS name to address" |
| get_account_collections | Retrieve the collections held by a specific wallet address, with ownership counts and collection metadata. | "What collections does 0x123... hold?" "Show collections owned by vitalik.eth" |
| get_chains | Retrieve a list of all blockchain networks supported by OpenSea with chain identifiers and display names. | "What chains does OpenSea support?" "Show me all available blockchains" "List supported networks" |
| get_upcoming_drops | Retrieve a list of upcoming NFT drops on OpenSea with launch dates and collection details. | "What drops are coming up this week?" "Show upcoming NFT drops" |
| get_drop_details | Get detailed information about a specific NFT drop by collection slug. Returns drop stages, pricing, supply, minting status, and eligibility information. Optionally check eligibility for a specific wallet address. | "Get drop details for pudgypenguins" "Check if my wallet is eligible for this mint" "What's the price for the current drop stage?" |
| check_drop_eligibility | Check whether a wallet is eligible to mint from a drop, including allowlist status and per-stage eligibility. Requires an access token with the read:eligibility scope. | "Am I eligible to mint from this drop?" "Check allowlist status for wallet 0x123..." |
| get_mint_action | Get the transaction data to mint NFTs from a SeaDrop drop. Returns transaction data that must be signed and submitted by the user's wallet. Use get_drop_details first to check eligibility and pricing. | "Mint 2 NFTs from this drop" "Get mint transaction for collection xyz" "Prepare a mint transaction for my wallet" |
| deploy_seadrop_contract | Get the transaction data to deploy a new SeaDrop NFT contract. Supports ERC721 (standard or clone) and ERC1155 (clone) token types. Returns transaction data that must be signed and submitted by the user's wallet. | "Deploy a new ERC721 NFT contract on Base" "Create a SeaDrop collection called MyNFT" "Deploy an ERC1155 drop contract" |
| get_deploy_receipt | Check the status of a SeaDrop contract deployment by transaction hash. Returns the deployment status, contract address, and collection information once the transaction is confirmed. | "Check if my contract deployment succeeded" "Get the contract address from this deployment tx" "What's the status of transaction 0x123...?" |
| search_tools | Search the onchain Tool Registry (ERC-8257) for registered AI agent tools by keyword, tags, access type, creator, or chain. Returns enriched results with NFT collection details for gated tools. | "Search for NFT-gated AI tools" "Find tools tagged with 'defi' on Base" "Show tools created by 0xABC..." |
| get_tool | Retrieve detailed information about a specific registered tool by its composite key (registry chain, registry address, and tool ID). Includes manifest data, access predicate details, and enriched NFT collection info. | "Get details for tool 42 on Base registry" "Show me the access requirements for this tool" |
Common Use Cases
Token Trading:
"Get a quote to swap 0.5 ETH for USDC on Base, then show me the transaction data"
Token Discovery:
"Find trending meme coins on Solana and show their 24-hour price changes"
Portfolio Analysis:
"Show me all tokens and NFTs owned by vitalik.eth with current USD values"
Market Research:
"What are the top tokens by trading volume on Ethereum today?"
NFT Research:
"Find NFT collections trending in the last 24 hours with floor price under 1 ETH"
NFT Minting:
"Check if I'm eligible for the upcoming drop and prepare the mint transaction for 2 NFTs"
Tool Discovery (ERC-8257):
"Search for NFT-gated AI tools on Base and check which ones my wallet can access"
Chain Support
OpenSea MCP supports all of the blockchains supported on the OpenSea web front-end.
When using tools, you can specify the chain parameter to filter results to a specific blockchain.
Best Practices
- Use natural language - The AI-powered search understands context, so describe what you're looking for naturally
- Combine tools - Get comprehensive insights by using multiple tools together
- Specify chains - When looking for specific blockchain data, include the chain name
- Check balances first - Before requesting swap quotes, verify wallet has sufficient tokens
- Use collection slugs - For specific collections, use their OpenSea slug (e.g., 'boredapeyachtclub')
- Leverage includes parameters - Many tools support optional 'includes' arrays for additional data (activity, analytics, offers, etc.)
- Specify amounts correctly - For swaps, use native units (ETH/SOL) not smallest units (wei/lamports)
Rate Limits and Performance
- Most queries return results within 1-3 seconds
- Rate limits apply per API key
- Use pagination for large result sets
- Cursor-based pagination available for trending and top collections/tokens
Error Handling
The MCP server provides clear error messages:
- Invalid addresses or contract addresses
- Unsupported chains
- Rate limit exceeded
- Insufficient token balance for swaps
For questions, feedback or support, contact [email protected].
Client Setup
Claude Desktop
Claude Desktop supports MCP servers natively.
- Open your configuration file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
- Add the OpenSea MCP server (see JSON config above)
- Restart Claude Desktop. You should see a hammer icon in the chat input, indicating MCP tools are available.
Cursor
Go to Cursor Settings > MCP > Add new global MCP server, or edit the file directly:
- Project-level:
.cursor/mcp.jsonin your project root - Global:
~/.cursor/mcp.json
Add the JSON config above. The OpenSea server should show a green status indicator in Cursor Settings > MCP.
VS Code (GitHub Copilot)
Open VS Code Settings (Cmd+, / Ctrl+,) and search for mcp. Ensure Chat > MCP: Enabled is checked. Then add to your settings.json:
{
"mcp": {
"servers": {
"OpenSea": {
"type": "http",
"url": "https://mcp.opensea.io/mcp",
"headers": {
"X-API-KEY": "YOUR_API_KEY"
}
}
}
}
}Open Copilot Chat, switch to Agent mode, and click the tools icon to confirm the OpenSea tools are available.
Windsurf
Go to Windsurf Settings > Cascade > MCP, or edit ~/.codeium/windsurf/mcp_config.json. Note: Windsurf uses serverUrl instead of url:
{
"mcpServers": {
"OpenSea": {
"serverUrl": "https://mcp.opensea.io/mcp",
"headers": {
"X-API-KEY": "YOUR_API_KEY"
}
}
}
}ChatGPT
In ChatGPT, go to Settings > Connectors and add a new connector with the URL https://mcp.opensea.io/mcp. Connector support may require a ChatGPT plan and settings that allow custom connectors.
Custom Applications
Integrate OpenSea MCP into your own applications using any MCP-compatible SDK:
Vercel AI SDK: See the full starter project at opensea-mcp-next-sample.
import { experimental_createMCPClient as createMCPClient } from "ai";
const mcpClient = await createMCPClient({
transport: {
type: "sse",
url: "https://mcp.opensea.io/sse",
headers: { "X-API-KEY": process.env.OPENSEA_API_KEY },
},
});
const tools = await mcpClient.tools();Python
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async with streamablehttp_client(
"https://mcp.opensea.io/mcp",
headers={"X-API-KEY": "YOUR_API_KEY"},
) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()TypeScript
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHTTPClientTransport(
new URL("https://mcp.opensea.io/mcp"),
{ requestInit: { headers: { "X-API-KEY": "YOUR_API_KEY" } } }
);
const client = new Client({ name: "my-app", version: "1.0.0" });
await client.connect(transport);
const { tools } = await client.listTools();Prefer the header-based approach when possible. Avoid embedding API keys in URLs in client-side code where they may be visible in browser network logs.
