
MCPサーバーをラップするプロキシサーバーで、行動プロファイリング、セキュリティスキャン、リスクゲーティング、安全な実行を提供します。プロンプトインジェクション、悪意のあるツールメタデータ、引数インジェクション、ソースコードリスク、認証情報の露出を検出します。
MCP Safety Wardenは、任意のMCPサーバーをラップし、動作プロファイリング、セキュリティスキャン、リスクゲーティング、安全な実行をそのツールに追加するプロキシサーバーです。
[!IMPORTANT] 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段階パイプライン(Recon、Planner、Hacker、Auditor、Supervisor)。Cisco AI Defense(AST/YARA)。Snyk(メタデータ分析)。KaliおよびBurp Suite連携により、実際のネットワークデータとHTTP層プローブでパイプラインを強化。GitHubからのソースコードスキャン(エントロピー、AST、テイントフロー、ラグプル検出)。
図2. mcpsafety+5段階パイプライン。任意のMCPサーバーで完全なセキュリティ監査を実行すると起動します。
安全な実行:引数スキャン(20以上の攻撃カテゴリ、LLMによる二次パス)。2層の出力インジェクションスキャン。リスクゲーティング(代替案とツールごとのポリシー)。呼び出しごとのドリフト検出とスタンドアロンチェック。
図3. 安全実行パイプライン:プロキシされるすべてのツール呼び出しが通過する5つのチェック
CLI:24のサブコマンド、対話型リスクメニュー、すべてのコマンドに--jsonフラグ、CI用の--yes。
検出内容
キーがない場合、ラッパーはルールベースのみのモードで動作します:ツール分類の信頼度低下、正規表現のみのインジェクションスキャン、リスクゲートに代替案なし、mcpsafety+パイプラインなし。完全にローカルなセットアップを行うには、Ollamaを実行し、OLLAMA_MODELを設定し、--provider ollamaを明示的に指定してください(Ollamaは自動検出されません)。
[!NOTE] ローカルセットアップが必要なstdioサーバー(設定ファイル、資格情報、データディレクトリ、OS固有の依存関係が不足しているために起動前にローカル設定が必要なstdioサーバー)はラッパーで検査できません。ツール検出に失敗し、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_値の両方が保存時に暗号化されます。
すべての設定は環境変数を介して行います。
セキュリティ注意: APIキーや暗号化キーをリポジトリにコミットしないでください。ラッパーはstdioサーバーを起動する前に、子プロセス環境から自身の秘密情報を削除します。
claude_desktop_config.jsonにラッパーを追加します:
{
"mcpServers": {
"mcpsafetywarden": {
"command": "mcpsafetywarden-server",
"args": [],
"env": {
"ANTHROPIC_API_KEY": "sk-ant-...",
"MCP_DB_ENCRYPTION_KEY": "<生成したFernetキー>"
}
},
"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を参照してください。
完全なツールリファレンスはdocs/TOOLS.mdを参照してください。
25のMCPツールすべてをカバーする24のサブコマンド。すべてのコマンドが機械可読出力用の--jsonと確認プロンプトをスキップする--yes / -yをサポートしています。
完全なリファレンス(フラグと例を含む)はdocs/CLI.mdを参照してください。
Kali Linux MCP、Burp Suite MCP、Snykは、登録されると自動的に統合されます。KaliはReconステージとping_serverに実際のnmap/tracerouteデータを追加します。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を参照してください。
コード標準とプルリクエストガイドラインについてはCONTRIBUTING.mdを参照してください。
Apache License 2.0。詳細はLICENSEを参照してください。
| 変数 | デフォルト | 目的 |
|---|
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 | (未設定) | LLMプロバイダーとしてAnthropicを有効化 |
OPENAI_API_KEY | (未設定) | LLMプロバイダーとしてOpenAIを有効化 |
GEMINI_API_KEY または GOOGLE_API_KEY | (未設定) | LLMプロバイダーとしてGeminiを有効化(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から5,000リクエスト/時間に引き上げ) |
| ツール | 機能 |
|---|
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図としてエクスポート |
| ドキュメント | 内容 |
|---|
| docs/TOOLS.md | 25のMCPツールすべての完全リファレンス |
| docs/CLI.md | CLIサブコマンド、フラグ、例 |
| 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 | 計画中の機能 |