mcpField
M
mcp-server-auditor

mcp-server-auditor

ローカル
github.com/GuardBeeセキュリティ11 日前に更新

mcp-server-auditor について

mcp-server-auditorは、MCP サーバーのソースコードを監査する開発者向けのMCP サーバーです。ツール定義や処理内のリスクパターンを検査し、対処法とSARIF形式の結果を示します。

主な機能

  1. 01ツール定義と処理のスキャン
  2. 025種類のセキュリティリスク検査
  3. 03PythonとGoの入力フロー追跡
  4. 04修正案の提示
  5. 05SARIF 2.1.0形式での出力

活用シーン

  1. 01リリース前のMCP サーバー監査
  2. 02CI/CDへのセキュリティスキャン追加
  3. 03PythonやGoのツール処理の監査

MCP 対応

MCP クライアント向けに、MCP サーバーのコードを監査するscan_text、scan_file、scan_directory、list_patternsツールを提供します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"4hmetuyar-mcp-server-auditor": {
"command": "npx",
"args": [
"-y",
"@guardbee/mcp-server-auditor"
]
}
}
}
起動コマンドnpx -y @guardbee/mcp-server-auditor

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

パッケージ
npm@guardbee/mcp-server-auditor0.1.5

ツール

4

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

パラメーター型必須説明
labelstringいいえ検出結果に表示する任意のラベル(例:ファイル名)
contentstringはいスキャンするコードの内容

詳細

@guardbee/mcp-server-auditor

🇬🇧 English | 🇹🇷 Türkçe | 🇨🇳 中文 | 🇯🇵 日本語 | 🇰🇷 한국어 | 🇧🇷 Português | 🇪🇸 Español | 🇩🇪 Deutsch

npm version npm downloads License: MIT

他のMCPサーバーのツール定義をスキャンし、安全でないパターンを検出するMCP(Model Context Protocol)サーバーです。

ai-code-scannerが一般的なLLM/AI統合コードを調べるのに対し、このパッケージはMCPサーバー自体に特化しています。server.tool(...)で定義されたツールがどれほど強い権限を持つか、パラメーターの制約がどれほど緩いか、ハンドラーがツール入力をシェル/ファイルシステム/HTTP/SQLなどの危険なシンクに直接渡しているかを調べます。MCPエコシステムは急速に拡大していますが、こうしたサーバーのセキュリティを監査するための共通ツールはまだありません。

テレメトリーはデフォルトでオフです。GUARDBEE_TELEMETRY=1を設定すると、サーバー、ツール、成功の有無、所要時間、およびファイルパスなどの短いパラメーター値が送信されます。長い文字列や、content、token、passwordなどのフィールドはプレースホルダーに置き換えられます。詳細は@guardbee/mcp-telemetryを参照してください。

Claude ──► mcp-server-auditor ──► An MCP server's source code
              │
              ├─ Excessive agency    (execSync(input.command), a tool named "run_shell")
              ├─ Unsafe input        (fetch(input.url) → SSRF, SQL string interpolation)
              ├─ Loose schema        (a parameter typed z.any()/z.unknown())
              ├─ Secrets exposure    (a hardcoded API key in a schema default, the entire process.env)
              └─ Network exposure    (wildcard CORS)

特長

  • 10個のパターン、5つのカテゴリ — 過剰な権限、安全でない入力、緩いスキーマ、シークレットの露出、ネットワークの露出
  • PythonおよびGoサーバー:ツール定義(FastMCPのパラメーター、低レベルのarguments、go-sdkの型付き引数、mcp-goのrequest.RequireString(...))から、単純な代入を経て、シェル、ファイルの書き込み/削除、HTTP、SQLの呼び出しに至るまで、ツール入力を追跡します
  • 検出結果にはそれぞれ、リスクの理由と対処方法(recommendation)が含まれます。「検出した」というだけではありません
  • SARIF 2.1.0形式で出力 — CI/CD統合(GitHub Code Scanningなど)
  • guardbee.ymlによる設定ファイルのサポート
  • すべてのパターンに、脆弱なケースと安全なケースのPythonおよびGoフィクスチャを使った陽性テストと陰性(誤検出)テストを用意

クイックスタート

Claude Desktop/MCPクライアント
{
  "mcpServers": {
    "guardbee-mcp-server-auditor": {
      "command": "npx",
      "args": ["-y", "@guardbee/mcp-server-auditor"]
    }
  }
}
CLI(CI/CD)
npx @guardbee/mcp-server-auditor scan ./src --fail-on=high --format=sarif > results.sarif

MCPツール

ツール説明
scan_text指定されたテキスト/コードスニペットをスキャンします
scan_file単一のファイルをスキャンします
scan_directoryディレクトリを再帰的にスキャンします(node_modules、.git、distは自動的にスキップされます)
list_patternsカテゴリ別に、サポートされているすべてのパターンを一覧表示します

検出されるパターン

カテゴリパターン深刻度OWASP意味
過剰な権限shell_exec_from_tool_input重大MCP05:2025ツールハンドラーが、ツール入力を execSync/spawn のようなシェル呼び出しに直接渡します
過剰な権限eval_of_tool_input重大MCP05:2025ツール入力が eval()/new Function() を使ってコードとして実行されます
過剰な権限unrestricted_shell_tool_name高MCP05:2025ツール名(run_shell、execute_sql など)が、シェル/SQL の実行を直接示唆しています
安全でない入力fs_write_from_raw_tool_input高ツール入力からのパスが、検証されずにファイルの書き込み/削除呼び出しに渡されます(パストラバーサル)
安全でない入力ssrf_fetch_from_tool_input高ツール入力からの URL が、許可リストなしで fetch/axios に直接渡されます(SSRF)
安全でない入力sql_injection_via_tool_input重大MCP05:2025テンプレートリテラルを使って、ツール入力が SQL 文字列に埋め込まれます
緩すぎるスキーマoverly_permissive_tool_schema中ツールのパラメーターが z.any()/z.unknown() として型指定されており、あらゆる値を受け付けます
シークレットの漏えいhardcoded_secret_in_tool_schema重大認証情報のようなスキーマフィールドのデフォルト値が、ハードコードされたリテラルです
シークレットの漏えいfull_env_exposed_to_tool_caller重大process.env 全体が展開/文字列化/返却されています(名前付き変数は対象外)
ネットワークへの露出permissive_cors_on_server中ワイルドカード CORS(Access-Control-Allow-Origin: *)、またはオプションなしの cors() が使われています
Python と Go

Python(.py)と Go(.go)のファイルも、ツール入力のデータフローチェックの対象になります。ツールの入力名は定義から取得され、ハンドラー内の単純な代入(command = f"du {directory}")をたどります。入力がシンク呼び出しに到達すると、問題が報告されます。

パターン深刻度シンク
python_shell_from_tool_input重大subprocess.*、os.system、os.popen、asyncio.create_subprocess_*
python_eval_of_tool_input重大eval、exec
python_fs_write_from_tool_input高open(..., "w"/"a"/"x")、os.remove/rename/…、shutil.rmtree/move、Path(...).write_text/unlink
python_ssrf_from_tool_input高requests.*、httpx.*、client.get(...)、urlopen(URL 引数)
python_sql_injection_via_tool_input重大cursor.execute(f"...{x}...")、%/.format/+
go_shell_from_tool_input重大(sh -c)、高(引数リスト)exec.Command、exec.CommandContext
go_fs_write_from_tool_input高os.WriteFile、os.Remove、os.RemoveAll、os.Rename、os.Create、書き込み用の os.OpenFile
go_ssrf_from_tool_input高http.Get/Post/NewRequest…、client.Get
go_sql_injection_via_tool_input重大fmt.Sprintf または + を使う db.Query…/Exec…

ハンドラーがパスをベースディレクトリと照合する場合(is_relative_to、commonpath、.parents、filepath.IsLocal、filepath.Rel、strings.HasPrefix)、ファイルに関する検出結果はスキップされます。HTTP に関する検出結果は、ホストの許可リストを照合する場合にスキップされます。run_shell、execute_sql などの名前のツールは、どちらの言語でも報告されます。Rust、Java、Kotlin、C# などの言語では、言語に依存しないパターンのみが検出されます。

これらの検出結果はヒューリスティックなものです。完全な AST/型解析ではなく、静的なテキストパターンのスキャンによるものです。誤検出を低く抑えるよう設計されていますが、検出結果はすべて手動で確認してください。


設定(guardbee.yml)

mcp-server-auditor:
  fail-on: high       # any | critical | high | medium | low | none
  max-files: 5000
  exclude:
    - ".test.ts"
    - "fixtures/"

開発

npm run build
npm test

ライセンス

MIT — GuardBee

フィードバック

質問、アイデア、または誤検出がありましたか?GitHub Discussionsでスレッドを開始するか、issue を作成してください。GuardBee が役に立った場合は、リポジトリに ⭐ を付けていただくと、ほかの人にも見つけてもらいやすくなります。

コメント

MCP は初めてですか?

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

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