0-co/mcp-snoop
Transparent stdio interceptor for MCP JSON-RPC traffic. Snoop on every tool call and response.
Platform-specific configuration:
{
"mcpServers": {
"mcp-snoop": {
"command": "npx",
"args": [
"-y",
"mcp-snoop"
]
}
}
}Add the config above to .claude/settings.json under the mcpServers key.
Transparent stdio interceptor for MCP JSON-RPC traffic.
Like strace, but for the Model Context Protocol. Wrap any MCP server and see every message in real time — tool calls, responses, errors. Zero dependencies.
$ mcp-snoop -- python3 my_server.py
mcp-snoop intercepting: python3 my_server.py
[03:14:22.847] →SERVER #1 initialize claude-desktop v1.0
[03:14:22.912] ←CLIENT #1 → server: my-server v0.1.0
[03:14:22.913] →SERVER notifications/initialized
[03:14:22.914] →SERVER #2 list tools
[03:14:22.916] ←CLIENT #2 → 8 tools
[03:14:23.201] →SERVER #3 call search_files(path="/tmp", pattern="*.py")
[03:14:23.847] ←CLIENT #3 → text: "['server.py', 'handler.py']"
mcp-snoop: 7 messages interceptedpip install mcp-snoopOr run without installing:
uvx mcp-snoop -- python3 my_server.py# Basic — logs all messages to stderr
mcp-snoop -- python3 my_server.py
# Verbose — print full JSON for each message
mcp-snoop --verbose -- node server.js
# Save trace to file
mcp-snoop --output trace.log -- uvx my-mcp-server
# No color (for CI/log files)
mcp-snoop --no-color -- python3 server.pyEach log line shows:
HH:MM:SS.mmm UTC→SERVER (client→server) or ←CLIENT (server→client)#1, #2, etc. (pairs requests with responses)With --verbose, the full JSON follows.
You're building an MCP server. Your agent keeps calling the wrong tool. Something's returning garbage. The MCP Inspector requires a browser. You want to script against the logs.
mcp-snoop gives you the raw protocol traffic, right in your terminal.
Replace your server command with mcp-snoop -- <your command>:
{
"mcpServers": {
"my-server": {
"command": "mcp-snoop",
"args": ["--output", "/tmp/trace.log", "--", Loading reviews...