Get from zero to 95% token savings in three steps.
pip install jcodemunch-mcpRecommended alternative: use
uvxinstead ofpip install. It resolves the package on demand and avoids PATH issues where MCP clients can't find the executable.
claude mcp add jcodemunch uvx jcodemunch-mcpRestart Claude Code. Confirm with /mcp — you should see jcodemunch listed as connected.
Edit the config file for your OS:
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/claude/claude_desktop_config.json |
Add the jcodemunch entry:
{
"mcpServers": {
"jcodemunch": {
"command": "uvx",
"args": ["jcodemunch-mcp"]
}
}
}Restart Claude Desktop.
Any MCP-compatible client accepts the same JSON block above in its MCP config file.
This step is the most commonly missed. Installing the server makes the tools available — but Claude defaults to its built-in file tools (Read, Grep, Glob) and will never touch jCodeMunch without explicit instructions.
Create or edit ~/.claude/CLAUDE.md (global — applies to every project):
## Code Exploration Policy
Always use jCodemunch-MCP tools — never fall back to Read, Grep, Glob, or Bash for code exploration.
- Before reading a file: use get_file_outline or get_file_content
- Before searching: use search_symbols or search_text
- Before exploring structure: use get_file_tree or get_repo_outline
- Call resolve_repo with the current directory first; if not indexed, call index_folder.You can also add the same block to a project-level CLAUDE.md in your repo root.
Important
CLAUDE.md is a soft rule. It works well under normal conditions, but agents can ignore it when moving fast, under load, or deep in a complex task — not because they forgot, but because native tools feel faster in the moment. If you need reliable enforcement, install the hook scripts — they intercept Grep, Glob, and Bash at the tool-call level and redirect Claude before the shortcut fires.
- Open a project in Claude Code (or Claude Desktop).
- Ask: "Index this project" — Claude will call
index_folderon the current directory. - Ask: "Find the authenticate function" — Claude calls
search_symbols, thenget_symbol_source. No file reads.
Verify it's working: ask "Is this project indexed?" — Claude should call resolve_repo with the current directory. To see all indexed repos, ask "What repos do you have indexed?" — Claude will call list_repos.
| Goal | Tool |
|---|---|
| Index a local project | index_folder { "path": "/your/project" } |
| Index a GitHub repo | index_repo { "url": "owner/repo" } |
| Re-index one file after editing | index_file { "path": "/your/project/src/foo.py" } |
| Find a function by name | search_symbols { "repo": "...", "query": "funcName" } |
| Read a specific function | get_symbol_source { "repo": "...", "symbol_id": "..." } |
| See all files + structure | get_repo_outline { "repo": "..." } |
| See a file's symbols | get_file_outline { "repo": "...", "file_path": "..." } |
| Full-text search | search_text { "repo": "...", "query": "TODO" } |
| Find what imports a file | find_importers { "repo": "...", "file_path": "..." } |
| Find all references to a name | find_references { "repo": "...", "identifier": "..." } |
Full tool reference with parameters: USER_GUIDE.md §6
Claude isn't calling jCodeMunch tools
→ Check that CLAUDE.md exists and contains the Code Exploration Policy above.
→ Run /mcp in Claude Code to confirm the server is connected.
Claude uses jCodeMunch in simple tasks but falls back to Read/Grep in complex ones → This is the "pressure bypass" — the agent sees the rule and skips it anyway because native tools feel faster. → CLAUDE.md can't stop this. Install the enforcement hooks: AGENT_HOOKS.md.
jcodemunch-mcp not found
→ Use uvx jcodemunch-mcp in your config instead of the bare command name — it bypasses PATH entirely.
30% more tokens than without it
→ The agent is using jCodeMunch in addition to native file tools, not instead of them. The CLAUDE.md policy in Step 3 is the fix.
Index seems stale for one file
→ Call index_file { "path": "/absolute/path/to/file" } to re-index just that file instantly.
Index seems stale across the whole project
→ Re-run index_folder with incremental: false to force a full rebuild, or call invalidate_cache.
Not sure what's configured?
→ Run jcodemunch-mcp config to see all effective settings at a glance. Add --check to also verify that your AI provider package is installed and your index storage is writable.
For large monorepos, re-running index_folder after every edit can be slow. Run the watch daemon in a separate terminal to automatically re-index when files change:
# With uvx (note the --with flag for the optional extra)
uvx --with "jcodemunch-mcp[watch]" jcodemunch-mcp watch /path/to/repo
# With pip
pip install "jcodemunch-mcp[watch]"
jcodemunch-mcp watch /path/to/repoThe watcher shares the same index storage as the MCP server — no extra configuration needed.
If you use Claude Code, each session can create a git worktree. watch-claude automatically discovers these worktrees and indexes them — no manual paths needed. There are two discovery modes that can be used independently or together.
This is the fastest option: zero polling, instant reaction. Claude Code's WorktreeCreate and WorktreeRemove hooks notify jcodemunch-mcp directly.
Step 1: Install the hooks. Add the following to your ~/.claude/settings.json (%USERPROFILE%\.claude\settings.json on Windows). If you already have a hooks section, merge these entries into it:
{
"hooks": {
"WorktreeCreate": [{
"matcher": "",
"hooks": [{"type": "command", "command": "jcodemunch-mcp hook-event create"}]
}],
"WorktreeRemove": [{
"matcher": "",
"hooks": [{"type": "command", "command": "jcodemunch-mcp hook-event remove"}]
}]
}
}If you installed with
uvxinstead ofpip, useuvx jcodemunch-mcp hook-event createanduvx jcodemunch-mcp hook-event removein the hook commands.
Step 2: Run watch-claude in a separate terminal:
jcodemunch-mcp watch-claudeEvery time Claude Code creates a worktree, the hook records the event to ~/.claude/jcodemunch-worktrees.jsonl and watch-claude picks it up instantly. When a worktree is removed, the watcher stops and the index is cleaned up.
If you prefer not to install hooks, point watch-claude at your git repositories. It polls git worktree list every 5 seconds and automatically watches any Claude-created worktrees it finds (those with branches named claude/* or worktree-*):
# Watch worktrees across multiple repos
jcodemunch-mcp watch-claude --repos ~/projects/myapp ~/projects/api
# Custom poll interval (seconds)
jcodemunch-mcp watch-claude --repos ~/projects/myapp --poll-interval 10This works with any worktree layout — whether Claude Code puts them in <repo>/.claude/worktrees/, ~/.claude-worktrees/, or a custom location.
If you have hooks installed and also want to cover repos that might have existing worktrees from before the hooks were set up:
jcodemunch-mcp watch-claude --repos ~/projects/myapp ~/projects/apiWhen a manifest file exists, watch-claude uses both hook events and git polling. Worktrees discovered by either method are not double-watched.
All standard watch options work with watch-claude:
jcodemunch-mcp watch-claude --repos ~/project --debounce 5000 --no-ai-summaries --follow-symlinksRun the built-in diagnostic at any time:
jcodemunch-mcp config # print all effective settings
jcodemunch-mcp config --check # also validate prerequisitesThe output is grouped into four sections:
| Section | What it shows |
|---|---|
| Core | Index storage path, file caps, staleness threshold |
| AI Summarizer | Which provider is active (Anthropic / Gemini / Local LLM / none), relevant model vars |
| HTTP Transport | Transport mode; HOST/PORT/TOKEN/rate-limit only shown when not in stdio mode |
| Performance & Privacy | Stats write interval, telemetry sharing, source-root redaction |
--check verifies: index storage is writable, the active AI provider's package is installed (anthropic, google-generativeai, or httpx), and HTTP transport packages (uvicorn, starlette, anyio) are present when HTTP mode is configured. Exits non-zero if anything is missing.
For the full reference — all env vars, AI summaries, HTTP transport, dbt/SQL support, and more — see README.md.