MCPにはツール実行のポリシーチェック機能がない。モデルがツール呼び出しを決定すると、そのまま実行される。これがAIエージェントを本番環境で使うときの大きなリスクだ。
この記事でわかること:
- MCPのガバナンスギャップとはどんな問題か
- Agent Governance Toolkit(AGT)が解決すること
- 主な機能と対応フレームワーク
- インストールと基本的な使い方
MCPにはポリシー評価の仕組みがない
MCPはAIエージェントがツールを発見・呼び出すための共通インターフェースとして急速に普及している。データベース、API、ファイルシステム、外部サービスへのアクセスを一元化できる反面、「このエージェントがこのツールを、この引数で、今呼び出してよいか」を判断するチェックポイントが標準では存在しない。
ツール定義はそのままモデルに渡され、モデルが選択してサーバーが実行する。認証・認可・監査の仕組みはプロトコルの外側に任されている。
この構造的なギャップは小規模なデモでは問題にならない。しかし実際の業務システムにMCPを接続すると、ツールのポイズニング(悪意のある隠し命令の埋め込み)、プロンプトインジェクション、サプライチェーン攻撃といったリスクが現実になる。
OWASPは「OWASP MCP Top 10」でこの攻撃面を体系化しており、CVE-2025-49596(MCP InspectorのRCE)やCVE-2025-66416(Python SDKのDNSリバインディング問題)などの実際の脆弱性も報告されている。
プロンプトベースの安全策では26%が突破される
Microsoftの内部レッドチーム評価では、45件の敵対的シナリオを含む60件のプロンプトを用いてテストを実施した。「ルールに従ってください」というプロンプト指示のみに頼った場合、ポリシー違反率は26.67%だった。4回に1回以上、攻撃が成功する計算だ。
これは根本的な設計の問題だ。モデルに安全を期待することはセキュリティ境界として機能しない。
Agent Governance Toolkitとは
Microsoftが公開したオープンソースのランタイムガバナンス層。MCPクライアントとツールサーバーの間に配置し、ツール呼び出しをポリシーに照らしてから実行する。現在パブリックプレビュー中で、スター数は1,200超(2026年4月時点)。ライセンスはMIT。
AGTが制御するのはモデルの出力ではなくエージェントの行動だ。プロンプトガードレールやコンテンツモデレーション(それはAzure AI Content Safetyの役割)とは別物として設計されている。
主な機能
ポリシーエンジン
ツール呼び出しのたびに、YAML・OPA/Rego・Cedarで書いたルールを決定論的に評価する。リポジトリのベンチマーク(docs/BENCHMARKS.md)では、ルール1件で0.012ms、100件でも0.029msという低遅延で処理できる。LLMのAPIレイテンシーと比べてほぼ無視できるオーバーヘッドだ。プロンプト指示のみの26.67%違反に対し、AGTでは0.00%を達成している。
ゼロトラスト・アイデンティティ
エージェントにEd25519と量子耐性のML-DSA-65による暗号IDを付与する。トラストスコアは0〜1000のスケールで管理され、ポリシー違反のたびに減点、準拠した行動で回復する。SPIFFE互換のIDを採用している。
MCPセキュリティスキャナー
ツール定義がエージェントに渡る前に、ツールポイズニング(隠し命令の埋め込み)、タイポスクワッティング、敵対的パターンを検出してブロックする。
実行サンドボックスと強制終了
4段階の特権リングモデルで最小権限を実現する。非準拠エージェントをリアルタイムで強制終了するキルスイッチも備えている。
監査ログ
ツール呼び出しの試行、ポリシー判断、実行結果をすべて追記専用のハッシュチェーン形式で記録する。インシデント調査に使えるリプレイデバッグも可能だ。
OWASP Agentic Top 10への対応
AGTはOWASP Agentic Top 10(ASI-01〜ASI-10)の全10項目を網羅しており、9,500件以上のテストスイートで継続的に検証されている。EU AI Act、NIST AI RMF、SOC 2へのマッピングドキュメントも提供されている。
対応フレームワーク
LangChain、LangGraph、AutoGen、CrewAI、OpenAI Agents SDK、Semantic Kernel、Google ADK、LlamaIndex、Haystackなど20以上のフレームワークに対応している。SDK提供言語はPython、TypeScript、.NET、Rust、Goの5言語。
インストールと基本的な使い方
pip install agent-governance-toolkit[full]
agt doctor # インストール確認
agt verify # OWASPコンプライアンス確認
Pythonでポリシーを定義する基本形は以下のとおり。
from agent_os.policies import PolicyEvaluator, PolicyDocument, PolicyRule, PolicyCondition, PolicyAction, PolicyOperator, PolicyDefaults
evaluator = PolicyEvaluator(policies=[PolicyDocument(
name="my-policy", version="1.0",
defaults=PolicyDefaults(action=PolicyAction.ALLOW),
rules=[PolicyRule(
name="block-dangerous-tools",
condition=PolicyCondition(field="tool_name", operator=PolicyOperator.IN, value=["execute_code", "delete_file"]),
action=PolicyAction.DENY, priority=100,
)],
)])
result = evaluator.evaluate({"tool_name": "web_search"}) # ✅ Allowed
result = evaluator.evaluate({"tool_name": "delete_file"}) # ❌ Blocked
YAMLポリシー、OPA/Rego、Cedarにも対応しており、既存のポリシー管理ツールと統合しやすい設計になっている。
MCPの実用化に欠かせない一手
MCPが普及するにつれ、エージェントが持つアクセス権限は広がり続けている。プロンプトだけで安全を担保しようとすると、4分の1以上の攻撃が通り抜けてしまう。AGTはその構造的なギャップを埋めるためのランタイム層として設計されており、MITライセンスで今すぐ使い始められる。パブリックプレビューのため破壊的変更が入る可能性はあるが、GAに向けて活発に開発が続いている。