Archytan Lite MCP gate について
Archytan Lite MCP gateは、MCPホストとツールサーバーの間に置く認可ゲートです。ポリシーに基づいてエージェントのツール利用を制御したいチーム向けで、署名済みの認可レシートを検証し、単回使用の能力を消費してから呼び出しを転送します。
主な機能
- 01ツール呼び出しごとの認可
- 02署名済みレシートの検証と能力の消費
- 03ポリシー未登録ツールの非表示
- 04リソースやプロンプトなどツール以外のメソッドの拒否
- 05呼び出し順序の維持とキャンセル対応
活用シーン
- 01指定リソースに対するエージェント操作の制限
- 02未認可の呼び出しがサーバーに届くことの防止
- 03ツール呼び出しの判断へのW3C traceparentの付加
MCP 対応
MCPホストとツールサーバーの間で動作し、ポリシーを通過したツール呼び出しを転送します。登録済みツールのみを公開し、リソース、プロンプト、補完などのメソッドは拒否します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
archytan-mcp-gate
archytan-mcp-gate は、MCP ホスト(Claude Code、Claude Desktop、IDE エージェント、独自のエージェント)と MCP ツールサーバーの間に位置します。ツール呼び出しがサーバーに届く前に、Archytan Lite ゲートサービスによる認可が必要です。MCP ゲートは、その判断に対する署名済みレシートを検証し、1 回限りのケイパビリティを消費してから、呼び出しを転送します。ポリシーで許可されていない呼び出しは、エージェントが読み取れるツールエラーとして返され、サーバーには届きません。
このリポジトリには、Apache License 2.0 の下で公開される MCP ゲートのソースコードがあります。接続先の Archytan Lite ゲートサービスは別製品で、署名済みコンテナーイメージとして配布されています。クイックスタートはarchytan-lite-communityにあります。
仕組み
ホストはツールサーバーの代わりに MCP ゲートを起動し、MCP ゲートがサーバー自体を起動するため、エージェントとツールの間の唯一の経路になります。MCP ゲートは、tools/call のたびに次の処理を行います。
- 呼び出しが対応するアクションと、呼び出しで指定されたリソースについて、Archytan Lite ゲートサービスに認可を求めます。
- サービスから返されたレシートを検証します。フィールドのハッシュが署名済みインテントハッシュと一致すること、署名がサービスの鍵によるものであること、そしてレシートがこの呼び出しを正確に記述していることを確認します。
- ALLOW とともに渡された、1 回限りのケイパビリティを引き換えます。
- ツールサーバーに呼び出しを転送します。
いずれかの手順に失敗した場合、呼び出しは拒否され、サーバーに届くことはありません。エージェントがこれらの手順を回避できるものを保持することはありません。MCP ゲートがエージェントの認証情報を保持し、エージェントは MCP でのみ通信します。
要件
- ケイパビリティが有効になっている(
ARCHYTAN_LITE_CAPABILITIES=on)Archytan Lite ゲートサービス。テストはバージョン 2.6.0 に対して実行されます。 - サービスの
callergenで作成した、エージェント用の認証情報にひも付いた呼び出し元。MCP ゲートはロールを送信しません。エージェントのロールは、その認証情報に設定されたものになります。
インストール
このリポジトリのリリースから、お使いのプラットフォーム用のバイナリをダウンロードしてください。SHA256SUMS にはすべてのバイナリが記載されており、ビルドを行ったワークフローによって、cosign のキーレス署名で署名されています。
cosign verify-blob SHA256SUMS --bundle SHA256SUMS.cosign.bundle \
--certificate-identity-regexp '^https://github.com/High-ArchyTech-Solutions/archytan-mcp-gate/\.github/workflows/release\.yml@refs/tags/v' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
sha256sum -c SHA256SUMS --ignore-missing
または、Go を使って自分でビルドしてください。
go install github.com/high-archytech-solutions/archytan-mcp-gate/v2/cmd/archytan-mcp-gate@latest
各リリースには、インストールに対応したホスト向けの MCP バンドル archytan-mcp-gate.mcpb も添付されており、MCP Registry には io.github.High-ArchyTech-Solutions/archytan-mcp-gate として登録されています。ホストでは、ツールサーバーを server フィールドで指定する mcp-gate.json(設定を参照)、ゲートサービスの URL、エージェントのトークンファイル、サービスの公開鍵の 4 つを指定します。このバンドルには、amd64 と arm64 向けの macOS および Linux 用ビルドと、amd64 向けの Windows 用ビルドが含まれています。Windows on Arm では、エミュレーションを使って実行できます。SHA256SUMS にはこのバンドルも記載されています。macOS 用ビルドは Apple による公証を受けていないため、ブラウザー経由でダウンロードしたものは、隔離属性をクリアするまで macOS が実行を拒否する場合があります(xattr -d com.apple.quarantine <file>)。
設定
エージェントに使用させる各ツールを、mcp-gate.json のポリシーアクションに対応付けます。resource_id_arg は、呼び出し対象のリソースを識別する引数の名前です。
{
"version": 1,
"agent_uid": "agent-invoices",
"tools": {
"delete_invoice": { "action": "invoice.delete", "resource_type": "invoice", "resource_id_arg": "invoice_id" },
"read_invoice": { "action": "invoice.read", "resource_type": "invoice", "resource_id_arg": "invoice_id" }
}
}
次に、ツールサーバーではなく MCP ゲートをホストに指定します。同じ mcpServers エントリーは、Claude Desktop の claude_desktop_config.json とプロジェクトの .mcp.json の両方で使用できます。
{
"mcpServers": {
"invoices": {
"command": "archytan-mcp-gate",
"args": ["--config", "/etc/archytan/mcp-gate.json", "--", "node", "/opt/invoice-server/index.js"],
"env": {
"ARCHYTAN_MCP_GATE_URL": "https://gate.internal:8421",
"ARCHYTAN_MCP_GATE_CALLER_TOKEN_PATH": "/etc/archytan/agent-invoices.token",
"ARCHYTAN_MCP_GATE_PUBLIC_KEY_HEX": "<the gate service's receipt-signing public key>"
}
}
}
}
| 変数 | 意味 |
|---|---|
ARCHYTAN_MCP_GATE_URL | Archytan Lite ゲートサービスのベース URL です。エージェントの認証情報がすべてのリクエストに含まれるため、プレーンな http はループバックに対してのみ使用できます。 |
ARCHYTAN_MCP_GATE_CALLER_TOKEN_PATH | エージェントの呼び出し元トークンを格納するファイルです。 |
ARCHYTAN_MCP_GATE_PUBLIC_KEY_HEX | サービスの Ed25519 レシート署名用公開鍵を 16 進数で指定します。ほかの鍵で署名されたレシートは拒否されます。 |
ホストやバンドルが設定ファイルしか渡せない場合に備え、ツールサーバーは -- の後ではなく、mcp-gate.json 内で指定することもできます。
{
"version": 1,
"agent_uid": "agent-invoices",
"server": { "command": "node", "args": ["/opt/invoice-server/index.js"] },
"tools": {
"read_invoice": { "action": "invoice.read", "resource_type": "invoice", "resource_id_arg": "invoice_id" }
}
}
その場合、ホストのエントリーは "args": ["--config", "/etc/archytan/mcp-gate.json"] になります。コマンドは記述どおりに実行され、-- の後に指定した場合と同様に、MCP ゲートの環境を引き継ぎます。サーバー名は一か所で指定してください。設定ファイルの server と -- の後のコマンドの両方を指定すると、MCP ゲートはどちらかを選ぶのではなく、起動を拒否します。
mcp-gate.json は、ホストのメッセージと同じように厳密に読み込まれます。不明なフィールド、重複するキーや、階層を問わず大文字・小文字だけが異なるキー、UTF-8 として無効なテキスト、または対応するサロゲートがないサロゲートをエスケープするテキストがある場合、MCP ゲートは起動時に停止します。そのため、2つ目の server が実行するプログラムをひそかに決定することはありません。
通信時の動作
- ポリシーで許可されていないツールは非表示になり、呼び出しも拒否されます。
tools/listでは、マッピングされたツールだけがエージェントに表示されます。それ以外の名前を呼び出すと、 サービスやサーバーに到達する前に拒否されます。resources/*、prompts/*、completion/*、tasks/*および不明なメソッドは拒否され、サーバーが 広告する機能からも取り除かれます。 - ホストがサーバーの対象範囲を広げることはできません。 MCP ルートを使うと、ホストは サーバーに作業対象のフォルダーを伝えられます。これを尊重するサーバー(たとえば、 リファレンスのファイルシステムサーバー)は、設定済みのフォルダーをホストのリストに 差し替えます。MCP ゲートの背後では、サーバーのコマンドで指定したフォルダーがそのまま 保持されます。ゲートはホストが宣言するルートを取り除き、サーバーからのルート要求に 応答するか拒否し、ルート変更通知を破棄します。
- どちらのプロトコル世代も通過します。 MCP ゲートは
initializeハンドシェイクと MCP 2026-07-28 を中継します。これには、server/discover、 独自の機能を含むリクエスト、エリシテーションとサンプリングのinput_required往復、ツールリストの変更に限定されたsubscriptions/listenが含まれます。 ユーザーへの確認で中断する呼び出しは、その都度個別に認可され、消費されます。 サーバーが実行できる呼び出しは、それぞれ別の呼び出しだからです。 - 複数の解釈ができるメッセージは拒否されます。 JSON パーサーによって解釈が異なるのは、 キーが重複しているオブジェクト、キーの大文字・小文字だけが異なるオブジェクト、 有効な UTF-8 ではないテキスト、または対応する組になっていないサロゲートをエスケープした テキストです。このようなホストメッセージは、認可や転送が行われる前に拒否されるため、 MCP ゲートとサーバーが常に同じ呼び出しについて判断できます。
- 拒否はツールの結果として返されます。 拒否された呼び出しは、
isErrorが設定された ツールの結果として返され、モデルが対処できる平易な説明が含まれます。 - エージェントのトレースは判断まで届きます。 ツール呼び出しの
params._metaにある W3Ctraceparentはサービスに渡されるため、ログ行とバージョン 2 のレシートに エージェントのトレース ID が記録されます。トレースコンテキストが判断を変えることはありません。 - 呼び出しはエージェントが発行した順に実行されます。 ただし、ping、通知、キャンセルが それらの後ろで待たされることはありません。
- キャンセルはあらゆる段階で尊重されます。 機能が引き換えられる前にキャンセルされた場合、 消費も実行もされません。転送後にキャンセルされた場合は、キャンセルがサーバーに中継されます。 その時点で処理を停止できるのはサーバーだけです。
- ツールサーバーが MCP ゲートより長く動作することはありません。 ゲートの終了時には、 サーバーの入力を閉じてから、停止を要求し、それでも停止しなければ強制終了します。 Windows ではサーバーはジョブオブジェクトでも実行されるため、ゲート自体が強制終了されても 停止します。それ以外の環境では、ゲートが強制終了されても、MCP の stdio サーバーと同様に、 サーバーは入力の終端で終了します。
テスト済みの環境
| ホストまたはサーバー | MCP ゲート経由 |
|---|---|
MCP TypeScript client SDK 2.3.1、initialize ハンドシェイク | 動作します |
同じ SDK の auto ネゴシエーション | 動作します。サーバーが MCP 2026-07-28 に対応していればそれを使用し、サーバーが未対応の場合は initialize にフォールバックします |
| 同じ SDK の 2026-07-28 固定 | 2026-07-28 サーバーで動作します。古いサーバーでは、SDK の想定どおり接続時に失敗します |
| 同じ SDK でキャッシュ済みの検出結果を再利用 | 動作します。ホストのルートも引き続きサーバーに届きません |
| MCP TypeScript server SDK 2.3.1(両方のプロトコル世代) | 上記のすべてのクライアントモードで動作します |
@modelcontextprotocol/server-filesystem 1.0.0(initialize のみ) | 動作し、設定済みのフォルダーを保持します |
対象外の事項
- エージェントがここを通じてアクセスするものを保護します。アクセス経路をここだけにしてください。 ツールサーバーは MCP gate のエントリ経由でのみ一覧に登録し、 サーバー自身の認証情報はそのエントリだけに渡してください。汎用 シェルを使えるエージェントは、サーバーを手動で起動することもできます。また、Claude Code と Claude Desktop では、Claude が独自のシェルツールとファイルツールを使えます。 これらの場合、locked-workspace を使うと、保護するパスへのアクセス手段を MCP gate のツールだけに限定したワークスペースを作成できます。
- ポリシーによって、エージェントがどのリソースに対してどのアクションを実行できるかが決まります。 許可されたアクションの範囲内で、サーバー独自の引数と設定によってアクセス範囲が決まります。
- 制御するのはツールです。リソース、プロンプト、補完は対象外です。
セキュリティ
脆弱性は、SECURITY.md の説明に従って非公開で報告してください。 過去の勧告も同ファイルに掲載されています。これには、 2.5.1 と 2.6.0 で修正された GHSA-9ff5-c4g4-rx92 も含まれます。
ビルドとテスト
go test ./...
testing/mcpgate のテストでは、スクリプトで動作するホスト、フィクスチャのツールサーバー、実際の Archytan Lite gate サービスの間で、実際のバイナリを動作させます。デフォルトでは、Docker を使って署名済みの公開サービスイメージを実行します。代わりにローカルのバイナリを使うには、ARCHYTAN_LITE_BIN と
ARCHYTAN_LITE_KEYGEN_BIN を設定してください。どちらも設定されていない場合、テストはスキップされ、その理由を表示します。CI では
ARCHYTAN_MCP_GATE_E2E_REQUIRED=1 を設定しているため、スキップによってテストが成功することはありません。
コントリビューションを歓迎します。詳しくは CONTRIBUTING.md をご覧ください。
ライセンス
Apache License 2.0 です。LICENSE と NOTICE をご覧ください。 Archytan Lite gate サービスには別途ライセンスが適用されます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。