MCPサーバをスキャンするツール・MCP Scanについて調べてみた

MCPサーバをスキャンするツール・MCP Scanについて調べてみた

Clock Icon2025.04.22

MCPサーバが次々と発表されていますが、その一方でそのセキュリティリスクについても多く指摘されるようになってきました。
直近では、MCPツールのdescription(説明文)にユーザーに見えない指示文を仕込み、悪意のある挙動を引き起こすツール汚染(Tool Poisoning)攻撃などが報告されています。

https://invariantlabs.ai/blog/mcp-security-notification-tool-poisoning-attacks

そんな状況に対応して、MCPサーバに問題ないかをスキャンするツールも登場しはじめました。

MCPの有用なセキュリティ情報をまとめたawesome-mcp-securityというGithubリポジトリでも、MCPサーバスキャンツールがいくつか紹介されています。

https://github.com/Puliczek/awesome-mcp-security

そのうちの一つである「MCP Scan」について実際に動かして調べてみたので、本記事で紹介していきたいと思います。

MCP Scanの概要

Invariant Labsという企業が提供しているMCPサーバのスキャンツールです。

https://github.com/invariantlabs-ai/mcp-scan

チェックする脆弱性としては、「Prompt injections」「Tool poisoning」「cross-origin escalations」が挙げられています。

MCP-Scan is a security scanning tool designed to go over your installed MCP servers and check them for common security vulnerabilities like prompt injections, tool poisoning and cross-origin escalations.

Invariant Labsは安全なAIの研究を行っている企業のようで、Invariant Guardrailsという、AIエージェントに対してセキュリティを保護するレイヤーを追加するサービスなどを提供しています。ちなみに冒頭で紹介したTool Poisoning攻撃の記事もこのInvariant Labsのものですね。

注意事項

MCP ScanはOSSツールですが、仕様としてInvariant Labsの提供するAPIに調査対象のMCPサーバの情報を送信する仕組みです。このため、リポジトリのREADMEでは以下のように「MCP Scanを使うとAPIでInvariantにツール名とツールのdescription情報が共有されること」「利用すると自動的にInvariantの利用規約・[プライバシーポリシー]https://invariantlabs.ai/privacy-policy)に同意したとみなすこと」「収集した情報はセキュリティの調査にのみ利用すること」などが記載されています。ツールの情報を共有したくない場合はMCP Scanは利用しないように、とも記載されているので、利用にあたってはこの点ご注意ください。

It then scans tool descriptions, both with local checks and by invoking Invariant Guardrailing via an API. For this, tool names and descriptions are shared with invariantlabs.ai. By using MCP-Scan, you agree to the invariantlabs.ai terms of use and privacy policy.

Invariant Labs is collecting data for security research purposes (only about tool descriptions and how they change over time, not your user data). Don't use MCP-scan if you don't want to share your tools.

なお、APIは利用するものの、APIキーなどは現状不要なので無償で実行可能です(2025年4月22日時点)。

実際に動かしてみる

uvxを使うことで最新版のプログラムでとりあえず動かすことができます。実行結果は以下の通りです。

% uvx mcp-scan@latest
Installed 34 packages in 23ms
Invariant MCP-scan v0.1.4.7

● Scanning ~/.codeium/windsurf/mcp_config.json file does not exist

● Scanning ~/.cursor/mcp.json file does not exist

● Scanning ~/Library/Application
Support/Claude/claude_desktop_config.json found 2 servers
│
├── perplexity-ask
│   ├── tool perplexity_ask            ✅ verified
│   ├── tool perplexity_research       ✅ verified
│   └── tool perplexity_reason         ✅ verified
└── notionApi
    ├── tool API-get-user              ✅ verified
    ├── tool API-get-users             ✅ verified
    ├── tool API-get-self              ✅ verified
    ├── tool API-post-database-query   ✅ verified
    ├── tool API-post-search           ✅ verified
    ├── tool API-get-block-children    ✅ verified
    ├── tool API-patch-block-children  ✅ verified
    ├── tool API-retrieve-a-block      ✅ verified
    ├── tool API-update-a-block        ✅ verified
    ├── tool API-delete-a-block        ✅ verified
    ├── tool API-retrieve-a-page       ✅ verified
    ├── tool API-patch-page            ✅ verified
    ├── tool API-post-page             ✅ verified
    ├── tool API-create-a-database     ✅ verified
    ├── tool API-update-a-database     ✅ verified
    ├── tool API-retrieve-a-database   ✅ verified
    ├── tool API-retrieve-a-page-pr... ✅ verified
    ├── tool API-retrieve-a-comment    ✅ verified
    └── tool API-create-a-comment      ✅ verified

● Scanning ~/.vscode/mcp.json file does not exist

● Scanning ~/Library/Application Support/Code/User/settings.json could
not parse file

上記はuvxでプログラムをダウンロードして実行する場合ですが、ローカルにインストールして利用したい場合は、Githubでリポジトリをクローンしたあとuv run pip install -e .でインストール。uv run -m src.mcp_scan.cliで実行できます。

MCPサーバとしてPerplexityとNotionの2つをClaude Deskytopに登録していましたが、その2つのMCPツールをそれぞれ検出して調べてくれていますね!結果は両者とも問題なしとなっています。

確認する設定情報について

出力を見ると分かりますが、MCP ScanはまずMCPのクライアントの設定ファイルを読みに行ってどんなMCPサーバが登録されているかを確認していました。プログラム内で、既知の有名なMCPクライアントアプリケーションのMCP設定ファイルのパスを、WELL_KNOWN_MCP_PATHS として定義しており、デフォルトでこのパスから情報を確認しているようです。
OSによってパスの情報は変わるようになっていますが、たとえばMacだと以下の通りでした。

elif sys.platform == "darwin":
    # OS X
    WELL_KNOWN_MCP_PATHS = [
        "~/.codeium/windsurf/mcp_config.json",  # windsurf
        "~/.cursor/mcp.json",  # cursor
        "~/Library/Application Support/Claude/claude_desktop_config.json",  # Claude Desktop mac
        "~/.vscode/mcp.json",  # vscode
        "~/Library/Application Support/Code/User/settings.json",  # vscode mac
    ]

任意の設定ファイルをスキャンさせたい場合は、コマンド実行時以下のようにscan <file1> <file2>...といった形で指定すればいいようです。

uvx mcp-scan@latest scan my_mcp_config1.json my_mcp_config2.json

スキャンでチェックする情報について

このプログラムは、上述したようにAPIにはツールとそのdescriptionのみを送信する仕組みです。そのためチェックする対象はツールの説明文のようです。これは冒頭に紹介したように、現状MCPの代表的な脅威がツールの説明文に攻撃を仕込むツール汚染攻撃であるためと思われます。

ただ、単純にdescriptionの内容だけをチェックするというわけではなく、ツールの説明文のハッシュ値を取得し、改ざんされていた場合に検知することなどもできるようです。プログラムでは、スキャンから除外したいツールについて、ハッシュ値のホワイトリストを登録する機能も用意されています。ハッシュ値で登録するので、ホワイトリストに入れたツールでも改ざんされた場合は検知できるわけですね。

おわりに

ということで、MCP Scanのご紹介でした。

  • 内部で提供している企業のAPIを利用する点
  • プログラムの詳細なロジックをスキャンするわけではなく、あくまでツールのdescriptionベースで調査を行う点
    は留意が必要ですが、現在脅威となっているツール汚染攻撃への対策としては有効であると思います。
    MCPサーバのセキュリティ対策の一環として検討してみても良いのではないでしょうか。

ではでは。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.