mcpField
P
proctor

proctor

ローカル
github.com/louissarvinセキュリティ07 週間前に更新

proctor について

proctorは、検証済みの人間が承認または拒否するまで、エージェントのツール呼び出しを一時停止するMCPサーバーです。ポリシーを先に評価してから人の確認を求め、後で参照できるようHederaトピックに判断を記録します。

主な機能

  1. 01検証済みの人間による承認要求
  2. 02人の確認前にポリシーを評価
  3. 03期限切れ時は実行を拒否
  4. 04Hederaへの判断記録
  5. 05拒否とサービスエラーの区別

活用シーン

  1. 01重要なエージェントのツール呼び出しを制御
  2. 02運用担当者以外への承認依頼
  3. 03監査可能な判断記録の提示

MCP 対応

JSON-RPC 2.0のstdio経由で、`request_human_approval`ツールをMCPクライアントに公開します。人の判断が出るまでエージェントを停止し、結果とHederaの記録を返します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"louissarvin-proctor": {
"command": "npx",
"args": [
"-y",
"proctor-mcp"
],
"env": {
"PROCTOR_API": "<PROCTOR_API>",
"HEDERA_AGENT_ID": "<HEDERA_AGENT_ID>",
"HEDERA_AGENT_KEY": "<HEDERA_AGENT_KEY>",
"AGENT_ALLOWED_TOKENS": "<AGENT_ALLOWED_TOKENS>"
}
}
}
}
起動コマンドnpx -y proctor-mcp
設定が必要な環境変数
PROCTOR_APIBase URL of the Proctor gate. Defaults to http://localhost:3700.
HEDERA_AGENT_IDHedera account id of the paying agent, e.g. 0.0.12345. Set this with HEDERA_AGENT_KEY to settle a real x402 payment. Omit both and the tool falls back to Proctor's operator endpoint, which opens a real decision but settles nothing.
HEDERA_AGENT_KEYシークレットECDSA private key for HEDERA_AGENT_ID. Spends money: scope it to a funded testnet account and nothing else.
AGENT_ALLOWED_TOKENSシークレットComma-separated HTS token ids this agent may pay in. The agent's own guard: it refuses assets its operator never approved.

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

パッケージ
npmproctor-mcp1.0.0

ツール

1

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

パラメーター型必須説明
actionstringはいエージェントが実行しようとしている操作を、平易な言葉で記述します。
amountstringいいえ金額を 10 進数文字列で指定します。ポリシーのしきい値に使用します。
ttlSecondsnumberいいえ期限。デフォルトは 300、最大値は 900 です。
counterpartystringいいえ価値を受け取る相手。

詳細

Proctor MCP サーバー

MCP の仕様が求めながら、提供していないヒューマン・イン・ザ・ループです。

MCP ツール仕様には、文字どおり次のように記載されています。

「信頼性、安全性、およびセキュリティのため、ツールの呼び出しを拒否できる人間が常に介在すべきです。」

アプリケーションは「操作についてユーザーに確認プロンプトを表示し、人間が介在していることを確実にすべきです。」

しかし、そのための仕組みは定義されていません。すべてのクライアントが独自の確認ダイアログをローカルで実装し、クリック後には何も残りません。インシデント後に監査人が尋ねる次の3つの質問には、答えがありません。

質問ローカルのダイアログで示せること
実際に人間がその場にいましたか?何もありません。ダイアログが証明するのはクリックであり、人間の存在ではありません
その人はエージェントの運用者とは別の人物でしたか?何もありません
信頼していない相手にも証明できますか?何もありません

一方、有料の MCP ツールが向かっている方向は、明らかに逆です。Vercel の x402-mcp の売り文句は、*「アカウント不要、API キー不要、ヒューマン・イン・ザ・ループ不要」*です。これは天気 API には適切ですが、電信送金には不適切です。

このサーバーは、欠けていた仕組みです。

できること

ツールは1つです。request_human_approval。

運用者ではない実在の人物の判断が下るまでエージェントをブロックし、期限が過ぎると確実に拒否し、管理者キーのない Hedera トピック上の証明情報を返します。これにより、後からエージェントや私たちを信頼することなく、第三者に判断を証明できます。

below threshold   → Proceed. Policy did not require a human (below_threshold).
above threshold   → blocks, hands a link to a phone, waits
approved          → Approved by a verified human. HCS sequence #41. You may proceed.
refused / expired → NOT approved (EXPIRE). Do not proceed.

ほとんどの呼び出しが人間に届くことはありません。 あらゆる処理を中断する監督ツールは、エージェントの所有者に無効化されてしまいます。そのため、ポリシーを先に実行し、通常の処理にはコストがかからないようにしています。

インストール

npm で proctor-mcp として公開されており、MCP Registry には io.github.louissarvin/proctor として登録されています。

// Claude Desktop: claude_desktop_config.json
{
  "mcpServers": {
    "proctor": {
      "command": "npx",
      "args": ["-y", "proctor-mcp"],
      "env": { "PROCTOR_API": "http://localhost:3700" }
    }
  }
}

クローンもビルドも不要です。PROCTOR_API を Proctor インスタンスに設定してください。デフォルトは http://localhost:3700 です。

クライアントを使わずに確認するには、次を実行します。

printf '%s\n%s\n' \
  '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' \
  '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
  | npx -y proctor-mcp

Claude Desktop、Cursor、自作のものなど、あらゆる MCP クライアントで動作します。トランスポートは stdio 上の JSON-RPC 2.0 で、プロトコルバージョンは 2025-06-18 です。

クライアントを使わずに確認するには、次を実行します。

printf '%s\n%s\n' \
  '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' \
  '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
  | bun src/index.ts

知っておくべき3つの判断

拒否はツールエラーではありません。 approved: false とともに isError: false を返します。拒否をエラーとして扱うと、モデルが一時的な障害と見なして再試行し、回避しようとするおそれがあります。それこそが、このツールが防ごうとしていることです。

到達不能は拒否ではありません。 Proctor が停止している場合、ツールはそのことを明示し、isError: true を設定します。*「ゲートが停止している」ことと「人間が拒否した」*ことは別の事実です。この2つをひとまとめにすると、障害が気付かれないまま拒否になったり、さらに悪いことに、成功するまで再試行されたりします。

監督経路に依存関係はありません。 stdio 上の JSON-RPC はループであり、セキュリティツールに SDK を追加することは、サプライチェーンのリスクを招くことにつながります。x402 クライアントは遅延インポートされ、ウォレットが設定されている場合にのみ読み込まれます。そのため、ホスト型の Proctor に接続して人間に質問するだけなら、Hedera SDK が読み込まれることはありません。

有料モード

ウォレットを設定すると、ツールはシミュレーションを停止して支払いを開始します。

"env": {
  "PROCTOR_API": "http://localhost:3700",
  "HEDERA_AGENT_ID": "0.0.xxxxx",
  "HEDERA_AGENT_KEY": "302e…",
  "AGENT_ALLOWED_TOKENS": "0.0.10394781"
}

その後、実際の x402 ゲートにアクセスし、Blocky402 のファシリテーターを通じて決済します。検証済みの実行結果:

[proctor] paid the gate; a witness is being dispatched from the rota
structuredContent: { "approved": false, "outcome": "EXPIRE", "paid": true }

Hedera テストネット上の対応する決済:

0.0.10359475   -420000     the agent pays
0.0.10349677  +415800     treasury
0.0.10349667    +4200     1% HTS custom fee, assessed on chain
fee payer 0.0.7162784     Blocky402

ポリシー評価が先に実行され、無料です。 POST /v1/gate/evaluate は、支払いが行われる前に人間の判断が必要かどうかを決定します。呼び出しのたびに課金する監視ツールは、エージェントの所有者が1日以内にオフにしてしまいます。

有料モードでは、意図的に証人リンクを返しません。 ゲートは承認 URL を支払者に決して渡しません。エージェントがその URL にアクセスできれば、自分の判断を承認できてしまいます。それを防ぐことこそ、この製品が提供する唯一の価値です。人間への連絡は、代わりにオペレーターの当番体制を通じて行われます。無償のオペレーターモードでは、呼び出し元がオペレーター本人であるため、リンクを返します。

ウォレットが設定されていない場合、ツールは Proctor のオペレーターエンドポイントにフォールバックします。ここでは実際の判断が開始されますが、決済は行われず、出力にもそのことが示されます(paid: false)。

現時点で対応していないこと

判断がコンセンサスより速く確定すると、証拠の引用に attestation pending と表示される場合があります。記録はその後、エージェントのクリティカルパス外で登録され、シーケンス番号は判断自体の記録に永続化されます。

ここで接続されているのは Hedera のレールのみです。ゲートは Circle の Gateway 経由で Arc にも対応しており、agent/ でその例を確認できます。一方、MCP クライアントが登録するのは Hedera のスキームのみです。

コメント

MCP は初めてですか?

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

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