Solana Nft Mcp

io.github.p1xelapp由 GitHub 帳號 p1xelapp 發布v1.18.0更新於 Oct 30, 2026

Read-only Solana NFT data for AI: ownership history, custody rules, marketplace sales and floors.

已驗證STDIO僅桌面金融資料與分析

概覽

AI 產生的概覽

為 AI 助理提供唯讀的 Solana NFT 資料:持有歷史、託管規則、市場成交與地板價。

可以做什麼
  • 辨識地址、名稱與合集,並對照即時資料核驗說法
  • 查詢合集統計、持有人、地板價、近期成交與熱門榜單
  • 追溯單一資產的持有歷史,解析 Metaplex Core 託管規則
  • 分析錢包:持倉、買賣活動、翻轉、損益與行為標籤
  • 依特徵、名稱或編號尋找掛單,並在整個系列中搜尋某一版次
  • 解釋市場機制,並回報各資料來源的即時狀態
適用情境
當助理需要當前而非憑記憶的 Solana NFT 事實時適用:來源追溯、誰仍可凍結或銷毀資產、跨市場地板價、錢包交易行為,或核實關於某張卡片的說法是否屬實。
執行需求
需要 Node 22 或更新版本,透過 npx 或建置後的 dist/index.js 以 stdio 在本機執行。無需帳號或註冊。可選 OPENSEA_API_KEY、SOLANA_RPC_URL 與 DAS_RPC_URL;未提供金鑰時伺服器會在首次使用時申請免費 OpenSea 金鑰。需要連線至 Solana RPC、Magic Eden 與 OpenSea 的網路。
安裝前請注意
唯讀:不含買入、賣出、掛單或簽章程式碼。它會把所查詢的公開地址、代號或名稱傳送給對應資料來源,啟動時向 npm 查詢版本,並將自行簽發的 OpenSea 金鑰寫入本機檔案。設定 SOLANA_NFT_MCP_NO_AUTO_KEYS=1 可阻止自動簽發金鑰,設定 SOLANA_NFT_MCP_NO_UPDATE_CHECK=1 可跳過版本檢查。僅支援 Solana,且來源追溯與託管解析僅涵蓋 Metaplex Core。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Solana Nft Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[solana-nft-mcp]

solana-nft-mcp

The NFT APIs I tried return an empty ownership history for a Metaplex Core asset, and an AI reading that empty answer tells you the card has never traded. solana-nft-mcp reads the chain itself: who owned it, who can freeze it, what sold and for how much, and where the deals are. Read-only, no sign-up, nothing collected, runs on your machine.

[TypeScript] [MCP] [License: MIT] [Sign-up]


Why

Ask an assistant about a Solana card today and it answers from memory. It will say a card "never traded", because the mainstream NFT APIs return an empty history for Metaplex Core assets while the transfers sit on chain the whole time. It will compare two floors quoted in two currencies as if they were one.

solana-nft-mcp hands the same assistant live, labelled data instead: the chain for supply, ownership, provenance and custody rules, Magic Eden without a key, and OpenSea through a free key the server issues itself. Each number comes back with its marketplace, its currency, its read time, and what the source could not see.

[Your AI app talks to solana-nft-mcp over stdio; the server reads the Solana chain, the asset index, Magic Eden and OpenSea]

The server runs on your machine and your AI app starts it. There is no hosted service and no account between you and the data. The picture is generated from the running server, so the counts cannot drift from the code: npm test fails if they do.

Install

Node 22 or newer. Two ways to run it.

From npm, no clone. Wherever a client asks for a command, give it npx with the arguments -y solana-nft-mcp. The first start downloads the package; later starts reuse it.

bash
claude mcp add solana-nft -- npx -y solana-nft-mcp

From source. Build once, then point the client at dist/index.js:

bash
git clone https://github.com/p1xelapp/solana-nft-mcp.gitcd solana-nft-mcp && npm install && npm run build

Claude Code

bash
claude mcp add solana-nft -- node /absolute/path/to/solana-nft-mcp/dist/index.js

Claude Desktop. Settings -> Developer -> Edit Config, add the block below, then quit the app fully and reopen it. Or install the .mcpb bundle from the latest release by dragging it onto Settings -> Extensions.

json
{  "mcpServers": {    "solana-nft": {      "command": "node",      "args": ["/absolute/path/to/solana-nft-mcp/dist/index.js"]    }  }}

Other clients. Tested: Claude Desktop, Claude Code, Codex CLI 0.153.4 (codex exec -c 'mcp_servers.solana-nft.command="node"' -c 'mcp_servers.solana-nft.args=["/absolute/path/to/dist/index.js"]'). Cursor, Windsurf, Gemini CLI, Zed, Cline and VS Code take the same command / args pair in their own config; the server is plain stdio with no client-specific code, but those have not been tested here. ChatGPT on the web and Grok cannot run a local process. The server speaks MCP protocol revision 2025-11-25 through the official TypeScript SDK v1. A client that offers the newer 2026-07-28 revision gets 2025-11-25 back, which current clients accept; one that refuses anything older cannot use this server yet.

Did it work? Your app lists the tools near the message box (Claude Code: /mcp). You should see 21, starting with identify. If none: the path must be absolute and end in dist/index.js, npm run build must have run, and the app must be fully quit and reopened.

OpenSea is on without any setup. The first question that needs it makes the server ask OpenSea for a free agent key, stored at ~/.solana-nft-mcp/opensea-key.json and renewed before it expires. The key is never logged or printed into an answer. A collection's OpenSea slug is found from its on-chain address, or by name and then proved against that address; pass openseaSlug to override. Options, set in the config's env block (clients launch the server with a clean environment):

  • OPENSEA_API_KEY - your own key, overrides the self-issued one.
  • SOLANA_NFT_MCP_NO_AUTO_KEYS=1 - never request a key; OpenSea is off unless you set one.
  • SOLANA_RPC_URL, DAS_RPC_URL - a private endpoint, neither required. A key in the URL is registered and redacted from every answer (details in docs/FAQ.md).
  • SOLANA_NFT_MCP_NO_UPDATE_CHECK=1 - skip the one startup request to npm for a newer version.

Ask it anything

Nobody types a tool name. These are asked in plain words and the assistant picks the calls.

  • Who has owned this card since it was minted, with dates and the marketplaces involved?
  • Is it true this card has never traded?
  • Can the project still freeze, move or burn what is in my wallet?
  • What is in wallet 7HHs3..., and does that wallet flip or hold?
  • What is the cheapest Legendary listing in that DC collection right now?
  • Any Superman or Batman DC comic #1 or #100 for sale, and are any close to floor?
  • What did Shohei Ohtani cards sell for this week, and how many changed hands?
  • Are the Magic Eden and OpenSea floors for this collection even comparable?
  • What would it take to build a sales bot on this, and where would it fail quietly?

A collection name, a player name, a card number or a trait is enough to start. Names resolve against a bundled snapshot of the Magic Eden directory, against OpenSea's Solana index, and against the marketplace itself, and a fuzzy match is offered as a candidate with the mismatch stated, never presented as the answer. Long answers are sized to arrive whole: a client that caps a tool result gets fewer per-row details before it gets fewer rows, and the answer says what it left out.

What it reads

SourceAnswersKey
Solana RPC (three public endpoints, rotated)supply, current owner from decoded Core account bytes, transfer history, wallet agenone
Asset index (DAS) on the public RPCa second, independent opinion on ownership and wallet contentsnone
Magic Eden v2floors, listings, sales, activity, top traders, trendingnone
OpenSea v2second-marketplace floors, sales, supply, royalty, wallet transfersself-issued

No account, no sign-in, no telemetry, no log of your questions, and no signing code anywhere in the repository; every tool declares readOnlyHint. What leaves the machine: the public address, symbol or name you asked about, sent to the source that can answer it; one startup request to npm for the latest version number; one request to OpenSea for a free key, the first time a question needs it. One file is written, the key file above, at permissions 600. Nothing else touches disk. To remove everything: uninstall or delete the clone, then delete ~/.solana-nft-mcp/.

Tools

21 tools. Names are frozen: agents reference them in prompts, and a rename breaks integrations without raising an error.

ToolBack
identifywhat an address or name is, where it trades, which tool to call next
verify_claimconfirmed, contradicted or unverifiable, with the numbers seen and how to re-check
get_asset_trustCore plugins decoded from bytes: delegates, frozen state, oracle checks that refuse transfers or burns right now, enforced vs advisory royalties, mutable metadata, editions
get_integration_recipeendpoints, pacing, running cost, skeleton and the silent failure modes for a given build
search_collectionsname lookup across the Magic Eden directory and the OpenSea Solana index, saying which layers were read
get_collection_statschain supply, floors per marketplace, and a reconciliation that refuses to rank SOL against USDC
get_collection_holderscensus of a Core collection from the chain's asset index, each holder with a role (issuer, marketplace escrow, wallet), capped and saying so
get_floor_pricescurrent floor and listed count for up to 10 collections, Magic Eden only
get_recent_saleslatest completed fills with buyer, seller, price, mint and signature
get_assetthree readers for one item: the marketplace, a byte-level decode, and the chain's asset index, with owner agreement reported
get_asset_provenancebounded ownership history of a Core asset, dated, marketplaces named, every unread hole marked in place. historyComplete says every transaction was read; mintObserved says the mint itself was decoded. They are different claims
get_wallet_holdingsholdings from two independent readers, with the gap between them named
get_wallet_profileholdings by collection, share of wallet and of supply, listed and compressed counts, floor ceiling with assumptions, wallet age
get_wallet_activitybuys and sells, net flow, marketplace split, every flip with hold time and P&L, a behaviour label with its reason
get_collection_salessales over a window: count, volume, median, buyers, sellers, per-day series, per-name breakdown, how far back the feed was read
find_in_groupone edition number hunted across a whole family of collections, each match against its own floor
find_listingscheapest-first listings, trait filters, a name filter that says what it matched, a lowest-serials mode, each ask against its trait floor on both marketplaces
get_top_tradersthe largest wallets in a collection by Magic Eden volume
get_trendingMagic Eden's trending list, with an explicit note when the marketplace publishes nothing
explain_mechanicsescrow, freezing, delegates, royalties, wash trades and migrations, per standard and marketplace, each entry citing its source
get_source_statusevery source pinged live: tier, fallback, what it cannot see, credential state

Three prompts: getting_started, collection_report, wallet_report. No MCP resources, on purpose: everything they would carry is reachable by a tool the assistant calls itself.

Trust and limits

  • Buying, selling, listing and signing are absent. No code exists for them.
  • Provenance and trust decoding cover Metaplex Core only. Legacy SPL and compressed NFTs are reported as named gaps, never as empty lists. Holdings and activity cover both.
  • Magic Eden and OpenSea only. Tensor has no self-serve keys; Rarible's Solana coverage is unconfirmed. Both are catalogued with the condition that would add them.
  • Every money figure names its currency and the API it came from, on the summary and on every priced row, and counts keep their coverage flags beside them (truncated, stale, historyComplete). A program should refuse to act on a row whose flag says the read was partial.
  • Two error surfaces. Input that fails a tool's schema is refused before the handler runs: isError: true, no structuredContent. Every failure inside a handler carries structuredContent.error, a stable category (not-found, wrong-kind, escrow, source-unsupported, bad-input, upstream-unavailable, upstream-rate-limit, error).
  • No valuations and no currency conversion. Solana only.

Full detail: docs/TRUST-AND-LIMITS.md.

Security

Minting is permissionless, so a collection name is attacker-controlled text. Every name and every field from a chain or a marketplace is checked against the shape it claims to have before a model sees it, and every credential this process has sent is redacted from every answer. Covered by the offline suite. Reporting: SECURITY.md.

Development

bash
npm test           # offline: every tool, prompt, validation, wallet and market logic,                   # the OpenSea contract, the prompt-injection defence. No network.npm run test:live  # live: floors, a real provenance trace, source status, name lookupnpm run snapshot   # refresh the bundled Magic Eden collection directorynpm run inspect    # open the MCP Inspector against a local build

CI runs a full-history secrets scan on every push to every branch; the offline suite, lint, the tarball check and npm audit on main, pull requests and release tags; and the live check weekly.

Docs

About

Built and maintained by P1xel (p1xel.app, @P1xelCollector), a long-time Solana collector. The story of why it exists is in docs/DEEP-DIVE.md.

Running on the same decoding

[CandyScan]

CandyScan tracks the Candy Digital collections on Solana: supply, holders, migrations and sales, kept current. It is where the Core decoding was written first, and this repository is the keyless half of that pipeline. Each project shaped the other.

Shipped something on top of solana-nft-mcp? Open an issue and it goes here.

Independent project, not affiliated with the Solana Foundation. SOLANA and SOL are trademarks of the Solana Foundation. They appear in this project's name and documentation for one reason only: to say which chain the server reads. Nothing here is endorsed, sponsored or reviewed by the Solana Foundation, and no affiliation is claimed or implied.

License

MIT. See LICENSE.

來源:README.md,提交 c2a348d

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

2
  1. v1.18.0最新Oct 8, 2026
  2. v1.17.2Sep 22, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分