MCP-scanでMCP Serverのトラフィックを監視、特定の操作をブロックしてみる
GitHubの公式MCP Serverの脆弱性に関する記事を見ていた時に MCP-scan というMCPセキュリティツールが気になった。
MCP-scanというツールはMCP Serverのトラフィックを監視したり、Guardrailsというものを設定するとMCP Serverの特定の操作をブロックすることができます。
実際にMCP-scanを用いてGitHub MPC Serverの特定のtoolsを利用しようとした際に操作をブロックしてくれるのか試してみました。
環境
- AIエージェント
- Gemini CLI 0.10.0
- https://github.com/google-gemini/gemini-cli
- MCP Server
- GitHub MCP Server
- https://github.com/github/github-mcp-server
- MCP-scan
- https://github.com/invariantlabs-ai/mcp-scan
-
pip install mcp-scanでインストール
ディレクトリ構成・ファイル
.
├── .env # GitHubのPATを設定
└── .gemini
└── settings.json # Gemini CLIでGitHub MCP Serverを利用する設定
GITHUB_PAT=<GitHubのPATを設定する>
{
"mcpServers": {
"github": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"type": "stdio",
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "$GITHUB_PAT"
}
}
}
}
MCP Serverのトラフィックが監視されていることを確認する
MCP-scanを起動する。起動する際にGemini CLIのsetting.jsonを指定します。
mcp-scan proxy ./.gemini/settings.json

MCP-scanを実行したまま、Gemini CLIで自分が所有しているリポジトリ一覧を表示するように指示するとMCP-scanの方でMCP Serverのトラフィックが出力される。
例えばGemini CLIに「自分が所有するリポジトリを5つ表示して」という指示を出した時はGitHub MCP Serverの search_repositories を用いてリポジトリ情報を取得しているのがわかる。

Guardrailsでルールを設定して特定のトラフィックをブロックする
Guardrailsという機能を用いてルールに合致したトラフィックがあった場合、そのトラフィックをブロックすることができる。
ルールは ~/.mcp-scan/guardrails-config.ymlに記載して設定する。
# issueの一覧取得をブロックしたい場合
gemini-cli-mcp-client: # MCP Client名
servers:
github-mcp-server: # MCP Server名
tools:
list_issues:
enabled: false # falseを指定することでブロックする
上記設定をした後にMCP-scanとGemini CLIを再起動する。
Gemini CLIで「リポジトリのissue一覧を表示して」という指示を出すと、list_issuesを実行する時にGuardrailsのルールに合致するため実行自体がブロックされる。


また、特定のリポジトリだけ実行をブロックしたい場合など詳細に設定したい場合は Custom guardrails としてルールを設定することができる。
gemini-cli-mcp-client:
servers:
github-mcp-server:
guardrails:
custom_guardrails:
- name: "til Repository list_issues Block"
id: "list_issues Block"
action: block
# list_issues実行時の引数をチェックして、ルールに合致する場合はブロックする
# この場合、リポジトリがtilで所有者がsndstudy(自分)の場合はブロックする
content: |
raise "list_issues Block" if:
(call: ToolCall)
call is tool:list_issues
"til" == call.function.arguments.repo and "sndstudy" == call.function.arguments.owner
ルールに合致するものだけ実行がブロックされる。



他にもデフォルトのルールとして秘匿情報が含まれている場合なども検知することができる。
まとめ
MCP-scanを用いることでMCP Serverのトラフィックを監視したり、操作をブロックすることができた。今後もMCP Serverを用いるときはこのようなツールを用いて安全に利用していければと思う。
Discussion