Skip to content
gentic.news — AI News Intelligence Platform
Connecting to the Living Graph…

Listen to today's AI briefing

Daily podcast — 5 min, AI-narrated summary of top stories

Terminal window showing MCP proxy test logs with multiple server connection failures and error messages
Open SourceScore: 78

MCP Proxy Testing Exposes Silent Client-Side Failures

MCP proxy logging reveals silent client-side failures. Claude Code's 45/45 success rate vs Gemini's 42/45 shows reliability differences. Check tool-call gaps and serverInfo metadata to avoid misattributing failures.

·18h ago·4 min read··14 views·AI-Generated·Report error
Share:
Source: dev.tovia devto_mcp, amp_sourcegraph_blogCorroborated
How do I detect silent MCP client-side failures in Claude Code?

Use a proxy on the MCP stdio pipe to log wire traffic and compare tool-call gaps (calls formed vs. calls sent). A gap > 0 indicates silent client-side failures, like JSON Schema draft 2020-12 validation errors. Upgrade clients to fix.

TL;DR

A proxy on the MCP pipe reveals client-side validation failures that look like model incompetence — check your Claude Code version and schema support.

Key Takeaways

  • MCP proxy logging reveals silent client-side failures.
  • Claude Code's 45/45 success rate vs Gemini's 42/45 shows reliability differences.
  • Check tool-call gaps and serverInfo metadata to avoid misattributing failures.

What Changed — MCP Proxy Testing Exposes Hidden Failures

A developer ran 90 trials through a proxy on the MCP stdio pipe, testing three servers (filesystem, playwright, github) with two clients (Claude Code 2.1.235 on claude-sonnet-5, Gemini CLI 0.55.1 on gemini-2.5-flash). The headline result: Claude Code finished 45 of 45 trials, Gemini CLI 42 of 45. But the real finding wasn't in the token table — it was in the shakedown that preceded the run.

What It Means For You — Silent Failures Look Like Model Incompetence

Here's the kicker: one client (Gemini CLI 0.18.4) was failing calls inside itself before a byte reached the server. The cause? Its bundled validator had no JSON Schema draft 2020-12 meta-schema registered. @playwright/mcp@0.0.79 declares 2020-12 on all 24 tools, so most calls died with no schema with key or ref "https://json-schema.org/draft/2020-12/schema" — never hitting the wire.

On the wire, this looked exactly like a model that tried very little and answered wrong. The proxy's tool-call gap field caught it: it subtracts wire frames from client-attributed calls. Zero is normal; gaps of 3-4 meant calls were formed but never sent.

Try It Now — How to Apply This in Claude Code

  1. Check your Claude Code version: Ensure you're on a recent build that supports JSON Schema draft 2020-12. The fix landed upstream in Gemini CLI 0.28.0 (issue #14970, PR #15060), but Claude Code's validator should be verified too.

Cover image for I put a proxy on the MCP pipe for 90 trials. Most of one client's calls never reached the server

  1. Instrument your MCP pipe: Run a proxy on the stdio pipe to log tools/call requests and responses. Compare the tool names in your client's usage output (e.g., mcp_<server>_<tool>) against wire frames. A positive gap means silent failures.

  2. Watch for _meta blocks: Claude Code sessions carry io.modelcontextprotocol/serverInfo with server name, version, and base64 PNG icons — 2,215 characters on a 472-character answer. That's token overhead you can strip if you control the server.

  3. Beware of your own CLAUDE.md: One trial failed because Claude Code's global CLAUDE.md said "never send outbound communications." The runner now passes --setting-sources "" to isolate tests. For your own work, remember: your memory files can change behavior in ways you don't expect.

  4. Count line endings: One Gemini failure wrote 138 lines for a file that had 137 — the server concatenated files with a blank line separator, and the model counted it. If you're parsing MCP responses, account for separators.

Why It Works — Token Costs Are Client-Dependent

The same get_file_contents call returned 1,561 tokens to Claude Code and 161 to Gemini CLI. Why? Claude Code negotiated protocol revision 2026-07-28 vs Gemini's 2025-06-18, and every response carried that _meta serverInfo block. A per-call cost isn't a property of the server alone — it's a function of the client's protocol version.

The Takeaway

MCP failures aren't always what they seem. Before blaming the model, check whether the client actually sent the calls. Use a proxy, track tool-call gaps, and verify your client's schema support. Your debugging time will drop dramatically.


Source: dev.to

[Updated 21 Aug via devto_mcp]

A separate project tackles the operational side of MCP proxies: Smart MCP Proxy hot-swaps servers at runtime, watching proxy-config.yaml and diffing the server list to add or remove pools without restarting agents. It shares one subprocess pool per server across all connected clients — three agents plus seven servers means seven pools, not 21 — and spawns/kills subprocesses on demand with three-retry crash recovery. An optional 'AI concierge' layer routes plain-English requests to the right tool via MCP Sampling, returning only the final answer to keep context clean. The MIT-licensed v1.0.0 runs as a single Python process with no database or Docker, though auth/HTTPS aren't shipped yet [per Smart MCP Proxy].

Sources cited in this article

  1. Smart MCP Proxy
Source: gentic.news · · author= · citation.json

AI-assisted reporting. Generated by gentic.news from 1 verified source, fact-checked against the Living Graph of 4,300+ entities. Edited by Ala SMITH.

Following this story?

Get a weekly digest with AI predictions, trends, and analysis — free.

AI Analysis

Claude Code users should start treating MCP failures as potentially client-side. When a tool call fails or returns unexpected results, don't immediately assume the model is wrong. Instead, check whether the call actually reached the server. You can do this by adding a simple logging proxy to your MCP configuration. For example, wrap your stdio server with a script that logs stdin/stdout to a file. Second, be aware of your CLAUDE.md's influence. The test showed that a global instruction ('never send outbound communications') caused Claude Code to refuse a task entirely, which the classifier mislabeled as a hallucination. If you're debugging unexpected behavior, temporarily disable custom settings with `--setting-sources ""` to isolate whether your config is the culprit. Finally, watch token overhead. If you're building MCP servers, consider whether you need to send `_meta` blocks with base64 icons. They add significant tokens per call. For Claude Code users, this means your context window is being consumed by metadata you don't control — but knowing this helps you budget for it.
This story is part of
Hugging Face Becomes the Neutral Ground Where Google and Anthropic's Agent Protocol War Converges
As Claude Code's MCP dominance threatens Google Cloud, Hugging Face's unique position as partner to both players creates an unexpected convergence zone
Compare side-by-side
Claude Code vs Gemini CLI
Enjoyed this article?
Share:

AI Toolslive

Five one-click lenses on this article. Cached for 24h.

Pick a tool above to generate an instant lens on this article.

Related Articles

From the lab

The framework underneath this story

Every article on this site sits on top of one engine and one framework — both built by the lab.

More in Open Source

View all