quai-mcp-server
quai-mcp-server
Quai Networkのチェーンデータと読み取り専用の操作ツールを、Claude DesktopやClaude CodeのようなAIクライアントに公開するMCP(Model Context Protocol)サーバーです。公式の@modelcontextprotocol/sdkと、Quaiのethers風SDKであるquaisを使用して構築されています。
Quai Networkとは何か(平易な言葉で)
Quaiは、プルーフ・オブ・ワーク(PoW)方式でEVM互換のレイヤー1であり、シャーディングによってスケールします。1つのチェーンがすべての処理を行う代わりに、階層構造に配置された多数のチェーンに分割されます。
Prime chain (1)
/ | \
Region Region Region <- "Cyprus", "Paxos", "Hydra"
/ | \ / | \ / | \
Zone Zone Zone ... 9 Zone chains totalPrimeは単一の最上位チェーンです。すべてのマイナーがPrimeをマイニングし、ネットワーク全体の状態を確定させますが、ユーザートランザクションを直接処理することはありません。
Regionチェーン(現在はCyprus、Paxos、Hydra)はPrimeの下に位置し、自身のZoneを集約します。
Zoneチェーン(Cyprus1/2/3、Paxos1/2/3、Hydra1/2/3 — 現在は9つ、ネットワークの成長に応じて追加可能)は、実際のEVMが存在する場所です。ユーザートランザクション、コントラクト、残高など、すべてがここにあります。
データとともにセキュリティも分割するシャーディング設計とは異なり、Quaiは階層全体でセキュリティを統一し、データ/スループットのみを分割します。PrimeチェーンとRegionチェーンは、その下のZoneとマージマイニングを行います。
ツールにとって最も重要な点は、すべてのQuaiアドレスが位置情報を認識することです。アドレス自体のバイト列に、それが属する単一のZone(および、EthereumのようなアカウントベースのQUAI台帳か、BitcoinのようなUTXOベースのQi台帳のどちらにあるか)がエンコードされています。Cyprus1上のアドレスはCyprus1にのみ存在し、Paxos2に問い合わせることはできません。そのため、以下のツールのいくつかは、Zoneを自動的に解決するか、明示的に指定するよう求めます。
Related MCP server: Kirha MCP Gateway
ツール
読み取り専用
Tool | What it does |
| QUAI残高をアドレスから取得します。Zoneはアドレスから自動的に解決されます。 |
| 番号/ハッシュ/タグによるブロック詳細。ブロック番号はチェーン間でグローバルに一意ではないため、シャード/ゾーンの指定が必要です。 |
| ハッシュによるトランザクションとレシート。どのゾーンに着地したかも含みます。 |
| アドレスを指定すると、そのゾーン、リージョン、台帳(Quai vs Qi)を報告します。ネットワーク呼び出しはありません。 |
| 読み取り専用の |
| Quaiドキュメントの厳選されたオフラインインデックスを検索し、スニペットとリンクを返します。 |
| QUAIとQi(Quai独自の2つのネイティブ台帳)間の変換レートを提示します。これはQuaiの組み込みの「スワップ」であり、サードパーティのDEXではありません(Quaiで確認されているものは知られていません)。 |
これらのいずれも、資金を移動したり、署名したり、オンチェーン状態を変更したりすることはできません。
ウォレット(カストディアル:暗号化、名前付き、パスワード保護)
Tool | What it does |
| 新しいQUAI台帳の秘密鍵とアドレスを生成し、選択したゾーン(デフォルトは |
| 既に所有しているQUAI台帳の秘密鍵に対して、同じ暗号化ストレージを使用します。 |
| 新しいQi台帳(UTXOベース)ウォレットを生成します。Qiは単一の鍵ペアではなく、アドレス導出とUTXOスキャンが必要なため、ニーモニック付きのHDウォレットです。同じ方法で暗号化されます。 |
| 既に所有しているQiのニーモニックフレーズに対して、同じ暗号化ストレージを使用します。 |
| 保存されている両方の種類のウォレット(名前、台帳、アドレス、ゾーン)を一覧表示します。パスワードは不要です。Qi残高の送金や確認にのみ必要です。 |
| 保存されているQUAIウォレットからQUAIに署名して送信します。2段階の確認(下記参照)。送信者と受信者が異なるゾーンにいる場合があります。これは外部トランザクション(ETX)であり、ネットワークが自動的に処理します。受信者がQiアドレスの場合、これはQUAI→Qi変換パスを兼ねます(下記参照)。 |
| Qiウォレットの合計残高と使用可能残高を取得します。パスワードが必要です。下記の「なぜQiにパスワードが必要か」を参照してください。 |
| Qiウォレットに保持されているQiをQUAIに変換し、QUAIアドレスに送信します。2段階の確認で、 |
| Qiウォレットの再利用可能なBIP-47ペイメントコードを取得します。これは、誰かがあなたに |
| Qiウォレットから受信者のペイメントコード(通常のアドレスではない)にQiを送信します。下記の「Qi → Qi送信」を参照してください。2段階の確認で、他の書き込みツールと同じパターンです。 |
このサーバーは、ウォレットを作成またはインポートすると、あなたの代わりに鍵を保持します。これは、gethキーストアやMetaMaskのローカルボールトと同じように、狭い意味でのローカルなカストディアルです。他の人の資金のためのホステッドサービスとして動作するものではありません。すべてはサーバーが実行されているマシン上のディレクトリに保存され、あなただけが知っているパスワードで暗号化されます。
暗号化の仕組み: 各ウォレットは、標準のWeb3 Secret Storage (V3 keystore)形式の秘密鍵です。これはgethやMetaMaskが使用するのと同じ形式で、quaisのencryptKeystoreJsonを介して使用されます。具体的には、パスワードはscrypt(N=2^17, r=8, p=1、標準の「高コスト」パラメータ。これにより、パスワード推測が意図的に遅くなります)でストレッチされ、秘密鍵はAES-128-CTRで暗号化され、暗号文に対するMACが、鍵素材が導出される前に誤ったパスワード(または改ざんされたファイル)を検出します。これはよくレビューされ、広く展開されている方式であり、ここに独自の暗号はありません。
ウォレットの保存場所: デフォルトでは~/.quai-mcp-server/wallets/(QUAI_WALLET_DIRで上書き可能)です。QUAIウォレットは<name>.json、Qiウォレットは<name>.qi.jsonとして保存されます。ディレクトリは0700、各キーストアファイルは0600(所有者のみ読み書き可能、非POSIXプラットフォームではベストエフォート)で作成され、作成後に明示的に強制されます(プロセスのumaskに任せるだけではありません)。アドレスはどちらの場合も平文で保存されます(公開情報であり、list_walletsやQUAI側のプレビューがパスワードなしで機能するのはそのためです)。しかし、秘密鍵(Qiの場合はニーモニック)は、どのツールによっても平文で書き込まれたり、ログに記録されたり、返されたりすることはありません。
命名: 名前は、最大で1つのQUAIウォレットと最大で1つのQiウォレットを識別します。これらは独立したキーストア(異なるファイル、異なる秘密、完全に無関係な鍵素材)であり、たまたま同じラベルを共有しているだけです。同じ名前で2つのQUAIウォレット(または2つのQiウォレット)を作成することはできませんが、QUAIウォレットの名前をQiウォレットに再利用することは、まさにcreate_walletのペアリングが機能する方法であり、create_qi_wallet/import_qi_walletは同じ理由で意図的にそれを許可しています。
Qiウォレットは内部的にはHDウォレットですが、このサーバーはニーモニックのみを保存します — 導出されたアドレスツリーやUTXO/スキャン状態は決して保存しません。create_qi_wallet/import_qi_walletは、QUAI側とまったく同じencryptKeystoreJson呼び出しを介して{address, privateKey, mnemonic}を暗号化します(そこでのaddress/privateKeyフィールドは、ウォレットの最初に導出されたアドレスに過ぎず、ファイルが通常の有効なV3キーストアであるために存在します)。意味のある秘密はニーモニックです。その後のすべての操作(get_qi_balance、convert_qi_to_quai)は、そのニーモニックから新しいQiHDWalletを再構築し、要求に応じて同じ受信アドレスを再導出します。これは決定論的です。固定のアカウント/ゾーンに対するHD導出は常に同じアドレスを生成するためです。これは直接検証されています。ウォレットのニーモニックをエクスポートし、別の名前で再インポートすると、同一のアドレスが再現されました。トレードオフとして、すべてのQi操作はキャッシュを読み取るのではなくゼロから再導出するため、推論が簡単で、ニーモニックが実際に意味するものから逸脱することはありませんが、QUAI側よりも頻繁にパスワードが必要になります(下記参照)。
なぜQiの方がパスワードをより頻繁に必要とするのか: QUAIのget_balanceは公開アカウント残高をチェーンから直接読み取るだけなので、秘密情報は不要です。Qiにはそのようなものはありません。「残高」とは、ウォレットのニーモニックだけが導出できるアドレスに属する未使用トランザクション出力(UTXO)の合計であり、それを計算するということはそもそもウォレットを再構築することを意味します。だからこそget_qi_balanceはパスワードを必要とし(QUAIのget_balanceは必要としない)、convert_qi_to_quaiのプレビュー手順では換算レートを提示できても、実際に支払いに足りるQiを持っているかどうかは確認できないのです。その確認は、パスワードが確認手順に届いた時点でのみ行われます。
パスワードのルール: 最低8文字で、何かを暗号化する前にチェックされます。誤ったパスワードの試行に対する独立したレート制限はありません。scryptのコストパラメータが各推測を計算上高価なものにしており、これがこの種のローカルキーストアに対する標準的な防御です。
send_transaction、convert_qi_to_quai、send_qiの確認フロー: 3つすべて常に2回の呼び出しを必要とし、パスワードが必要なのは2回目だけです。
宛先と金額を指定して呼び出します(
send_transactionの場合はwalletName/to/amount、send_qiの場合はwalletName/recipientPaymentCode/amount/destinationZone、convert_qi_to_quaiの場合はtoに相当する形)— まだパスワードは不要です。何もブロードキャストされません。プレビューが返ってきます — 解決済みのゾーン、存在する場合は見積もり(送金の場合はガス、変換の場合は換算後の金額、send_qiには1:1の転送なので見積もりなし)、そして2分間有効なconfirmationTokenです。同じパラメータに加えて、
confirm: true、そのconfirmationToken、そしてウォレットのpasswordを指定してもう一度呼び出します。この時点で初めてキー/ニーモニックが復号され、トランザクションが実際に署名され送信されます。
トークンは一度きりで、プレビューされた正確なパラメータに紐づいています。何かが変更された場合、トークンが期限切れになった場合、または既に使用された場合、ステップ2は明確なエラーで失敗し、再度プレビューすることになります。これはMCPクライアント自体にツール承認UIがあるかどうかに関係なく同じように機能するため、クライアントが提供することに依存するのではなく、実際のゲートとなります。誤ったパスワードは、トークン/パラメータがそれ以外に有効かどうかを漏らすことなく、きれいに失敗します(Incorrect password for wallet "...")。
意図的にexport_wallet/「秘密鍵またはニーモニックを表示」ツールはありません。秘密情報がストアに入ったら、このサーバーを通じて外に出る唯一の方法は、それを使って署名することです。
QUAI ↔ Qi変換(「スワップ」): Quaiには、2つの台帳(アカウントベースのQUAIと、BitcoinのようなUTXOベースのQi)の間でのネイティブなプロトコルレベルの変換があり、オンチェーンの為替レートを持ちます。サードパーティのDEXではありません。get_conversion_rateはどちらの方向でも見積もりを提供し、ウォレットは不要です。両方向の実行が実装されています:
QUAI → Qi: Qi台帳のアドレス(例:
create_qi_walletで作成したもの)への通常のsend_transactionに過ぎません。ツールはこれを自動的に検出し(プレビューでisConversion: true)、通常のガス/残高情報とともに受け取るQiの見積もりを表示します。Qi → QUAI:
convert_qi_to_quai。内部でquaisのQiHDWallet.convertToQuaiを使用し、send_transactionと同じプレビュー/確認/パスワードのパターンに従います。
Qi → Qi送金: Qiウォレットは互いのアドレスに直接送金しません。代わりに、各Qiウォレットには再利用可能なBIP-47ペイメントコード(get_qi_payment_code)があります。アドレスを共有するのと同じようにこれを共有しますが、プライバシーのために毎回の支払いでそこから新しいワンタイムアドレスが導出されます。送金するには、送信者が受信者のペイメントコードで「チャネルを開きます」(send_qiがこれを自動的に行います)— これは2つのペイメントコード間の純粋にローカルなECDHであり、決定的で再現可能で、オンチェーンアクションや永続化された状態は関与しません。問題は受信側にあります。それらのペアごとに導出されたアドレスは、ウォレットの通常の決定的アドレスシーケンスの一部ではないため、明示的に探すように指示しない限り、その方法で送られた資金は何も見つかりません。具体的には: 誰かがペイメントコード経由でQiウォレットに支払った後、その相手のペイメントコードをget_qi_balanceのcounterpartyPaymentCodesに渡します。すると同じチャネルが開かれ、残高に含まれます。ペイメントコードの支払いが届いたことを受信者に知らせる通知メカニズム(オンチェーンまたはその他)はありません。両者は帯域外で既に互いを知っている必要があります。これは、残高を確認する前にアドレスを知っている必要があるのと同じです。send_qiはクロスゾーン送金(送信者自身のゾーンとは別のdestinationZone)もサポートしており、send_transactionのETXやQiHDWallet自身のゾーンモデルと同じ方法です。
既知の粗いエッジが1つあります: send_qiのプレビュー手順はペイメントコードの形式を事前に検証しません(照合するためのエクスポートされたバリデータがないため)。そのため、不正な形式のコードはプレビューでは問題なく表示され、確認時にのみ失敗します — 安全に(何も送信されず、資金が危険にさらされることもありません)、ただ理想よりも遅いだけです。
まだ実装されていません: deploy_contract、request_faucet。
ここでテストされた内容についての正直な説明(更新版): 完全なsend_qi / ペイメントコードのループは、2つの実在するウォレットでメインネットに対してライブで検証されました。実際の正しい形式のBIP-47ペイメントコード(PM8T...)が生成され、呼び出し間で決定的であることが確認され、プレビューはクロスゾーンと同一ゾーンを正しく検出し、空のウォレットに対する確認はクラッシュする代わりに本物のSDKエラー(No Qi available in zone)で失敗し、get_qi_balanceは無効なカウンターパーティのペイメントコードをrejectedPaymentCodesに正しく分離し、呼び出し全体を失敗させることはありませんでした。このドキュメントの他のすべての場所と同じ理由で、まだ未検証なのは、資金のある2つのウォレット間で実際のペイメントコード送金が完了することです。これは実際のQiを必要とし、依頼なしには行われなかったためです。
ここでテストされた内容についての正直な説明: 上記のすべてはライブのメインネットに対して実行されました。決定性チェック(Qiウォレットのニーモニックをエクスポートし、別の名前で再インポートすると同一のアドレスが再現された)と実際のエラーパス(誤ったパスワード、QUAIガス不足、そして空のQiウォレットから変換しようとした際の実際のQiHDWalletエラー — No Qi available in zone)を含みます。まだ実行されていないのは、実際の資金を保有するウォレットに対してconvert_qi_to_quaiまたはQUAI→Qi変換が実際に完了することです。これは実際の資金の支出を必要とし、依頼なしには行われなかったためです。
インストール
npm install
npm run buildまたは、公開後にインストールせずに直接実行:
npx quai-mcp-server要件
Node.js 18+
設定(環境変数)
すべてオプション — デフォルトはQuaiメインネットを指します。
変数 | デフォルト | 目的 |
|
|
|
|
|
|
|
| 暗号化されたウォレットキーストアファイルが保存される場所。 |
すべてのツールは呼び出しごとにnetwork引数("mainnet"または"testnet")も受け入れるため、クライアントはサーバーを再起動せずにどちらのネットワークでも照会できます。
キーについて: 上記の「ウォレット」を参照してください。キーは、それらを必要とするcreate_wallet/import_wallet/send_transaction呼び出しの間だけ、メモリ内で平文として存在します。ディスク上には決して存在せず、ログにも記録されません。QUAI_WALLET_DIR(およびこのサーバーを実行するマシン)は、他のローカル秘密ストアと同様に扱ってください。そのディレクトリへのファイルシステムアクセスと、弱いパスワードを総当たりするのに十分な計算能力を持つ者は誰でも、ローカルのgethキーストアやMetaMaskボールトと同じように、最終的にウォレットを復号できます。
Claude Desktopに登録
これをClaude DesktopのMCP設定(claude_desktop_config.json — macOSの場合: ~/Library/Application Support/Claude/claude_desktop_config.json)に追加します:
{
"mcpServers": {
"quai": {
"command": "npx",
"args": ["quai-mcp-server"]
}
}
}または、公開パッケージを使用する代わりにこのリポジトリをローカルでクローンしてビルドした場合:
{
"mcpServers": {
"quai": {
"command": "node",
"args": ["/absolute/path/to/quai-mcp-server/dist/index.js"]
}
}
}デフォルトでテストネットを指すようにするには、envブロックを追加します:
{
"mcpServers": {
"quai": {
"command": "npx",
"args": ["quai-mcp-server"],
"env": {
"QUAI_TESTNET_RPC_URL": "https://orchard.rpc.quai.network"
}
}
}
}(その後、個々のツール呼び出しで"network": "testnet"を渡します — 環境変数はエンドポイントを設定し、呼び出しごとのデフォルトネットワークは設定しません)。
Claude Codeに登録
claude mcp add quai -- npx quai-mcp-serverまたは、ローカルビルドの場合:
claude mcp add quai -- node /absolute/path/to/quai-mcp-server/dist/index.js開発
npm run dev # tsc --watch
npm run build # one-shot build to dist/
npm start # run the built server directly (stdio) -- mainly useful for manual smoke testsサーバーはv1ではstdio経由でのみMCPを話します。HTTPトランスポートはありません。
設計ノート
生のRPCではなくquais: すべてのツールは、手書きの
eth_/quai_JSON-RPC呼び出しではなく、quaisSDKのJsonRpcProvider、Contract、およびアドレスユーティリティを経由するため、ゾーン解決、レスポンス形式、エラー形状はQuaiエコシステムの他の部分と一貫性を保ちます。1つのプロバイダ、多数のゾーン: ベースゲートウェイURL(例:
https://rpc.quai.network)を指す単一のJsonRpcProviderが、Primeチェーンからアクティブなゾーンを自動検出し、各呼び出しを正しいゾーンにルーティングします。ほとんどのツールはゾーンごとのURLを構築しません。カスタム暗号ではなく標準ツールによる管理: ウォレットは、
quaisによるEthereum V3キーストア形式(scrypt + AES-128-CTR + MAC)の実装を使用して保存されます。これはgethとMetaMaskが使用するのと同じ、よくレビューされた方式であり、手作りのものではありません。完全なモデルについては上記の「ウォレット」を参照してください。エラーはスタックトレースではなくテキスト: RPC/コントラクトエラーは捕捉され、生の例外オブジェクトをモデルに漏らす代わりに、短く具体的なメッセージ(例: "Contract call reverted: ..."、"Insufficient funds: ..."、"Incorrect password for wallet..."、"not a validly checksummed Quai address")に書き換えられます。
確認はクライアントのヒントではなく実際のゲート: 書き込みツールは
readOnlyHint: false(送信の場合はdestructiveHint: true)で注釈付けされているため、独自の承認UIを持つMCPクライアントはそれを表示しますが、send_transactionはさらに独自のプレビュー → トークン → パスワードのハンドシェイクをサーバー側で強制します(トークンはsrc/confirmations.ts、パスワードはsrc/walletStore.ts+decryptKeystoreJson)。そのため、承認UIがまったくないクライアントから呼び出しても安全です。パスワードは最後の瞬間に一度だけ必要: 送金のプレビューは、ウォレットのアドレスをキーストアファイルの暗号化されていない部分から直接解決し、
VoidSigner(ガスを見積もれるが署名はできないquaisサイナー)を使用してコストを見積もります。復号もパスワードも不要です。最終的なconfirm: true呼び出しだけがキーを復号し、それもその1回の呼び出しの間だけです。ETXは別のコードパスではない: 別のゾーンのアドレスへの送信は、同一ゾーン内の送信とまったく同じ
send_transaction呼び出しを使用します。署名されたトランザクションが送信者のゾーンに到達すると、Quaiのネットワークがクロスゾーンルーティング(外部トランザクションとして)を透過的に処理します。ツールは関与するゾーンを検出して報告するだけで、呼び出し側が何を期待すべきかを把握できます。Qiウォレットは意図的に呼び出し間でステートレス:
create_qi_wallet/import_qi_walletはニーモニックを暗号化するだけです。get_qi_balanceとconvert_qi_to_quaiは、キャッシュされたアドレス/UTXO状態を読み取るのではなく、呼び出しごとにQiHDWalletをゼロから再構築し、そのアドレスを再導出します(src/qiWallet.ts)。読み取るべき状態は存在しません。これは、少しのパフォーマンス(すべてのQi操作がキャッシュにヒットするのではなく再導出と再クエリを行う)を、よりシンプルで間違いにくいセキュリティストーリーと交換したものです。静止状態で存在するのは、重要ないくつかの秘密だけです。
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables AI agents to interact with cryptocurrency ecosystems through wallet management, trading operations (swaps, DCA, limit orders), staking, and multi-chain support starting with Solana.37GPL 3.0
- AlicenseNot gradedqualityCmaintenanceA unified interface that provides AI agents with access to premium data sources and crypto market intelligence through a single authentication endpoint. It handles multi-API composition and planning to aggregate real-time blockchain analytics and financial data into conversational workflows.223ISC

QuickContract MCPofficial
AlicenseAqualityCmaintenanceEnables AI agents to sign contracts, release escrow, query portfolios, and verify on-chain proofs via QuickContract.1716MIT- AlicenseAqualityDmaintenanceEnables AI agents to check balances and send transactions across multiple blockchains with automatic spending limit protection and policy enforcement.3MIT
Related MCP Connectors
Provide AI agents and automation tools with contextual access to blockchain data including balance…
Read-only on-chain intelligence for AI agents on Base: balances, tokens, gas, tx status.
Read-only on-chain intel for AI agents on Base: balances, tokens, gas, tx status. No API keys.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Intellihackz/quai-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server