Skip to main content

jmunch-mcp

Transparent MCP proxy that reduces the token cost of large upstream tool responses for nearly every other MCP server imaginable. Wraps a single upstream MCP, forwards every call, and handle-ifies fat payloads into content-aware backends the agent can query with a small set of universal verbs (peek, slice, search, aggregate, describe, list_handles).

Benchmarks

Measured end-to-end against two popular real-world MCP servers. Each run fires a fixed script of tool calls twice — once direct, once through jmunch-mcp — with three follow-up jmunch.* verb calls on the proxied side to model an agent drilling into a large result rather than slurping it whole.

suite upstream direct tokens via jmunch-mcp saved
GitHub (facebook/react issues/PRs/commits) @modelcontextprotocol/server-github 379,878 44,328 335,550 (88.3%)
Firecrawl (Wikipedia scrapes + site map + search) firecrawl-mcp 259,574 2,928 256,646 (98.9%)

Wall-clock time was also faster with the proxy on both suites, despite the extra verb calls — the agent never has to page through the fat payload:

suite direct via jmunch-mcp delta
GitHub 8.4s 6.8s −1.6s (−19.0%)
Firecrawl 16.4s 9.2s −7.2s (−43.9%)

Tabular content (GitHub) routes to the SQLite backend and answers peek/slice/aggregate; JSON content (Firecrawl scrape/map) routes to the JSON-tree backend and answers peek/slice (JSONPath)/search. See bench/README.md to reproduce.

Install

pip install jmunch-mcp

From source:

git clone https://github.com/jgravelle/jmunch-mcp
cd jmunch-mcp
pip install -e .

Quickstart

jmunch-mcp init

init scans three sources — your MCP client configs (Claude Desktop, Claude Code, Cursor, Windsurf, Continue), running processes, and a small catalog of popular upstreams (GitHub, Firecrawl, filesystem, fetch, Brave Search, Slack) — and renders a checklist. Tick the upstreams you want wrapped, and it writes one <name>.toml per selection into ./configs/. Non-interactive flags: --yes (pick everything already registered in a client), --dry-run, --overwrite, --out <dir>, --no-running, --no-catalog.

Manual

jmunch-mcp --config examples/config.toml

Configure your MCP client to launch jmunch-mcp --config <path> instead of the upstream server directly. Add --report to print a session summary on shutdown.

Gateway mode (v2 — universal proxy)

The MCP proxy above saves tokens for MCP clients. The gateway saves tokens for any AI application that speaks the OpenAI or Anthropic HTTP API — LangChain, LlamaIndex, CrewAI, AutoGen, Continue, Cline, Aider, or a raw SDK. No code changes in the app; just point base_url at jmunch.

pip install 'jmunch-mcp[gateway]'
jmunch-mcp gateway --config configs/gateway.example.toml
# listening on http://127.0.0.1:7879

Point your app:

# OpenAI SDK, LangChain, Aider, Continue, Cline, Ollama-compat apps:
export OPENAI_API_BASE=http://127.0.0.1:7879/v1

# Native Anthropic SDK / Claude Code:
export ANTHROPIC_BASE_URL=http://127.0.0.1:7879

What it does, transparently:

  • Handle-ifies fat tool_results in outgoing requests — your app's tool returns 100KB of JSON, the model sees a 1KB summary + opaque handle.
  • Injects jmunch verbs (peek, slice, search, aggregate, describe, summarize, list_handles) into the request's tools array so the model can drill in.
  • Short-circuits verb calls — when the model calls jmunch_peek, the gateway resolves it locally against the handle registry and synthesizes the follow-up turn. The app never sees jmunch tool_calls; those completions cost zero upstream tokens.
  • Persists handles to ~/.jmunch/handles.db with a configurable TTL so they survive restarts and cross-session reads.
  • Streams both ways — OpenAI SSE and Anthropic event streams are buffer-then-replayed with correct verb resolution.

Per-request controls via headers:

  • X-Jmunch-Upstream: <name> — override the configured upstream.
  • X-Jmunch-Inject: false — disable tool injection for this call (pure pass-through + request-side handle-ify only).

Metrics flow into the same dashboard as the MCP proxy. Filter with ?surface=gateway or ?surface=mcp on /api/stats and /api/calls.

Dashboard

A read-only local web UI over the metrics DB each proxy writes to. Shows cumulative totals, per-upstream breakdowns, and a time series of forwarded calls.

jmunch-mcp dashboard              # http://127.0.0.1:7878
jmunch-mcp dashboard --open       # also open in your default browser

Flags: --port (default 7878), --host (default 127.0.0.1), --db <path> to point at a non-default metrics DB, --open to launch the browser. Metrics only populate once proxies have recorded calls, so run your client against a wrapped upstream first.

License

jmunch-mcp is released under the MIT License — free to use, modify, distribute, and embed in commercial products.

Note that licensing of upstream MCP services you proxy through jmunch-mcp is governed by those services' own terms. This applies to third-party MCP servers (GitHub, filesystem providers, vendor APIs) and to any sibling tools in the broader retrieval ecosystem you may compose with — check each upstream's license before redistribution.

Metadata

Release files for jmunch-mcp 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jmunch-mcp 0.2.3
File Size Uploaded Provenance
jmunch_mcp-0.2.3.tar.gz 118.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for jmunch-mcp 0.2.3
File Interpreter ABI Platform
jmunch_mcp-0.2.3-py3-none-any.whl Python 3 none any Details

Total release size: 206.3 kB

Release files / jmunch_mcp-0.2.3.tar.gz

Download URL jmunch_mcp-0.2.3.tar.gz
Size 118.5 kB
Tags Source
SHA-256 checksum
How to use checksums
e53ef9e4a92e613a294c03c7a86ab69dd4e20ae5b9e7c4676aae6eb101991222
BLAKE2b-256 checksum
How to use checksums
6b283cf1e2d062caa818762ff9f2545d3fb61597c485a93a5baf6d694b5401fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.2

Release files / jmunch_mcp-0.2.3-py3-none-any.whl

Download URL jmunch_mcp-0.2.3-py3-none-any.whl
Size 87.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
317934fd2abee8be8e73a8d171fa16a38940976468b944974ae986429b9fa5f7
BLAKE2b-256 checksum
How to use checksums
16dce5b05d5bccc8b5fcf32d1961ffa7fcbd7e24c430446e76bf52967d1565b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.2

Security for jmunch-mcp 0.2.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page