Common issues and their solutions.
Symptom: index_folder completes but reports 0 files indexed.
Cause: All files matched a skip pattern (directory name, file extension,
or .gitignore rule).
Fix:
- Check
discovery_skip_countsin the response — it breaks down how many files were skipped and why (binary extension, secret filter, gitignore, etc.). - If a directory is being skipped that shouldn't be, check if its name
matches a built-in skip pattern (node_modules, pycache, .git, etc.)
or a pattern in
JCODEMUNCH_EXTRA_IGNORE_PATTERNS. - Run with
extra_ignore_patterns=[]to disable extra patterns and see if files appear.
Symptom: All symbols have generic "signature fallback" summaries instead of natural-language descriptions.
Cause: AI summarization requires both an API key and the corresponding optional package installed.
Fix:
- For Claude summaries:
pip install "jcodemunch-mcp[anthropic]"and setANTHROPIC_API_KEY. - For Gemini summaries:
pip install "jcodemunch-mcp[gemini]"and setGOOGLE_API_KEY. - For OpenAI-compatible endpoints:
pip install "jcodemunch-mcp[openai]"and setOPENAI_API_BASEto your endpoint (e.g.,http://127.0.0.1:11434/v1for Ollama). - For MiniMax summaries:
pip install "jcodemunch-mcp[minimax]", setMINIMAX_API_KEY, and optionally force it withJCODEMUNCH_SUMMARIZER_PROVIDER=minimax. If MiniMax is reached through the hosted endpointhttps://api.minimax.io/v1, also setallow_remote_summarizer: trueinconfig.jsonc; otherwise jcodemunch rejects the non-localhost endpoint and falls back to signature summaries. - For GLM-5 summaries:
pip install "jcodemunch-mcp[zhipu]", setZHIPUAI_API_KEY, and optionally force it withJCODEMUNCH_SUMMARIZER_PROVIDER=glm. - To verify: re-index and check the server logs for
"AI summarization failed, falling back to signature"warnings. - To disable: set
JCODEMUNCH_USE_AI_SUMMARIES=0orJCODEMUNCH_SUMMARIZER_PROVIDER=none.
Symptom: index_repo fails with 403 Forbidden or 429 Too Many Requests.
Cause: GitHub's unauthenticated API limit is 60 requests/hour.
Fix:
- Set
GITHUB_TOKENto a personal access token (no special scopes needed for public repos). - Authenticated requests get 5,000 requests/hour.
- The server retries rate-limited requests with exponential backoff (up to 3 attempts).
Symptom: find_importers or find_references returns {"importers": []}
even for files you know are imported.
Cause: The import graph is only built during indexing with jcodemunch v1.3.0+. Indexes created by older versions don't have import data.
Fix: Re-index the repository:
index_folder(path="/your/project")
After re-indexing, find_importers and find_references will work.
Symptom: search_columns returns an error about missing column metadata.
Cause: Column metadata is only extracted from dbt or SQLMesh projects that have model YAML files with column definitions.
Fix:
- Ensure your project has dbt
schema.ymlor SQLMesh model files with column definitions. - Re-index the project — the dbt/SQLMesh provider extracts column metadata during indexing.
- Check that the index includes
context_metadatawithdbt_columnsorsqlmesh_columnskeys.
Symptom: An index created on one machine doesn't work on another.
Cause: Local indexes store source_root as an absolute path
(e.g., /home/alice/projects/myapp). File content is cached relative
to this path.
Fix: Re-index on the target machine. Indexes are designed to be
machine-local. For shared environments, use index_repo (remote GitHub
indexing) which doesn't depend on local paths.
Symptom: index_folder never completes on Windows.
Cause: Two known issues (both fixed in v1.1.7):
- Git subprocess inherits MCP stdin pipe, causing protocol corruption.
- NTFS junctions (reparse points) cause infinite directory walks.
Fix:
- Upgrade to jcodemunch-mcp >= 1.1.7.
- If still stuck, check for circular NTFS junctions in your project directory tree.
Symptom: --transport sse or --transport streamable-http fails with
ImportError or connection refused.
Cause: HTTP transport dependencies are optional.
Fix:
pip install "jcodemunch-mcp[http]"Then restart with --transport sse or --transport streamable-http.
Symptom: HTTP transport returns 401 for all requests.
Cause: JCODEMUNCH_HTTP_TOKEN is set, requiring bearer token auth.
Fix: Include the token in your MCP client's Authorization header:
Authorization: Bearer <your-JCODEMUNCH_HTTP_TOKEN-value>
Symptom: Tool calls take longer than expected.
Diagnose: analyze_perf { "window": "session" } returns per-tool p50/p95/max latency from the in-memory ring (always tracked). For trend analysis across days, set perf_telemetry_enabled: true in config.jsonc and pass window=1h|24h|7d|all. The result includes slowest_by_p95 and cache.coldest_by_tool to identify hot spots.
Symptom: _meta.confidence on search_symbols is suddenly low; agents report they can't find familiar code.
Diagnose, in order:
- Index drift — check
_meta.freshness.repo_is_staleon a recent search.truemeans the index SHA differs from the livegit rev-parse HEAD. Re-runindex_folder. - Per-symbol staleness — if individual results carry
_freshness: "edited_uncommitted", the file was edited since indexing. Either re-index or callregister_editon the changed paths. - Embedding drift (semantic mode) — if you use Gemini/OpenAI/sentence-transformers, the provider may have shifted weights silently. Run
check_embedding_drift. Ifalarm: true, runembed_repo(force=true)andcheck_embedding_drift(force=true)to re-pin the canary. - Tuned weights gone stale — if
~/.code-index/tuning.jsoncexists from a previous workload that no longer matches the codebase, delete the relevant repo entry or re-runtune_weights.
Symptom: load_index returns None with a log warning about checksum mismatch.
Cause: The index file was modified outside of jcodemunch (hand-edited, corrupted, or tampered with).
Fix: Re-index the repository. The checksum sidecar (.json.sha256) will
be regenerated automatically.