<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Debugging on ToolGenix — Open-Source AI &amp; Developer Tools: Honest Hands-On Reviews</title><link>https://toolgenix.nxtniche.com/tags/debugging/</link><description>Recent content in Debugging on ToolGenix — Open-Source AI &amp; Developer Tools: Honest Hands-On Reviews</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 04 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://toolgenix.nxtniche.com/tags/debugging/index.xml" rel="self" type="application/rss+xml"/><item><title>mcpsnoop: Wireshark for MCP — Debug AI Agent Tool Calls</title><link>https://toolgenix.nxtniche.com/posts/mcpsnoop-wireshark-for-mcp-debug-ai-agent-tool-calls/</link><pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate><guid>https://toolgenix.nxtniche.com/posts/mcpsnoop-wireshark-for-mcp-debug-ai-agent-tool-calls/</guid><description>mcpsnoop shows every JSON-RPC frame between your AI client and MCP server. Think Wireshark for MCP. Tested so you stop guessing why your tools aren&amp;#39;t called.</description><content:encoded><![CDATA[<p>So you spend an hour wiring up an MCP server. Your Claude Code client connects fine — no errors. But when you ask it to use a tool, nothing happens. Or worse, it calls the tool with arguments that look weird, and you have no idea why.</p>
<p><strong>That&rsquo;s the blind spot.</strong> The MCP Inspector is a standalone test client — it can&rsquo;t see what your real client is actually sending. You&rsquo;re debugging in the dark.</p>
<p>So when I stumbled across <strong>mcpsnoop</strong> (127★ on GitHub, 18 stars/day this week) — a project that calls itself &ldquo;Wireshark for MCP&rdquo; — I had to try it immediately.</p>
<p>Here&rsquo;s what I found.</p>
<h2 id="the-blind-spot-in-mcp-debugging">The Blind Spot in MCP Debugging</h2>
<p>But every MCP setup has a data path: your AI client (Claude Desktop, Claude Code, Cursor, Copilot) talks to your MCP server over JSON-RPC. When something goes wrong, the natural reflex is to fire up the MCP Inspector.</p>
<p>But here&rsquo;s the problem: the Inspector is its own client. It connects independently to your server. <strong>It never sees the actual traffic between your real client and the server.</strong></p>
<p>Tail the server logs? Sure — but logs are post-hoc. So you only see what the server <em>thinks</em> happened, not what the client actually sent in the request. Subtle issues — extra whitespace in a parameter, wrong argument name, a timeout that the client handles differently — are invisible.</p>
<p>And I&rsquo;ve been burned by this more times than I&rsquo;d like to admit. Last week I spent two hours debugging why Claude Code kept calling a search tool with an empty query parameter. Turns out the MCP server&rsquo;s schema declared the field as <code>&quot;query_string&quot;</code> instead of <code>&quot;query&quot;</code> — a mismatch I&rsquo;d have spotted in seconds with the right tool.</p>
<h2 id="what-is-mcpsnoop">What Is mcpsnoop?</h2>
<p>So mcpsnoop is a <strong>transparent proxy</strong> that sits right between your client and server. Every JSON-RPC request and response passes through it, and it renders them in a real-time TUI right in your terminal.</p>
<p><img alt="mcpsnoop demo" loading="lazy" src="https://github.com/kerlenton/mcpsnoop/raw/main/demo.gif"></p>
<p>The core insight is simple but powerful: instead of simulating a client (like MCP Inspector does), mcpsnoop intercepts real traffic from your actual client. You see exactly what the client sends and exactly what the server responds.</p>
<p>It&rsquo;s written in Go, MIT licensed, and actively maintained — latest update was yesterday. If you&rsquo;re already running other MCP tooling like <a href="/posts/github-mcp-server-review-2026/">GitHub MCP Server</a> or <a href="/posts/mcp-toolbox-for-databases-review-2026/">MCP Toolbox for Databases</a>, mcpsnoop slots right into the same workflow.</p>
<h2 id="getting-started-in-30-seconds">Getting Started in 30 Seconds</h2>
<p>Installation is straightforward:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># macOS/Linux</span>
</span></span><span style="display:flex;"><span>brew install mcpsnoop
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Or if you have Go installed</span>
</span></span><span style="display:flex;"><span>go install github.com/kerlenton/mcpsnoop@latest
</span></span></code></pre></div><p>Then wrap your MCP server command in your client config:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;mcpServers&#34;</span>: {
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#34;my-server&#34;</span>: {
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&#34;command&#34;</span>: <span style="color:#e6db74">&#34;mcpsnoop&#34;</span>,
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&#34;args&#34;</span>: [<span style="color:#e6db74">&#34;--&#34;</span>, <span style="color:#e6db74">&#34;python&#34;</span>, <span style="color:#e6db74">&#34;server.py&#34;</span>]
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>Now open a second terminal window, run <code>mcpsnoop</code>, and you&rsquo;ll see the TUI pop up. Now every tool call your AI client makes shows up in real time — method name, parameters, response, latency. It took me about 30 seconds to set up, and I was immediately looking at raw JSON-RPC frames.</p>
<p>There&rsquo;s also an HTTP reverse proxy mode if your MCP server speaks HTTP:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>mcpsnoop http --target http://localhost:3000/mcp --listen :7000
</span></span></code></pre></div><h2 id="three-real-debugging-scenarios">Three Real Debugging Scenarios</h2>
<h3 id="1-tool-called-with-wrong-arguments">1. Tool Called with Wrong Arguments</h3>
<p>So I set up mcpsnoop between Claude Code and a file-search MCP server. When I asked &ldquo;find files modified in the last week,&rdquo; I expected to see <code>{&quot;method&quot;: &quot;find_files&quot;, &quot;params&quot;: {&quot;pattern&quot;: &quot;*.py&quot;, &quot;modified_after&quot;: &quot;...&quot;}}</code>. Instead, the frame showed <code>modified_after</code> was missing entirely — my server schema had a bug. Without mcpsnoop, I&rsquo;d have checked the server logs (which would show the server processing the request, not what was missing).</p>
<h3 id="2-silent-timeout">2. Silent Timeout</h3>
<p>But one of my MCP servers occasionally hung on complex queries. Still, in the mcpsnoop TUI, I could watch the request go out, see the server start streaming a response&hellip; and then nothing. The TUI showed the exact latency spike, proving it was a server-side issue, not a client timeout configuration problem.</p>
<h3 id="3-streaming-http-debug">3. Streaming HTTP Debug</h3>
<p>And for MCP servers running over HTTP, the reverse proxy mode (<code>mcpsnoop http</code>) captures every SSE event and JSON-RPC frame. I used this to debug a streaming tool call where the server was sending malformed delimiter bytes — spotted it in the raw frame view in about 2 minutes.</p>
<h2 id="mcpsnoop-vs-mcp-inspector-not-competitors">mcpsnoop vs MCP Inspector: Not Competitors</h2>
<table>
	<thead>
			<tr>
					<th>Feature</th>
					<th style="text-align: center">mcpsnoop</th>
					<th style="text-align: center">MCP Inspector</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Sits on real client-server path</td>
					<td style="text-align: center">✅</td>
					<td style="text-align: center">❌ (standalone client)</td>
			</tr>
			<tr>
					<td>Shows raw JSON-RPC frames</td>
					<td style="text-align: center">✅ Real-time TUI</td>
					<td style="text-align: center">✅ (manual send/receive)</td>
			</tr>
			<tr>
					<td>Debug your <strong>actual</strong> client traffic</td>
					<td style="text-align: center">✅</td>
					<td style="text-align: center">❌</td>
			</tr>
			<tr>
					<td>Test server in isolation</td>
					<td style="text-align: center">❌</td>
					<td style="text-align: center">✅</td>
			</tr>
			<tr>
					<td>HTTP reverse proxy</td>
					<td style="text-align: center">✅</td>
					<td style="text-align: center">❌</td>
			</tr>
			<tr>
					<td>Record to disk for replay</td>
					<td style="text-align: center">✅</td>
					<td style="text-align: center">❌</td>
			</tr>
			<tr>
					<td>CLI-first, no browser needed</td>
					<td style="text-align: center">✅</td>
					<td style="text-align: center">❌ (browser-based)</td>
			</tr>
	</tbody>
</table>
<p>But they&rsquo;re complementary. MCP Inspector is great for verifying a server works at all. mcpsnoop is what you reach for when things go wrong with your actual setup.</p>
<h2 id="running-mcpsnoop-as-a-247-debug-service">Running mcpsnoop as a 24/7 Debug Service</h2>
<p>So if you&rsquo;re running multiple MCP servers or building a development pipeline around MCP, you can deploy mcpsnoop persistently. Throw it in a Docker container on a cheap VPS and route traffic through it.</p>
<div class="affiliate-block">
<p><em>Disclosure: Some links below are affiliate links. If you sign up through them, I may earn a commission at no extra cost to you.</em></p>
</div>
<p>Want to run a 24/7 MCP debugging setup? Then DigitalOcean&rsquo;s $6/month droplet is more than enough to run mcpsnoop plus all your MCP servers. New users get $200 in credit — plenty to experiment with.</p>
<p><strong>Deploy your MCP stack:</strong> <a href="/go/digitalocean" rel="nofollow sponsored noopener" target="_blank">DigitalOcean</a> offers $6/month droplets — enough to run mcpsnoop alongside all your MCP tools. <a href="/go/digitalocean" rel="nofollow sponsored noopener" target="_blank">New users get $200 in free credit</a> to experiment with.</p>
<p><strong>Go deeper:</strong> <a href="/go/amazon/1835462316" rel="nofollow sponsored noopener" target="_blank">Building LLM Powered Applications</a> teaches you to build intelligent apps and agents with LLMs. Covers MCP, tool-use, function calling, and production deployment patterns — directly relevant to the MCP ecosystem mcpsnoop lives in.</p>
<h2 id="the-bottom-line">The Bottom Line</h2>
<p>So mcpsnoop fills a genuine hole in the MCP ecosystem. The MCP Inspector is fine for smoke-testing a server, but when you need to debug real traffic between your actual client and server, a transparent proxy is the right tool. Even the fact that it&rsquo;s a single <code>brew install</code> away, with a clean TUI and both stdio and HTTP proxy modes, makes it a must-have for anyone building with MCP seriously.</p>
<p>Still debugging MCP servers and reaching for logs and blind guesses? Then give mcpsnoop a try. You&rsquo;ll see the problem in seconds instead of hours.</p>
]]></content:encoded></item></channel></rss>