
MCP 向け Wireshark。AI クライアントと MCP サーバー間のすべての実際のツールコールを、ターミナル上でリアルタイムに表示する透過型プロキシ。
MCP 向け Wireshark。 AI クライアントと MCP サーバー間の実際のツール呼び出しをすべて、ターミナル上でライブ表示する透過プロキシです。
公式の MCP Inspector は独自のクライアントとして接続するため、あなたのクライアント(Cursor、Claude Code、Codex)がサーバーに実際に送信する内容を確認できません。また、リクエストの到着を待つだけのツールでは、モデルが呼び出さなかった呼び出しや、誤った引数で行われた呼び出しを表示できません。ツールが黙って呼び出されなかったり、機能が一致しなかったり、呼び出しがハングしたりすると、ログを調べて推測するしかなくなります。
mcpsnoop は代わりに実際のデータ経路に配置されます。 サーバーコマンドを mcpsnoop でラップすると、実際のクライアントとサーバーが通信する際に、すべての JSON-RPC フレームをライブで確認できます。
このページは mcpsnoop GitHub Action のリスティングも兼ねているため、その全体像をここに示します。キャプチャしたセッションを検査し、各発見事項をコードスキャニングアラートとして記録し、ゲート設定した内容に応じてジョブを失敗させます。```yaml permissions: security-events: write contents: read
steps:
お好みのリリースを固定してください。最新版は
[リリースページ](https://github.com/kerlenton/mcpsnoop/releases)にあります。すべての入力、
終了コードの意味、およびアクションを使わずに接続する方法は、
下の方にある[GitHub Action](#the-github-action)に記載されています。
## クイックスタート
セットアップ不要ですぐに確認できます。```bash
mcpsnoop demo
実際に使うには、サーバーをクライアントのMCP設定に組み込みます。```json { "mcpServers": { "my-server": { "command": "mcpsnoop", "args": ["--", "node", "build/index.js"] } } }
`--` の後は、通常サーバーを起動するコマンドです。`python server.py`、`npx -y @scope/server`、コンパイル済みバイナリなど、すでに使っているものに置き換えてください。
Claude Desktop では、その編集を手動で行う必要はありません。```bash
mcpsnoop wrap my-server # route my-server through mcpsnoop
mcpsnoop unwrap my-server # put it back
wrap は claude_desktop_config.json を見つけ、初回にそれを
claude_desktop_config.json.mcpsnoop.bak にコピーし、そのサーバーのエントリのみを
書き換えるため、あなたのフォーマットや他のすべてのサーバーはそのまま残ります。
書き換えられたエントリ内では、キーはアルファベット順に戻されます。unwrap
はファイルを復元し、どのサーバーもラップされなくなった時点でバックアップを削除します。
どちらの操作後も Claude Desktop を再起動してください。MCP サーバーは起動時に
一度だけ起動されるためです。
その後、通常どおりクライアントを使用し、UI を開いてください。```bash mcpsnoop
フラグも、ソケットパスも、覚えるべき起動順序もありません。シムとUIは自動的に互いを見つけ出し、UIはディスクから過去のセッションをバックフィルします。
ストリーミング可能なHTTPサーバーの場合は、リバースプロキシとしてmcpsnoopを実行します。```bash
mcpsnoop http --target http://localhost:3000/mcp --listen :7000
各レスポンスのHTTPステータスがストリームに表示されるため、独自のJSON-RPCメッセージを含まないレスポンスでも、何も表示されないのではなく、可視のフレームとして確認できます。401チャレンジ、拒否されたOriginに対する403、通知を確認する202、そしてターゲットにまったく到達できない場合の502です。401のWWW-Authenticateヘッダーはそのまま保持され、インスペクタに表示されます。これは認証スキームと、次に進むためのリソースメタデータを示すためです。TUIでstatus:401のようにステータスでフィルタリングするか、status:errで任意の失敗をフィルタリングできます。4xxまたは5xxはエラーとしてカウントされるため、デフォルトのmcpsnoop check実行はそれらで失敗します。
独自のサーバーをお持ちでない場合?公開されているテストサーバーに対して、実際に試してみてください。自分のクライアントで駆動します。セッション発生後に検査するには、ログから過去のセッションを確認を参照してください。
プロジェクト全体で同じshimフラグを再利用する場合は、現在の作業ディレクトリにある.mcpsnoop.tomlファイルにそれらを記述します。```toml
label = "filesystem"
trace-file = "trace.jsonl"
redact-secrets = true
redact-key = "token,authorization"
redact-value = "sk-[A-Za-z0-9]+"
redact-path = "$.params.arguments.password"
no-trace = false
`redact-key`、`redact-value`、`redact-path` をそれぞれ別の行に繰り返して指定すると、それぞれを複数追加できます。
サポートされているキーはこれですべてです。
このファイルは現在の作業ディレクトリでのみ検索され、親ディレクトリでは検索されません。
明示的なコマンドラインのフラグは、設定ファイルの値を上書きします。
## コマンド
| コマンド | 機能 |
|---|---|
| `mcpsnoop -- <server>` | stdio サーバーを透過的なシムとしてラップする |
| `mcpsnoop` | ライブ TUI を開く |
| `mcpsnoop http --target <url>` | streamable-HTTP サーバーをプロキシする |
| `mcpsnoop export` | セッションを json、html、text、har、または otlp にレンダリングする |
| `mcpsnoop check` | エラー、無効なフレーム、警告、ルーティング不一致、ハングした呼び出し、遅延結果、またはレイテンシ予算で CI を失敗させる |
| `mcpsnoop baseline` | 信頼済みツール定義を検査、承認、またはリセットする |
| `mcpsnoop diff` | 2 つのキャプチャ済みセッション間でツールと呼び出しを比較する |
| `mcpsnoop open` | 保存済みセッションを TUI で開く |
| `mcpsnoop inventory` | このマシンで mcpsnoop を経由して実行されたすべてのサーバーを一覧表示する |
| `mcpsnoop stats` | 保存されたすべてのキャプチャをサーバーとツールごとに 1 行にまとめる |
| `mcpsnoop prune` | カットオフより古い保存済みセッションログを削除する |
| `mcpsnoop wrap <server>` | Claude Desktop のサーバーの 1 つを mcpsnoop 経由でルーティングする |
| `mcpsnoop unwrap <server>` | そのサーバーのエントリを元の状態に戻す |
| `mcpsnoop remote <user@host>` | SSH トンネルコマンドを表示する |
| `mcpsnoop demo` | スクリプト化されたセッションを再生する |
完全なリストは `mcpsnoop help` を、1 つのコマンドのフラグは `mcpsnoop help <command>` を実行してください。
## 比較
| | MCP Inspector | mcpsnoop |
|---|:---:|:---:|
| 実際のクライアントとサーバーのトラフィックを確認できる | いいえ | はい |
| ハングした呼び出しとストリームエラーを検出する | いいえ | はい |
| ストリームを破損させる余分な出力を検出する | いいえ | はい |
| 不正な JSON-RPC フレームを検出する | いいえ | はい |
| 承認後のツール定義のずれを検出する | いいえ | はい |
| 対話型ターミナル UI | いいえ | はい |
| ゼロ設定、フラグや順序なし | いいえ | はい |
| 機能インスペクタ | 一部 | はい |
| キャプチャ済み呼び出しの再生 | いいえ | はい、stdio と HTTP の両方で |
| セッションエクスポート (json / html / text / otlp) | いいえ | はい |
| 単一バイナリ、ランタイム依存なし | いいえ | はい |
## インストール
### npm
Go ツールチェーンは不要です。ほとんどの MCP サーバーは Node または Python で書かれているため、これが最短の導入方法です。```bash
npx mcpsnoop -- node build/index.js
The npm package ships no code of its own. Six platform packages each carry one
build, and npm installs the single one that matches your machine, so there is
nothing to download at install time and nothing to unblock in a proxy. To keep it
around rather than fetching it each run, npm i -g mcpsnoop.
go install github.com/kerlenton/mcpsnoop/cmd/mcpsnoop@latest
### Homebrew```bash
brew install mcpsnoop
すべてのプラットフォーム向けのプリビルドバイナリはReleasesページにあります。
mcpsnoopにはbash、zsh、fish、PowerShell用の補完が同梱されています。セットアップ手順(補完の有効化とOSごとのインストールパスを含む)については、mcpsnoop completion <shell> --helpを実行してください。
mcpsnoopは1つのバイナリで2つの役割を担います。mcpsnoop -- <server>はクライアントが起動する透過的なシムであり、バイトをそのまま転送しながら、すべてのフレームのコピーをハブに送信します。引数なしのmcpsnoopはそのハブであり、ライブTUIでもあります。これらは既知のソケットとディスク上のログを通じてペアリングされるため、どちらが先に起動する必要はありません。
ハブはデフォルトで最新の保存済みセッション100件を読み込み、古いトレースを削除せずに起動時の処理を制限します。別の制限を選ぶにはmcpsnoop --history-limit Nを、全履歴を読み込むにはmcpsnoop --history-limit 0を使用してください。古いセッションはmcpsnoop open <session-id>とmcpsnoop export <session-id>を通じて引き続き利用できます。
履歴制限は読み込まれるセッション数を制限します。セッション内では、ライブTUIは二重に制限されます。これは、おしゃべりなサーバーを監視したまま放置されたハブが、終了されるまで肥大化し続けるためです。フレーム本体は最大64 MiBまで保持され、古いものから順に解放されます。また、フレーム数は最大200,000件までで、それを超えると古いものから完全に破棄されます。最初の制限は大きなペイロードのキャプチャで遭遇するもので、2番目の制限は小さな通知の長いストリームで発生するものです。
どちらの制限も回答を変えることはありません。本体が解放されたフレームは、その行、判定、タイムライン上の位置を維持し、インスペクタは空のフレームを表示する代わりに本体が存在しないことを示します。完全に破棄されたフレームは、まずそのツール呼び出しの統計を実行中の合計に反映させるため、ツールの概要とサーバーがコンテキストで消費するコストは、セッションが行ったすべての呼び出しを説明します(直近のものだけではありません)。ストリームのフッターは、ディスク上にある古いフレームの数のみを示し、rはパラメータを保持していないフレームを再生する代わりに拒否します。
mcpsnoop open <session-id>はログを読み取り、そのすべてを保持するため、制限はありません。TUIからのエクスポートもログを読み取るため、制限はありません。check、export、diffは意図的に無制限のストアを構築します。これは、大規模なキャプチャで過少報告するゲートが、メモリを使用するゲートよりも悪いためです。