mcpField
A
Algorand MCP Implementation

Algorand MCP Implementation

ローカル
goplausible.com金融データ4412 週間前に更新

Algorand MCP Implementation について

Algorand MCP は、AI エージェントや LLM が Algorand ブロックチェーンを操作できるようにする MCP サーバーです。GoPlausible が開発し、ウォレット、トランザクション、DeFi 連携、開発者向けドキュメントを扱い、複数の MCP クライアントに対応します。

主な機能

  1. 01ニーモニックを返さないローカル SQLite ウォレット
  2. 02トランザクションの構築、署名、送信
  3. 03アトミックトランザクショングループへの対応
  4. 04Tinyman や Haystack Router との DEX 連携
  5. 05x402 による HTTP 決済と NFD ネームサービス連携

活用シーン

  1. 01AI エージェントに Algorand のトランザクションを構築・送信させる
  2. 02Tinyman や Haystack Router を通じてトークンをスワップする
  3. 03開発中に Algorand のドキュメントやアカウント情報を照会する

MCP 対応

本プロジェクトは MCP サーバーとして、Claude Desktop、Claude Code、Cursor などの MCP クライアントに Algorand 関連ツールを公開します。クライアントは stdio で接続し、npx またはグローバルインストールで起動できます。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"algorand": {
"command": "npx",
"args": [
"-y",
"@goplausible/algorand-mcp"
]
}
}
}
起動コマンドnpx -y @goplausible/algorand-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@goplausible/algorand-mcp

ツール

119

掲載時のツール一覧 · 3 週間前に更新

パラメーター型必須説明
networkenumいいえ使用する Algorand ネットワーク(デフォルト:testnet)mainnet | testnet | localnet
itemsPerPageintegerいいえページ分割されたレスポンスの1ページあたりの項目数(デフォルト:10)

詳細

Algorand MCP サーバー

npm version npm downloads License: MIT

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-mcpnpm 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)      │
       │                              │                                  │
  1. アカウントの作成(wallet_add_account)— キーペアを生成し、ニーモニックを含む行を accounts に挿入します。アドレス、公開鍵、ニックネーム、インデックスを返します。ニーモニックが返されることはありません。
  2. アクティブアカウント — 一度にアクティブにできるアカウントは1つです。wallet_switch_account で、ニックネームまたはインデックスを指定して切り替えます。すべての署名ツールとクエリツールは、アクティブアカウントを対象に動作します。
  3. トランザクション署名(wallet_sign_transaction)— DB からニーモニックを読み込み、メモリ上で署名して、署名済みの blob のみを返します。
  4. データ署名(wallet_sign_data)— @noble/curves ライブラリを使い、Ed25519 によって任意の 16 進データに署名します(Algorand SDK のプレフィックスは使用しません)。オフチェーン認証に便利です。
  5. アセットのオプトイン(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
v2mnemonic TEXT 列を追加
v3archived 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 版との違い
  1. ヘッダー名は PAYMENT-SIGNATURE であり、X-PAYMENT ではありません。ヘッダーの本文は、x402Version、scheme、network(メインネットの場合は algorand:wGHE2Pw… のような CAIP-2 識別子)、payload、およびクライアントが選択した accepts[] エントリーの原文コピーを含む、Base64 エンコードされた JSON です。
  2. 支払いは 2 件のトランザクションから成るアトミックなグループです。 インデックス 0 は手数料支払いトランザクション(送信者 = ファシリテーター、金額 = 0、グループ全体の手数料 = 2000 µAlgo)です。インデックス 1 は実際の USDC ASA 送金(送信者 = ウォレット、手数料 = 0)です。ウォレットが署名するのはインデックス 1 のみです。インデックス 0 は決済時にファシリテーターがサーバー側で署名します。ユーザーのウォレットが支払うのは USDC のみで、ネットワーク手数料も支払いません。
  3. ネットワーク文字列は 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、テストネット ASA 10458941)
  • アカウントが maxAmountRequired をまかなえるだけの支払い対象アセットを保有していること
  • エンドポイントの accepts[] に、この MCP が認識する Algorand ネットワークを指定したエントリーが少なくとも 1 つ含まれていること

任意の環境変数

環境変数が必要なのは、特殊なセットアップの場合のみです。MCP 設定の env ブロックを介して渡してください。

変数説明デフォルト必要となる場合
ALGORAND_TOKENプライベートまたは認証付きノード用の API トークン""プライベートな Algod/Indexer ノードへの接続
ALGORAND_LOCALNET_URLLocalnet のベース URL""network: "localnet" を使用する場合(例:http://localhost:4001)
ALPHA_API_KEYAlpha 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_requirementsx402 で保護されたエンドポイントを確認し、支払いを行わずに 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_searchBazaar リソース(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_addressAlgorand アドレスが有効か確認
encode_address公開鍵を Algorand アドレスにエンコード
decode_addressAlgorand アドレスを公開鍵にデコード
get_application_address指定されたアプリケーション ID のアドレスを取得
bytes_to_bigintバイト列を BigInt に変換
bigint_to_bytesBigInt をバイト列に変換
encode_uint64uint64 をバイト列にエンコード
decode_uint64バイト列を uint64 にデコード
verify_bytesバイト列に対する署名を検証
sign_bytes秘密鍵でバイト列に署名
encode_objオブジェクトを msgpack にエンコード
decode_objmsgpack をオブジェクトにデコード
トランザクションツール(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_tealTEAL ソースコードをコンパイル
disassemble_tealTEAL バイトコードをソースに逆アセンブル
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_idID を指定して確認済みのトランザクションを取得します
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_activityNFD のアクティビティ/変更内容を取得します
api_nfd_get_nfd_analyticsNFD の分析データを取得します
api_nfd_browse_nfdsフィルターを指定して NFD を閲覧します
api_nfd_search_nfdsNFD を検索します
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_quoteTinyman 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_detailsPera からアセットの詳細情報(名前、単位、ロゴ、小数桁数、検証状況)を取得します
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_sharesUSDC を同量の 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_qrcodeARC-26 仕様に準拠した Algorand URI と QR コードを生成します
ナレッジツール(1 件)
ツール説明
get_knowledge_docAlgorand のナレッジドキュメントの Markdown コンテンツを取得します

リソース

サーバーは、データに直接アクセスするための MCP リソースを公開します。ウォレットリソースについては、上記のセキュアウォレットセクションで説明しています。

ナレッジリソース
URI説明
algorand://knowledge/taxonomyAlgorand ナレッジ分類体系の全体
algorand://knowledge/taxonomy/arcsAlgorand Request for Comments
algorand://knowledge/taxonomy/sdksSDK ドキュメント
algorand://knowledge/taxonomy/algokitAlgoKit ドキュメント
algorand://knowledge/taxonomy/algokit-utilsAlgoKit Utils ドキュメント
algorand://knowledge/taxonomy/tealscriptTEALScript ドキュメント
algorand://knowledge/taxonomy/puyaPuya ドキュメント
algorand://knowledge/taxonomy/liquid-authLiquid Auth ドキュメント
algorand://knowledge/taxonomy/pythonPython SDK ドキュメント
algorand://knowledge/taxonomy/developers開発者向けドキュメント
algorand://knowledge/taxonomy/clisCLI ツールのドキュメント
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アカウントの作成、ニーモニックの往復変換、リキーのパラメーター検証
utilityManagerPing、アドレス検証、エンコード/デコード、バイト列の署名/検証、オブジェクトのエンコード/デコード
walletManager完全なライフサイクル:追加 → 一覧表示 → 切り替え → 情報取得 → データ署名 → 削除(キーチェーンと SQLite をモック)
transactionManager支払い、アセット、アプリのトランザクション構築、sign_transaction、assign_group_id
algodManagerTEAL のコンパイル/逆アセンブル、raw の送信、シミュレーション
apiAlgod正しいモックルーティングを使用した、13 個すべての algod API ツール
apiIndexerFluent Builder のモックを使用した、現在有効な 10 個すべてのインデクサー API ツール
apiNfdモックした fetch を使用した NFD の取得/検索/閲覧
apiTinymanエラー処理を含む Tinyman のプール/スワップ
arc26ManagerARC-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())を使用します。モックファクトリーは ES Proxy オブジェクトを使用し、チェーンされた任意のメソッドに対して自身を返し、.do() が呼び出されると値を解決します。
E2E テスト

E2E テストでは、AlgoNode のパブリックノード経由で、ツールハンドラーを Algorand テストネットに対して直接呼び出します。レート制限を回避するため、テストは順番に実行されます。

npm run test:e2e

初回実行時(ニーモニックが指定されていない場合)、テストのセットアップでは次の処理が行われます。

  1. 新しい Algorand アカウントを生成します
  2. アドレスとニーモニックを出力します
  3. 資金を入手するためのリンクを出力します:https://lora.algokit.io/testnet/fund
  4. すべてのテストを実行します(資金がない場合のテストもパスします)

資金を入金済みのアカウントで実行するには:

E2E_MNEMONIC="word1 word2 ... word25" npm run test:e2e

カバレッジ: 11 のスイート、実際のネットワークとのやり取りをカバーする 35 件以上のテストです。

スイートテスト内容
accountアカウントの作成、ニーモニックからキーへの往復変換チェーン
utilityPing、アドレスの検証、エンコード/デコード、バイト列の署名/検証、オブジェクトのエンコード/デコード
walletウォレットの全ライフサイクル:追加 → 一覧表示 → 切り替え → 情報取得 → アセット取得 → データ署名 → 削除
transaction支払いの構築 → 署名 → txID の検証、アセットのオプトインの構築、assign_group_id によるグループの構築
algodTEAL のコンパイル+逆アセンブルの往復変換
algodApialgod 経由でのアカウント情報、推奨パラメーター、ノードのステータス、アセット情報の取得
indexerApiindexer 経由でのアカウント検索、アセット/トランザクション/アカウントの検索
nfd「algo.algo」の検索、NFD の検索、NFD の閲覧
tinymanALGO/USDC プールの取得
arc26ARC-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=1Algod ツール
E2E_ALGOD_API=1Algod API ツール
E2E_INDEXER_API=1Indexer API ツール
E2E_NFD=1NFDomains ツール
E2E_TINYMAN=1Tinyman ツール
E2E_ARC26=1ARC-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.jsE2E テストtestTimeout: 60s、maxWorkers: 1(逐次実行)、globalSetup/globalTeardown
tsconfig.test.jsonテスト用 TypeScriptrootDir: "."、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

コメント

MCP は初めてですか?

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

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