Algorand MCP Implementation について
Algorand MCP は、AI エージェントや LLM が Algorand ブロックチェーンを操作できるようにする MCP サーバーです。GoPlausible が開発し、ウォレット、トランザクション、DeFi 連携、開発者向けドキュメントを扱い、複数の MCP クライアントに対応します。
主な機能
- 01ニーモニックを返さないローカル SQLite ウォレット
- 02トランザクションの構築、署名、送信
- 03アトミックトランザクショングループへの対応
- 04Tinyman や Haystack Router との DEX 連携
- 05x402 による HTTP 決済と NFD ネームサービス連携
活用シーン
- 01AI エージェントに Algorand のトランザクションを構築・送信させる
- 02Tinyman や Haystack Router を通じてトークンをスワップする
- 03開発中に Algorand のドキュメントやアカウント情報を照会する
MCP 対応
本プロジェクトは MCP サーバーとして、Claude Desktop、Claude Code、Cursor などの MCP クライアントに Algorand 関連ツールを公開します。クライアントは stdio で接続し、npx またはグローバルインストールで起動できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
119掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| network | enum | いいえ | 使用する Algorand ネットワーク(デフォルト:testnet)mainnet | testnet | localnet |
| itemsPerPage | integer | いいえ | ページ分割されたレスポンスの1ページあたりの項目数(デフォルト:10) |
詳細
Algorand MCP サーバー
AI エージェントと LLM が Algorand ブロックチェーンに全面的にアクセスできる、包括的な Model Context Protocol (MCP) サーバーです。GoPlausible が開発しました。
Algorand は、即時ファイナリティ、低手数料、スマートコントラクト(AVM)、標準アセット(ASA)、アトミックトランザクションの組み込みサポートを備えた、カーボンネガティブな純粋プルーフ・オブ・ステーク方式の Layer 1 ブロックチェーンです。
MCP とは?
Model Context Protocol は、AI アプリケーションが外部のツールやデータソースに接続するためのオープン標準です。このサーバーは Algorand ブロックチェーンの操作を MCP ツールとして公開するため、Claude Desktop、Claude Code、Cursor、Windsurf など、互換性のあるあらゆる AI クライアントで利用できます。
機能
- エージェントウォレット — ニーモニックはローカルの SQLite データベースに保存され、MCP サーバーがエージェントに代わって署名するために使用します(ニーモニックがツールの応答で返されることはありません)
- 人間が読みやすいニックネームを設定できるウォレットアカウント
- アカウントの作成、鍵の管理、リキーイング
- トランザクションの構築、署名、送信(支払い、アセット、アプリケーション、鍵登録)
- アトミックトランザクショングループ
- TEAL のコンパイルと逆アセンブル
- Algod および Indexer API への完全なアクセス
- NFDomains(NFD)ネームサービスとの統合
- x402 HTTP マイクロペイメント — アクティブなウォレット(USDC/ALGO)を使用した自動検出とワンコールの有料リクエスト
- Algorand 向け AP2 ツール
- Tinyman AMM との統合(プール、スワップ、流動性)
- Haystack Router DEX アグリゲーション(Tinyman、Pact、Folks を横断する最良価格でのスワップ)
- Alpha Arcade の予測市場取引(市場、オーダーブックの閲覧、指値注文/成行注文、ポジション、請求)
- ARC-26 URI と QR コードの生成
- 開発者向けドキュメントの分類体系を網羅した Algorand ナレッジベース
- ツール呼び出しごとのネットワーク選択(mainnet、testnet、localnet)とページネーション
要件
- Node.js v20 以降
- npm、pnpm、または yarn
インストール
npm から
npm install -g @goplausible/algorand-mcp
ソースから
git clone https://github.com/GoPlausible/algorand-mcp.git
cd algorand-mcp
npm install
npm run build
MCP の設定
サーバーは stdio 経由で実行されます。呼び出し方法は 3 つあります。環境に合った方法を選んでください。
| 方法 | コマンド | 使用する場面 |
|---|---|---|
| npx(推奨) | npx @goplausible/algorand-mcp | インストール不要で、常に最新バージョンを利用できます |
| グローバルインストール | algorand-mcp | npm install -g @goplausible/algorand-mcp の実行後 |
| 絶対パス | node /path/to/dist/index.js | ソースからビルドした場合、またはローカルクローンを使用する場合 |
標準的な使用に環境変数は不要です。ネットワークの選択、ページネーション、ノード URL はすべてツール呼び出しごとに動的に処理されます。
OpenClaw
手動での設定は不要です。npm パッケージ @goplausible/openclaw-algorand-plugin をインストールすると、Algorand MCP サーバーが自動的に設定されます。
npm install -g @goplausible/openclaw-algorand-plugin
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json(macOS)または %APPDATA%\Claude\claude_desktop_config.json(Windows)を編集します。
npx を使用する場合:
{
"mcpServers": {
"algorand-mcp": {
"command": "npx",
"args": ["@goplausible/algorand-mcp"]
}
}
}
グローバルインストールを使用する場合:
{
"mcpServers": {
"algorand-mcp": {
"command": "algorand-mcp"
}
}
}
絶対パスを使用する場合:
{
"mcpServers": {
"algorand-mcp": {
"command": "node",
"args": ["/absolute/path/to/algorand-mcp/dist/index.js"]
}
}
}
Claude Code
プロジェクトのルートに .mcp.json(プロジェクトスコープ)、または ~/.claude.json(ユーザースコープ)を作成します。
{
"mcpServers": {
"algorand-mcp": {
"type": "stdio",
"command": "npx",
"args": ["@goplausible/algorand-mcp"]
}
}
}
または、対話形式で追加します。
claude mcp add algorand-mcp -- npx @goplausible/algorand-mcp
Cursor
Settings > MCP Servers から追加するか、プロジェクトのルートにある .cursor/mcp.json を編集します。
{
"mcpServers": {
"algorand-mcp": {
"command": "npx",
"args": ["@goplausible/algorand-mcp"]
}
}
}
Windsurf
Settings > MCP から追加するか、~/.codeium/windsurf/mcp_config.json を編集します。
{
"mcpServers": {
"algorand-mcp": {
"command": "npx",
"args": ["@goplausible/algorand-mcp"]
}
}
}
VS Code / GitHub Copilot
ワークスペースのルートにある .vscode/mcp.json を編集するか、Settings > MCP Servers を開きます。
{
"servers": {
"algorand-mcp": {
"type": "stdio",
"command": "npx",
"args": ["@goplausible/algorand-mcp"]
}
}
}
Cline
Cline サイドバーの MCP Servers パネルから追加するか、~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json(macOS)を編集します。
{
"mcpServers": {
"algorand-mcp": {
"command": "npx",
"args": ["@goplausible/algorand-mcp"],
"disabled": false
}
}
}
OpenAI Codex CLI
プロジェクトのルートに .codex/mcp.json を作成するか、グローバルに適用する場合は ~/.codex/mcp.json を作成します。
{
"mcpServers": {
"algorand-mcp": {
"command": "npx",
"args": ["@goplausible/algorand-mcp"]
}
}
}
Open Code
~/.config/opencode/config.json を編集します。
{
"mcp": {
"algorand-mcp": {
"type": "stdio",
"command": "npx",
"args": ["@goplausible/algorand-mcp"]
}
}
}
MCP 互換のクライアント
このサーバーは標準の MCP stdio プロトコルを使用します。上記に記載されていないクライアントでは、次のように設定してください。
- コマンド:
npx(またはグローバルにインストール済みの場合はalgorand-mcp、あるいはnode /path/to/dist/index.js) - 引数:
["@goplausible/algorand-mcp"](npx の場合) - トランスポート:
stdio
ネットワークの選択
すべてのツールは、省略可能な network パラメーターを受け付けます。指定できる値は "mainnet"(デフォルト)、"testnet"、または "localnet" です。mainnet と testnet の Algod および Indexer の URL は、AlgoNode 経由で組み込まれています。
ツール呼び出しの例:
{ "name": "api_algod_get_account_info", "arguments": { "address": "ABC...", "network": "testnet" } }
network が指定されていない場合、ツールはデフォルトで mainnet を使用します。
ページネーション
API のレスポンスは自動的にページネーションされます。すべてのツールは、省略可能な itemsPerPage パラメーター(デフォルト:10)を受け付けます。次のページを取得するには、前回のレスポンスに含まれる pageToken を渡します。
エージェントウォレット
アーキテクチャ
エージェントウォレットは、MCP サーバーがエージェントに代わって管理するローカルの SQLite データベースです。サーバーはニーモニックを保持し、エージェントのためにトランザクションに署名します。ツールのレスポンスにニーモニックが含まれることはありません。
| レイヤー | 保存するデータ | 場所 |
|---|---|---|
SQLite(wallet.db) | アカウント行(address、public_key、nickname、mnemonic、created_at)とアクティブアカウントのインデックス | ~/.algorand-mcp/wallet.db(モード 0600) |
脅威モデル。 wallet.db ファイルが秘密情報です。このファイルへの読み取りアクセス権を持つ人は、ウォレットに保存されたすべてのニーモニックを復元できます。対策として、ファイルシステムのアクセス権を設定する(0600、所有者のみ)、共有ボリュームや全ユーザーが読み取り可能なボリュームにデータディレクトリを置かない、ほかの秘密情報ストアと同様にデータディレクトリを扱う(スナップショットを慎重に作成し、バックアップへのアクセスを制限し、保存データを保護するためにホストディスクを暗号化する)ことが挙げられます。Docker でデプロイする場合は、~/.algorand-mcp を名前付きボリュームとしてマウントし、ほかの秘密情報と同様にアクセスを制限してください。
仕組み
Agent (LLM) MCP Server Storage
────────── ────────── ───────
│ │ │
│ wallet_add_account │ │
│ { nickname: "main" } │ │
│ ──────────────────────────► │ generate keypair │
│ │ INSERT (address, public_key, │
│ │ nickname, mnemonic) ──►│ wallet.db
│ ◄─ { address, publicKey, │ │
│ nickname, index } │ │
│ │ │
│ wallet_sign_transaction │ │
│ { transaction: {...} } │ │
│ ──────────────────────────► │ SELECT mnemonic FROM accounts ◄─│
│ │ WHERE address=<active> │
│ │ sign in memory │
│ ◄─ { txID, blob } │ (key discarded after sign) │
│ │ │
- アカウントの作成(
wallet_add_account)— キーペアを生成し、ニーモニックを含む行をaccountsに挿入します。アドレス、公開鍵、ニックネーム、インデックスを返します。ニーモニックが返されることはありません。 - アクティブアカウント — 一度にアクティブにできるアカウントは1つです。
wallet_switch_accountで、ニックネームまたはインデックスを指定して切り替えます。すべての署名ツールとクエリツールは、アクティブアカウントを対象に動作します。 - トランザクション署名(
wallet_sign_transaction)— DB からニーモニックを読み込み、メモリ上で署名して、署名済みの blob のみを返します。 - データ署名(
wallet_sign_data)—@noble/curvesライブラリを使い、Ed25519 によって任意の 16 進データに署名します(Algorand SDK のプレフィックスは使用しません)。オフチェーン認証に便利です。 - アセットのオプトイン(
wallet_optin_asset)— アクティブアカウントのオプトイン・トランザクションを作成、署名、送信します。これらの処理は1回の操作で行われます。
下位互換性(OS キーチェーンからのサイレント移行)
この MCP の旧バージョンでは、ニーモニックを OS キーチェーン(@napi-rs/keyring)に保存していました。アップグレード後の初回起動時に、サーバーは一度だけサイレント移行を実行します。
mnemonic列がNULLまたは空のaccountsの各行について、アドレスをキーとして、サービス名algorand-mcpの OS キーチェーンからニーモニックの読み取りを試みます。- 見つかった場合は、ニーモニックを DB の列にコピーします。
- 元のキーチェーンエントリは冗長なバックアップとしてそのまま残し、削除しません。
この処理の完了後は、DB が唯一の信頼できる情報源になります。キーチェーンを参照するのは、アドレスのニーモニックが DB にまだ NULL として残っている場合のフォールバックに限られます(例:起動時にキーチェーンを利用できなかったものの、後から利用可能になった場合)。アップグレード後に作成される新しいアカウントは直接 DB に書き込まれ、キーチェーンには一切触れません。
孤立行の処理(削除せずアーカイブ)。 accounts の行が存在するものの、そのニーモニックがキーチェーンにも DB にも存在しない場合(例:キーチェーンエントリを移行せずにユーザーが wallet.db を新しいマシンにコピーした場合、不完全なバックアップから復元した場合、またはキーチェーンが存在しない Docker にインストールした場合)、その行は署名に使用できません。行を削除する代わりに、サーバーはその行をアーカイブ済みとしてマークします(UPDATE accounts SET archived = 1 WHERE mnemonic IS NULL OR mnemonic = '')。アーカイブされた行は次のようになります。
- デフォルトの
wallet_list_accountsレスポンスでは非表示になります - アクティブアカウントにはなりません(アクティブアカウントのインデックスは、残っているアクティブな一覧の末尾に調整されます。アクティブなアカウントが残っていない場合は
0にリセットされます) - 元のニックネームを保持します(部分ユニークインデックス
idx_active_nicknameはアクティブな行の間でのみニックネームの一意性を保証するため、新しいキーペア用にwallet_add_accountで同じニックネームを再利用できます) - 調査または将来の復旧のために、
wallet_list_accounts { archived: true }で表示されます
アーカイブ処理は MCP ツール層ではサイレントに行われます。診断情報は、キーチェーンの読み取りに失敗した場合に出力される stderr の1行ログ([algorand-mcp] keychain read failed for <addr>…: <msg>)のみです。そのため、誤ってアーカイブされたと思われる場合、ユーザーはキーチェーンが「エントリなし」「アクセス拒否」「DBus なし」などのどのエラーを返したかを確認できます。
これらの処理にユーザーの操作は必要ありません。プロンプトも環境変数も移行ツールもありません。
スキーマバージョン
DB スキーマは、起動時に実行される冪等なマイグレーションによって追加的に更新されます。
| バージョン | 変更 |
|---|---|
| v1 | 初期状態 — accounts の列:id、address、public_key、nickname(UNIQUE)、created_at |
| v2 | mnemonic TEXT 列を追加 |
| v3 | archived INTEGER NOT NULL DEFAULT 0 列を追加。nickname に対する列レベルの UNIQUE 制約を削除し、アーカイブ済みの行が元のニックネームを保持したまま再利用を妨げないよう、CREATE UNIQUE INDEX idx_active_nickname ON accounts(nickname) WHERE archived = 0 に置き換え |
v2 から v3 への移行では、accounts テーブルを再作成し、archived = 0 を設定してデータをコピーします(SQLite では ALTER を使って列レベルの UNIQUE 制約を削除できません)。既存のウォレットは変更なく引き続き動作します。
x402 HTTP Payments
x402 は HTTP ネイティブのマイクロペイメントプロトコルです。長らく予約されていたステータス 402 Payment Required を実際のハンドシェイクとして使用します。クライアントが支払いをせずに有料リソースをリクエストすると、サーバーは受け入れ可能な内容(ネットワーク、アセット、金額、受取人のアドレス)を列挙した JSON ボディとともに 402 を返します。クライアントは支払いを作成して HTTP ヘッダーに添付し、同じリクエストを再試行すると、サーバーはリソースとともに 200 を返します。API キーも Stripe ウェブフックも管理するアカウントも不要です。支払いはリクエスト自体の一部です。
この MCP は Algorand 版の x402 を実装しており、Algorand 上で USDC(またはネイティブ ALGO)を送金して支払います。手動で行う7段階のフロー(プローブ → 解析 → オプトイン確認 → 手数料支払者の構築 → 支払いの構築 → グループ化 → 署名 → エンコード → ヘッダー → 再試行)を1回のツール呼び出しにまとめる2つのツールを提供します。
プロトコルの仕様(Algorand バリアント)
Agent (LLM) algorand-mcp Endpoint Facilitator
────────── ──────────── ──────── ───────────
│ │ │ │
│ make_http_request_ │ │ │
│ with_x402 { url, ... } │ │ │
│ ────────────────────────► │ HTTP request │ │
│ │ ─────────────────────────► │ │
│ │ 402 PaymentRequired │ │
│ │ ◄───────────────────────── │ │
│ │ pick accepts[i] for │ │
│ │ Algorand network │ │
│ │ build fee-payer + payment │ │
│ │ (atomic group of 2) │ │
│ │ sign payment leg │ │
│ │ via agent wallet DB │ │
│ │ encode unsigned fee-payer │ │
│ │ base64 PAYMENT-SIGNATURE │ │
│ │ ─────────────────────────► │ │
│ │ HTTP request + │ forward + settle │
│ │ PAYMENT-SIGNATURE │ ───────────────────────► │
│ │ │ sign fee-payer, │
│ │ │ submit atomic group │
│ │ 200 + resource │ ◄─────────────────────── │
│ │ ◄───────────────────────── │ │
│ ◄─ { result, paid: {...}}│ │ │
│ │ │ │
Coinbase/EVM 版との違い
- ヘッダー名は
PAYMENT-SIGNATUREであり、X-PAYMENTではありません。ヘッダーの本文は、x402Version、scheme、network(メインネットの場合はalgorand:wGHE2Pw…のような CAIP-2 識別子)、payload、およびクライアントが選択したaccepts[]エントリーの原文コピーを含む、Base64 エンコードされた JSON です。 - 支払いは 2 件のトランザクションから成るアトミックなグループです。 インデックス 0 は手数料支払いトランザクション(送信者 = ファシリテーター、金額 = 0、グループ全体の手数料 = 2000 µAlgo)です。インデックス 1 は実際の USDC ASA 送金(送信者 = ウォレット、手数料 = 0)です。ウォレットが署名するのはインデックス 1 のみです。インデックス 0 は決済時にファシリテーターがサーバー側で署名します。ユーザーのウォレットが支払うのは USDC のみで、ネットワーク手数料も支払いません。
- ネットワーク文字列は Algorand CAIP-2 です。 この MCP はメインネット(
wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=)とテストネット(SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=)を認識します。Base、Solana、またはその他の Algorand 以外のネットワークのみを受け付けるエンドポイントには対応できず、ツールは明確なエラーを返します。
Coinbase Wallet MCP との互換性(x402 サーフェス)
x402 ツールの make_http_request_with_x402 と x402_discover_payment_requirements は、Coinbase Wallet MCP の x402 ツールと意図的に名前と形式を互換にしています。入力パラメーター(baseURL、path、method、queryParams、body、headers、correlationId、maxAmountPerRequest、paymentRequirements、preferredNetwork、extensions)は同じです。出力エンベロープ(result、_atomicUnitsNote)も同じです。
実際には、次のことを意味します。
- Algorand x402 にそのまま置き換えて使用できます。 Coinbase Wallet MCP の x402 ツール向けに作成されたエージェントや MCP アプリは、プロンプトを変更せずにこのサーバーで動作します。Base/Solana の代わりに Algorand x402 エンドポイントへアクセスするだけです。
- エージェントの動作も同じです。 Coinbase エコシステムのツール呼び出しトレースでトレーニングされたモデルは、初回の呼び出しからこれらのツールを正しく使用できます。新たに学習し直す必要はありません。
- 互換性の対象は x402 サーフェスに限られます。 この MCP のウォレット、アカウント、トランザクション構築、DEX ツールは Algorand 固有であり、Coinbase のウォレット API を再現するものではありません。そのまま置き換えて使用できるのは
make_http_request_with_x402とx402_discover_payment_requirementsのみです。
必然的に異なるパラメーターが 1 つあります。preferredNetwork が受け付けるのは mainnet | testnet | localnet(Algorand ネットワーク)のみです。ウォレットが署名できるのは Algorand のトランザクションだけだからです。Coinbase の列挙値は base | base-sepolia | solana | solana-devnet です。これらの値を渡したエージェントには、Algorand で支払い可能な accepts エントリーがないことを示す明確なエラーが返されます。
例 — 有料の天気 API
# Step 1 (optional): peek at the cost
x402_discover_payment_requirements {
"baseURL": "https://example.x402.goplausible.xyz",
"path": "/weather",
"method": "GET"
}
# returns: { result: { accepts: [{ scheme: "exact", network: "algorand:SGO1...",
# maxAmountRequired: "100", asset: "10458941",
# payTo: "AAAA...", extra: { feePayer: "BBBB..." } }] } }
# Step 2: pay and fetch in one call
make_http_request_with_x402 {
"baseURL": "https://example.x402.goplausible.xyz",
"path": "/weather",
"method": "GET",
"maxAmountPerRequest": 10000,
"preferredNetwork": "testnet"
}
# returns: { result: <weather payload>, paid: { network: "testnet",
# asset: "10458941",
# amount: "100", payTo: "AAAA..." },
# paymentResponse: <decoded X-PAYMENT-RESPONSE> }
アクティブなウォレットアカウントは、対象の ASA(例:USDC)へのオプトインを済ませ、maxAmountRequired をまかなえる残高を保有している必要があります。オプトインしていない場合、決済時に支払いが失敗します。先に wallet_optin_asset でオプトインしてください。
前提条件
- アクティブなウォレットアカウントが存在すること(
wallet_get_infoで確認) - そのアカウントが支払い対象アセットにオプトインしていること(USDC メインネット ASA
31566704、テストネット ASA10458941) - アカウントが
maxAmountRequiredをまかなえるだけの支払い対象アセットを保有していること - エンドポイントの
accepts[]に、この MCP が認識する Algorand ネットワークを指定したエントリーが少なくとも 1 つ含まれていること
任意の環境変数
環境変数が必要なのは、特殊なセットアップの場合のみです。MCP 設定の env ブロックを介して渡してください。
| 変数 | 説明 | デフォルト | 必要となる場合 |
|---|---|---|---|
ALGORAND_TOKEN | プライベートまたは認証付きノード用の API トークン | "" | プライベートな Algod/Indexer ノードへの接続 |
ALGORAND_LOCALNET_URL | Localnet のベース URL | "" | network: "localnet" を使用する場合(例:http://localhost:4001) |
ALPHA_API_KEY | Alpha Arcade API キー | "" | 報酬市場データへのアクセス |
例:Localnet(AlgoKit)
{
"mcpServers": {
"algorand-mcp": {
"command": "node",
"args": ["/path/to/algorand-mcp/dist/index.js"],
"env": {
"ALGORAND_LOCALNET_URL": "http://localhost:4001",
"ALGORAND_TOKEN": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
}
}
}
その後、ツール呼び出しで "network": "localnet" を使用してください。
利用可能なツール
ウォレットツール(10 個)
アーキテクチャの詳細については、セキュアウォレットを参照してください。
| ツール | 説明 |
|---|---|
wallet_add_account | ニックネームを付けて新しい Algorand アカウントを作成します(アドレスと公開鍵のみを返します) |
wallet_remove_account | ニックネームまたはインデックスを指定して、ウォレットからアカウントを削除します |
wallet_list_accounts | ニックネームとアドレスを含むアクティブなアカウントを一覧表示します。代わりにアーカイブ済みアカウントを一覧表示するには、{ archived: true } を渡します(起動時に OS キーチェーンからニーモニックを復元できなかったアカウントです。フォレンジック用に DB に保持されますが、署名には使用できません)。 |
wallet_switch_account | ニックネームまたはインデックスを指定して、アクティブなアカウントを切り替えます |
wallet_get_info | この MCP サーバーが所有するアクティブなアカウントの情報(DB に保存)を取得します:アドレス、公開鍵、残高、オプトイン数。任意のオンチェーンアカウントについては、api_algod_get_account_info を使用してください。 |
wallet_get_assets | この MCP サーバーが所有するアクティブなアカウントのすべての ASA 保有状況を取得します。任意のオンチェーンアカウントについては、api_algod_get_account_info または api_algod_get_account_asset_info を使用してください。 |
wallet_sign_transaction | アクティブなアカウントで単一のトランザクションに署名します |
wallet_sign_transaction_group | アクティブなアカウントでトランザクションのグループに署名します(グループ ID を自動割り当て) |
wallet_sign_data | 任意の 16 進データに raw Ed25519 で署名します(noble、SDK プレフィックスなし) |
wallet_optin_asset | アクティブなアカウントをアセットにオプトインさせます(作成、署名、送信を実行) |
x402 HTTP 決済ツール(5 個)
プロトコルの詳細については、x402 HTTP 決済を参照してください。
| ツール | 説明 |
|---|---|
x402_discover_payment_requirements | x402 で保護されたエンドポイントを確認し、支払いを行わずに accepts[] 配列(コスト、アセット、ネットワーク、payTo)を返します。読み取り専用です。 |
make_http_request_with_x402 | アクティブなウォレットから USDC/ALGO を自動決済して、x402 で保護されたエンドポイントを呼び出します。paymentRequirements が指定されていない場合は内部で検出し、手数料支払者と決済をまとめたアトミックなグループを構築して署名し、PAYMENT-SIGNATURE ヘッダーを付けて再試行します。 |
bazaar_list | 設定済みのファシリテーター(デフォルトは facilitator.goplausible.xyz)がホストする Bazaar 検索ディレクトリに登録された有料 API リソースを閲覧します。デフォルトでは簡潔な概要を返し、full: true を指定すると元のレコードをそのまま返します。フィルター:network、method、merchantId、limit、offset。 |
bazaar_search | Bazaar リソース(URL と説明)をキーワード検索します。サーバー側:query、network。クライアント側の後処理フィルター:scheme、maxUsdPrice、asset、payTo、extensions、includeTestnets。 |
bazaar_get_resource_details | 正確な resource URL を指定して、単一の Bazaar リソースを取得します。元のレコード(accepts[]、discoveryInfo、人気度カウンター)をそのまま返します。 |
アカウント管理(8 個)
| ツール | 説明 |
|---|---|
create_account | 新しい Algorand アカウントを作成します(アドレスとニーモニックを平文で返します) |
rekey_account | アカウントを新しいアドレスにリキーします |
mnemonic_to_mdk | ニーモニックをマスター導出キーに変換します |
mdk_to_mnemonic | マスター導出キーをニーモニックに変換します |
secret_key_to_mnemonic | 秘密鍵をニーモニックに変換します |
mnemonic_to_secret_key | ニーモニックを秘密鍵に変換します |
seed_from_mnemonic | ニーモニックからシードを生成します |
mnemonic_from_seed | シードからニーモニックを生成します |
ユーティリティツール(13個)
| ツール | 説明 |
|---|---|
ping | サーバーの接続確認と情報取得 |
validate_address | Algorand アドレスが有効か確認 |
encode_address | 公開鍵を Algorand アドレスにエンコード |
decode_address | Algorand アドレスを公開鍵にデコード |
get_application_address | 指定されたアプリケーション ID のアドレスを取得 |
bytes_to_bigint | バイト列を BigInt に変換 |
bigint_to_bytes | BigInt をバイト列に変換 |
encode_uint64 | uint64 をバイト列にエンコード |
decode_uint64 | バイト列を uint64 にデコード |
verify_bytes | バイト列に対する署名を検証 |
sign_bytes | 秘密鍵でバイト列に署名 |
encode_obj | オブジェクトを msgpack にエンコード |
decode_obj | msgpack をオブジェクトにデコード |
トランザクションツール(18個)
| ツール | 説明 |
|---|---|
make_payment_txn | 支払いトランザクションを作成 |
make_keyreg_txn | キー登録トランザクションを作成 |
make_asset_create_txn | アセット作成トランザクションを作成 |
make_asset_config_txn | アセット設定トランザクションを作成 |
make_asset_destroy_txn | アセット破棄トランザクションを作成 |
make_asset_freeze_txn | アセット凍結トランザクションを作成 |
make_asset_transfer_txn | アセット転送トランザクションを作成 |
make_app_create_txn | アプリケーション作成トランザクションを作成 |
make_app_update_txn | アプリケーション更新トランザクションを作成 |
make_app_delete_txn | アプリケーション削除トランザクションを作成 |
make_app_optin_txn | アプリケーションのオプトイン トランザクションを作成 |
make_app_closeout_txn | アプリケーションのクローズアウト トランザクションを作成 |
make_app_clear_txn | アプリケーションの状態クリア トランザクションを作成 |
make_app_call_txn | アプリケーション呼び出しトランザクションを作成 |
assign_group_id | アトミックトランザクションにグループ ID を割り当て |
sign_transaction | 秘密鍵でトランザクションに署名 |
encode_unsigned_transaction | 未署名のトランザクションを base64 の msgpack バイト列にエンコード |
decode_signed_transaction | 署名済みトランザクションの BLOB を署名の詳細とともに JSON にデコード |
Algod ツール(5個)
| ツール | 説明 |
|---|---|
compile_teal | TEAL ソースコードをコンパイル |
disassemble_teal | TEAL バイトコードをソースに逆アセンブル |
send_raw_transaction | 署名済みトランザクションをネットワークに送信 |
simulate_raw_transactions | すでにエンコードされたトランザクション(base64 バイト列)をシミュレートします。成功/失敗とログ/コストのみを返し、トレースや追加予算はありません。 |
simulate_transactions | 完全な SimulateRequest 設定(トレース、追加のオペコード予算、名前のないリソースの処理、未署名のトランザクション)を使用して、デコード済みのトランザクショングループをシミュレートします。 |
Algod API ツール(13 個)
Algod ノードに対する、現在の状態の読み取りです。アカウント/アプリケーション/アセットの検索には、デフォルトでこちらを使用してください — ツールの種類を絞るため、対応するインデクサーのエンドポイントは意図的に無効化されています(.notes/redundant-tools-report.mdを参照)。Algod では対応できない履歴検索やフィルター検索が必要な場合に限り、以下のインデクサーファミリーを使用してください。
| ツール | 説明 |
|---|---|
api_algod_get_account_info | アカウントの残高、アセット、認証アドレスを取得します |
api_algod_get_account_application_info | アカウント固有のアプリケーション情報を取得します |
api_algod_get_account_asset_info | アカウント固有のアセット情報を取得します |
api_algod_get_application_by_id | アプリケーション情報を取得します |
api_algod_get_application_box | 名前を指定してアプリケーションボックスを取得します |
api_algod_get_application_boxes | すべてのアプリケーションボックスを取得します |
api_algod_get_asset_by_id | アセット情報を取得します |
api_algod_get_pending_transaction | 保留中のトランザクション情報を取得します |
api_algod_get_pending_transactions_by_address | アドレスに対する保留中のトランザクションを取得します |
api_algod_get_pending_transactions | すべての保留中のトランザクションを取得します |
api_algod_get_transaction_params | 推奨されるトランザクションパラメーターを取得します |
api_algod_get_node_status | 現在のノード状態を取得します |
api_algod_get_node_status_after_block | 特定のラウンド後のノード状態を取得します |
Indexer API ツール(10 個)
Algorand Indexer インスタンスに対する、履歴検索/フィルター検索です。期間を指定したスキャン、ページネーション付き検索、ログの取得、作成者/保有者の検索など、Algod の現在の状態を返すエンドポイントでは対応できない処理に使用します。
Algod と同等の機能が重複する 7 つのインデクサーエンドポイント(ID によるアカウント取得、アカウントのアセット、アカウントのアプリケーションローカル状態、ID によるアプリケーション取得、アプリケーションボックス、アプリケーションボックス一覧、ID によるアセット取得)は、意図的に無効化されています。これらは src/tools/apiManager/indexer/ 内でコメントアウトされており、必要に応じて一か所で再有効化できます。
| ツール | 説明 |
|---|---|
api_indexer_lookup_account_created_applications | アカウントが作成したアプリケーションを取得します |
api_indexer_search_for_accounts | フィルター(アセット/アプリケーションの保有状況、残高の範囲)を指定してアカウントを検索します |
api_indexer_lookup_application_logs | ラウンド範囲を指定してアプリケーションのログメッセージを取得します |
api_indexer_search_for_applications | 作成者でアプリケーションを検索します |
api_indexer_lookup_asset_balances | アセットを保有するすべてのアカウントと、その残高を取得します |
api_indexer_lookup_asset_transactions | アセットに関連するトランザクションを取得します(期間/ラウンド/アドレスの役割でフィルター可能) |
api_indexer_search_for_assets | 作成者、名前、または単位でアセットを検索します |
api_indexer_lookup_transaction_by_id | ID を指定して確認済みのトランザクションを取得します |
api_indexer_lookup_account_transactions | アカウントのトランザクション履歴を取得します(期間/ラウンド/タイプ/アセットでフィルター可能) |
api_indexer_search_for_transactions | フィルターを指定してチェーン全体のトランザクションを検索します |
NFDomains ツール(6 個)
| ツール | 説明 |
|---|---|
api_nfd_get_nfd | 名前またはアプリケーション ID で NFD を取得します |
api_nfd_get_nfds_for_addresses | 特定のアドレスに対応する NFD を取得します |
api_nfd_get_nfd_activity | NFD のアクティビティ/変更内容を取得します |
api_nfd_get_nfd_analytics | NFD の分析データを取得します |
api_nfd_browse_nfds | フィルターを指定して NFD を閲覧します |
api_nfd_search_nfds | NFD を検索します |
Tinyman AMM ツール(9 件)
| ツール | 説明 |
|---|---|
api_tinyman_get_pool | アセットペアからプール情報を取得します |
api_tinyman_get_pool_analytics | プールの分析情報を取得します |
api_tinyman_get_pool_creation_quote | プール作成の見積もりを取得します |
api_tinyman_get_liquidity_quote | 流動性追加の見積もりを取得します |
api_tinyman_get_remove_liquidity_quote | 流動性削除の見積もりを取得します |
api_tinyman_get_swap_quote | アセット交換の見積もりを取得します |
api_tinyman_get_asset_optin_quote | アセットのオプトインの見積もりを取得します |
api_tinyman_get_validator_optin_quote | バリデーターのオプトインの見積もりを取得します |
api_tinyman_get_validator_optout_quote | バリデーターのオプトアウトの見積もりを取得します |
Haystack ルーターツール(3 件)
| ツール | 説明 |
|---|---|
api_haystack_get_swap_quote | Tinyman V2、Pact、Folks、LST プロトコルを横断してルーティングする、最適化された交換見積もりを取得します |
api_haystack_execute_swap | 一括交換:見積もり → 署名(ウォレット経由) → 送信 → 確認 |
api_haystack_needs_optin | 交換前にアドレスのアセットオプトインが必要かどうかを確認します |
Pera Wallet ツール(3 件)
| ツール | 説明 |
|---|---|
api_pera_asset_verification_status | メインネットアセットの検証ステータス(verified、trusted、suspicious、unknown)を取得します |
api_pera_verified_asset_details | Pera からアセットの詳細情報(名前、単位、ロゴ、小数桁数、検証状況)を取得します |
api_pera_verified_asset_search | 名前、単位名、キーワードで Pera の検証済みアセットを検索します |
Pera Wallet ツールはメインネット専用です。Pera のパブリック API はテストネットまたはローカルネットに対応していません。
Alpha Arcade ツール(14 件)
USDC 建てのオンチェーン予測市場(YES/NO の結果)で取引します。価格と数量はすべてマイクロ単位(1,000,000 = $1.00 または 1 シェア)を使用します。読み取り専用ツールはウォレットなしで使用できます。取引ツールにはアクティブなウォレットアカウントが必要です。
| ツール | 説明 |
|---|---|
alpha_get_live_markets | 価格、取引量、カテゴリを含む、すべてのライブ予測市場を取得します |
alpha_get_reward_markets | 流動性報酬のある市場を取得します(ALPHA_API_KEY 環境変数が必要です) |
alpha_get_market | アプリ ID で指定した単一市場の詳細を取得します |
alpha_get_orderbook | スプレッド計算を含む、YES 視点に統一されたオーダーブック |
alpha_get_open_orders | 特定市場におけるウォレットの未約定注文 |
alpha_get_positions | すべての市場における YES/NO トークンのポジション |
alpha_create_limit_order | 指定価格で指値注文を出します(約 0.957 ALGO の担保をロックします) |
alpha_create_market_order | 自動マッチングとスリッページ許容幅を指定して成行注文を出します |
alpha_cancel_order | 未約定注文をキャンセルします(USDC/トークンと ALGO の担保が返金されます) |
alpha_amend_order | 約定していない注文をその場で編集します(価格、数量、スリッページ) |
alpha_propose_match | 既存のメイカー注文と自分のウォレットとのマッチを提案します |
alpha_split_shares | USDC を同量の YES および NO の結果トークンに分割します |
alpha_merge_shares | 同量の YES および NO トークンを USDC に戻します |
alpha_claim | 勝利トークンを換金し、決着済み市場から USDC を請求します |
任意の環境変数:報酬市場データには
ALPHA_API_KEYが必要です。ALPHA_API_BASE_URLはカスタム API エンドポイントです(デフォルト:https://platform.alphaarcade.com/api)。
ARC-26 URI ツール(1 件)
| ツール | 説明 |
|---|---|
generate_algorand_qrcode | ARC-26 仕様に準拠した Algorand URI と QR コードを生成します |
ナレッジツール(1 件)
| ツール | 説明 |
|---|---|
get_knowledge_doc | Algorand のナレッジドキュメントの Markdown コンテンツを取得します |
リソース
サーバーは、データに直接アクセスするための MCP リソースを公開します。ウォレットリソースについては、上記のセキュアウォレットセクションで説明しています。
ナレッジリソース
| URI | 説明 |
|---|---|
algorand://knowledge/taxonomy | Algorand ナレッジ分類体系の全体 |
algorand://knowledge/taxonomy/arcs | Algorand Request for Comments |
algorand://knowledge/taxonomy/sdks | SDK ドキュメント |
algorand://knowledge/taxonomy/algokit | AlgoKit ドキュメント |
algorand://knowledge/taxonomy/algokit-utils | AlgoKit Utils ドキュメント |
algorand://knowledge/taxonomy/tealscript | TEALScript ドキュメント |
algorand://knowledge/taxonomy/puya | Puya ドキュメント |
algorand://knowledge/taxonomy/liquid-auth | Liquid Auth ドキュメント |
algorand://knowledge/taxonomy/python | Python SDK ドキュメント |
algorand://knowledge/taxonomy/developers | 開発者向けドキュメント |
algorand://knowledge/taxonomy/clis | CLI ツールのドキュメント |
algorand://knowledge/taxonomy/nodes | ノード管理のドキュメント |
algorand://knowledge/taxonomy/details | 技術詳細のドキュメント |
プロジェクト構成
algorand-mcp/
├── src/ # TypeScript source
│ ├── index.ts # Server entry point
│ ├── networkConfig.ts # Hardcoded network URLs and client factories
│ ├── algorand-client.ts # Re-exports from networkConfig
│ ├── env.ts # Legacy env shim (unused)
│ ├── types.ts # Shared types (Zod schemas)
│ ├── resources/ # MCP Resources
│ │ ├── knowledge/ # Documentation taxonomy
│ │ └── wallet/ # Wallet resources
│ ├── tools/ # MCP Tools
│ │ ├── commonParams.ts # Network + pagination schema fragments
│ │ ├── walletManager.ts # Agent wallet (SQLite-backed)
│ │ ├── accountManager.ts # Account operations
│ │ ├── utilityManager.ts # Utility functions
│ │ ├── algodManager.ts # TEAL compile, simulate, submit
│ │ ├── arc26Manager.ts # ARC-26 URI generation
│ │ ├── knowledgeManager.ts # Knowledge document access
│ │ ├── transactionManager/ # Transaction building
│ │ │ ├── accountTransactions.ts
│ │ │ ├── assetTransactions.ts
│ │ │ ├── appTransactions/
│ │ │ └── generalTransaction.ts
│ │ └── apiManager/ # API integrations
│ │ ├── algod/ # Algod API
│ │ ├── indexer/ # Indexer API
│ │ ├── nfd/ # NFDomains
│ │ ├── tinyman/ # Tinyman AMM
│ │ ├── hayrouter/ # Haystack Router DEX aggregator
│ │ ├── pera/ # Pera Wallet verified assets
│ │ └── alpha/ # Alpha Arcade prediction markets
│ └── utils/
│ └── responseProcessor.ts # Pagination and formatting
├── tests/ # Test suite
│ ├── helpers/ # Shared test utilities
│ │ ├── mockFactories.ts # Mock algod/indexer/keychain factories
│ │ ├── testConfig.ts # Category enable/disable logic
│ │ ├── e2eSetup.ts # E2E account provisioning + invokeTool()
│ │ └── testConstants.ts # Well-known testnet addresses and asset IDs
│ ├── unit/ # 11 unit test suites (mocked, fast)
│ ├── e2e/ # 11 E2E test suites (live testnet)
│ │ ├── globalSetup.ts # Account provisioning + fund-check
│ │ └── globalTeardown.ts # Cleanup
│ └── jest.config.e2e.js # E2E-specific Jest config
├── dist/ # Compiled output
├── jest.config.js # Unit test Jest config
├── tsconfig.json # Production TypeScript config
├── tsconfig.test.json # Test TypeScript config
└── package.json
レスポンス形式
すべてのツールのレスポンスは MCP コンテンツ形式に準拠しています。データセットが itemsPerPage(デフォルトは 10)を超える場合、API レスポンスには自動ページネーションが適用されます。
{
"data": { ... },
"metadata": {
"totalItems": 100,
"itemsPerPage": 10,
"currentPage": 1,
"totalPages": 10,
"hasNextPage": true,
"pageToken": "eyJ..."
}
}
前のレスポンスの pageToken を渡すと、次のページを取得できます。任意のツール呼び出しで itemsPerPage を設定して、ページサイズを指定できます。
開発
# Install dependencies
npm install
# Type-check
npm run typecheck
# Build
npm run build
# Clean build output
npm run clean
テスト
このプロジェクトには、包括的な二層構成のテストスイートがあります。高速なユニットテスト(モックを使用し、ネットワーク接続なし)と、実際のE2E テスト(ライブテストネットを使用)です。どちらも Jest 29 と ts-jest を使用し、ESM をサポートしています。
クイックスタート
npm test # Unit tests (fast, no network)
npm run test:e2e # E2E tests (testnet, generates account + fund link)
npm run test:all # Both
ユニットテスト
ユニットテストでは、ネットワーク依存関係を完全にモックして、11 のツールカテゴリすべてをテストします。並列で実行され、約 5 秒で完了します。環境変数や資金を用意したアカウントは必要ありません。
npm test
カバレッジ: 11 のスイート、75 件以上のテストで、すべてのツールカテゴリについて成功パス、エラー処理、エッジケースを網羅しています。
| スイート | テスト内容 |
|---|---|
accountManager | アカウントの作成、ニーモニックの往復変換、リキーのパラメーター検証 |
utilityManager | Ping、アドレス検証、エンコード/デコード、バイト列の署名/検証、オブジェクトのエンコード/デコード |
walletManager | 完全なライフサイクル:追加 → 一覧表示 → 切り替え → 情報取得 → データ署名 → 削除(キーチェーンと SQLite をモック) |
transactionManager | 支払い、アセット、アプリのトランザクション構築、sign_transaction、assign_group_id |
algodManager | TEAL のコンパイル/逆アセンブル、raw の送信、シミュレーション |
apiAlgod | 正しいモックルーティングを使用した、13 個すべての algod API ツール |
apiIndexer | Fluent Builder のモックを使用した、現在有効な 10 個すべてのインデクサー API ツール |
apiNfd | モックした fetch を使用した NFD の取得/検索/閲覧 |
apiTinyman | エラー処理を含む Tinyman のプール/スワップ |
arc26Manager | ARC-26 URI の生成と QR コードの SVG 出力 |
knowledgeManager | ナレッジドキュメントの取得と、ドキュメントが見つからない場合のエラー処理 |
モックの仕組み
ユニットテストでは jest.unstable_mockModule()(ESM 互換)を使用して、インポートされたモジュールが読み込まれる前にインポートを横取りします。共有の tests/helpers/mockFactories.ts では、以下を提供します。
setupNetworkMocks()—algorand-client.tsを、ネットワーク呼び出しなしで決定的なレスポンスを返すモックの algod/indexer クライアントに置き換えます。createKeychainMock()—@napi-rs/keyringをメモリ内のMapに置き換えるため、OS のキーチェーンがなくてもウォレットのテストを実行できます。- Fluent Proxy モック — Algorand の Indexer SDK ではビルダーパターン(
.searchForAssets().limit(5).do())を使用します。モックファクトリーは ESProxyオブジェクトを使用し、チェーンされた任意のメソッドに対して自身を返し、.do()が呼び出されると値を解決します。
E2E テスト
E2E テストでは、AlgoNode のパブリックノード経由で、ツールハンドラーを Algorand テストネットに対して直接呼び出します。レート制限を回避するため、テストは順番に実行されます。
npm run test:e2e
初回実行時(ニーモニックが指定されていない場合)、テストのセットアップでは次の処理が行われます。
- 新しい Algorand アカウントを生成します
- アドレスとニーモニックを出力します
- 資金を入手するためのリンクを出力します:https://lora.algokit.io/testnet/fund
- すべてのテストを実行します(資金がない場合のテストもパスします)
資金を入金済みのアカウントで実行するには:
E2E_MNEMONIC="word1 word2 ... word25" npm run test:e2e
カバレッジ: 11 のスイート、実際のネットワークとのやり取りをカバーする 35 件以上のテストです。
| スイート | テスト内容 |
|---|---|
account | アカウントの作成、ニーモニックからキーへの往復変換チェーン |
utility | Ping、アドレスの検証、エンコード/デコード、バイト列の署名/検証、オブジェクトのエンコード/デコード |
wallet | ウォレットの全ライフサイクル:追加 → 一覧表示 → 切り替え → 情報取得 → アセット取得 → データ署名 → 削除 |
transaction | 支払いの構築 → 署名 → txID の検証、アセットのオプトインの構築、assign_group_id によるグループの構築 |
algod | TEAL のコンパイル+逆アセンブルの往復変換 |
algodApi | algod 経由でのアカウント情報、推奨パラメーター、ノードのステータス、アセット情報の取得 |
indexerApi | indexer 経由でのアカウント検索、アセット/トランザクション/アカウントの検索 |
nfd | 「algo.algo」の検索、NFD の検索、NFD の閲覧 |
tinyman | ALGO/USDC プールの取得 |
arc26 | ARC-26 URI の生成、形式+QR SVG の検証 |
knowledge | 既知のナレッジドキュメントの内容の取得 |
カテゴリの有効化
環境変数を使って、カテゴリまたは個別のツールごとに E2E テストを選択的に有効化できます。デフォルトではすべてのカテゴリが有効です。
特定のカテゴリを有効にする
E2E_WALLET=1 npm run test:e2e # Only wallet tests
E2E_ALGOD=1 E2E_UTILITY=1 npm run test:e2e # Algod + utility tests
使用可能なカテゴリフラグ
| 環境変数 | カテゴリ |
|---|---|
E2E_ALL=1 | すべてのカテゴリ(明示的に指定) |
E2E_WALLET=1 | ウォレットツール |
E2E_ACCOUNT=1 | アカウントツール |
E2E_UTILITY=1 | ユーティリティツール |
E2E_TRANSACTION=1 | トランザクションツール |
E2E_ALGOD=1 | Algod ツール |
E2E_ALGOD_API=1 | Algod API ツール |
E2E_INDEXER_API=1 | Indexer API ツール |
E2E_NFD=1 | NFDomains ツール |
E2E_TINYMAN=1 | Tinyman ツール |
E2E_ARC26=1 | ARC-26 ツール |
E2E_KNOWLEDGE=1 | ナレッジツール |
重要: 個別のフラグ(例:E2E_WALLET=1)を設定すると、E2E_ALL=1 も設定されていない限り、ほかのすべてのカテゴリが無効になります。
特定のツールを有効にする
E2E_TOOLS=ping,validate_address npm run test:e2e
E2E_TOOLS 変数には、ツール名をカンマ区切りで指定できます。指定したツールに対応するテストのみが実行されます。
テストファイルの構成
tests/
├── helpers/
│ ├── mockFactories.ts # Mock algod/indexer/keychain factories
│ ├── testConfig.ts # Category enable/disable logic
│ ├── e2eSetup.ts # E2E account provisioning + invokeTool()
│ └── testConstants.ts # Well-known testnet addresses and asset IDs
├── unit/ # 11 unit test files (*.test.ts)
│ ├── accountManager.test.ts
│ ├── utilityManager.test.ts
│ ├── walletManager.test.ts
│ ├── transactionManager.test.ts
│ ├── algodManager.test.ts
│ ├── apiAlgod.test.ts
│ ├── apiIndexer.test.ts
│ ├── apiNfd.test.ts
│ ├── apiTinyman.test.ts
│ ├── arc26Manager.test.ts
│ └── knowledgeManager.test.ts
├── e2e/ # 11 E2E test files (*.e2e.test.ts)
│ ├── globalSetup.ts # Account provisioning + fund-check
│ ├── globalTeardown.ts # Cleanup
│ ├── account.e2e.test.ts
│ ├── utility.e2e.test.ts
│ ├── wallet.e2e.test.ts
│ ├── transaction.e2e.test.ts
│ ├── algod.e2e.test.ts
│ ├── algodApi.e2e.test.ts
│ ├── indexerApi.e2e.test.ts
│ ├── nfd.e2e.test.ts
│ ├── tinyman.e2e.test.ts
│ ├── arc26.e2e.test.ts
│ └── knowledge.e2e.test.ts
└── jest.config.e2e.js # E2E-specific Jest config
Jest の設定
| 設定 | 目的 | 主な設定 |
|---|---|---|
jest.config.js(ルート) | ユニットテスト | testTimeout: 10s、並列ワーカー、testMatch: tests/unit/** |
tests/jest.config.e2e.js | E2E テスト | testTimeout: 60s、maxWorkers: 1(逐次実行)、globalSetup/globalTeardown |
tsconfig.test.json | テスト用 TypeScript | rootDir: "."、src/ と tests/ の両方を含む |
新しいテストの作成
ユニットテストのテンプレート:
import { jest } from '@jest/globals';
import { setupNetworkMocks } from '../helpers/mockFactories.js';
jest.unstable_mockModule('../../src/algorand-client.js', () => setupNetworkMocks());
const { YourManager } = await import('../../src/tools/yourManager.js');
describe('YourManager', () => {
it('does something', async () => {
const result = await YourManager.handleTool('tool_name', { arg: 'value' });
const data = JSON.parse(result.content[0].text);
expect(data.field).toBeDefined();
});
});
E2E テストのテンプレート:
import { describeIf, testConfig } from '../helpers/testConfig.js';
import { invokeTool, parseToolResponse } from '../helpers/e2eSetup.js';
describeIf(testConfig.isCategoryEnabled('your-category'))('Your Tools (E2E)', () => {
it('does something on testnet', async () => {
const data = parseToolResponse(
await invokeTool('tool_name', { arg: 'value', network: 'testnet' }),
);
expect(data.field).toBeDefined();
});
});
依存関係
- algosdk v3 — Algorand JavaScript SDK
- @modelcontextprotocol/sdk — MCP TypeScript SDK
- @napi-rs/keyring — OS のネイティブキーチェーンへのアクセス(macOS Keychain、Linux libsecret、Windows Credential Manager)。DB 移行前のインストールで作成されたアカウントとの後方互換性を保つため、読み取り時のフォールバックとして使用します。新しいニーモニックは
wallet.dbのみに書き込まれます。 - sql.js — ウォレットのメタデータを永続化する組み込み SQLite(WASM)
- @noble/curves — 生データの署名(
wallet_sign_data)に使う純粋な JS Ed25519 - @tinymanorg/tinyman-js-sdk — Tinyman AMM SDK
- @alpha-arcade/sdk — Alpha Arcade 予測市場 SDK
- zod — 実行時の型検証
- qrcode — ARC-26 用 QR コード生成
License
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。