MCPサーバーが宣言する内容をチェック
ツールの説明文はドキュメンテーションではありません。クライアントは、ツールが呼び出される前に tools/list でツール名と説明文を受け取り、それらがモデルのコンテキストに入ります。つまり、説明文は唯一意味のある方法で実行可能です。それは指示を運ぶことができるのです。
これが適用される状況
- MCPサーバーをエージェントに追加し、それが何を公開するのかを知りたい場合
- エージェントが呼び出せるサードパーティツールを問うセキュリティレビューがある場合
- エージェントが異常な動作を示し、ツール説明文が疑わしい場合
実行方法
pip install "git+https://github.com/sushant-me/mcpaudit"
mcpaudit audit tools.json # 発見があれば終了コード1、なければ0
PyPIではなくリポジトリからインストールしてください。PyPI上の mcpaudit という名前は別の無関係なプロジェクトであり、そのCLIはファイル引数を受け付けません。
tools.json はクライアントが受け取ったものから取得します:mcp-client --list > tools.json、またはベンダーの公開宣言ファイル(何も実行しないので最適)を使用します。パイプも機能します:mcp-client --list | mcpaudit audit -
11のチェック項目
critical — reserved-name-collision:フレームワークがツールテーブル 外 にインストールする名前(set_model_response、google_search、finish)を持つツール。これにより、プリミティブが静かに置き換えられます。
high — instruction-in-declaration、invisible-characters、look-alike-tool-names、destructive-declared-read-only、duplicate-tool-name。
medium / low — confusable-tool-name、missing-annotations、unconstrained-sink-parameter、url-in-description、undocumented-tool。
これらのうち2つは、宣言を読むだけでは確認できません。Unicodeの タグブロック は、印字可能なASCIIを可視幅がゼロのテキストにエンコードし、mcpaudit はそれがデコードしたものを報告します。同じASCIIに正規化される2つの名前(search / ѕearch)は、記憶から書かれた許可リストを無効化します。
トリアージ
重大度の高いものから順に作業します。critical の発見は停止を意味します:接続する前に、それを解決するか、リスクを文書で承認してもらいます。クリーンな結果は結果です。適切に動作するサーバーはゼロ件の発見を生成し、レビュー担当者が迅速に承認できるようになります。
制限
これは 宣言を読み取るものであり、動作を検証するものではありません。サーバーの実装が正しいかどうかを判断することはできず、広告されている内容がモデルの前に置いても安全かどうかのみを判断します。
実施側の機能が必要な場合
承認されたツールセットをポリシーファイルとして固定し、レビュー後にサーバーが静かに説明文を変更した場合にCIを失敗させる(静かに変更されないようにする)機能は、有料版です:MCP Server Security Review(Agensiに掲載予定)。その掲載が有効になるまでは、実例付きのルールリファレンスが https://github.com/sushant-me/mcpaudit-mcp-security にあります。
制限
これは 宣言を読み取るものであり、動作を検証するものではありません。サーバーの実装が正しいかどうかを判断することはできず、広告されている内容がモデルの前に置いても安全かどうかのみを判断します。