That gap is what this closes — a symbol instead of a file, an outline instead of contents. It helps least where an edit genuinely needs the whole file, and most on large or unfamiliar repositories, which is also where the blast-radius and edit-safety answers have no equivalent in a plain read-and-grep loop.
A code-intelligence layer over a locally indexed repository, with 90-plus tools. Instead of reading whole files, an agent asks for the symbol, the outline, or the structural answer it needs. Indexes live under `~/.code-index/`, and 70-plus languages are parsed through tree-sitter, monorepos included.
- One symbol returned byte-precise instead of the file around it, a file's names and signatures instead of its contents, and the whole file when the edit genuinely needs it (`get_symbol_source`, `get_file_outline`, `get_file_content`, `search_symbols`)
- A whole task's context assembled in one call — intent classified, anchor symbols extracted, the right tool sequence run under one token budget — and the turn routed before the first read (`assemble_task_context`, `plan_turn`, `get_ranked_context`)
- Structural questions grep cannot answer: who imports this, what breaks if it changes, the call hierarchy, what is dead, what changed, where the churn is, and AST-level anti-pattern sweeps (`find_importers`, `get_blast_radius`, `get_call_hierarchy`, `find_dead_code`, `get_changed_symbols`, `get_hotspots`, `search_ast`)
- Preflight checks before a risky change, with edit-ready `{old_text, new_text}` blocks from the refactoring planner (`check_edit_safe`, `check_delete_safe`, `get_pr_risk_profile`, `plan_refactoring`, `check_references`)
- A `stop_rule.terminal` flag on the two safety checks: true means no further call changes the verdict, so re-running the reference checks to be sure is wasted work — it means final, not safe. False names the specific thing that would change the answer
- Calibrated confidence scores, freshness flags, coverage contracts on absence claims, compiler-verified references through SCIP import, and secret redaction before anything reaches the model
- Session accounting: tokens served and savings for the session (`get_session_stats`)
- Two ways to keep 90-plus tools out of the context prefix — a server-side counter that collapses the surface to a three-tool front door, or Anthropic's host-side tool search with `defer_loading` set once for the whole server
- Watch modes, agent hooks and a VS Code extension to keep the index fresh, plus prebuilt starter packs for popular frameworks
`uv tool install jcodemunch-mcp` then `jcodemunch-mcp init`, which detects Claude Code, Claude Desktop, Cursor, Windsurf and Continue, writes their config entries, installs the prompt policy so the agent actually uses it, and optionally indexes the project. `uvx jcodemunch-mcp` runs it with nothing left on disk — but the optional enforcement hooks resolve the executable by name from a minimal-PATH subshell, so those need a real install. It is local-first: indexes stay under `~/.code-index/`, and the only default network behaviour is an anonymous savings counter carrying a random id and aggregate token counts, turned off with `share_savings: false`. The tool-schema deferral through Anthropic's connector needs the server over `sse` or `streamable-http`, not the default stdio setup.
One command — uv tool install jcodemunch-mcp jcodemunch-mcp init
