mcpField
M
mcp-scan

mcp-scan

ローカル
github.comセキュリティ016 週間前に更新

mcp-scan について

mcp-scanは、MCPサーバーのリスクを確認する開発者やチーム向けのパッシブなセキュリティスキャナーです。公開機能を静的に検査してA〜Fで評価し、コンソール、JSON、SARIF形式でレポートを出力します。

主な機能

  1. 01OWASP MCP Top 10の12項目を検査
  2. 02ツール、プロンプト、リソースの静的検査
  3. 03ツール横断のtoxic-flow分析
  4. 04A〜F評価と0〜100のスコア
  5. 05コンソール、JSON、SARIFレポート
  6. 06CLIとMCPサーバーモード

活用シーン

  1. 01クライアントへの追加前にサーバーを確認
  2. 02HTTPまたはstdioのMCPエンドポイントをスキャン
  3. 03SARIFの結果を使ってCIを制御

MCP 対応

公開されたツール、プロンプト、リソースを列挙してMCPサーバーを検査し、ツール自体は呼び出しません。サーバーモードでは、MCPクライアントに`scan_mcp_server`と`list_checks`を公開します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"codingselim-mcp-scan": {
"command": "npx",
"args": [
"-y",
"owasp-mcp-scan"
]
}
}
}
起動コマンドnpx -y owasp-mcp-scan

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmowasp-mcp-scan0.2.1

ツール

2

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
envobjectいいえstdio の子プロセスに渡す環境変数。
urlstringいいえリモートの Streamable-HTTP または SSE MCP サーバーの URL。これまたは 'command' を指定してください。
argsarrayいいえstdio コマンドの引数。例:['-y', '@modelcontextprotocol/server-filesystem', '/tmp']。
formatenumいいえレポート形式。'summary'(デフォルト)は読みやすい要約、'json' と 'sarif' は機械可読形式です。summary | json | sarif
commandstringいいえstdio MCP サーバーの実行ファイル。例:'npx'。これまたは 'url' を指定してください。
headersobjectいいえurl ターゲットに指定する HTTP ヘッダー。例:{ "Authorization": "Bearer ..." }。

詳細

🛡️ mcp-scan

Model Context Protocol サーバー向けのパッシブセキュリティスキャナーです。 稼働中の任意の MCP サーバーを指定すると、稼働中のサーバーを OWASP MCP Top 10 に照らして監査し、A~F で評価します。読み取り専用なので、本番環境に対しても安全に実行できます。

npm License: MIT Node CI Tests OWASP MCP Top 10

npx owasp-mcp-scan --stdio "npx -y @modelcontextprotocol/server-filesystem /tmp"
mcp-scan のコンソールレポート:firecrawl-mcp は重大な指摘事項があり F 評価

インストール数上位 12 の MCP サーバーに対して実行しました。9 つが不合格でした。 インストール不要、設定不要、何も悪用しません。


なぜ必要なのか

MCP ツールの説明はそのままモデルのコンテキストに渡されますが、公開サーバーの多くはセキュリティレビューを受けたことがありません。悪意のあるサーバーは、説明に指示を隠したり、シェルを直接実行するツールを公開したり、キーを漏えいさせたりする可能性があり、エージェントはそれに従って動作します。Endor Labs によると、サーバーの 82% にパストラバーサルの脆弱性があり、34% にコマンドインジェクションの脆弱性があるとされています。

mcp-scan は、サーバーを接続する前に安全性を確認するためのツールです。 パッシブ方式で、公開されている機能を読み取り、静的に分析します。ツールを呼び出すことはないため、本番サーバーに対しても安全です。

仕組み

  1. stdio または Streamable HTTP 経由でサーバーに接続し、公開されているすべてのツール、プロンプト、リソースを列挙します。
  2. その対象に対して、シークレット、インジェクション、SSRF、パストラバーサル、ツールポイズニング、過剰な権限などを含む 12 種類の静的チェックを実行します。
  3. toxic-flow は、単一ツールのスキャナーでは見逃される形である致命的な三要素(プライベートデータの読み取り+信頼できないコンテンツの取り込み+データの外部流出が可能)を検出するため、ツールセット全体を分析します。
  4. 0~100 点で採点し、A~F で評価します(重大な問題が 1 つでもあれば F になります)。コンソール、JSON、SARIF 形式で出力します。

ツールの呼び出しやファジングは行わず、エクスプロイトも送信しません。行うのは、サーバーがすでに誰にでも公開している情報の読み取りだけです。

実際のサーバーで見つかった実際の問題

人気のある npm サーバー 12 件での実際の出力(スナップショット:2026-07-11、ベンチマーク全文):

サーバーツール数評価🔴🟠🟡主な指摘
firecrawl-mcp26F2111致命的な三要素(MCP10)+code の実行(MCP05)
@modelcontextprotocol/server-filesystem14F0111制約のないパスパラメーター(MCP01)
@modelcontextprotocol/server-puppeteer7F120script パラメーターが JS を実行(MCP05)
tavily-mcp5F031信頼できない入力+データの外部流出(MCP10)
@modelcontextprotocol/server-memory9F030確認なしの delete_* ツール(MCP02)
@modelcontextprotocol/server-github26D002状態を変更するツール(MCP02)
@modelcontextprotocol/server-slack8C010読み取り+投稿=データ取得+外部流出(MCP10)
@modelcontextprotocol/server-everything13A000問題なし ✓
@kazuph/mcp-fetch1A000問題なし ✓

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-exposureMCP01公開されているテキスト内の AWS/OpenAI/Anthropic/GitHub/GitLab/Stripe/SendGrid/npm/HF/DB URI/JWT/秘密鍵
transportMCP01ループバック以外のホストへの平文 http://
path-traversalMCP01file:///{path} テンプレートと制約のないパスパラメーター
excessive-scopeMCP02確認なしで実行できる破壊的なツール(delete、drop、transfer)
tool-poisoningMCP03指示の上書き、隠された情報流出の指示、ゼロ幅文字/Unicode タグを利用した隠蔽
tool-shadowingMCP03 / MCP09重複するツール名の衝突と、「先に自分を呼び出す」よう優先順位を注入する攻撃
supply-chainMCP04 / MCP09バージョンが固定されていない/プレースホルダーのバージョンと、同形異字を使ったサーバー名
command-injectionMCP05制約のない command/shell/code パラメーター、生の SQL、実行機能の公開
ssrfMCP05許可リストのない任意の url/host パラメーター
tool-poisoning(動的)MCP06リソースの内容やサーバーの指示に含まれるインジェクション
authnMCP07認証なしのハンドシェイクを完了する HTTP サーバー
telemetryMCP08監査証跡のない影響の大きいツール(参考情報、スコア対象外)
toxic-flowMCP10致命的な三要素:プライベートデータを読み取り、信頼できないコンテンツを取り込み、情報を流出させられる 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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。