mcp-scan について
mcp-scanは、MCPサーバーのリスクを確認する開発者やチーム向けのパッシブなセキュリティスキャナーです。公開機能を静的に検査してA〜Fで評価し、コンソール、JSON、SARIF形式でレポートを出力します。
主な機能
- 01OWASP MCP Top 10の12項目を検査
- 02ツール、プロンプト、リソースの静的検査
- 03ツール横断のtoxic-flow分析
- 04A〜F評価と0〜100のスコア
- 05コンソール、JSON、SARIFレポート
- 06CLIとMCPサーバーモード
活用シーン
- 01クライアントへの追加前にサーバーを確認
- 02HTTPまたはstdioのMCPエンドポイントをスキャン
- 03SARIFの結果を使ってCIを制御
MCP 対応
公開されたツール、プロンプト、リソースを列挙してMCPサーバーを検査し、ツール自体は呼び出しません。サーバーモードでは、MCPクライアントに`scan_mcp_server`と`list_checks`を公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
2掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| env | object | いいえ | stdio の子プロセスに渡す環境変数。 |
| url | string | いいえ | リモートの Streamable-HTTP または SSE MCP サーバーの URL。これまたは 'command' を指定してください。 |
| args | array | いいえ | stdio コマンドの引数。例:['-y', '@modelcontextprotocol/server-filesystem', '/tmp']。 |
| format | enum | いいえ | レポート形式。'summary'(デフォルト)は読みやすい要約、'json' と 'sarif' は機械可読形式です。summary | json | sarif |
| command | string | いいえ | stdio MCP サーバーの実行ファイル。例:'npx'。これまたは 'url' を指定してください。 |
| headers | object | いいえ | url ターゲットに指定する HTTP ヘッダー。例:{ "Authorization": "Bearer ..." }。 |
詳細
🛡️ mcp-scan
Model Context Protocol サーバー向けのパッシブセキュリティスキャナーです。 稼働中の任意の MCP サーバーを指定すると、稼働中のサーバーを OWASP MCP Top 10 に照らして監査し、A~F で評価します。読み取り専用なので、本番環境に対しても安全に実行できます。
npx owasp-mcp-scan --stdio "npx -y @modelcontextprotocol/server-filesystem /tmp"
インストール数上位 12 の MCP サーバーに対して実行しました。9 つが不合格でした。 インストール不要、設定不要、何も悪用しません。
なぜ必要なのか
MCP ツールの説明はそのままモデルのコンテキストに渡されますが、公開サーバーの多くはセキュリティレビューを受けたことがありません。悪意のあるサーバーは、説明に指示を隠したり、シェルを直接実行するツールを公開したり、キーを漏えいさせたりする可能性があり、エージェントはそれに従って動作します。Endor Labs によると、サーバーの 82% にパストラバーサルの脆弱性があり、34% にコマンドインジェクションの脆弱性があるとされています。
mcp-scan は、サーバーを接続する前に安全性を確認するためのツールです。 パッシブ方式で、公開されている機能を読み取り、静的に分析します。ツールを呼び出すことはないため、本番サーバーに対しても安全です。
仕組み
- stdio または Streamable HTTP 経由でサーバーに接続し、公開されているすべてのツール、プロンプト、リソースを列挙します。
- その対象に対して、シークレット、インジェクション、SSRF、パストラバーサル、ツールポイズニング、過剰な権限などを含む 12 種類の静的チェックを実行します。
toxic-flowは、単一ツールのスキャナーでは見逃される形である致命的な三要素(プライベートデータの読み取り+信頼できないコンテンツの取り込み+データの外部流出が可能)を検出するため、ツールセット全体を分析します。- 0~100 点で採点し、A~F で評価します(重大な問題が 1 つでもあれば F になります)。コンソール、JSON、SARIF 形式で出力します。
ツールの呼び出しやファジングは行わず、エクスプロイトも送信しません。行うのは、サーバーがすでに誰にでも公開している情報の読み取りだけです。
実際のサーバーで見つかった実際の問題
人気のある npm サーバー 12 件での実際の出力(スナップショット:2026-07-11、ベンチマーク全文):
| サーバー | ツール数 | 評価 | 🔴 | 🟠 | 🟡 | 主な指摘 |
|---|---|---|---|---|---|---|
firecrawl-mcp | 26 | F | 2 | 11 | 1 | 致命的な三要素(MCP10)+code の実行(MCP05) |
@modelcontextprotocol/server-filesystem | 14 | F | 0 | 1 | 11 | 制約のないパスパラメーター(MCP01) |
@modelcontextprotocol/server-puppeteer | 7 | F | 1 | 2 | 0 | script パラメーターが JS を実行(MCP05) |
tavily-mcp | 5 | F | 0 | 3 | 1 | 信頼できない入力+データの外部流出(MCP10) |
@modelcontextprotocol/server-memory | 9 | F | 0 | 3 | 0 | 確認なしの delete_* ツール(MCP02) |
@modelcontextprotocol/server-github | 26 | D | 0 | 0 | 2 | 状態を変更するツール(MCP02) |
@modelcontextprotocol/server-slack | 8 | C | 0 | 1 | 0 | 読み取り+投稿=データ取得+外部流出(MCP10) |
@modelcontextprotocol/server-everything | 13 | A | 0 | 0 | 0 | 問題なし ✓ |
@kazuph/mcp-fetch | 1 | A | 0 | 0 | 0 | 問題なし ✓ |
12 件中 9 件に問題が見つかり、3 件は問題なし。すべての行を指摘事項ごとに監査し、誤検知を水増しせずに除外しました。次の手順で、どの行も自分で再現できます。
npx owasp-mcp-scan --stdio "npx -y firecrawl-mcp" # F: lethal trifecta + code exec
npx owasp-mcp-scan --stdio "npx -y @modelcontextprotocol/server-everything" # A: clean
使い方
CLI
npx owasp-mcp-scan --stdio "<command>" # local stdio server
npx owasp-mcp-scan --url https://host/mcp --header "Authorization: Bearer $TOKEN"
npx owasp-mcp-scan --config ~/.cursor/mcp.json --format sarif --output mcp.sarif
MCP サーバーとして、必要に応じてエージェントにサーバーをスキャンさせることができます(「追加する前に、この MCP サーバーをスキャンして」)。任意のクライアントに追加できます。この mcpServers の形式は、Claude Code、Claude Desktop、Cursor、Windsurf、VS Code、Gemini CLI で使用できます。
{ "mcpServers": { "mcp-scan": { "command": "npx", "args": ["-y", "owasp-mcp-scan", "--serve"] } } }
OpenAI Codex(~/.codex/config.toml):
[mcp_servers.mcp-scan]
command = "npx"
args = ["-y", "owasp-mcp-scan", "--serve"]
2 つのツールを公開します。scan_mcp_server(stdio/HTTP ターゲットを監査)と list_checks です。
Claude Code プラグイン
/plugin marketplace add CodingSelim/mcp-scan
/plugin install mcp-scan@mcp-scan
公式 MCP レジストリにも io.github.CodingSelim/mcp-scan として登録されています。公開手順については、PUBLISHING.md を参照してください。
チェック内容
OWASP MCP Top 10 (2025) を全面的にカバーする、12 項目のチェックです。
| チェック | OWASP | 検出内容 |
|---|---|---|
secret-exposure | MCP01 | 公開されているテキスト内の AWS/OpenAI/Anthropic/GitHub/GitLab/Stripe/SendGrid/npm/HF/DB URI/JWT/秘密鍵 |
transport | MCP01 | ループバック以外のホストへの平文 http:// |
path-traversal | MCP01 | file:///{path} テンプレートと制約のないパスパラメーター |
excessive-scope | MCP02 | 確認なしで実行できる破壊的なツール(delete、drop、transfer) |
tool-poisoning | MCP03 | 指示の上書き、隠された情報流出の指示、ゼロ幅文字/Unicode タグを利用した隠蔽 |
tool-shadowing | MCP03 / MCP09 | 重複するツール名の衝突と、「先に自分を呼び出す」よう優先順位を注入する攻撃 |
supply-chain | MCP04 / MCP09 | バージョンが固定されていない/プレースホルダーのバージョンと、同形異字を使ったサーバー名 |
command-injection | MCP05 | 制約のない command/shell/code パラメーター、生の SQL、実行機能の公開 |
ssrf | MCP05 | 許可リストのない任意の url/host パラメーター |
tool-poisoning(動的) | MCP06 | リソースの内容やサーバーの指示に含まれるインジェクション |
authn | MCP07 | 認証なしのハンドシェイクを完了する HTTP サーバー |
telemetry | MCP08 | 監査証跡のない影響の大きいツール(参考情報、スコア対象外) |
toxic-flow | MCP10 | 致命的な三要素:プライベートデータを読み取り、信頼できないコンテンツを取り込み、情報を流出させられる 1 つのサーバー |
toxic-flow は特に優れた機能です。ツールセット全体を横断して分析し、ツール単位のチェックでは見逃される GitHub-MCP/メールエージェントへのインジェクションのパターンを検出します。
出力と CI
console(デフォルト)・json・sarif(GitHub Code Scanning)を利用できます。終了コードは --fail-on(デフォルトは high)以上の場合に非ゼロとなるため、CI のゲートとして使用できます。
- run: npx owasp-mcp-scan --url ${{ secrets.MCP_URL }} --format sarif --output mcp.sarif
- uses: github/codeql-action/upload-sarif@v3
with: { sarif_file: mcp.sarif }
制限事項(必ずお読みください)
- 静的解析では実行時のサンドボックス化を確認できません。パスを安全に制限しているサーバーでも検出されます。実際の強制設定を確認してください。
- 認証とトランスポートのチェックは、HTTP ターゲットにのみ適用されます。
- ヒューリスティックは再現率を重視しているため、検出結果は状況に応じてトリアージしてください。誤検出をなくすためにルールを厳格化する際は、意図した動作をテストで固定します。
- stdio ターゲットのスキャンでは対象のコマンドが起動されるため、信頼できるサーバーに対してのみ実行してください。
開発
npm install && npm run build && npm test # 48 tests, incl. live end-to-end fixture scans
チェックは純粋で独立しており(src/checks/)、src/detectors/ の検出器を再利用しています。CONTRIBUTING.md を参照してください。
参考資料
OWASP MCP Top 10 · MCP Security Cheat Sheet · Vulnerable MCP Project · MCPTox
MIT © CodingSelim
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。