mcpField
P
Parano1d node

Parano1d node

ローカル
github.com金融データ05 日前に更新

Parano1d node について

parano1d-mcpは、クライアントをローカルのParano1dノードに接続するstdio MCPサーバーです。読み取り専用を既定とし、権限と上限で制御する書き込みモードを備えます。署名はノードのウォレットが行い、サーバーは鍵を扱いません。

主な機能

  1. 01ノードのJSON-RPCメソッドを型付きツールとして提供
  2. 02読み取り専用が既定のウォレット/管理モード
  3. 03呼び出しごとの支出上限と有効化条件
  4. 04ノードのメソッドバージョンを実行時に検出
  5. 05ループバック限定のRPC接続

活用シーン

  1. 01ノードの状態と機能の確認
  2. 02ローカルParano1dノードの監視
  3. 03上限付きウォレット操作の計画と実行
  4. 04管理ツールによるノード運用

MCP 対応

stdioでMCPクライアントを同一マシン上のParano1dノードに接続し、JSON-RPC APIを型付きツールとして公開します。アクセスモードと支出制限はサーバーが適用します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
cargoparano1d-mcp0.1.5

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

parano1d-mcp

CI License: Apache-2.0 Rust 1.96+ MCP Status: pre-release

parano1d-mcp — ローカル Parano1d ノード向け非公式 MCP サーバー

Parano1d ノード向けの非公式 MCP サーバーです。stdio 経由で 18 個のツールを提供し、デフォルトでは読み取り専用です。ノードのウォレットが署名するため、サーバーが秘密鍵を扱うことはありません。

非公式のコミュニティプロジェクトであり、Parano1d Core チームとは関係ありません。

parano1d-mcp は、MCP クライアント(エディター、デスクトップアプリ、または stdio 経由で Model Context Protocol を利用するエージェント)を、同じマシン上の Parano1d ノードに接続します。ノードの JSON-RPC API を型付きツールに対応付け、アクセスモード、支出上限、有効化ゲートをコードで適用します。

生の RPC アクセスでは、ノードに接続できるクライアントは誰でもウォレットから支出できるという、全か無かの状態になるため、このサーバーが作られました。このサーバーでは、読み取りを制限せずに、支出を別個の明示的かつ上限付きの操作として扱います。

ステータス

v0.1.5、プレリリース。 サポート対象のデプロイ方法は読み取り専用モードです。ウォレットモードはオプトインで、上限付きです。管理者モードとコントラクト/ネイティブの書き込みはメインネットではテストされていません(送信、統合、コントラクトおよびネイティブの書き込みはプライベートテストネットでテスト済みです)。サーバーは独立した監査を受けていません。

安全性の概要

  • デフォルトでは読み取り専用です。wallet と admin は明示的なオプトインモードです。
  • 鍵情報も署名コードもありません。ノードのウォレットが署名します。
  • HTTP はループバック限定です。リモート RPC、TLS、リッスンポートはありません。
  • 支出にはすべて、呼び出しごとの上限が必要です。NOID の送信には、一度限りの計画と正確な確認も必要です。統合とネイティブの書き込みには一度限りの計画が必要です。コントラクトへの資金提供と呼び出しには明示的な手数料が必要で、ノードのプレビューと照合されます。
  • 書き込みは再試行されません。

これは何か

  • 1 つの Parano1d ノード向けのローカル stdio MCP サーバーです。ノードごとに 1 プロセスです。
  • ノードの RPC を型付きで扱います。実行時に検出されるメソッド数は、ノード v2.1.0 で 79 個、v2.0.4 で 68 個です。
  • ガードレイヤーです。モードゲート、呼び出しごとの支出上限、見積もりに紐付けた送信、ネイティブ有効化ゲート、読み取り専用 RPC パススルーを備えています。
  • 単一の Rust バイナリです。ランタイム、TLS スタック、テレメトリー、ファイルシステムへのアクセスはありません。

これは何ではないか

  • ウォレットでも署名者でもありません。鍵を保持せず、署名コードもなく、シードを作成またはエクスポートできません。ウォレットモードでは、上限の範囲内でノードのウォレットに送信を依頼できます。
  • ノード、マイナー、プロセススーパーバイザーではありません。ノードの起動、再起動、監視は行いません。唯一の制御呼び出しは、管理者専用の正常な stop です。
  • リモートサービスでもマルチユーザーサービスでもありません。ポートを開かず、認証もなく、ループバック以外の RPC URL は拒否します。
  • HTTP MCP サーバーではありません。トランスポートは stdio のみです。
  • サンドボックスではありません。このサーバーの有無にかかわらず、127.0.0.1:9601 に接続できるローカルプロセスは、すでにノードの所有者権限を持っています。
  • 汎用ブロックチェーンツールではありません。Parano1d の RPC を対象とし、そのメソッド群を追跡します。
  • 監査済みではありません。

要件

  • Parano1d ノード v2.0.4 または v2.1.0。RPC は http://127.0.0.1:9601(デフォルト)です。ノードをまだお持ちでない場合は、 Parano1d ノードを入手するを参照してください。
  • ビルドには Rust 1.96 が必要です。ビルド済みバイナリにはツールチェーンは不要です。
  • RPC URL がループバックに制限されているため、サーバーはノードと同じホスト上で実行する必要があります。

Parano1d ノードを入手する

parano1d-mcp はブリッジです。各ツールは、同じマシン上で稼働している Parano1d ノードから読み取るか、そのノードを通じて書き込みます。ノードがない場合、各ツール(および --check)は 「http://127.0.0.1:9601 で応答する Parano1d ノードがありません。https://parano1d.org(ダウンロード)からインストールして起動し、再試行してください。」 と返します。 ノードは Parano1d の公式プロジェクトから入手してください。このリポジトリはノードへのリンクを掲載していますが、再配布はしていません。

デスクトップアプリ(最も簡単です)。 parano1d.org の「ダウンロード」から、お使いのコンピューター用の GUI ウォレットをダウンロードします。Windows x86-64、macOS(Apple Silicon または Intel)、Debian/Ubuntu(x86-64 または ARM64)に対応しています。アプリは独自のフルノードを実行し、このサーバーのデフォルトである 127.0.0.1:9601 で JSON-RPC を提供するため、設定は不要です。MCP サーバーの使用中はアプリを開いたままにしてください。同じリリースの SHA256SUMS を使って、ダウンロードを検証してください。

ヘッドレス(サーバー、自動化)。 公式リリースから、お使いのプラットフォーム用の Core アーカイブ(parano1d-core-vVERSION-<platform>。parano1d、parano1d-cli、parano1d-miner を含みます)と SHA256SUMS をダウンロードします。 git.parano1d.org/ignotusnemo/parano1d/releases (正規の配布元)、または GitHub ミラー github.com/proof-native/parano1d/releases を利用できます。 展開する前にダイジェストを確認し、次を実行します。

./parano1d --check-hardware                          # must end with: NODE READY
./parano1d --mode node --rpc-listen 127.0.0.1:9601   # an ordinary, non-mining node

別のターミナルで ./parano1d-cli status を実行するとノードの状態が表示され、parano1d-mcp --check を実行すると、このサーバーから見える状態が表示されます。127.0.0.1:9601 はノードのデフォルト RPC リスナーです。ループバック上でのみ待ち受けるようにし、ポート 9601 を絶対に公開しないでください。初回起動時に、ノードは ~/.parano1d/parano1d.toml と ~/.parano1d/data/ を作成します(別のディレクトリを指定するには --data-dir PATH を使用します)。サービスとして実行するには、上流プロジェクトのLinux でノードを実行するを参照してください。ノードがループバック上の別の場所で待ち受けている場合は、PARANOID_RPC_URL を設定してください(設定を参照)。

ノードの要件。

  • CPU: SSE4.1 と PCLMULQDQ を備えた x86-64、または NEON と PMULL を備えた ARM64。--check-hardware で確認できます。新しいホスト上でも、VM ではこれらの命令が利用できない場合があります。
  • メモリ: 上流プロジェクトでは、検証ノードの要件を CPU 4 コア、RAM 8 GiB としており、すべてのワークロードを実行した際のピーク使用量は 1.65 GiB です。v2.1.0 のメインネットノードが、RAM 1 GB の VM 上で最新のブロックに追随できた例もあります。
  • ディスク: 固定の容量はありません。ノードが保持するのは、コンパクトなヘッダー、現在の UTXO State、最新 42 ブロック分の本体のみであるため、チェーンの経過期間ではなく State に応じて増加します。ステージングするスナップショット 1 つ分の空き容量を確保してください。デスクトップノードのデータディレクトリは、2026-11-06 時点で約 45 MB でした(du -sh ~/.parano1d/data)。SSD を使用してください。
  • 同期: 新しいノードは証明からブートストラップします。履歴全体を再生するのではなく、現在の State を認証し、直近のブロックを検証します。
  • ネットワーク: TCP のアウトバウンド接続を維持します。公開ノードの場合のみ、インバウンド TCP 9600 を許可します。

クイックスタート

crates.io からインストールする
cargo install parano1d-mcp --locked

これにより、固定された依存関係セットを使ってソースからサーバーがビルドされ、parano1d-mcp が ~/.cargo/bin に配置されます。その後、MCP クライアントは名前(またはフルパス)で実行します。ビルド済みバイナリは以下に掲載しています。

リポジトリからビルドする
git clone https://github.com/noidium/parano1d-mcp
cd parano1d-mcp
cargo build --release --locked

バイナリは target/release/parano1d-mcp(または cargo install の実行後は ~/.cargo/bin/parano1d-mcp)です。環境変数を読み取り、stdin/stdout で MCP を通信します。--check、--version、--help は診断用のエントリーポイントです。設定ファイルはありません。

./target/release/parano1d-mcp --check

--check はノードを確認し、その機能を表示して終了コード 0 で終了します(ノードを読み取れなかった場合は 1)。MCP サーバーは起動しません。

MCP クライアントへの登録

バイナリを実行する stdio サーバーのエントリーを追加します。Cursor(.cursor/mcp.json)と VS Code(.vscode/mcp.json)はこの形式に対応しています。VS Code では "type": "stdio" を含む servers オブジェクトを使用し、同じフィールドを渡します。

{
  "mcpServers": {
    "parano1d": {
      "command": "/absolute/path/to/parano1d-mcp",
      "env": { "PARANOID_MCP_MODE": "read" }
    }
  }
}

新しいセッションを開始し、ノードの概要を尋ねます。node_overview は mode: "read"、チェーンの先端、ノードのコントラクトとネイティブ機能を返します。プロセスを起動し、stdio 経由で MCP を利用できるクライアントであれば動作します。

ビルド済みバイナリ

各リリースには、macOS(arm64)、Linux(x86_64)、Windows(x86_64)用のアーカイブ、SHA-256 チェックサムファイル、ビルド来歴の証明書が添付されています。実行する前に、ダウンロードしたファイルを検証してください。

sha256sum -c SHA256SUMS                       # or: shasum -a 256 -c SHA256SUMS
gh attestation verify parano1d-mcp-v0.1.5-macos-arm64.tar.gz --repo noidium/parano1d-mcp

バイナリは cargo auditable を使用してビルドされているため、cargo audit bin <binary> でも、出荷された正確な依存関係一式を監査できます。

設定

設定はすべて環境変数です。シークレットも設定ファイルもありません。

変数デフォルト意味
PARANOID_RPC_URLhttp://127.0.0.1:9601ノード RPC です。ループバック IP リテラル(127.0.0.1、::1)のみ指定できます。localhost などのホスト名、URL 内の認証情報、リモートホスト、HTTP 以外のスキームは、起動時に拒否されます。
PARANOID_MCP_MODEreadread、wallet、または admin です。エイリアス:ro/read-only、write/rw。
PARANOID_MCP_MAX_SEND_MICRONOID未設定NOID を使用するすべての支出で必須です。1 回の呼び出しでの 金額+手数料 の上限(ネイティブ操作では引き落とし額+手数料)です。1 NOID = 1,000,000 μNOID です。
PARANOID_MCP_MAX_FEE_MICRONOID未設定送金、統合、コントラクトおよびネイティブ書き込みに対する、手数料のみの任意の追加上限です。
PARANOID_MCP_ALLOW_RAW_INTENT未設定1 に設定すると、署名済みインテントを送信する tx_submit が許可されます。デフォルトでは無効です。
PARANOID_MCP_MAX_RESULT_BYTES524288このサイズを超える結果は、切り詰められた要約に置き換えられます。最小値は 1024 です。
RUST_LOGwarnログは stderr に出力されます。stdout は MCP のトランスポートであるため、出力をクリーンに保つ必要があります。

モードを変更するには、サーバーを再起動する必要があります。

モード

モード追加される機能想定用途
read(デフォルト)すべての非変更メソッド、ウォレットの読み取り、送金計画監視、分析、エージェントによる質疑応答
walletwalletSend、統合、アドレス変更、コントラクトへの資金供給と呼び出し、ネイティブ送信、PARANOID_MCP_ALLOW_RAW_INTENT=1 の場合の署名済みインテントの送信少額のホットウォレットを備えた、自分で運用するノード
adminstop、getBlockTemplate、submitBlockノード運用と外部マイナー構成

モードは累積的に適用され、src/manifest.rs でメソッドごとに制御されます。現在のモードで許可されていないツールを実行するとエラーが返され、何もせずに終了することはありません。

ツール

各メソッドのセマンティクスは、ノードの JSON-RPC API に準拠します。コンパイル済みのマニフェスト src/manifest.rs が、公開メソッド、アクセスクラス、アクティベーションゲートの正式な一覧です。

ツールモード機能
node_overviewread1 回のバッチ呼び出しで、チェーンの先端、ノードと P2P の状態、マイニング、メモリプール、コントラクト、ネイティブプロトコル、ウォレットの状態、機能、モード、RPC メソッド数を取得します
chain_queryread22 個のアクション:ブロック数、チェーン情報、ノードの状態、ブロックハッシュ/ヘッダー/詳細/ブロック、ブロック高またはハッシュによるヘッダー、履歴ステップの終端、トランザクション、スロット、所有者別スロット、アクティブスロット数、状態情報とマップ、最近のトランザクション、エポックアンカー、レシートの検証、スロットヒント
mempool_queryreadinfo、size、stats、entry
fee_estimatereadestimateFee と estimateFeeDetailed。入力は 1~1020 件、出力は 1~256 件
address_validatereado1... アドレスを検証し、正規化します
wallet_readreadstatus、balance、address、list_addresses、active_address、utxos、utxo_snapshot、history、receipts、query_receipts(v2.1)、mined_blocks、export_receipt
wallet_plan_sendreadアクティブアドレスから NOID を送信する際の見積もりを取得します。送信元、ネットワーク、送信先、金額、手数料に紐づく 120 秒有効の plan_id を返します
wallet_sendwalletアクティブアドレスから NOID を送信します。一致する plan_id、有効な見積もり、正確な確認文字列、支出上限が必要です。任意の from_index はアクティブインデックスと一致する必要があります。ノードの network を報告します
tx_submitwallet署名済みのインテントを送信します。PARANOID_MCP_ALLOW_RAW_INTENT=1 と confirm = "SUBMIT SIGNED INTENT" が必要です。すでに署名済みのインテントは上限を検査できません
wallet_maintenancewalletscan、discover_addresses、next_address、set_active_address(confirm = SET ACTIVE ADDRESS <index> が必要)、plan_consolidation、consolidate。plan_consolidation は読み取り操作で、read モードで動作します
contract_readreadprotocol、preview_call、status、instances、get_opening、list_states、list_receipts、export_receipt、verify_receipt
contract_writewalletcreate、fund、call、watch、import_receipt。fund と call には明示的なゼロ以外の手数料が必要です。手数料を取得するには contract_read preview_call または fee_estimate を使用してください。call は先に同一のリクエストをプレビューし、ノードが解放する金額に上限を設定します
native_readreadv2.1 ネイティブ:protocol、catalog、market、holdings、wallet_holdings、pending、preview
native_writewalletプレビュー済みの操作を submit します(ネイティブアクティベーションが必要)。または dismiss_pending を実行します(v2.1 ノードが必要)
peer_reportreadピア数と、ノードが公開するすべての P2P/クォーラム集計指標。ピアごとの IP、ポート、レイテンシを取得する RPC は存在しないことを明示します
miningread/adminread モードでは info と peers、admin が必要な操作は block_template と submit_block です
node_controladmin現在のブロック高に紐づけて、正常に stop します。STOP AT HEIGHT <current height> が必要です
rpc_callreadマニフェストに含まれる任意のメソッドに対する読み取り専用パススルーです。書き込みメソッドと制御メソッドはすべて拒否します

入力スキーマは Rust の型から生成され、tools/list で確認できます。引数オブジェクトを受け取るすべてのツールは、未知のフィールドを拒否します(additionalProperties: false)。そのため、amount_micronoid の代わりに amount と入力するような誤りは、無視されるのではなくエラーになります。返されるテキストが PARANOID_MCP_MAX_RESULT_BYTES を超える結果は要約に置き換えられます。ノードのエラーメッセージは 2,000 文字に制限されます。生のブロックの 16 進数データは、呼び出しごとに明示的に指定した場合のみ返されます。

安全性モデル

デフォルトは読み取り専用です。 PARANOID_MCP_MODE=read がデフォルトであり、推奨される登録設定です。rpc_call でモードを回避することはできません。wallet または admin に分類されるメソッドはすべて拒否されます。 キー素材を保持しません。 サーバーはキー、トークン、認証情報を保持しません。~/.parano1d、wallet.key、p2p_identity.key、wallet.receipts、またはノードのファイルを読み取ることはなく、ファイルシステムのコードも署名コードも含まれていません。トランザクションはノードのウォレットによって署名されます。

ループバックのみ。 RPC URL は 127.0.0.1 または ::1 上の HTTP でなければなりません。認証情報、ホスト名、またはリモートホストを含む URL は、起動時に拒否されます。ノードはループバックをローカル所有者の範囲として扱います。また、このサーバーにはリモートノードに提示できる認証情報がありません。

送信のバインド。 wallet_plan_send は、有効な送信元キーのインデックスとアドレス、およびノードのネットワーク(getNodeStatus.testnet に基づく mainnet または testnet)を記録します。wallet_send の実行には、そのプラン、同一の宛先、金額、手数料引数、同一の有効な送信元、新しい見積もり、および正確な確認文字列 SEND <amount_micronoid> MICRONOID TO <address> が必要です。ノードに選択させる場合は、手数料引数として 0 を渡してください。見積もられた手数料は確認用に表示されますが、バインドされる引数ではありません。省略可能な from_index は、有効なインデックスと一致していなければなりません。ウォレット署名操作は、1 つの MCP プロセス内で直列化されます。プラン作成後に別のプロセスまたは GUI が有効なアドレスを切り替えた場合、送信は拒否されるため、再見積もりが必要です。wallet_maintenance set_active_address では、署名アドレスとマイニング報酬の受取先が変更されるため、SET ACTIVE ADDRESS <index> が必要です。プランは 1 回限りで、120 秒後に期限切れになります。プランの検証に到達した呼び出しは、送信元、宛先、金額、または手数料が一致しなくても、そのプランを消費します。見積もられた手数料はノードに返されるため、再見積もりから書き込みまでの間にノードがより高い手数料を選択することはありません。wallet_send はネットワークを再読み込みし、変更されていれば拒否するため、あるチェーンで見積もられたプランが別のチェーンで送信されることはありません。testnet を報告しないノードは、推測で補うのではなく拒否されます。

支出上限。 すべての支出を伴う書き込みには、PARANOID_MCP_MAX_SEND_MICRONOID が必要です。これは呼び出しごとの合計(金額と手数料、またはネイティブ通貨の引き落とし額と手数料)に上限を設けるため、少額に高額の手数料を組み合わせて上限を回避することはできません。省略可能な手数料上限は、ノードが選択した見積もり手数料にも明示的な手数料にも適用される、手数料のみの追加上限です。上限は呼び出しごとに適用され、累積予算ではありません。コントラクトへの資金供給とコントラクト呼び出しには、ゼロ以外の明示的な手数料が必要です。ゼロの手数料はノードに最低額を選ばせる指定ですが、MCP はその値を検証できないためです。コントラクト呼び出しは同一のリクエストでプレビューされ、プレビューされた支払額と手数料の合計が上限となります。これは、終了(terminal)呼び出しには支払額フィールドがなくても、契約条件で指定された受取人にコントラクト残高全額が解放されるためです。ネイティブ取引で署名されるのは上限のみで、約定内容はその取引が含まれるブロックによって決まります。そのため、見積もり額と署名する上限額の大きい方を上限とします。買い注文の場合は gross_input + fee_limit、売り注文の場合は fee_limit が上限です。手数料上限は fee_limit に適用されます。それ以外のネイティブ操作はすべて、正確な引き落とし額と手数料を上限とします。未引き換えの各種プランは最大 64 件保持され、最も古いものから削除されます。

書き込みは再試行しません。 読み取りはトランスポートエラー時に 1 回再試行されます。書き込みは、再試行によって送信が重複する可能性があるため、再試行されません。書き込みの応答が失われた場合(タイムアウト、接続リセット、読み取り不能な応答など)、ノードがすでに受け付けている可能性があります。その場合、ツールは確認すべき内容を添えて結果不明と報告し、単なる失敗とは報告しません。また、再送信もしません。

有効化ゲート。 ノードが次のブロックでネイティブプロトコルが有効になると報告するか、最新ブロック高が有効化高に達するまでは、ネイティブ v2.1 の書き込みは拒否されます。サーバーは getNativeProtocol と getContractProtocol からこの情報を取得し、ノードのバージョンをハードコードしません。有効化後は、再ビルドや再起動を行わなくても native_write が使用可能になります。

ブロック高に紐づく停止。 node_control は管理者専用で、STOP AT HEIGHT <current height> が必要です。これにより、古いコマンドによってノードが停止されることを防ぎます。サーバーがノードを起動、再起動、または監視することはありません。

信頼境界

ノードの RPC は認証されません。このサーバーの有無にかかわらず、127.0.0.1:9601 にアクセスできるローカルプロセスはすべて、同じ所有者スコープを持ちます。parano1d-mcp は、誤操作やエージェントによる支出を防ぐガードレールを追加しますが、アクセス制御レイヤーでもサンドボックスでもありません。

ここから、次の 2 つのことが導かれます。

  1. シングルユーザーのマシンで実行してください。ノードの RPC ポートをネットワークに公開しないでください。また、信頼できないユーザーがループバックに接続できる環境ではサーバーを実行しないでください。
  2. チェーンデータは信頼できない入力として扱ってください。トークン名、メンプールのエントリー、コントラクトのメタデータ、RPC のエラー文字列はモデルのコンテキストに渡されるため、攻撃者がそこに指示を埋め込む可能性があります。書き込み呼び出しを確認し、ウォレットや管理者ツールを自動承認しないでください。

ツール定義はバイナリにコンパイルされ、実行時に取得されないため、ノードが侵害されても、クライアントに表示される説明は変更されません。ただし、ノードは悪意のあるデータを返す可能性があります。そのため、2 つ目の注意点が重要です。

これでは保護されないもの
  • ノード RPC にアクセスできる、悪意のある、または侵害されたローカルプロセス。
  • wallet_send または node_control を自動承認する MCP クライアント。
  • リスクにさらすつもりの金額を超える上限でウォレットモードを有効にするユーザー。
  • チェーンデータに含まれるプロンプトインジェクション。
  • ノード、ウォレット、チェーンのバグ。
  • 累積支出:上限は予算ではなく、呼び出しごとに適用されます。

制限事項

  • ピアの詳細。 ノードはピア数と P2P/クォーラムの全体的な健全性を公開しますが、ピアごとの IP、ポート、接続方向、レイテンシを取得する RPC はありません。peer_report は、取得できる情報を報告し、取得できない情報を明示します。peers.json を読み取ったり、推測したりはしません。
  • メインネット上のネイティブ v2.1。 ネイティブ読み取りは有効化前でも動作し、有効化状態と空のカタログを返します。ネイティブ書き込みは、ノードが有効化を報告するまで拒否されます。このリリース時点で、メインネットの有効化ブロック高は 279,370 です。
  • 管理者モードとコントラクト/ネイティブ書き込みは未検証です。 ウォレットモードには上限があり、プランに紐付けられていますが、管理者モード、コントラクト書き込み、ネイティブ書き込みはメインネットに対して実行されていません。必要なモードを、失っても差し支えないノードでテストするまでは、本番環境では読み取りモードを使用してください。
  • アドレスを指定した送信 RPC はありません。 ノードの walletSend が支出するのは、アクティブなアドレスの UTXO のみです。別のローカルアドレスから送信するには、wallet_maintenance set_active_address(確認済み)でアクティブに切り替えてから送信してください。MCP が自動で切り替えることはありません。
  • 上限は予算ではありません。 PARANOID_MCP_MAX_SEND_MICRONOID は手数料を含め、各呼び出しに適用されます。wallet_send を繰り返し呼び出せるエージェントは、呼び出しごとに上限まで支出できます。残高の少ない専用ウォレットを使用してください。
  • リモート RPC、TLS、認証には対応していません。 意図的な設計です。上記を参照してください。
  • HTTP トランスポートはありません。 stdio のみです。プロセスを起動できないクライアントは使用できません。
  • プロセスごとにノードは 1 つです。 ノードごとに 1 つのインスタンスを実行してください。
  • Docker イメージはありません。 コンテナー内のループバック専用サーバーからは、ホストネットワークを使用しない限り、ホストのループバックにアクセスできません。ホストネットワークの使用方法はプラットフォーム固有です。リリースバイナリを使用するか、ソースからビルドしてください。
  • 監査されていません。 src/safety.rs、src/manifest.rs、src/config.rs にセキュリティ関連のロジックが含まれています。これらは小規模で、読んで確認できるようになっています。

アーキテクチャ

MCP client (any stdio client)
        |  MCP over stdio (JSON-RPC on stdin/stdout)
        v
  parano1d-mcp
        |  HTTP JSON-RPC, loopback, no TLS
        v
  127.0.0.1:9601  parano1d-node
        |
        +-- owns the wallet and signs
        +-- owns the chain data
  • src/manifest.rs:RPC メソッドごとに、アクセス分類、バージョン、有効化ゲートを定義します。ノードメソッドの追加は 1 行の変更で済みます。
  • src/capabilities.rs:getNativeProtocol と getContractProtocol を 1 回のバッチでプローブし、有効化状態をノードから読み取ります。
  • src/safety.rs:送信、統合、ネイティブの各プランストア、TTL、確認文字列を管理します。
  • src/rpc.rs:単一呼び出しとバッチ呼び出しに対応する HTTP クライアントです。タイムアウトを設定し、書き込みを再試行しません。
  • src/tools/:ドメインごとにグループ化された 18 個の MCP ツールです。

TLS は意図的にコンパイル対象から除外されています。接続がホストの外に出ることはないため、TLS スタックを追加しても信頼境界は変わらず、依存関係と攻撃対象領域が増えるだけです。

互換性

NodeRPC メソッド備考
v2.1.079ネイティブメソッドを10個追加し、walletQueryReceipts を追加します。ネイティブ書き込みは有効化されるまで無効です
v2.0.468チェーン、ウォレット、コントラクト、メンプール、マイニング、制御

サーバーは起動時および呼び出しごとに機能を検出します。ノードのバージョンをハードコードすることはありません。マニフェストにないメソッドは、むやみに転送されるのではなく、明確なエラーとともに拒否されます。

プラットフォームのサポート

プラットフォームランタイム要件備考
macOS 13+ arm64 / x86_64実行権限署名されていないバイナリでは Gatekeeper の警告が表示される場合があります。ローカルでビルドするか、署名済みリリースを使用してください
Linux x86_64 / arm64 (glibc)実行権限OpenSSL、CMake、NASM は不要です
Windows 10/11 x86_64実行権限署名されていないバイナリでは SmartScreen の警告が表示される場合があります

管理者権限や root 権限、ファイアウォールルール、フルディスクアクセス、キーチェーンアクセス、ローカルネットワークの許可は不要です。サーバーはリスニングソケットを開きません。

CI は Ubuntu x86_64、macOS arm64、Windows x86_64 で実行されます。macOS x86_64 と Linux arm64 はソースからビルドされますが、現時点では CI でテストされていません。

テスト

cargo test --locked
cargo clippy --all-targets --locked -- -D warnings
cargo fmt --all -- --check
cargo build --release --locked

ユニットテストでは、設定の検証(ループバックの拒否を含む)、メソッドマニフェスト(アクセスクラス、メソッド数、危険なメソッドが読み取りとして分類されていないこと)、プランのバインドと確認文字列、上限の解析、結果の上限設定、CLI フラグを対象とします。

tests/hostile_rpc.rs はノードを必要とせず、すべてのプラットフォームで通常の cargo test の一環として実行されます。実際のバイナリを、エフェメラルなループバックポート(ノードのポートは使用しません)上で、スクリプト化された悪意ある JSON-RPC ピアに接続して起動し、サイズ超過のストリーム、実際と異なる Content-Length、無効な UTF-8/JSON、深くネストされた JSON、レスポンス ID の不一致、順序の異なる/欠落した/重複したバッチ ID、リダイレクト、4xx/5xx、接続の切断と停止、整数以外の金額、不明なフィールド、すべての書き込み拒否、送信前にソース、見積もり、またはネットワークが変わるプラン、キャンセルされた送信、拒否された送信または停止がノードに到達しないことを検証します。すべての書き込みツールに破壊的操作の注釈が付いており、読み取り専用ではないことも検証します。

統合テストでは実際のバイナリを起動し、標準入出力経由で MCP と通信します。実行中のノードが必要で、オプトイン方式で実行されます。

PARANOID_MCP_LIVE_TEST=1 cargo test --locked --test stdio_live -- --test-threads=1

エンドポイントは PARANOID_MCP_LIVE_URL(既定値は http://127.0.0.1:9601)と PARANOID_MCP_LIVE_TESTNET_URL(既定値は http://127.0.0.1:19821)で設定できます。ライブテストスイートはウォレットを備えた v2.1 ノードを対象に作成されています。読み取りと拒否される経路のみをテストし、トランザクションを送信することはありません。CI にはノードがないため、CI では実行されません。

開発

  • Rust 1.96、エディション 2024。rust-toolchain.toml で固定されています。
  • cargo build --release --locked がリリースビルドです。
  • CI ではフォーマットと clippy を一度実行した後、Ubuntu、macOS、Windows でテストとリリースビルドを実行します。cargo-deny は実行ごと、および毎週、勧告、ライセンス、ソースをチェックします。
  • Cargo.lock はコミットされています。これはライブラリではなくバイナリです。

レジストリ

レジストリエントリでは、サーバーは既定で読み取り専用と説明されています。上限付きウォレットモードを明示的に有効にしない限り、送信は無効のままです。

要望とバグ報告

バグ報告または機能リクエストのフォームから Issue を作成してください。フォームでは、ノードのバージョン、ネットワーク(mainnet または testnet)、関連するツールと JSON-RPC メソッドを尋ねるため、ユーザーまたはエージェントが報告した内容を、追加のやり取りなしに対応できます。ウォレットキー、シード、ノードのデータファイルは絶対に貼り付けないでください。

セキュリティ上の問題(ガード、モード、支出上限の回避)は、公開 Issue ではなく、非公開の脆弱性報告から報告してください。SECURITY.md を参照してください。

セキュリティ

脆弱性は非公開で報告してください。SECURITY.mdをご覧ください。ガードの回避や支出上限の回避について、公開の Issue を作成しないでください。

コントリビューション

CONTRIBUTING.mdをご覧ください。src/manifest.rs、src/safety.rs、または NOID を消費する可能性のある箇所への変更には、正常系だけでなく拒否経路のテストも必要です。

メンテナー

Mathias Cordeiro がメンテナンスしています。GitHub では @Mathias-SaaS、X では @Mathias_SaaS です。

ライセンス

Apache-2.0 です。LICENSEをご覧ください。Parano1d ノードも Apache-2.0 です。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。