Neo N3 MCP Server について
Neo N3 MCP Serverは、MCPクライアント向けにNeo N3ブロックチェーンの照会と制御されたトランザクション送信を提供します。stdioとステートレスHTTPのMCP接続方式を備え、書き込みは初期状態で無効となり、明示的な承認保護があります。
主な機能
- 01Neo N3ブロックチェーンデータの照会
- 02承認制御付きトランザクション送信
- 03メインネットとテストネットの設定
- 04stdioとステートレスHTTPのトランスポート
- 05初期状態で書き込みを無効化
活用シーン
- 01MCPクライアントからブロックチェーンデータを確認
- 02HTTP経由でリモートMCPクライアントを接続
- 03明示的な承認を経てトランザクションを送信
- 04読み取り専用アクセスを初期状態に維持
MCP 対応
stdioとステートレスHTTPのMCPトランスポートを通じて、Neo N3の照会と制御されたトランザクション操作を公開します。状態変更ツールは初期状態で無効で、保護設定が必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
27掲載時のツール一覧 · 3 週間前に更新
このツールにパラメーターはありません。
詳細
Neo MCP サーバー
@r3e/neo-mcp は、Neo N3 ブロックチェーンへのクエリと、管理・監査可能なトランザクション送信を行う MCP サーバーです。3 つのエントリーポイントを提供します。
| エントリーポイント | コマンド | プロトコル |
|---|---|---|
| MCP stdio | npm start | 標準入力/標準出力を介した MCP。Claude Desktop や Cursor などのローカルクライアント向け |
| MCP HTTP | npm run start:mcp-http | MCP 2026-07-28 ステートレス HTTP。リモート MCP クライアント向け |
| REST API | npm run start:http | 独自の REST/JSON。MCP トランスポートではありません |
2 つの HTTP サーバーは互いに無関係で、個別に設定します。Remote MCP 2026 HTTP と docs/remote-mcp-transport.md を参照してください。
現在のバージョン:4.2.1。Node.js >=22 が必要です。バージョン 4 が対応するのは
MCP 2026-07-28 のみです。削除された初期化/セッションプロトコルを使用する
クライアントは、ダウングレードせずに拒否されます。
クイックスタート
MCP stdio サーバーをインストールして実行します。
npm install -g @r3e/neo-mcp
neo-mcp
または、グローバルにインストールせずに実行します。
npx -y @r3e/neo-mcp
Claude Desktop または Cursor の設定例:
{
"mcpServers": {
"neo-n3": {
"command": "npx",
"args": ["-y", "@r3e/neo-mcp"],
"env": {
"NEO_NETWORK": "testnet",
"NEO_TESTNET_RPC": "https://testnet1.neo.coz.io:443",
"LOG_LEVEL": "info"
}
}
}
}
プログラム API
パッケージのルートから、MCP サーバー、HTTP サーバー、サービス、ネットワーク列挙型、および検証済みの設定をエクスポートします。
import { NeoNetwork, NeoService } from '@r3e/neo-mcp';
const neo = new NeoService(
'https://testnet1.neo.coz.io:443',
NeoNetwork.TESTNET,
);
const blockCount = await neo.getBlockCount();
console.log({ blockCount, height: Math.max(0, blockCount - 1) });
NeoMcpServer は、stdio トランスポートのライフサイクルを独自に管理するアプリケーション向けに、run() と close() を公開します。
設定
| 変数 | 目的 | デフォルト |
|---|---|---|
NEO_NETWORK | mainnet、testnet、または both。HTTP ではいずれかのネットワークが必要です | both |
NEO_MAINNET_RPC | Mainnet RPC エンドポイント | https://mainnet1.neo.coz.io:443 |
NEO_TESTNET_RPC | Testnet RPC エンドポイント | https://testnet1.neo.coz.io:443 |
NEO_RPC_TIMEOUT_MS | Neo RPC の操作ごとの制限時間(ミリ秒) | 15000 |
NEO_ALLOW_INSECURE_RPC | リモートの平文 HTTP RPC URL を許可します | false |
NEO_MAX_TRANSACTION_FEE_GAS | 署名済みトランザクションのシステム手数料とネットワーク手数料の合計上限(GAS) | 20 |
NEO_ENABLE_WRITES | 状態を変更するツールと HTTP ルートを登録します | false |
NEO_SIGNER_WIF_FILE | サーバー署名者の WIF を 1 つ含む、所有者のみがアクセスできる通常ファイル | 書き込み時に必須 |
NEO_WRITE_STATE_DIR | 永続的な冪等性ジャーナルのディレクトリ | $WALLETS_DIR/.write-operations |
NEO_MCP_REQUEST_STATE_KEY | MCP の複数ラウンドトリップ承認状態用の独立した HMAC キー | 書き込み時に必須 |
HTTP_WRITE_APPROVAL_API_KEY | HTTP 書き込み承認用の独立したベアラートークン | 書き込み時に必須 |
NEO_ENABLE_WALLET_ADMIN | HTTP によるウォレットの作成・インポート管理を有効にします | false |
N3INDEX_API_BASE_URL | リモートのコントラクト名検索のベース URL | https://api.n3index.dev |
N3INDEX_ENABLED | N3Index を利用した名前解決を有効にします | true |
EXPLORER_ACCOUNT_WATCH_ENABLED | Explorer アカウントの Watch リクエストツール(両者の明示的な同意が必要)を有効にします | false |
EXPLORER_ACCOUNT_WATCH_API_URL | 固定の Explorer Watch API エンドポイント | https://www.neo3scan.com/api/account-watches |
EXPLORER_ACCOUNT_WATCH_API_TOKEN | Explorer Watch API 専用のベアラートークン。MCP/REST のベアラートークンとは異なる必要があります | 有効時に必須 |
HTTP_HOST | REST API のリッスンアドレス | 127.0.0.1 |
HTTP_API_KEY | REST API ルート用のベアラートークン | 未設定 |
HTTP_CORS_ORIGINS | カンマ区切りの正確な HTTP/HTTPS オリジン | 空 |
HTTP_MAX_BODY_BYTES | HTTP リクエスト本文の最大サイズ | 1048576(1 MiB) |
MCP_HTTP_PORT | リモート MCP トランスポートのリッスンポート | 3001 |
MCP_HTTP_HOST | リモート MCP トランスポートのリッスンアドレス | 127.0.0.1 |
MCP_HTTP_PATH | リモート MCP エンドポイントのパス | /mcp |
MCP_HTTP_BEARER | リモート MCP エンドポイント用のベアラートークン。MCP_HTTP_HOST がループバックでない場合は必須です | 未設定 |
MCP_HTTP_ALLOWED_ORIGINS | ブラウザーからの接続を許可する、カンマ区切りの正確なオリジン | 空 |
MCP_HTTP_MAX_CONCURRENT_REQUESTS | 同時処理中の MCP リクエスト上限 | 128 |
MCP_HTTP_MAX_SUBSCRIPTIONS | 同時 subscriptions/listen ストリーム上限 | 128 |
MCP_HTTP_MAX_BODY_BYTES | MCP POST 本文の最大サイズ | 1048576(1 MiB) |
MCP_HTTP_BODY_TIMEOUT_MS | MCP リクエスト本文の受信期限 | 30000 |
MCP_HTTP_HEADERS_TIMEOUT_MS | MCP ヘッダーの受信期限 | 30000 |
MCP_HTTP_REQUEST_TIMEOUT_MS | MCP HTTP リクエスト全体の期限 | 300000 |
MCP_HTTP_KEEP_ALIVE_MS | SSE キープアライブ間隔。0 にすると無効になります | 15000 |
WALLETS_DIR | 永続化された暗号化ウォレットレコードのディレクトリ | ./wallets |
RATE_LIMITING_ENABLED | リクエストのレート制限を有効にします | テスト環境以外では有効 |
MAX_REQUESTS_PER_MINUTE | クライアントごとの 1 分あたりの上限 | 60 |
MAX_REQUESTS_PER_HOUR | クライアントごとの 1 時間あたりの上限 | 1000 |
LOG_LEVEL | debug、info、warn、または error | info |
LOG_CONSOLE | コンソールへのログ出力を有効にします | テスト環境以外では有効 |
LOG_FILE | ログファイルのパス。設定するとファイルへのログ出力が有効になります | ./logs/neo-mcp.log |
LOG_FILE_ENABLED | LOG_FILE を設定せずにファイルへのログ出力を有効にします | false |
PORT | HTTP のリッスンポート | 3000 |
エイリアス NEO_MAINNET_RPC_URL、NEO_TESTNET_RPC_URL、NEO_NETWORK_MODE も引き続きサポートされます。
MCP ツールの引数は、配列要素とオブジェクトメンバーを合わせて 10,000 個までに制限されています。HTTP トランスポートではアプリケーションサービスを構築する前にこの制限を適用し、stdio では MCP SDK で同じ制限を適用します。
リモート RPC エンドポイントでは HTTPS が必須です。ループバック RPC エンドポイントではプレーン HTTP を使用できます。NEO_ALLOW_INSECURE_RPC=true を設定すると、リモートのプレーン HTTP が明示的に許可されますが、管理された開発環境でのみ使用してください。
NEO_NETWORK=both の場合、ネットワークを明示しない読み取り専用 MCP 呼び出しでは mainnet が使用されます。状態を変更する呼び出しには、すべて明示的なネットワークと冪等性キーが必要です。HTTP エントリーポイントでは both は拒否されます。NEO_NETWORK=mainnet または NEO_NETWORK=testnet を設定してください。
書き込みはデフォルトで無効です。有効にするには、リポジトリ外に所有者のみがアクセスできる署名者ファイルを作成し、永続的な状態を設定してください。
install -m 0600 /dev/stdin /run/secrets/neo-signer-wif
export NEO_ENABLE_WRITES=true
export NEO_SIGNER_WIF_FILE=/run/secrets/neo-signer-wif
export NEO_WRITE_STATE_DIR=/var/lib/neo-mcp/write-operations
export NEO_MCP_REQUEST_STATE_KEY="$(openssl rand -hex 32)"
export HTTP_WRITE_APPROVAL_API_KEY="$(openssl rand -hex 32)"
MCP と HTTP のリクエストスキーマでは、WIF、秘密鍵、パスワードを受け付けません。
MCP の書き込みでは、2026-07-28 の input_required フローを使用します。サーバーは
不透明な requestState に署名し、それを tools/call にバインドして、10 分後に期限切れにします。
再入力された応答で、正確なインテントフィンガープリントが承認された場合にのみ実行します。
HTTP の書き込みでは保留中のインテントが返され、HTTP_WRITE_APPROVAL_API_KEY で認証された
別の承認リクエストが必要です。
アカウントインテリジェンスは、引き続きエビデンスを優先します。analyze_account_graph で公開されるのは、再生可能なネットワークスコープの送金グラフと、キュレーション済みのメタデータのみです。バックエンドの決定論的な取引所スイープ、協調署名者、コミュニティ親和性、グラフ類似性の検出キューは、公開 ID データとして意図的に公開していません。保留中の候補をキュレーション済みメタデータにするには、事前に人によるレビューが必要です。
2026-08-01 時点で、本番環境の両ネットワークにおける検出タイマーは、検出処理の再実行を正常に完了しています。生成された保留キューは運用レビュー用のエビデンスに限られ、analyze_account_graph からは返されません。
HTTP API
これは独自の REST/JSON API であり、MCP トランスポートではありません。MCP クライアントはこの API に接続できません。stdio エントリーポイントまたはリモート MCP トランスポートを使用してください。
HTTP エントリーポイントをビルドして起動します。
npm ci
npm run build
export HTTP_API_KEY="$(openssl rand -hex 32)"
NEO_NETWORK=mainnet npm run start:http
デフォルトでは、サーバーは 127.0.0.1:3000 でリッスンします。HTTP_HOST にループバック以外のアドレスを指定する場合は、HTTP_API_KEY が必要です。また、設定する API キーはすべて 32 バイト以上でなければなりません。キーを設定した場合は、GET /live と GET /health を除くすべてのルートで、ベアラートークンとして送信してください。
curl http://127.0.0.1:3000/live
curl http://127.0.0.1:3000/health
curl -H "Authorization: Bearer $HTTP_API_KEY" \
http://127.0.0.1:3000/api/blockchain/height
HTTP リスナーは TLS を終端しません。プレーン HTTP を使用できるのは、ループバックまたは信頼されたホスト内プロキシネットワークに限られます。リモートクライアントは、TLS 終端リバースプロキシまたはロードバランサーを介して HTTPS を使用する必要があります。ベアラートークンがリクエストを通じて送信されるため、リモートからのプレーン HTTP への直接接続はサポートされません。
高さエンドポイントでは、ノードのブロック数と最新ブロックのインデックスが区別されます。
{
"blockCount": 12346,
"height": 12345
}
HTTP_CORS_ORIGINS は、オプションで指定できる完全一致のオリジン許可リストです。例:
HTTP_CORS_ORIGINS=https://console.example.com,https://admin.example.com
オリジンには HTTP または HTTPS を使用し、パス、認証情報、クエリ文字列、フラグメントを含めることはできません。ワイルドカード CORS はサポートされません。
POST と PUT のボディは JSON オブジェクトでなければなりません。デフォルトのボディサイズ上限は 1 MiB で、HTTP_MAX_BODY_BYTES で変更できます。書き込みリクエストを送信すると、不変の保留中インテントが作成されます。
curl -X POST http://127.0.0.1:3000/api/transfers \
-H "Authorization: Bearer $HTTP_API_KEY" \
-H "Idempotency-Key: transfer-2026-07-11-001" \
-H 'Content-Type: application/json' \
-d '{"network":"mainnet","toAddress":"Nb...","asset":"NEO","amount":"1"}'
返されたフィンガープリントと意図したリクエストを比較してから承認してください。
curl -X POST http://127.0.0.1:3000/api/write-intents/INTENT_ID/approve \
-H "Authorization: Bearer $HTTP_WRITE_APPROVAL_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"fingerprint":"RETURNED_64_HEX_FINGERPRINT"}'
ツールとルートのリファレンスについては、API.md を参照してください。
リモート MCP 2026 HTTP
ステートレスな MCP 2026-07-28 HTTP トランスポートは、stdio エントリーポイントと同じ非カストディアルな MCP インターフェースをリモートクライアントに提供します。REST API とは別のプロセスで、独自のポートで待ち受け、独自の設定とベアラートークンを使用します。デフォルトで発生する外部への副作用は request_account_watch のみです。明示的に設定されない限り無効であり、送信できるのはダブルオプトインの確認メッセージだけです。サブスクリプションを有効化することはできません。
npm ci
npm run build
export MCP_HTTP_BEARER="$(openssl rand -hex 32)"
NEO_NETWORK=mainnet npm run start:mcp-http
サーバーはデフォルトで 127.0.0.1:3001 で待ち受け、次を公開します。
| メソッド | パス | 用途 |
|---|---|---|
POST | MCP_HTTP_PATH(デフォルトは /mcp) | server/discover、tools/list、tools/call などのステートレスな MCP 2026-07-28 リクエスト |
OPTIONS | MCP_HTTP_PATH | CORS プリフライト |
GET | /healthz | 認証不要の稼働確認プローブ |
MCP_HTTP_HOST にループバック以外のアドレスを指定する場合は MCP_HTTP_BEARER が必要です。また、REST エントリーポイントの HTTP_API_KEY のルールと同様に、32 バイト未満のトークンは拒否されます。トークンを設定した場合、クライアントは MCP_HTTP_PATH へのすべてのリクエストで Authorization: Bearer <token> を送信します。プローブがアクセスできるよう、/healthz は認証不要のままです。
MCP TypeScript SDK を使用して接続します。
import {
Client,
StreamableHTTPClientTransport,
} from '@modelcontextprotocol/client';
const transport = new StreamableHTTPClientTransport(new URL('http://127.0.0.1:3001/mcp'), {
authProvider: { token: async () => process.env.MCP_HTTP_BEARER },
});
const client = new Client(
{ name: 'my-client', version: '2.0.0' },
{
capabilities: {},
versionNegotiation: { mode: { pin: '2026-07-28' } },
},
);
await client.connect(transport);
const { tools } = await client.listTools();
REST リスナーと同様に、このリスナーは平文 HTTP を提供し、TLS を終端しません。リモートクライアントからの接続には、TLS 終端リバースプロキシを経由する必要があります。リクエストはステートレスなため、レプリカにスティッキールーティングは必要ありません。
設定の詳細、Neo Explorer エージェントを使用したローカルでのエンドツーエンド実行、本番環境へのデプロイ方法、トラブルシューティングについては、remote-mcp-transport.md を参照してください。
Docker
本番用 Compose ファイルは docker/docker-compose.yml です。同じイメージから次の 2 つのサービスを定義します。neo-mcp はポート 3000 で REST API を実行し、neo-mcp-http はポート 3001 でリモート MCP トランスポートを実行します。それぞれ独自のトークンが必要で、デフォルトではホストポートを 127.0.0.1 にバインドし、独自のボリュームにウォレット記録を永続化します。
export HTTP_API_KEY="$(openssl rand -hex 32)"
export MCP_HTTP_BEARER="$(openssl rand -hex 32)"
docker compose -f docker/docker-compose.yml up -d
リモート MCP サービスだけを起動します。Compose はサービスを選択する前にファイル全体の変数を展開するため、REST サービスの必須項目である HTTP_API_KEY に、空でない任意のプレースホルダーを設定する必要があります。ここでは REST サービスのコンテナーは起動しませんが、32 バイト以上というチェックは、そのコンテナーが実際に起動したときにのみ実行されます。
HTTP_API_KEY=unused-when-starting-only-the-mcp-service \
MCP_HTTP_BEARER="$(openssl rand -hex 32)" \
docker compose -f docker/docker-compose.yml up -d neo-mcp-http
チェックアウトをビルドする代わりに公開済みイメージを実行するには、イメージリポジトリとリリース成果物の 64 文字の小文字の 16 進数ダイジェストを指定して、ダイジェストのみを指定するレジストリーオーバーレイを使用します。
NEO_MCP_IMAGE_REPOSITORY=r3enetwork/neo-mcp \
NEO_MCP_IMAGE_DIGEST=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef \
HTTP_API_KEY="$HTTP_API_KEY" \
MCP_HTTP_BEARER="$MCP_HTTP_BEARER" \
docker compose -f docker/docker-compose.yml \
-f docker/docker-compose.registry.yml up -d
TLS 終端リバースプロキシまたはロードバランサーからサービスに接続する必要がある場合に限り、HTTP_BIND_ADDRESS=0.0.0.0(REST)または MCP_HTTP_BIND_ADDRESS=0.0.0.0(リモート MCP)を設定してください。どちらの平文リスナーも、リモートクライアントに直接公開しないでください。
開発用 Compose ファイルはローカルにバインドし、デフォルトでローカル開発用トークンを設定します。REST API 用の neo-mcp-dev と、リモート MCP トランスポート用の neo-mcp-http-dev を定義します。
docker compose -f docker/docker-compose.dev.yml up -d
これらのデフォルトトークンはローカル開発専用です。共有環境では HTTP_API_KEY と MCP_HTTP_BEARER を上書きしてください。
Compose を使わずにビルドして実行します。
npm run docker:build
export HTTP_API_KEY="$(openssl rand -hex 32)"
npm run docker:run -- --detach
イメージ、ボリューム、ヘルパースクリプトの詳細については、DOCKER.md を参照してください。
MCP ツールとリソース
デフォルトの MCP サーフェスでは、カストディを伴わないツールを 59 個公開しています。両方のチェーンに対応するツールでは、必須の chain 識別子 "n3" または "neox" を指定する必要があり、暗黙のデフォルト値はありません。単一チェーン専用のツールに、そのツールが対応していないチェーンを指定すると拒否されます。network パラメーターは常に "mainnet" または "testnet" です。レジストリが Neo X 用に内部で書き換えるため、呼び出し側がチェーン名付きのネットワーク名を指定する必要はありません。
- サーバーおよびデータユーティリティ:
get_network_mode、get_wallet、inspect_neo_value、convert_neo_data、get_neo_service_info、analyze_stablecoins - チェーン(両方のチェーン):
get_chain_info、get_block_height、get_block、get_transaction、get_transaction_status、get_balance - コントラクト(両方のチェーン):
call_contract、get_contract_info、simulate_call - トランザクションの構築(両方のチェーン):
build_transfer、build_contract_call - Neo エコシステムの読み取り:
decode_neo_script、query_nns、query_neofs、get_oracle_info - 受取人の解決:
resolve_recipient - Neo N3 専用の構築:
build_vote、build_nns_operation - エクスプローラーとインテリジェンス:
explorer_get_address、analyze_address、analyze_account_graph、analyze_consensus_health、analyze_address_connection、analyze_transaction、investigate_transactions、analyze_contract、analyze_contract_upgrades、get_contract_source_verification、inspect_contract_code、analyze_neox_transaction、analyze_neox_block、analyze_neox_address、analyze_neox_contract、analyze_neox_token、explorer_list_address_transactions、explorer_list_address_transfers、explorer_list_token_holders、explorer_search、query_explorer - 検証済み通知アクション:
request_account_watchは、明示的に指定された Neo N3 のネットワーク、アドレス、メールアドレスに対して、クールダウン制限付きの検証メッセージを送信します。これは破壊的な操作ではなく、冪等です。受信者が Explorer で確認するまで、監視は有効になりません。 - Neo N3 専用:
get_application_log、wait_for_transaction、get_unclaimed_gas、get_nep17_transfers、get_nep11_balances、get_nep11_transfers、get_contract_status、list_famous_contracts、estimate_transfer_fees、estimate_invoke_fees、explorer_list_address_assets、query_explorer_find - Neo X 専用:
analyze_neox_transaction、analyze_neox_block、analyze_neox_address、analyze_neox_contract、analyze_neox_token、query_explorer_graphql
call_contract は完全な読み取り専用です。Neo N3 では invokefunction、Neo X では eth_call を使用します。build_* ツールは、読み取り専用のシミュレーションを正確に実行し、ウォレットで確認および署名できる未署名のトランザクション提案を返します。デフォルトのサーフェスのツールは、鍵を保持、署名、ブロードキャストしません。build_vote はネイティブの NEO コントラクトを固定し、build_nns_operation はネットワークに対応した NameService コントラクトと操作引数を固定します。
resolve_recipient は、build_transfer の呼び出し前に送金先を解決します。入力された Neo N3 アドレスは変更されず、その情報が再読み込みされることもありません。.neo 名は、NNS TXT レコードから、所有者と登録有効期限を根拠として解決されます。明示的な network が必要であり、決定的に動作します。レコードタイプは 1 種類で、デフォルト値もキャッシュもありません。フェイルクローズ方式で動作します。未登録の名前、所有者の欠落、Neo N3 アドレスではないレコード、読み取り不能な有効期限、または停止しないチェーン読み取りがあった場合は、フォールバックアドレスを返さず、エラーをスローします。query_nns は引き続き情報の検索に使用するツールであり、受取人の解決には使用しません。
query_neofs には明示的な network フィールドが必要です。選択された N3 ネットワークは結果内のアドレスコンテキストとして保持されますが、固定された NeoFS ゲートウェイはグローバルのままです。これにより、アシスタントが mainnet/testnet の N3 コンテキストを NeoFS ゲートウェイの切り替えとして提示することを防ぎます。構築された N3 および Neo X の提案は、未署名のみという境界を保った状態で返され、Explorer がウォレットに公開する前にシミュレーションされます。
Explorer AI ロードマップ
リポジトリ横断の正式な計画は、 Neo OS Fura AI Plan and Roadmapで管理されています。 Neo MCP は型付きオーケストレーションの境界です。決定論的な Explorer の根拠データと、未署名でシミュレーション済みの提案をアシスタントに提供する一方、ウォレットの確認、署名、ブロードキャストはホスト型 MCP サービスの外部に維持します。
analyze_transactionは、Neo N3 の調査に使用する主要なツールです。v2 のレスポンスでは、安定した根拠 ID、上限付きの件数、正確にグループ化された資金の流れ、保守的な失敗分類、コードベースの検出結果が追加されます。クライアントはこれらの ID を引用し、正確な小数文字列を保持し、詳細なオペコードまたはストレージのトレースが利用できない場合は、その旨を明示してください。
investigate_transactionsは、確認済みの Neo N3 トランザクションを1件から12件までまとめ、決定論的で不変の根拠セットを作成します。ブロック順のタイムライン、トランザクションごとの完全な分析、ソーストランザクション、根拠参照、信頼度クラス、requested_transactions_onlyのサンプリング境界を含む、観測された資産の関係を返します。このセットの範囲外にある共有所有権、因果関係、隠れた呼び出し、アクティビティは推論しません。
analyze_contractは、Neo N3 のコントラクトインテリジェンスを扱う主要なツールです。v1 のレスポンスでは、安定した根拠 ID とともに、ネットワークに紐づく ABI、Manifest の権限と信頼性、NEF メソッドトークン、コンパイラー、更新、ソース検証に関する事実を返します。クライアントは、宣言されたソース URL、safe=falseの ABI メソッド、決定論的な静的検出結果、検証済みソース、シミュレーション、脆弱性に関する主張を明確に区別する必要があります。
inspect_contract_codeは、ページネーションに対応したコード検査用の補完ツールです。上限付きの NeoVM オペランド、解決済みのシステムコール名、ABI メソッドの所有関係、安定したオペコード根拠 ID を持つ静的な制御フローの遷移先を返します。これは決定論的な逆アセンブルであり、ランタイムトレース、検証済みソース、逆コンパイル、シミュレーションではありません。
analyze_contract_upgradesは、更新カウンターごとに、不変のインデックス済みコントラクト成果物を比較します。正確なcompleteまたはpartialの過去のカバレッジ、SHA-256 成果物 ID、ABI のメソッド、イベント、標準の構造的な変更を報告します。欠落しているバージョンが補完されることはありません。また、Manifest と NEF の成果物からストレージレイアウトを証明できないため、ストレージ互換性はnot_determinedのままです。
get_contract_source_verificationは、検証済みの各更新カウンターについて、不変の再現性記録を返します。記録には、ソースバンドルのダイジェスト、不変のリポジトリコミット、コンパイラー設定、Manifest、NEF、バイナリー、スクリプトの正確なハッシュが含まれます。現在のコードを検証できるのは、現在の更新カウンターに対応する記録だけです。成果物が完全一致していても、セキュリティ監査を実施したことにはなりません。
NEO_ENABLE_WRITES=true、NEO_SIGNER_WIF_FILE、NEO_MCP_REQUEST_STATE_KEYを設定してローカルで起動した stdio サーバーは、所有者から提供されたキーで署名する、Neo N3 用の追加ツールを4つ登録します。対象はtransfer_assets、invoke_contract_write、claim_gas、deploy_contractです。これらのツールの利用には、idempotencyKey、明示的なnetwork、埋め込みフォームのリクエストに応答できる最新のクライアント、およびinput_requiredを通じて返される正確なインテントフィンガープリントへの同意が必要です。MCP HTTP トランスポートは設計上読み取り専用であり、この設定は無視します。
厳選されたコントラクト一覧は、各エントリーに現在のネットワークハッシュと検証済みのオンチェーン Manifest が揃うまで、意図的に空のままです。汎用コントラクトツールは、スクリプトハッシュ、Neo アドレス、正確な N3Index 名、またはライブ Manifest から取得した名前を受け付けます。
estimate_transfer_feesとestimate_invoke_feesは、networkFeeDatosとsystemFeeDatosに正確な整数の10進文字列を返し、networkFeeGasとsystemFeeGasには書式設定済みの GAS 文字列を返します。トランザクションへの署名またはブロードキャストを行う前に、システム手数料とネットワーク手数料の合計がNEO_MAX_TRANSACTION_FEE_GASを超えないことを確認してください。
deploy_contractは、コンパイラーの出力として、Manifest とともに、完全にシリアライズされた NEF オブジェクトnef: { encoding: "hex" | "base64", data: string }を受け付けます。VM の生バイトコードは、デプロイ可能な NEF 成果物ではありません。
get_block_height は blockCount と height の両方を返します。height は max(0, blockCount - 1) です。
Neo N3 のブロックを分析する場合は、get_block に includeStateRoot: true を渡すと、正確な StateService ルートに加え、ローカルおよび StateValidator で検証済みの高さの境界を取得できます。返される validated フラグが true になるのは、要求されたルートが検証済みの境界以下の場合に限られます。Neo X ではこの N3 専用オプションは拒否され、通常のブロック検索で追加の RPC 呼び出しは発生しません。Neo N3 のブロックレスポンスには、ノードのミリ秒単位の time 値とともに、決定的な ISO-8601 形式の timeIso も含まれます。
リソース:
neo://network/statusneo://mainnet/statusneo://testnet/statusneo://block/{height}
セキュリティに関する注意事項
- リモートアクセスが必要な場合を除き、両方の HTTP リスナーはループバックにバインドしてください。
- すべてのリモート HTTP 接続の前に TLS を終端してください。ベアラートークンはリクエストを認証しますが、通信中のデータ自体は暗号化しません。
HTTP_API_KEYとMCP_HTTP_BEARERには、32 バイト以上のランダムに生成されたトークンを使用してください。- リモートから到達可能な MCP リスナーでは
NEO_ENABLE_WRITES=falseを維持してください。リモートトランスポートにトランザクション署名者を決して含めないでください。 - デプロイで検証メールを意図的にサポートする場合を除き、
EXPLORER_ACCOUNT_WATCH_ENABLED=falseを維持してください。有効にする場合は、すべてのトランスポート/API ベアラーとは異なる、専用の32バイト以上のEXPLORER_ACCOUNT_WATCH_API_TOKENを使用してください。 - 署名者の WIF は所有者のみがアクセスできる
NEO_SIGNER_WIF_FILEにのみ保管し、MCP や HTTP 経由では決して送信しないでください。 WALLETS_DIRは、アクセス制限を設定した管理下のストレージに保存してください。- 状態を変更する MCP ツールには、明示的な
network、安定した冪等性キー、および HMAC、有効期限、メソッドの紐付け、意図、ネットワーク、操作、フィンガープリントの各チェックを通過したリクエスト状態を持つ、正確なinput_required承認が必要です。 NEO_ALLOW_INSECURE_RPC=trueでない限り、リモートの平文 HTTP RPC エンドポイントは拒否されます。HTTPS を優先してください。- システム手数料とネットワーク手数料の合計が
NEO_MAX_TRANSACTION_FEE_GASを超える場合、署名済みトランザクションは拒否されます。 - テスト環境に類する環境以外では、レート制限がデフォルトで有効です。
テスト
# Deterministic unit tests; excludes tests/mcp-*.test.ts
npm run test:unit
# Compile, then run deterministic built-server smoke and lifecycle checks
npm run build
npm run test:mcp
# Unit tests + build + deterministic MCP checks
npm run test:all
# Opt-in public RPC checks; requires a build and network access
npm run build
npm run test:mcp:live
# Explicit stress suite; requires a build
npm run test:mcp:stress
npm run test:integration は、公開 RPC エンドポイントを呼び出す追加のビルド済みサーバー統合スクリプトです。test:all には含まれません。
リリースと依存関係のチェック
npm audit と npm audit --omit=dev は通過することが想定されています。このパッケージでは、推移的な @cityofzion/neon-core 依存関係に対し、スコープ付きの [email protected] オーバーライドを使用しています。
./scripts/prepare-release.sh はロックファイルをインストールし、型チェック、決定的なテスト、ビルド、両方の監査、パッケージの検証、Compose の検証、コンテナのビルドを実行します。検証後にのみバージョンを更新し、コミットやタグは作成しません。
GitHub Actions は Node.js 22 と 24 をテストします。必要なリポジトリシークレットが設定されている場合、公開された GitHub リリースから npm パッケージと Docker イメージを公開できます。このリポジトリでは、本番デプロイ先は定義されていません。
ドキュメント
トラブルシューティング
- インストールに失敗する場合:
node --versionで Node.js 22 以降が表示されることを確認し、npm ciまたはパッケージのインストールを再試行してください。 HTTP_API_KEY is required:HTTP プロセスがループバック以外のホストでリッスンしています。32 バイト以上のキーを設定するか、HTTP_HOSTをループバックアドレスに設定してください。- HTTP
401:/liveと/health以外のすべてのルートで、Authorization: Bearer <HTTP_API_KEY>を送信してください。 - HTTP
413:リクエストサイズを小さくするか、HTTP_MAX_BODY_BYTESを正の整数に増やしてください。 - リモート MCP
401:Authorization: Bearer <MCP_HTTP_BEARER>を送信してください。認証なしでアクセスできるルートは/healthzのみです。 - リモート MCP
-32022:クライアントで2026-07-28が固定されていないか、削除された従来の初期化フローが試行されました。@modelcontextprotocol/clientv2 にアップグレードしてください。 - リモート MCP
-32020:リクエストのMcp-Method、Mcp-Name、またはプロトコルバージョンのヘッダーが、リクエスト本文と一致していません。エンベロープを手動で組み立てず、v2 SDK を使用してください。 - RPC エラー:選択した RPC URL に到達でき、要求された Neo RPC メソッドに対応していることを確認してください。
ライセンス
MIT。LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
