solana-nft-mcp について
solana-nft-mcpは、Solana NFTの所有権、来歴、管理ルール、市場データを調べる読み取り専用MCPサーバーです。オンチェーン情報とMagic Eden、OpenSeaのデータを照合し、通貨、出典、取得範囲を明示します。
主な機能
- 01所有権履歴と来歴の確認
- 02Coreの管理・信頼性チェック
- 03Magic EdenとOpenSeaの市場データ
- 04ウォレット保有資産と活動
- 05通貨とデータ範囲の表示
- 06ローカルでの読み取り専用動作
活用シーン
- 01NFTの所有権履歴の確認
- 02凍結・移転・焼却権限の確認
- 03通貨を明示した市場フロア価格の比較
- 04ウォレット保有資産と取引活動の分析
MCP 対応
MCPクライアントに、Solanaのオンチェーン情報、Magic Eden、OpenSeaを照会する読み取り専用ツール21個とプロンプト3個を提供します。stdioでローカル実行します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y solana-nft-mcpOPENSEA_API_KEYシークレットOptional. Your own OpenSea API key; without it the server issues a free one on first use.SOLANA_NFT_MCP_NO_AUTO_KEYSシークレットOptional. Set to 1 to stop the server from issuing an OpenSea key for you.SOLANA_NFT_MCP_NO_UPDATE_CHECKOptional. Set to 1 to skip the once-per-start npm version check.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
21掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| query | string | はい | アドレス、市場のシンボル/slug、またはコレクション名 |
詳細
solana-nft-mcp
試した NFT API では Metaplex Core アセットの所有履歴が空で返され、その空の回答を読んだ AI は、そのカードは一度も取引されていないと判断します。 solana-nft-mcp はブロックチェーン自体を読み取り、誰が所有していたか、誰が凍結できるか、何がいくらで売れたか、取引がどこで行われたかを確認します。読み取り専用で、登録不要、データの収集もなく、お使いのマシン上で動作します。
なぜ
今、Solana のカードについてアシスタントに尋ねると、記憶に基づいて答えます。主流の NFT API では Metaplex Core アセットの履歴が空で返される一方、転送はずっとブロックチェーン上に記録されているため、そのカードは「一度も取引されていない」と答えてしまいます。また、異なる通貨で表示された 2 つのフロア価格を、同じ通貨であるかのように比較します。
solana-nft-mcp は、同じアシスタントに、代わりにラベル付きのライブデータを提供します。供給量、所有権、来歴、保管ルールについてはブロックチェーンから、キー不要の Magic Eden から、そしてサーバー自身が発行する無料キーを使って OpenSea からデータを取得します。各数値には、マーケットプレイス、通貨、読み取り時刻、データソースが確認できなかった内容が付随します。
サーバーはお使いのマシン上で動作し、AI アプリが起動します。ホステッドサービスはなく、データとの間にアカウントもありません。この図は実行中のサーバーから生成されるため、件数とコードが食い違うことはありません。食い違った場合は npm test が失敗します。
インストール
Node 22 以降が必要です。実行方法は 2 通りあります。
npm から実行する場合。クローンは不要です。 クライアントからコマンドを指定するよう求められたら、引数
-y solana-nft-mcp を付けて npx を指定してください。初回起動時にパッケージがダウンロードされ、以降の起動では再利用されます。
claude mcp add solana-nft -- npx -y solana-nft-mcp
ソースから実行する場合。 1 回ビルドしたら、クライアントに dist/index.js を指定します。
git clone https://github.com/p1xelapp/solana-nft-mcp.git
cd solana-nft-mcp && npm install && npm run build
Claude Code
claude mcp add solana-nft -- node /absolute/path/to/solana-nft-mcp/dist/index.js
Claude Desktop。 Settings -> Developer -> Edit Config の順に開き、以下のブロックを追加してから、アプリを完全に終了して再起動してください。または、最新リリースの .mcpb バンドルを Settings -> Extensions にドラッグしてインストールしてください。
{
"mcpServers": {
"solana-nft": {
"command": "node",
"args": ["/absolute/path/to/solana-nft-mcp/dist/index.js"]
}
}
}
その他のクライアント。 テスト済み: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、VS Code では、それぞれの設定で同じ command / args の組み合わせを指定します。このサーバーはクライアント固有のコードを含まない標準的な stdio ですが、これらのクライアントではまだテストされていません。ウェブ版の ChatGPT と Grok はローカルプロセスを実行できません。
このサーバーは公式 TypeScript SDK v1 を通じて、MCP プロトコルリビジョン 2025-11-25 を使用します。より新しい 2026-07-28 リビジョンを提供するクライアントには 2025-11-25 を返し、現在のクライアントはこれを受け入れます。より古いリビジョンを一切受け入れないクライアントでは、まだこのサーバーを使用できません。
動作しましたか? アプリでは、メッセージボックス付近にツールが表示されます(Claude Code の場合は /mcp)。identify を先頭に、21 個表示されるはずです。何も表示されない場合は、パスが絶対パスで dist/index.js で終わっていること、npm run build を実行済みであること、アプリを完全に終了して再起動したことを確認してください。
OpenSea は設定不要で有効です。OpenSea が必要な最初の質問を受けると、サーバーは OpenSea に無料のエージェントキーを要求します。キーは ~/.solana-nft-mcp/opensea-key.json に保存され、有効期限前に更新されます。キーがログに記録されたり、回答に表示されたりすることはありません。コレクションの OpenSea スラッグはオンチェーンアドレスから特定されるか、名前をもとに特定された後、そのアドレスと照合されます。上書きするには openseaSlug を渡してください。設定ファイルの env ブロックで設定するオプション(クライアントはクリーンな環境でサーバーを起動します):
OPENSEA_API_KEY- 自分のキーを指定します。自動発行されたキーより優先されます。SOLANA_NFT_MCP_NO_AUTO_KEYS=1- キーを要求しません。キーを設定しない限り、OpenSea は無効になります。SOLANA_RPC_URL、DAS_RPC_URL- プライベートエンドポイントを指定できますが、どちらも必須ではありません。URL 内のキーは登録され、すべての回答から伏せられます(詳しくは docs/FAQ.md を参照)。SOLANA_NFT_MCP_NO_UPDATE_CHECK=1- 起動時に npm へ新しいバージョンを確認するリクエストを 1 回送る処理を省略します。
何でも質問できます
ツール名を入力する必要はありません。以下のような質問を自然な言葉で入力すると、アシスタントが呼び出すツールを選びます。
- このカードがミントされてから、誰がいつ所有し、どのマーケットプレイスで取引されましたか?
- このカードは一度も取引されていないというのは本当ですか?
- プロジェクトは、私のウォレットにあるものを今も凍結、移動、焼却できますか?
- ウォレット 7HHs3... の中身は何ですか?また、そのウォレットは転売していますか、それとも保有していますか?
- 現時点で、あの DC コレクションの最安のレジェンダリーの出品はどれですか?
- スーパーマンまたはバットマンの DC コミック第 1 号または第 100 号で、販売中のものはありますか?フロア価格に近いものはありますか?
- 今週、大谷翔平のカードはいくらで売れ、何枚が売買されましたか?
- このコレクションの Magic Eden と OpenSea のフロア価格は、比較できる水準ですか?
- これを使って販売ボットを作るには何が必要で、どこで気付かないうちに失敗しますか?
コレクション名、選手名、カード番号、またはトレイトがあれば質問を始められます。名前は、同梱された Magic Eden ディレクトリのスナップショット、OpenSea の Solana インデックス、マーケットプレイス本体を使って照合されます。あいまい一致は不一致の内容を明示したうえで候補として提示され、回答として提示されることはありません。長い回答は全体が届くよう調整されます。ツールの結果に上限を設けるクライアントでは、行数を減らす前に各行の詳細を減らし、省略した内容も回答に記載します。
読み取り元
| ソース | 回答する内容 | キー |
|---|---|---|
| Solana RPC(3 つの公開エンドポイントを順番に切り替えて使用) | 供給量、デコードした Core アカウントのバイト列から取得した現在の所有者、転送履歴、ウォレットの使用期間 | なし |
| 公開 RPC 上のアセットインデックス(DAS) | 所有権とウォレットの保有内容についての、独立した第 2 の見解 | なし |
| Magic Eden v2 | フロア価格、出品、販売、アクティビティ、上位トレーダー、トレンド | なし |
| OpenSea v2 | 第 2 マーケットプレイスのフロア価格、販売、供給量、ロイヤリティ、ウォレットの転送 | 自己発行 |
アカウントもサインインもなく、テレメトリも質問のログもありません。リポジトリ内のどこにも署名コードはなく、すべてのツールで readOnlyHint が宣言されています。マシンの外部に送信されるものは、回答できるソースに送られる公開アドレス、質問に使ったシンボルまたは名前、起動時に npm へ送る最新バージョン番号の確認リクエスト 1 件、そして OpenSea のキーが必要な質問で初回に送る OpenSea へのリクエスト 1 件です。書き込まれるファイルは、上記のキーファイル 1 つだけで、権限は 600 です。それ以外でディスクに触れることはありません。すべて削除するには、アンインストールするかクローンを削除し、その後 ~/.solana-nft-mcp/ を削除してください。
ツール
21 個のツールがあります。名前は変更できません。エージェントはプロンプト内でこれらを参照しており、名前を変更するとエラーが表示されないまま連携が壊れます。
| ツール | 説明 |
|---|---|
identify | アドレスや名前の正体、取引されている場所、次に呼び出すツールを示します |
verify_claim | 確認済み、反証済み、または検証不能のいずれかと、確認できた数値および再確認の方法を示します |
get_asset_trust | バイト列からデコードした Core プラグイン:委任者、凍結状態、現時点で転送やバーンを拒否するオラクルチェック、強制適用か参考扱いかのロイヤリティ、変更可能なメタデータ、エディション |
get_integration_recipe | 指定した構築内容のエンドポイント、処理間隔、実行コスト、ひな形、見落とされやすい障害要因を示します |
search_collections | Magic Eden ディレクトリと OpenSea の Solana インデックスを横断して名前を検索し、どのレイヤーを読み取ったかを示します |
get_collection_stats | チェーン上の供給量、マーケットプレイスごとのフロア価格、および SOL と USDC の比較を拒否する照合結果を示します |
get_collection_holders | チェーンのアセットインデックスから Core コレクションの保有者を調査します。各保有者の役割(発行者、マーケットプレイスのエスクロー、ウォレット)を示し、上限がある場合はその旨を明記します |
get_floor_prices | 最大 10 コレクションの現在のフロア価格と出品数を示します。Magic Eden のみが対象です |
get_recent_sales | 直近の成立済み取引と、買い手、売り手、価格、ミント、署名を示します |
get_asset | 1 つのアイテムを 3 つの読み取り元で確認します:マーケットプレイス、バイトレベルのデコード、チェーンのアセットインデックス。所有者が一致しているかも報告します |
get_asset_provenance | Core アセットの期間を限定した所有履歴を示します。日付とマーケットプレイス名を記載し、読み取れなかった箇所はその位置にすべて明示します。historyComplete はすべてのトランザクションを読み取ったことを示し、mintObserved はミント自体をデコードしたことを示します。これらは別々の主張です |
get_wallet_holdings | 独立した 2 つの読み取り元による保有状況と、両者の差異を示します |
get_wallet_profile | コレクション別の保有状況、ウォレット内および供給量に占める割合、出品数と圧縮済みアセット数、前提条件付きのフロア価格上限、ウォレットの経過期間を示します |
get_wallet_activity | 購入と売却、純フロー、マーケットプレイス別の内訳、保有期間と損益を含むすべての転売、理由付きの行動ラベルを示します |
get_collection_sales | 指定期間の売上について、件数、取引高、中央値、買い手、売り手、日別の推移、名前別の内訳、フィードをどこまで遡って読み取ったかを示します |
find_in_group | あるエディション番号をコレクション群全体から検索し、各一致項目をそれぞれのフロア価格と比較します |
find_listings | 価格の安い順の出品、特性フィルター、何に一致したかを示す名前フィルター、最小シリアル番号モード、両方のマーケットプレイスにおける各出品価格と特性別フロア価格の比較を示します |
get_top_traders | Magic Eden の取引高に基づく、コレクション内の取引高上位ウォレットを示します |
get_trending | Magic Eden のトレンド一覧を示します。マーケットプレイスが何も公開していない場合は、その旨を明記します |
explain_mechanics | エスクロー、凍結、委任者、ロイヤリティ、ウォッシュトレード、移行について、規格とマーケットプレイスごとに説明し、各項目に出典を付記します |
get_source_status | ライブで確認したすべてのソースについて、ティア、フォールバック、確認できない内容、認証情報の状態を示します |
プロンプトは getting_started、collection_report、wallet_report の 3 つです。MCP リソースは意図的に設けていません。リソースに含まれる情報はすべて、アシスタントが自ら呼び出すツールから取得できます。
信頼性と制限事項
- 購入、販売、出品、署名には対応していません。これらの機能を実装するコードはありません。
- 来歴と信頼性のデコードは Metaplex Core のみを対象としています。レガシー SPL と圧縮 NFT は空のリストではなく、未対応項目として明示されます。保有状況とアクティビティは両方を対象としています。
- Magic Eden と OpenSea のみが対象です。Tensor にはセルフサービスで取得できるキーがなく、Rarible の Solana 対応状況は未確認です。どちらも、対応に必要な条件を添えてカタログに記載しています。
- 金額にはすべて通貨と取得元 API を明記します。サマリーと価格が記載された各行の両方に表示し、件数の横には対象範囲を示すフラグ(
truncated、stale、historyComplete)を付けます。フラグが読み取りの一部が欠落していることを示す行に対して、プログラムは処理を実行しないようにしてください。 - エラーの発生箇所は 2 つあります。ツールのスキーマに適合しない入力はハンドラーの実行前に拒否され、
isError: trueが返り、structuredContentは含まれません。ハンドラー内で発生したすべてのエラーにはstructuredContent.errorと、安定したカテゴリ(not-found、wrong-kind、escrow、source-unsupported、bad-input、upstream-unavailable、upstream-rate-limit、error)が含まれます。 - 評価額の算出と通貨換算には対応していません。Solana のみを対象としています。
セキュリティ
ミントは誰でも実行できるため、コレクション名は攻撃者が制御できるテキストです。モデルに渡す前に、すべての名前と、チェーンまたはマーケットプレイスから取得したすべてのフィールドについて、宣言された形式に適合しているかを検証します。また、このプロセスから送信された認証情報は、すべての応答から確実にマスキングされます。オフラインテストスイートで検証済みです。報告先:SECURITY.md。
開発
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 lookup
npm run snapshot # refresh the bundled Magic Eden collection directory
npm run inspect # open the MCP Inspector against a local build
CI では、すべてのブランチへのプッシュごとに全履歴を対象としたシークレットスキャンを実行します。また、main、プルリクエスト、リリースタグでは、オフラインテストスイート、lint、tarball のチェック、npm audit を実行し、ライブチェックは毎週実行します。
ドキュメント
- 内部の仕組み:存在理由、動作方法、テスト内容
- 各データソースの詳細と利用条件
- よくある質問と回答できる内容
- 利用方法 15 選とこれを使った開発例
- このサーバーの変更可能な箇所、FAQ、コントリビューション
概要
Solana の長年のコレクターである P1xel(p1xel.app、@P1xelCollector)が開発・保守しています。開発の経緯についてはdocs/DEEP-DIVE.mdをご覧ください。
同じデコード技術を使用したサービス
CandyScan は、Solana 上の Candy Digital コレクションについて、供給量、保有者、移行、販売を追跡し、最新の状態に保っています。Core のデコードを最初に実装した場所であり、このリポジトリはそのパイプラインのキー不要版です。それぞれのプロジェクトが、もう一方の形成に影響を与えました。
solana-nft-mcp を基盤に何かを作った場合は、Issue を作成してください。ここに掲載します。
Solana Foundation とは関係のない独立プロジェクトです。 SOLANA と SOL は Solana Foundation の商標です。このプロジェクトの名称とドキュメントにこれらが登場する理由は、サーバーが読み取るチェーンを示すためだけです。Solana Foundation は本プロジェクトを推奨、後援、審査しておらず、提携関係を主張または示唆するものではありません。
ライセンス
MIT。LICENSEをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
