mcpField
A
AgentGuard

AgentGuard

ローカル
agentguard.appその他0今日更新

AgentGuard について

AgentGuardは、オンチェーンの支出ルールに従うボールトを通じて、AIエージェントがNEARの支払いを申請するMCPサーバーです。支払い制御、アドレス確認、ポリシーやテキスト検査で検出した取引の所有者レビューに対応します。

主な機能

  1. 01ボールト経由でNEARの支払いを申請
  2. 02オンチェーンの上限と承認ルールを適用
  3. 03リスク要因に基づくアドレス確認
  4. 04支払い状況と履歴の確認
  5. 05支払いテキストのプロンプトインジェクション検査
  6. 06ボールト経由でSentinelチェックを購入

活用シーン

  1. 01エージェントによる許可済み宛先への支払い
  2. 02ポリシーに該当する支払いに所有者承認を要求
  3. 03送金前に受取アドレスを確認
  4. 04支払いテキストの検出時に申請を保留

MCP 対応

ボールト決済、アドレス確認、残高、ポリシー、支払い状況と履歴などのツールを公開し、オプションでSentinelチェックにも対応します。エージェントのキーは支払いを申請でき、支出ルールはボールトのコントラクトが適用します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"zaxcoraider-agentguard": {
"command": "npx",
"args": [
"-y",
"@zaxcoraider/agentguard-mcp"
],
"env": {
"AGENTGUARD_VAULT": "<AGENTGUARD_VAULT>",
"NEAR_NETWORK": "<NEAR_NETWORK>",
"AGENTGUARD_AGENT_KEY": "<AGENTGUARD_AGENT_KEY>",
"AGENTGUARD_KEY_FILE": "<AGENTGUARD_KEY_FILE>",
"NEAR_RPC_URL": "<NEAR_RPC_URL>",
"SENTINEL_URL": "<SENTINEL_URL>"
}
}
}
}
起動コマンドnpx -y @zaxcoraider/agentguard-mcp
設定が必要な環境変数
AGENTGUARD_VAULTYour AgentGuard vault account, e.g. my-agent.agentguard.testnet
NEAR_NETWORKtestnet (default) or mainnet
AGENTGUARD_AGENT_KEYシークレットThe agent's ed25519 function-call key; without it the server is read-only
AGENTGUARD_KEY_FILEシークレットPath to a key file to read instead of AGENTGUARD_AGENT_KEY
NEAR_RPC_URLOverride the NEAR RPC endpoint
SENTINEL_URLWhere to buy Sentinel's paid check

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

パッケージ
npm@zaxcoraider/agentguard-mcp0.1.1

ツール

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

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

詳細

AgentGuard MCP サーバー

あらゆる MCP エージェント(Claude Code、Claude Desktop、Codex など)が、AgentGuard vault を通じて NEAR で支払えるようにします。エージェントが保持するのは、vault に支払いを依頼するためのファンクションコールキーだけです。vault コントラクトがオンチェーンで判断し、paid、pending(人間の所有者の承認待ち)、または blocked を返します。プロンプトインジェクションを受けたエージェントが何を依頼しても、コントラクトが許可しなければ支払いは実行されません。

ツール

ツール機能
agentguard_payvault に recipient へ amount_near を支払うよう依頼します。paid/pending/blocked、理由、トランザクションへのリンクを返します。請求書/メール/ページを source_text として渡してください。プロンプトインジェクションの手口が含まれている場合、vault に支払いを保留して所有者の確認を求めるよう依頼します(flagged_for_review)。
agentguard_check_address「このアドレスに安全に支払えますか?」共有詐欺レジストリ、アカウントの存在、コントラクトかどうか、許可リストへの登録状況、類似名を確認します。また、source_text が指定されている場合は、支払いを求めるテキストをスキャンしてプロンプトインジェクションを検出します。allow/warn/block と理由を返します。
agentguard_balance残高、利用可能額、過去24時間の支出額、支払い済み/ブロック済み/保留中の件数
agentguard_policy1回あたりの支払い上限、24時間の上限、承認基準額、許可リスト、レジストリ、ロック状態
agentguard_payment_status1件の支払いの状態(例:所有者が承認したかどうか)
agentguard_historyブロックされたものを含む、最近の支払いリクエスト
agentguard_sentinel_checkHTTP 402 を通じて Sentinel の有料チェックを購入します。お使いの vault を通じて料金を支払い(お使いのルールが適用されます。max_price_near を超えることはありません。デフォルトは 0.02)、X-PAYMENT を付けて再試行し、チェック結果とトランザクションを返します。SENTINEL_URL を設定してください。

セットアップ

cd packages/mcp
npm install
npm run build

設定(環境変数):

変数デフォルト意味
AGENTGUARD_VAULT(必須)お使いの vault。例:demo2.agentguard.testnet
NEAR_NETWORKtestnettestnet または mainnet
AGENTGUARD_AGENT_KEYファイルから読み込みエージェントの ed25519:... ファンクションコールキー
AGENTGUARD_KEY_FILE~/.near-credentials/<network>/<vault>.json上の変数が設定されていない場合にキーを読み込む場所(scripts/gen-agent-key.mjs によって作成されます)
NEAR_RPC_URLFastNEAR のパブリック RPCRPC エンドポイントを上書きします
SENTINEL_URLhttps://sentinel.agentguard.appagentguard_sentinel_check がチェックを購入する接続先(ローカルの Sentinel を使う場合は http://localhost:3000 を設定します)

キーがなくても、サーバーは読み取り専用で動作します。

Claude Code
claude mcp add agentguard -e AGENTGUARD_VAULT=demo2.agentguard.testnet -- npx -y @zaxcoraider/agentguard-mcp

npm では @zaxcoraider/agentguard-mcp として公開されています。クローンから実行する場合は、代わりに -- node /absolute/path/to/packages/mcp/dist/index.js を使います。

続いて Claude に次のように依頼します。「agentguard-evil.testnet に安全に支払えるか確認してから、コーヒー代として agentguard-shop.testnet に 0.05 NEAR を支払ってください。」

任意の MCP クライアント(JSON 設定)
{
  "mcpServers": {
    "agentguard": {
      "command": "npx",
      "args": ["-y", "@zaxcoraider/agentguard-mcp"],
      "env": { "AGENTGUARD_VAULT": "demo2.agentguard.testnet", "NEAR_NETWORK": "testnet" }
    }
  }
}

自分の vault を取得する(testnet、約2分)

near CLI と testnet アカウント(YOU.testnet)が必要です。以下の手順はすべて testnet で実行済みです(vault は guide-test.agentguard.testnet。docs/TESTNET-RESULTS.md §9 を参照)。

1. vault を作成します。 factory を使います。1 NEAR が vault に入ります(所有権はそのままです)。vault はフルアクセスキーなしで作成されます。

near contract call-function as-transaction agentguard.testnet create_vault json-args '{
  "name": "my-agent",
  "policy": {"max_per_payment": "500000000000000000000000", "daily_limit": "1000000000000000000000000",
             "approval_threshold": "200000000000000000000000", "unknown_recipient": "require_approval",
             "pending_ttl_ns": "86400000000000"},
  "allowlist": ["agentguard-shop.testnet"]
}' prepaid-gas '100 Tgas' attached-deposit '1 NEAR' sign-as YOU.testnet network-config testnet sign-with-keychain send

これにより、1回あたり最大 0.5 NEAR、1日あたり 1 NEAR となり、0.2 NEAR を超える支払いには承認が必要で、見知らぬ相手への支払いは承認待ちになります(額は yoctoNEAR 単位です。1 NEAR = 10^24)。

2. エージェントのキーを作成します。 ~/.near-credentials/testnet/my-agent.agentguard.testnet.json に保存され、表示されるのは公開鍵だけです。

node scripts/gen-agent-key.mjs my-agent.agentguard.testnet     # from the repo root

3. そのキーを vault に登録します。 呼び出せるのは request_payment だけです。

near contract call-function as-transaction my-agent.agentguard.testnet add_agent \
  json-args '{"public_key": "ed25519:<printed key>", "label": "my-agent"}' \
  prepaid-gas '30 Tgas' attached-deposit '1 yoctoNEAR' sign-as YOU.testnet network-config testnet sign-with-keychain send

4. MCP サーバーに vault を指定します(AGENTGUARD_VAULT=my-agent.agentguard.testnet。セットアップを参照)。その後、エージェントに支払いを依頼します。テスト実行の結果:

agentguard_pay agentguard-shop.testnet 0.1  -> paid
agentguard_pay agentguard-user.testnet 0.1  -> pending, unknown_recipient (approve or deny it as the owner)

所有者として 1 yoctoNEAR を添付した場合は、approve {"id": "1"}/deny {"id": "1"}、add_to_allowlist、set_policy、withdraw、set_paused、lock_rules を実行できます(lock_rules は一方向の操作です。実行すると、あなたを含めて誰も vault の制限を緩和できなくなります)。contracts/vault を参照してください。

エージェントなしで試す

npm test                       # 24 unit tests: scoring, lookalikes, prompt-injection scan, NEAR amount math, HTTP 402 payment checks
npx tsx scripts/live-demo.ts   # starts the server over stdio and calls every tool on testnet

live-demo.tsで支払いを行うには、demo2.agentguard.testnetのエージェントキーが必要です。エージェントキーがない場合でも読み取り専用ツールは動作しますが、agentguard_payはキーがないことを示すエラーを返します。

想定される結果(2026-11-03に記録):

agentguard_check_address agentguard-evil.testnet -> block: flagged in the shared AgentGuard registry: ...
agentguard_check_address agentguard-sh0p.testnet -> block: does not exist; looks like trusted account agentguard-shop.testnet
agentguard_pay agentguard-shop.testnet 0.05     -> paid
agentguard_pay agentguard-evil.testnet 0.2      -> blocked, recipient_flagged
agentguard_pay agentguard-shop.testnet 5        -> blocked, over_per_payment_limit

エージェントにできないこと

キーはNEAR自体によって、ボールト上のrequest_paymentに制限されています。NEARの送金、オーナーメソッド(withdraw、set_policy、approve、…)の呼び出し、デポジットの添付、他のコントラクトの呼び出し、キーの追加、コードのデプロイ、アカウントの削除はできません。テストネットでの証明:scripts/prove-agent-key.sh(12/12が拒否)と、リポジトリのルートにあるdocs/TESTNET-RESULTS.mdをご覧ください。

agentguard_check_addressはエージェントへの助言です。エージェントがどう判断するかにかかわらず、重要なルールはボールトコントラクトで適用されます。

プロンプトインジェクションのスキャン(src/inject.ts)

支払いを依頼したテキスト(source_text)をagentguard_payまたはagentguard_check_addressに渡します。モデルを使わずに、既知の手口をスキャンします:

判定重大度
不可視文字:ゼロ幅文字、方向制御文字、Unicodeの「タグ」文字(隠しテキストをデコードし、hidden_textとして返します)悪意あり
「以前の指示を無視して」「新しい指示:」「あなたは今から…」悪意あり
「オーナーには伝えないで」「承認なしで」「上限/許可リストを回避して」悪意あり
偽のロールマーカー:<system>、[SYSTEM]、<|im_start|>悪意あり
AIに向けたテキスト(「あなたがAIアシスタントなら…」)、隠しHTML/CSS、「支払い先アドレスが変更されました」、テキスト内の他のNEARアカウント、長いエンコード済みデータ不審

動作:check_addressは悪意ありをblockに、不審をwarnにします。agentguard_pay(メモもスキャンします)は、検出したものをすべてforce_review付きでボールトに送るため、コントラクトは支払わずにオーナーのために支払いを保留します。スキャンによって制限が緩和されることはありません。これはヒューリスティックであり、回避される可能性があります。スキャンで問題が検出されなくても安全の証明にはならず、最終的にはボールトのルールが判断します。実行例:TESTNET-RESULTS §14(scripts/injection-demo.mts:同じ店舗、同種の金額で、問題のない請求書は支払われ、細工された請求書は保留されます)。

コメント

MCP は初めてですか?

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

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