MCP Safety Warden について
MCP Safety Wardenは、MCPサーバーを評価し、ツール呼び出しを管理するためのプロキシ兼監査ツールです。動作プロファイル、セキュリティスキャン、変更検知、リスクに基づく実行制御を備えています。
主な機能
- 01動作プロファイルと呼び出し統計
- 02多段階のサーバーセキュリティ監査
- 03引数と出力のインジェクション検査
- 04リスクゲートとツール別ポリシー
- 05ソースコードと変更の分析
- 06監査・サーバー管理用CLI
活用シーン
- 01接続前のMCPサーバー監査
- 02呼び出し転送前の危険な引数の遮断
- 03インジェクション検出済み応答の隔離
- 04導入後のツールやソース変更の検知
MCP 対応
登録したMCPサーバーをプロキシし、MCPクライアントに検査、呼び出し前のリスク評価、安全な実行、セキュリティスキャンのツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP safety warden は、あらゆる MCP サーバーをラップし、ツールに動作プロファイリング、セキュリティスキャン、リスクゲーティング、安全な実行を追加するプロキシサーバーです。
目次
重要
MCP のセキュリティは、現在も活発に研究されている分野です。最近のサーベイでは、ツールポイズニング、プロンプトインジェクション、ラグプル攻撃、サプライチェーンの侵害、認証情報の窃取、サーバーのライフサイクル全体にわたるコンポジション攻撃など、プロトコル固有の多くの脅威カテゴリがまとめられています。Securing the MCP (OpenReview)、Landscape & Threats (arXiv)、When MCP Servers Attack (arXiv)、MCP-38 Taxonomy (arXiv)を参照してください。
概要
プロキシとして使用して任意の MCP サーバーに安全性ゲーティングを追加するか、所有していないサーバーを指定して、ツールを一度も呼び出すことなくセキュリティ監査を実施できます。
図 1. 2 つの動作モード:プロキシと監査
動作プロファイリング:効果クラス、再試行の安全性、破壊性を分析します。LLM による支援(Anthropic、OpenAI、Gemini、Ollama)を利用し、利用できない場合はルールベースで判定します。観測された統計(レイテンシーの p50/p95、失敗率、出力サイズ)は、プロキシ経由の呼び出しごとに更新されます。
セキュリティスキャン:mcpsafety+ の 5 段階パイプライン(偵察、プランナー、ハッカー、監査者、スーパーバイザー)を使用します。Cisco AI Defense(AST/YARA)、Snyk(メタデータ分析)に対応しています。Kali と Burp Suite の統合により、実際のネットワークデータと HTTP 層のプローブでパイプラインを強化します。GitHub から取得したソースコードを対象に、エントロピー、AST、汚染フロー、ラグプル検出を用いたスキャンを実施します。
図 2. 任意の MCP サーバーに対して完全なセキュリティ監査を実行すると起動する、mcpsafety+ の 5 段階パイプライン
安全な実行:引数スキャン(20 種類以上の攻撃カテゴリ、LLM による第 2 パス)。2 層の出力インジェクションスキャン。代替案とツールごとのポリシーを備えたリスクゲート。すべての呼び出しでのドリフト検出と、単独で実行できるチェック。
図 3. 安全な実行パイプライン:プロキシ経由のツール呼び出しごとに実行される 5 つのチェック
CLI:24 個のサブコマンド、インタラクティブなリスクメニュー、すべてのコマンドで使える --json フラグ、CI 向けの --yes。
検出対象
- プロンプトインジェクション:エージェントを乗っ取ろうとするツール出力。ロールの乗っ取り、ジェイルブレイク、偽のシステムプロンプト、指示の上書きを検出します。Unicode の類似文字、ゼロ幅文字、base64 エンコードされたペイロードなど、11 種類の難読化手法を検出します。
- 悪意のあるツールメタデータ:インジェクション文字列、ハードコードされたシークレット、不審なダウンロード URL、ツールのなりすまし(シャドーイング)、直接的な金融取引の実行、システムサービスの変更、信頼できない外部依存関係を含む説明。19 個の Snyk チェックにより検証します。
- 引数インジェクション:呼び出しが転送される前に、すべてのツール呼び出しで 20 種類以上の攻撃カテゴリをチェックします。クラウドメタデータエンドポイント(AWS、GCP、Azure、Alibaba)への SSRF、パストラバーサル、認証情報ファイル(.aws、.ssh、.kube、.env)へのアクセス、コマンドインジェクション、SQL/NoSQL/LDAP/XPath インジェクション、XXE、テンプレートインジェクション(SSTI)、CRLF、ヌルバイト、デシリアライズペイロード(Java、Python pickle、PHP、.NET)、Windows UNC/ADS 攻撃、およびこれらすべてを base64 で難読化した亜種が含まれます。
- ソースコードのリスク:サーバーの GitHub ソースを取得し、6 層の分析を実行します。ハードコードされたシークレットを対象とするエントロピースキャン、AST による汚染フローの追跡(パラメーターから危険なシンクまで)、説明と実装の不一致、Bandit と Semgrep による SAST、LLM による関数横断の推論を実施します。Python と TypeScript/JavaScript に対応しています。
- ラグプルとドリフト:初回スキャン時にサーバーのソースの SHA-256 ハッシュを保存し、変更があれば警告します。呼び出しごとのドリフトガードにより、説明の差し替え、スキーマの変更、ツールの削除を実行時に検出します。
- 動作の異常:すべてのツールを、影響クラス、破壊性、7 つのリスクタグ(認証情報の漏えい、任意の実行、データの持ち出し、ファイルシステムへのアクセス、横展開、権限昇格、プロンプトインジェクションの攻撃対象面)で分類します。
- 複合攻撃:ツールセットを分析し、IDOR の連鎖、読み取り・書き込みの組み合わせ、認証フローの悪用、書き込み後の実行シーケンス、複数のツールにまたがるデータの蓄積と持ち出し経路など、連鎖によるリスクを検出します。
- ネットワークとホストのリスク:Kali Linux MCP が登録されている場合、開いているポート、実行中のサービス、nmap による OS フィンガープリントを調べます。Burp Suite MCP が登録されている場合、HTTP 層のアクティブプロービングと、アウトオブバンドコールバックを用いたブラインド SSRF を調べます。
- 出力に含まれる認証情報の漏えい:保存前にツールの応答からシークレットを除去します。インジェクションのフラグが付いた応答は隔離され、呼び出し元のエージェントには返されません。フォレンジックレビュー用に実行 ID ごとに保存されます。
- CVE 調査と Arxiv の調査結果:mcpsafety+ の Auditor ステージでは、検出した機能を既知の脆弱性や最近のセキュリティ研究と照合します。
前提条件
- Python 3.10 以降
- プロキシするラップ対象の MCP サーバーが 1 つ以上(stdio、SSE、または streamable_http)
- 推奨:LLM API キー(Anthropic、OpenAI、または Gemini)
キーがない場合、ラッパーはルールベースのみのモードで動作します。このモードでは、ツール分類の信頼度が低く、インジェクションスキャンは正規表現のみとなり、リスクゲートで代替案が提示されず、mcpsafety+ パイプラインも利用できません。完全なローカル環境を構築するには、Ollama を実行し、OLLAMA_MODEL を設定したうえで、--provider ollama を明示的に指定してください(Ollama は自動検出されません)。
メモ
ローカルでのセットアップが必要な stdio サーバー(起動前にローカル設定が必要な
stdioサーバー。設定ファイル、認証情報、データディレクトリの不足、または OS 固有の依存関係がある場合)は、ラッパーで検査できません。ツールの検出に失敗し、保存されるツール数は 0 になります。サーバーを起動せずにソースコードのセキュリティスキャンを実行するには、scan/onboardに--github-urlを渡すか、security_scan_serverにgithub_urlパラメーターを渡してください。mcpsafety+ パイプラインが GitHub からソースを直接取得して分析します。sseとstreamable_httpのサーバーには影響しません。
インストール
pip install mcpsafetywarden
すべてのオプションの追加機能を含める場合:
pip install "mcpsafetywarden[all]"
または、特定の追加機能を含める場合:
pip install "mcpsafetywarden[anthropic,snyk]"
ソースからインストールする場合:
git clone https://github.com/gautamvarmadatla/mcpsafetywarden
cd mcpsafetywarden
pip install .
SQLite データベースは、初回実行時にプラットフォームのユーザーデータディレクトリ(Linux では ~/.local/share/mcpsafetywarden/、macOS では ~/Library/Application Support/mcpsafetywarden/、Windows では %APPDATA%\mcpsafetywarden\)に自動作成されます。MCP_DB_PATH で変更できます。
認証情報の保護(自動、操作不要)
register_server または onboard_server に渡されたシークレット値(Bearer トークン、headers または env 内の API キー)は自動的に検出され、モデルコンテキストに渡される前に、不透明な cref_ 識別子に置き換えられます。実際の認証情報はデータベースに暗号化して保存され、接続時にバックグラウンドで解決されます。モデル、会話履歴、ログに表示されるのは常に cref_<id> のみです。
オプション:保存した認証情報の保存時暗号化
pip install cryptography
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
出力されたキーを、サーバーの起動前に MCP_DB_ENCRYPTION_KEY として設定してください。これにより、サーバーの認証情報と cref_ 値の両方が保存時に暗号化されます。
設定
設定はすべて環境変数で行います。
| 変数 | デフォルト | 用途 |
|---|---|---|
MCP_TRANSPORT | stdio | トランスポートモード:stdio、sse、または streamable_http |
MCP_HOST | 127.0.0.1 | HTTP トランスポートのバインドアドレス |
MCP_PORT | 8000 | HTTP トランスポートのバインドポート |
MCP_AUTH_TOKEN | (未設定) | HTTP トランスポート認証用の Bearer トークン |
MCP_DB_ENCRYPTION_KEY | (未設定) | 保存した認証情報を保存時に暗号化する Fernet キー |
ANTHROPIC_API_KEY | (未設定) | Anthropic を LLM プロバイダーとして有効化 |
OPENAI_API_KEY | (未設定) | OpenAI を LLM プロバイダーとして有効化 |
GEMINI_API_KEY または GOOGLE_API_KEY | (未設定) | Gemini を LLM プロバイダーとして有効化(GEMINI_API_KEY を優先) |
OLLAMA_MODEL | (未設定) | Ollama のモデル名(例:llama3.1) |
OLLAMA_BASE_URL | http://localhost:11434/v1 | Ollama API のベース URL |
SNYK_TOKEN | (未設定) | Snyk E001 プロンプトインジェクション検出を有効化 |
MCP_SCANNER_API_KEY | (未設定) | Cisco AI Defense のクラウド ML エンジンキー |
MCP_SCANNER_LLM_API_KEY | (未設定) | Cisco 内部 AST 分析用の LLM キー |
MCP_DB_PATH | (未設定) | SQLite データベースのファイルパスを変更 |
MCP_GRAPH_POLICY | warn | safe_tool_call でのグラフ適用ポリシー:off(無効)、warn(リスクコンテキストをレスポンスに付加)、block(approved=True でない限り、影響範囲が重大または大きいツールを強制的にブロック) |
GITHUB_TOKEN | (未設定) | ソースコードスキャン用の GitHub パーソナルアクセストークン(レート制限を 60 req/hour から 5,000 req/hour に引き上げ) |
セキュリティに関する注意: API キーや暗号化キーをコミットしないでください。stdio サーバーを起動する前に、ラッパーは子プロセスの環境変数から自身のシークレットを削除します。
MCP 統合
Claude Desktop との接続
ラッパーを claude_desktop_config.json に追加します。
{
"mcpServers": {
"mcpsafetywarden": {
"command": "mcpsafetywarden-server",
"args": [],
"env": {
"ANTHROPIC_API_KEY": "sk-ant-...",
"MCP_DB_ENCRYPTION_KEY": "<generated_fernet_key>"
}
},
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/yourname/Documents"]
}
}
}
使用する前に、各サーバーをラッパーに登録します。
mcpsafetywarden register filesystem --transport stdio \
--command npx \
--args '["-y", "@modelcontextprotocol/server-filesystem", "/Users/yourname/Documents"]'
すべてのツール呼び出しをラッパー経由にする必須のゲートウェイ設定については、docs/DEPLOYMENT.md を参照してください。
利用可能な MCP ツール
ツールの詳細については、docs/TOOLS.md を参照してください。
| ツール | 説明 |
|---|---|
onboard_server | 1 回の呼び出しで登録、検査、セキュリティスキャンを実行 |
register_server | サーバーを登録。オプションで自動検査も実行 |
inspect_server | ツール一覧とプロファイルを更新 |
check_server_drift | 保存済みのベースラインと照合し、スキーマとツール一覧のドリフトを検出 |
list_servers | 登録済みの全サーバーを一覧表示 |
list_server_tools | 要約プロファイル付きで、サーバー上のツールを一覧表示 |
preflight_tool_call | 実行せずにリスクを評価 |
safe_tool_call | リスクに応じた制御と代替手段を適用して実行 |
get_tool_profile | 観測された統計情報を含む完全な動作プロファイル |
get_retry_policy | 再試行とタイムアウトに関する推奨事項 |
suggest_safer_alternative | LLM が順位付けした、より安全な代替手段 |
run_replay_test | 冪等性テスト(ツールを 2 回呼び出します) |
security_scan_server | ライブセキュリティ監査(mcpsafety+、Cisco、Snyk) |
scan_all_servers | 登録済みの全サーバーに対して mcpsafety+ パイプラインを実行 |
get_security_scan | 最新の保存済みスキャンレポート |
set_tool_policy | ツールの恒久的な許可/ブロックポリシーを設定 |
get_run_history | ツールの最近の実行履歴 |
ping_server | レイテンシを含む到達可能性チェック |
discover_servers | ファイルシステムをスキャンし、MCP クライアント設定を検出してサーバーエントリを抽出 |
onboard_discovered_servers | 検出されたサーバーを一括登録 |
get_risk_graph | インベントリーのリスクグラフ(サーバー、ツール、検出事項、エージェントクライアント)を作成または照会 |
explain_tool_risk | ツールのリスク経路をたどる:影響範囲、組み合わせによるリスク、MITRE タグ、推奨アクション |
explain_client_risk | 1 つのエージェントクライアント配下の全サーバーについて、サーバー間のリスクを分析 |
analyze_cve_blast_radius | 同じクライアント配下の複数サーバーに影響する CVE を報告 |
export_graph | リスクグラフを JSON または Mermaid 図としてエクスポート |
CLI リファレンス
25 個すべての MCP ツールを網羅する 24 個のサブコマンドがあります。すべてのコマンドで、機械可読な出力に --json を、確認プロンプトの省略に --yes / -y を使用できます。
フラグと使用例を含む詳細なリファレンスについては、docs/CLI.md を参照してください。
補助セキュリティツールとの連携
Kali Linux MCP、Burp Suite MCP、Snyk は、登録するとそれぞれ自動的に連携します。Kali は、実際の nmap/traceroute データで Recon ステージと ping_server を強化します。Burp は、生の HTTP プロービング、アウトオブバンドコールバック、プロキシの証拠を追加します。Snyk は、ツールのメタデータを分析し、インジェクション文字列、ツールのシャドウイング、ハードコードされたシークレット、その他 16 項目をチェックします。
セットアップ手順については、docs/INTEGRATIONS.md を参照してください。
開発
編集可能モードでインストールします。
pip install -e ".[all]"
サーバーを実行してログを確認します。
mcpsafetywarden-server 2>server.log
すべてのモジュールで logging.getLogger(__name__) を使用します。サーバー自体は logging.basicConfig を呼び出しません。インポートする前に、エントリポイントでログを設定してください。
テスト
pytest tests/ -v
LLM を利用したテストを含めるには、LLM API キーを設定してください。設定されていない場合、これらのテストは自動的にスキップされます。分類、インジェクションスキャン、リスクに応じた制御、ポリシー適用の段階的な検証については、docs/TESTING.md を参照してください。
さらに詳しく
| ドキュメント | 内容 |
|---|---|
| docs/TOOLS.md | 25 個すべての MCP ツールの完全なリファレンス |
| docs/CLI.md | CLI のサブコマンド、フラグ、使用例 |
| docs/DASHBOARD.md | ローカル Web ダッシュボード:画面、スキャン、ショートカット、セキュリティモデル |
| docs/INTEGRATIONS.md | Kali、Burp Suite、Snyk のセットアップ |
| docs/DEPLOYMENT.md | stdio、HTTP、コンテナー、ゲートウェイのデプロイ |
| docs/TROUBLESHOOTING.md | よくあるエラーと解決方法 |
| docs/SECURITY.md | シークレット、認証、分離、スキャンの詳細 |
| docs/TESTING.md | 各機能の検証手順 |
| docs/COMPARISON.md | 関連ツールとの比較 |
| docs/ROADMAP.md | 予定されている機能 |
貢献
コードの規約とプルリクエストのガイドラインについては、CONTRIBUTING.md をご覧ください。
ライセンス
Apache License 2.0 です。詳細については LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。