jgravelle avatar

jCodeMunch MCP

jgravelle/jcodemunch-mcp

Connects to your local codebase via tree-sitter AST parsing and exposes precise retrieval tools: fetch individual functions, classes, or methods by name instead of reading entire files. Supports 25+ languages and cuts token usage by 95%+ in retrieval-heavy workflows because your agent stops scanning thousands of irrelevant lines. Index once with stdio transport, then query symbols, outlines, references, and scoped context bundles with byte-level precision. Ships with a compact wire format (MUNCH) that shrinks responses by another 45% median. Reach for this when your agent burns tokens opening giant files just to find one implementation, or when you need structured code navigation without the brute-force tax.

GitHub stars
2.8K
tools
80
transport
STDIO
last updated
Nov 12, 2026

Install

From registry metadata
$ npx add-mcp 'uvx jcodemunch-mcp' --name jcodemunch-mcp

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add jcodemunch-mcp -- uvx jcodemunch-mcp

Run in your terminal. Replace YOUR_* placeholders with real values; add --scope user to install for every project.

Tools

Verified live · 80 tools

Verified live against the running server on Jun 10, 2026.

index_repoIndex a GitHub repository's source code. Fetches files, parses ASTs, extracts symbols, and saves to local storage. Set JCODEMUNCH_USE_AI_SUMMARIES=false to disable AI summaries globally.4 params

Index a GitHub repository's source code. Fetches files, parses ASTs, extracts symbols, and saves to local storage. Set JCODEMUNCH_USE_AI_SUMMARIES=false to disable AI summaries globally.

Parameters* required
extra_ignore_patternsarray
Additional gitignore-style patterns to exclude from indexing (merged with JCODEMUNCH_EXTRA_IGNORE_PATTERNS env var)
incrementalboolean
When true and an existing index exists, only re-index changed files.default: true
url*string
GitHub repository URL or owner/repo string
use_ai_summariesboolean
Use AI to generate symbol summaries. Supports Anthropic, Gemini, OpenAI-compatible endpoints, MiniMax, and GLM-5 via env vars. When false, uses docstrings or signature fallback.default: true
index_folderIndex a local folder of source code. Response surfaces `discovery_skip_counts` and `no_symbols_files` for diagnosing missing files.7 params

Index a local folder of source code. Response surfaces `discovery_skip_counts` and `no_symbols_files` for diagnosing missing files.

Parameters* required
extra_ignore_patternsarray
Additional gitignore-style exclude patterns.
follow_symlinksboolean
Include symlinked files. Symlinked directories are never followed.default: false
identity_modestring
Repo-identity strategy. `config` (default): respect existing index. `local`: path-keyed. `git`: git-root-keyed (monorepo subdir merging).one of config · local · gitdefault: config
incrementalboolean
When an existing index exists, only re-index changed files.default: true
path*string
Path to local folder (absolute or relative; ~ expands).
pathsarray
Optional explicit paths (absolute or relative to `path`). When set, skips the directory walk; directories in the list are recursed. Walk-path validation applies.
use_ai_summariesboolean
Generate symbol summaries via AI. When false, falls back to docstrings or signature.default: true
summarize_repoRe-run AI summarization on all symbols in an existing index. Use this when index_folder completed but AI summaries are missing — e.g., the background summarization thread was interrupted, AI was disabled at index time, or the summarizer provider wasn't configured yet. With for...2 params

Re-run AI summarization on all symbols in an existing index. Use this when index_folder completed but AI summaries are missing — e.g., the background summarization thread was interrupted, AI was disabled at index time, or the summarizer provider wasn't configured yet. With for...

Parameters* required
forceboolean
If true, clear all existing summaries and re-summarize every symbol. Required when index_folder already applied signature fallbacks. If false, only process symbols with no summary at all.default: false
repo*string
Repository identifier (owner/repo or local/hash)
index_fileIndex a single file within an existing index. Surgical update after edits. The file must be under an already-indexed folder's source_root. Can also add new files.3 params

Index a single file within an existing index. Surgical update after edits. The file must be under an already-indexed folder's source_root. Can also add new files.

Parameters* required
context_providersboolean
Whether to run context providersdefault: true
path*string
Absolute path to the file to index.
use_ai_summariesboolean
Generate symbol summaries via AI. When false, falls back to docstrings or signature.default: true
import_runtime_signalIngest a runtime trace file into the runtime_* tables for the target repo. source='otel' takes OTel JSON / JSON-Lines / .gz and maps spans via (file_path, line_no, function_name); source='sql_log' takes pg_stat_statements CSV or a generic SQL JSON-Lines log and maps queries vi...4 params

Ingest a runtime trace file into the runtime_* tables for the target repo. source='otel' takes OTel JSON / JSON-Lines / .gz and maps spans via (file_path, line_no, function_name); source='sql_log' takes pg_stat_statements CSV or a generic SQL JSON-Lines log and maps queries vi...

Parameters* required
path*string
Absolute filesystem path to the trace file
redact_enabledboolean
Override the runtime_redact_enabled config key. Disable ONLY for offline debugging on synthetic data.
repostring
Repository identifier (owner/name) — defaults to the current directory's resolved repo
sourcestring
Trace source format. Phases 1+4+5 accept 'otel', 'sql_log', and 'stack_log'.one of otel · sql_log · stack_log · apmdefault: otel
get_runtime_coverageRuntime coverage histogram for a repo or a single file: count of indexed symbols with vs without runtime evidence, plus the diagnostic list of unmapped runtime spans (likely reflective dispatch the AST missed). Pairs with Phase 2's per-result _runtime_confidence stamping. Retu...3 params

Runtime coverage histogram for a repo or a single file: count of indexed symbols with vs without runtime evidence, plus the diagnostic list of unmapped runtime spans (likely reflective dispatch the AST missed). Pairs with Phase 2's per-result _runtime_confidence stamping. Retu...

Parameters* required
file_pathstring
Optional repo-relative file path. When set, scopes the histogram to this file.
repo*string
Repository identifier (owner/name)
unmapped_limitinteger
Cap on the unmapped_runtime list (default 50)default: 50
find_hot_pathsTop-N symbols ranked by total runtime hit count across ingested traces, with per-symbol p50/p95 latency, sources contributing, and last_seen. Optionally filtered by a name substring. Pairs with get_blast_radius to answer 'is this PR touching code that runs 4M times/day?' Retur...3 params

Top-N symbols ranked by total runtime hit count across ingested traces, with per-symbol p50/p95 latency, sources contributing, and last_seen. Optionally filtered by a name substring. Pairs with get_blast_radius to answer 'is this PR touching code that runs 4M times/day?' Retur...

Parameters* required
querystring
Optional case-insensitive substring filter on symbol name
repo*string
Repository identifier (owner/name)
top_ninteger
Cap on returned rows (default 20, max 200)default: 20
find_unused_pathsSymbols with zero (or stale) runtime hits over the look-back window. Distinct from find_dead_code: this surfaces code that's reachable on paper but never executed — only possible to detect with runtime data. Excludes test files and entry-point filenames by default. Returns an...5 params

Symbols with zero (or stale) runtime hits over the look-back window. Distinct from find_dead_code: this surfaces code that's reachable on paper but never executed — only possible to detect with runtime data. Excludes test files and entry-point filenames by default. Returns an...

Parameters* required
include_entry_pointsboolean
Include symbols in entry-point filenames (main.py, wsgi.py, etc.)default: false
include_testsboolean
Include symbols in test filesdefault: false
max_resultsinteger
Cap on returned rows (default 200, max 1000)default: 200
repo*string
Repository identifier (owner/name)
since_daysinteger
Look-back window in days (default 90)default: 90
get_redaction_logPer-pattern PII redaction counts from runtime_redaction_log. Operators run this to verify the redaction chokepoint is firing on production traffic — covers the OTel / SQL / stack ingest paths (file-based or HTTP live-ingest, Phase 6). Returns {patterns: [{source, pattern, coun...3 params

Per-pattern PII redaction counts from runtime_redaction_log. Operators run this to verify the redaction chokepoint is firing on production traffic — covers the OTel / SQL / stack ingest paths (file-based or HTTP live-ingest, Phase 6). Returns {patterns: [{source, pattern, coun...

Parameters* required
repo*string
Repository identifier (owner/name)
since_daysinteger
Lookback window for last_redacted filter (default 30)default: 30
sourcestring
Optional filter to a single source labelone of otel · sql_log · stack_log · apm
list_reposList all indexed repositories. START HERE before using Grep/Read/search tools — check if the project is already indexed, then use search_symbols / get_symbol_source instead of native file reads. If jcodemunch tools appear as deferred in your tool list, call ToolSearch to load...

List all indexed repositories. START HERE before using Grep/Read/search tools — check if the project is already indexed, then use search_symbols / get_symbol_source instead of native file reads. If jcodemunch tools appear as deferred in your tool list, call ToolSearch to load...

No parameters. Call it with no arguments.

get_watch_statusReport watch-all daemon coverage: every locally-indexed repo, each repo's staleness / reindex-in-progress state, and the OS-level service status. Call before relying on index freshness when you suspect files may have changed since the last index.

Report watch-all daemon coverage: every locally-indexed repo, each repo's staleness / reindex-in-progress state, and the OS-level service status. Call before relying on index freshness when you suspect files may have changed since the last index.

No parameters. Call it with no arguments.

resolve_repoResolve a filesystem path to its indexed repo identifier. O(1) lookup — faster than list_repos for finding a single repo. Accepts repo root, worktree, subdirectory, or file path.1 params

Resolve a filesystem path to its indexed repo identifier. O(1) lookup — faster than list_repos for finding a single repo. Accepts repo root, worktree, subdirectory, or file path.

Parameters* required
path*string
Absolute filesystem path (repo root, worktree, subdirectory, or file)
get_file_treeGet the file tree of an indexed repository, optionally filtered by path prefix. Results are capped at max_files (default 500) to prevent token overflow; use path_prefix to scope large trees.4 params

Get the file tree of an indexed repository, optionally filtered by path prefix. Results are capped at max_files (default 500) to prevent token overflow; use path_prefix to scope large trees.

Parameters* required
include_summariesboolean
Include file-level summaries in the tree nodesdefault: false
max_filesinteger
Maximum number of files to return (default 500). When truncated, response includes total_file_count and a hint to use path_prefix.default: 500
path_prefixstring
Optional path prefix to filter (e.g., 'src/utils')default:
repo*string
Repository identifier (owner/repo or just repo name)
get_file_outlineGet all symbols (functions, classes, methods) in a file with full signatures (including parameter names) and summaries. Use signatures to review naming at parameter granularity without reading the full file. Pass repo and file_path (e.g. 'src/main.py').3 params

Get all symbols (functions, classes, methods) in a file with full signatures (including parameter names) and summaries. Use signatures to review naming at parameter granularity without reading the full file. Pass repo and file_path (e.g. 'src/main.py').

Parameters* required
file_pathstring
Path to the file within the repository (e.g., 'src/main.py')
file_pathsarray
List of file paths to query in batch mode. Returns a grouped results array.
repo*string
Repository identifier (owner/repo or just repo name)
get_symbol_sourceGet full source of one symbol (symbol_id → flat object) or many (symbol_ids[] → {symbols, errors}). Supports verify, context_lines, and fqn (PHP FQN via PSR-4).6 params

Get full source of one symbol (symbol_id → flat object) or many (symbol_ids[] → {symbols, errors}). Supports verify, context_lines, and fqn (PHP FQN via PSR-4).

Parameters* required
context_linesinteger
Number of lines before/after symbol to include for contextdefault: 0
fqnstring
PHP fully-qualified class name (e.g. 'App\Models\User'). Resolves to symbol_id via PSR-4. Alternative to symbol_id.
repo*string
Repository identifier (owner/repo or just repo name)
symbol_idstring
Single symbol ID — returns flat symbol object
symbol_idsarray
Multiple symbol IDs — returns {symbols, errors}
verifyboolean
Verify content hash matches stored hash (detects source drift)default: false
get_file_contentGet cached source for a file, optionally sliced to a line range.4 params

Get cached source for a file, optionally sliced to a line range.

Parameters* required
end_lineinteger
Optional 1-based end line (inclusive)
file_path*string
Path to the file within the repository (e.g., 'src/main.py')
repo*string
Repository identifier (owner/repo or just repo name)
start_lineinteger
Optional 1-based start line (inclusive)
search_symbolsSearch for symbols matching a query across the entire indexed repository. Returns matches with signatures and summaries.19 params

Search for symbols matching a query across the entire indexed repository. Returns matches with signatures and summaries.

Parameters* required
debugboolean
When true, each result includes a score_breakdown showing per-field scoring contributions (name_exact, name_contains, name_word_overlap, signature_phrase, signature_word_overlap, summary_phrase, su...default: false
decoratorstring
Optional filter: only return symbols with this decorator (case-insensitive substring match, e.g. 'route', 'property', 'Deprecated')
detail_levelstring
Controls result verbosity. 'compact' returns id/name/kind/file/line only (~15 tokens each, best for broad discovery). 'standard' returns signatures and summaries (default). 'full' inlines source co...one of compact · standard · fulldefault: standard
file_patternstring
Optional glob pattern to filter files (e.g., 'src/**/*.py')
fqnstring
PHP fully-qualified class name (e.g. 'App\Models\User'). Resolves via PSR-4 and uses the class name as query. Alternative to query.
fusionboolean
Enable multi-signal fusion (Weighted Reciprocal Rank) across lexical, structural, similarity, and identity channels. Produces higher-quality ranking than linear score addition. When True, sort_by i...default: false
fuzzyboolean
Enable fuzzy matching. When true, uses trigram overlap + Levenshtein distance as fallback when BM25 scores are low. Fuzzy results include match_type, fuzzy_similarity, and edit_distance fields.default: false
fuzzy_thresholdnumber
Minimum Jaccard trigram similarity (0.0–1.0) for fuzzy candidates. Lower values surface more candidates. Default 0.4.default: 0.4
kindstring
Optional filter by symbol kindone of function · class · method · constant · type · template
languagestring
Optional filter by languageone of ada · al · ansible · apex · arduino · asm
max_edit_distanceinteger
Maximum Levenshtein distance for direct name matching (catches typos). Default 2.default: 2
max_resultsinteger
Maximum number of results to return (ignored when token_budget is set)default: 10
query*string
Search query (matches symbol names, signatures, summaries, docstrings)
repo*string
Repository identifier (owner/repo or just repo name)
semanticboolean
Enable semantic (embedding-based) search. Requires an embedding provider: JCODEMUNCH_EMBED_MODEL (sentence-transformers), GOOGLE_API_KEY+GOOGLE_EMBED_MODEL (Gemini), or OPENAI_API_KEY+OPENAI_EMBED_...default: false
semantic_onlyboolean
Skip BM25 entirely and rank solely by embedding cosine similarity. Implies semantic=true.default: false
semantic_weightnumber
Weight for semantic score in hybrid BM25+embedding ranking (0.0–1.0). BM25 receives 1-weight. Default 0.5. Set to 0.0 for identical results to pure BM25; set to 1.0 for pure semantic.default: 0.5
sort_bystring
Ranking strategy. 'relevance' (default) = BM25 text match. 'centrality' = filter by query, rank by PageRank. 'combined' = BM25 + PageRank weighted.one of relevance · centrality · combineddefault: relevance
token_budgetinteger
Token budget cap. When set, results are sorted by score and greedily packed until the budget is exhausted. Overrides max_results. Reports token_budget, tokens_used, and tokens_remaining in _meta.
invalidate_cacheDelete the index and cached files for a repository. Forces a full re-index on next index_repo or index_folder call.1 params

Delete the index and cached files for a repository. Forces a full re-index on next index_repo or index_folder call.

Parameters* required
repo*string
Repository identifier (owner/repo or just repo name)
search_textFull-text search across indexed file contents. Useful when symbol search misses (e.g., string literals, comments, config values). Supports regex (is_regex=true) and context lines around matches (context_lines=N, like grep -C).6 params

Full-text search across indexed file contents. Useful when symbol search misses (e.g., string literals, comments, config values). Supports regex (is_regex=true) and context lines around matches (context_lines=N, like grep -C).

Parameters* required
context_linesinteger
Lines of context to include before and after each match (like grep -C N). Essential for understanding code around matches.default: 0
file_patternstring
Optional glob pattern to filter files (e.g., '*.py')
is_regexboolean
When true, treat query as a Python regex (re.search, case-insensitive). Supports alternation (|), character classes, lookaheads, etc.default: false
max_resultsinteger
Maximum number of matching lines to returndefault: 20
query*string
Text to search for. Case-insensitive substring by default. Set is_regex=true for full regex (e.g. 'estimateToken|tokenEstimat|\.length.*0\.25').
repo*string
Repository identifier (owner/repo or just repo name)
get_repo_outlineGet a high-level overview of an indexed repository: directories, file counts, language breakdown, symbol counts. Lighter than get_file_tree.1 params

Get a high-level overview of an indexed repository: directories, file counts, language breakdown, symbol counts. Lighter than get_file_tree.

Parameters* required
repo*string
Repository identifier (owner/repo or just repo name)
find_importersFind all files that import a given file. Answers 'what uses this file?'. has_importers=false on a result means that importer is itself unreachable (dead code chain). Supports dbt {{ ref() }} edges. Use file_paths for batch queries. Set cross_repo=true to also find importers in...5 params

Find all files that import a given file. Answers 'what uses this file?'. has_importers=false on a result means that importer is itself unreachable (dead code chain). Supports dbt {{ ref() }} edges. Use file_paths for batch queries. Set cross_repo=true to also find importers in...

Parameters* required
cross_repoboolean
When true, also search other indexed repos for cross-repo importers. Default: false (or JCODEMUNCH_CROSS_REPO_DEFAULT env var).default: false
file_pathstring
Target file path within the repo (e.g. 'src/features/intake/IntakeService.js'). Use for single-file queries. Cannot be used together with file_paths.
file_pathsarray
List of target file paths for batch queries. Returns a results array. Cannot be used together with file_path.
max_resultsinteger
Maximum results per filedefault: 50
repo*string
Repository identifier
find_referencesFind all files that import or reference an identifier via the import graph. Answers 'where is this imported / re-exported?'. SCOPE: import sites + dbt `{{ ref() }}` edges + (when `include_call_chain=true`) symbols whose bodies textually mention the identifier. Does NOT exhaust...5 params

Find all files that import or reference an identifier via the import graph. Answers 'where is this imported / re-exported?'. SCOPE: import sites + dbt `{{ ref() }}` edges + (when `include_call_chain=true`) symbols whose bodies textually mention the identifier. Does NOT exhaust...

Parameters* required
identifierstring
Symbol or module name to search for (e.g. 'bulkImport', 'IntakeService'). Use for single-identifier queries. Cannot be used together with identifiers.
identifiersarray
List of symbol or module names to search for (batch mode). Returns a results array. Cannot be used together with identifier.
include_call_chainboolean
When true (singular mode only), each reference entry includes calling_symbols: symbols in that file whose bodies mention the identifier. Default false.default: false
max_resultsinteger
Maximum resultsdefault: 50
repo*string
Repository identifier
check_referencesCheck if an identifier is referenced anywhere: imports + file content. Combines find_references and search_text into one call. Returns is_referenced (bool) for quick dead-code detection. Accepts multiple identifiers in one call via identifiers param.5 params

Check if an identifier is referenced anywhere: imports + file content. Combines find_references and search_text into one call. Returns is_referenced (bool) for quick dead-code detection. Accepts multiple identifiers in one call via identifiers param.

Parameters* required
identifierstring
Single identifier to check
identifiersarray
Multiple identifiers to check in one call. Returns grouped results.
max_content_resultsinteger
Max files to return per identifier for content search.default: 20
repo*string
Repository identifier
search_contentboolean
Also search file contents (not just imports). Set false for fast import-only check.default: true
search_columnsSearch column metadata across indexed models. Works with any ecosystem provider that emits column data (dbt, SQLMesh, database catalogs, etc.). Returns model name, file path, column name, and description. Use instead of grep/search_text for column discovery — 77% fewer tokens.4 params

Search column metadata across indexed models. Works with any ecosystem provider that emits column data (dbt, SQLMesh, database catalogs, etc.). Returns model name, file path, column name, and description. Use instead of grep/search_text for column discovery — 77% fewer tokens.

Parameters* required
max_resultsinteger
Maximum number of results to returndefault: 20
model_patternstring
Optional glob to filter by model name (e.g., 'fact_*', 'dim_provider')
query*string
Search query (matches column names and descriptions)
repo*string
Repository identifier (owner/repo or just repo name)
get_context_bundleGet full source + imports for one or more symbols in one call. Multi-symbol bundles deduplicate shared imports. Set token_budget to cap response size; use budget_strategy to control what's kept. Supports fqn (PHP FQN via PSR-4) as alternative to symbol_id.9 params

Get full source + imports for one or more symbols in one call. Multi-symbol bundles deduplicate shared imports. Set token_budget to cap response size; use budget_strategy to control what's kept. Supports fqn (PHP FQN via PSR-4) as alternative to symbol_id.

Parameters* required
budget_strategystring
'most_relevant' (default) ranks by file centrality (import in-degree). 'core_first' keeps the primary symbol first, ranks rest by centrality. 'compact' strips source bodies — returns signatures only.one of most_relevant · core_first · compactdefault: most_relevant
fqnstring
PHP fully-qualified class name (e.g. 'App\Models\User'). Resolves to symbol_id via PSR-4. Alternative to symbol_id.
include_budget_reportboolean
When true, include a 'budget_report' field showing tokens used, symbols included/excluded, and strategy applied.default: false
include_callersboolean
When true, each symbol entry includes a 'callers' list of files that directly import its defining file.default: false
output_formatstring
'json' (default) or 'markdown' — markdown renders a paste-ready document with imports, docstrings, and source blocks.one of json · markdowndefault: json
repo*string
Repository identifier (owner/repo or just repo name)
symbol_idstring
Single symbol ID (backward-compatible). Use symbol_ids for multi-symbol bundles.
symbol_idsarray
List of symbol IDs for a multi-symbol bundle. Imports are deduplicated across symbols that share a file.
token_budgetinteger
Max tokens to return. When set, symbols are ranked and trimmed to fit. Uses budget_strategy to prioritize.
get_session_statsGet token savings stats for the current MCP session. Returns tokens saved and cost avoided (this session and all-time), per-tool breakdown, session duration, and cumulative totals. Use to see how much jCodeMunch has saved you.

Get token savings stats for the current MCP session. Returns tokens saved and cost avoided (this session and all-time), per-tool breakdown, session duration, and cumulative totals. Use to see how much jCodeMunch has saved you.

No parameters. Call it with no arguments.

analyze_perfPer-tool latency telemetry: p50/p95/max in ms, error rate, plus cache hit-rate by tool. Defaults to the in-memory session ring; pass window=1h|24h|7d|all to query persisted telemetry.db (requires perf_telemetry_enabled). Useful for finding slow tools, cold caches, and regressi...5 params

Per-tool latency telemetry: p50/p95/max in ms, error rate, plus cache hit-rate by tool. Defaults to the in-memory session ring; pass window=1h|24h|7d|all to query persisted telemetry.db (requires perf_telemetry_enabled). Useful for finding slow tools, cold caches, and regressi...

Parameters* required
compare_releasestring
Compare current session against a saved baseline at benchmarks/token_baselines/v{version}.json (e.g. "1.74.0"). Adds baseline_diff to the response with per-tool deltas in tokens_saved and latency.
ledgerboolean
Include ranking_ledger summary (per-repo and per-tool event counts, average confidence, identity hits, semantic usage). Reads telemetry.db ranking_events table populated since v1.78.0; requires per...default: false
toolstring
Restrict the analysis to a single tool name.
topinteger
Cap on slowest tools to return.default: 20
windowstring
session = in-memory ring; others read telemetry.db.one of session · 1h · 24h · 7d · alldefault: session
check_embedding_driftPin (or re-check) a 16-string canary against the active embedding provider. On first run with capture=True (or force=True), embeds CANARY_STRINGS and persists the vectors to ~/.code-index/embed_canary.json. Subsequent calls re-embed those strings and report cosine drift; alarm...3 params

Pin (or re-check) a 16-string canary against the active embedding provider. On first run with capture=True (or force=True), embeds CANARY_STRINGS and persists the vectors to ~/.code-index/embed_canary.json. Subsequent calls re-embed those strings and report cosine drift; alarm...

Parameters* required
captureboolean
Pin a fresh canary instead of running the drift check. No-ops when a canary already exists unless force=True.default: false
forceboolean
Re-pin the canary before checking. Use after intentional provider/model upgrades.default: false
thresholdnumber
Cosine-distance threshold above which the alarm fires (per-canary maximum, not mean).default: 0.05
tune_weightsLearn per-repo retrieval weights from the v1.78.0 ranking ledger. Computes confidence correlations for the semantic and identity-match channels and writes overrides to ~/.code-index/tuning.jsonc. search_symbols reads those overrides at query time when the caller doesn't pass a...4 params

Learn per-repo retrieval weights from the v1.78.0 ranking ledger. Computes confidence correlations for the semantic and identity-match channels and writes overrides to ~/.code-index/tuning.jsonc. search_symbols reads those overrides at query time when the caller doesn't pass a...

Parameters* required
dry_runboolean
Compute proposed deltas without writing tuning.jsonc.default: false
explainboolean
Include per-signal correlations (mean confidence with/without semantic and identity channels) in the response.default: false
min_eventsinteger
Skip repos with fewer ledger events than this (defends against overfitting on small samples).default: 50
repostring
Limit tuning to a single repo. Default: every repo present in the ledger.
get_session_contextGet the current session context — files accessed, searches performed, and edits registered during this MCP session. Use to avoid re-reading the same files.2 params

Get the current session context — files accessed, searches performed, and edits registered during this MCP session. Use to avoid re-reading the same files.

Parameters* required
max_filesinteger
Maximum number of files to return in files_accessed.default: 50
max_queriesinteger
Maximum number of queries to return in recent_searches.default: 20
get_session_snapshotGet a compact session snapshot for context continuity. Returns a ~200 token markdown summary of files explored, edits made, searches performed, and dead ends. Designed for injection after context compaction to restore session orientation.4 params

Get a compact session snapshot for context continuity. Returns a ~200 token markdown summary of files explored, edits made, searches performed, and dead ends. Designed for injection after context compaction to restore session orientation.

Parameters* required
include_negative_evidenceboolean
Include dead-end searches (negative evidence) in snapshot.default: true
max_editsinteger
Maximum edited files to include.default: 10
max_filesinteger
Maximum focus files to include.default: 10
max_searchesinteger
Maximum key searches to include.default: 5
get_file_riskPer-symbol composite risk for one file. For each function or method, returns a 0-100 composite score (higher = healthier; lower = riskier) plus per-axis sub-scores (complexity, exposure, churn, test_gap). Powers the VS Code risk-density gutter. complexity is per-symbol (cyclom...2 params

Per-symbol composite risk for one file. For each function or method, returns a 0-100 composite score (higher = healthier; lower = riskier) plus per-axis sub-scores (complexity, exposure, churn, test_gap). Powers the VS Code risk-density gutter. complexity is per-symbol (cyclom...

Parameters* required
file_path*string
Path to the file within the indexed repo.
repo*string
Repo identifier (owner/name, full id, or bare display name).
diff_health_radarCompare two health-radar payloads (from get_repo_health.radar) and return axis-by-axis deltas, composite delta, grade movement, and a one-line verdict. Pure data transform — no index access, no I/O. Designed for PR-time diff-grade reports: run get_repo_health on the base branc...2 params

Compare two health-radar payloads (from get_repo_health.radar) and return axis-by-axis deltas, composite delta, grade movement, and a one-line verdict. Pure data transform — no index access, no I/O. Designed for PR-time diff-grade reports: run get_repo_health on the base branc...

Parameters* required
baseline*object
Radar payload from baseline (e.g. base branch). The `radar` field of a get_repo_health response.
current*object
Radar payload from current (e.g. PR branch). The `radar` field of a get_repo_health response.
digestAgent stand-up briefing for a repo. Returns a tight (~200 token) markdown digest of (a) what changed since the agent's last session (by tracking git HEAD between calls), (b) the current risk surface (top hotspots by complexity × churn), and (c) dead-code candidates. Each item...5 params

Agent stand-up briefing for a repo. Returns a tight (~200 token) markdown digest of (a) what changed since the agent's last session (by tracking git HEAD between calls), (b) the current risk surface (top hotspots by complexity × churn), and (c) dead-code candidates. Each item...

Parameters* required
max_changed_filesinteger
Cap on changed-files list (default 5).default: 5
max_dead_codeinteger
Cap on dead-code candidates (default 3).default: 3
max_hotspotsinteger
Cap on hotspot list (default 3).default: 3
repo*string
Repo identifier (owner/name, full id, or bare display name).
since_shastring
Override the last-seen SHA (for re-running a delta).
plan_turnPlan the next turn by analyzing query against the codebase. Returns confidence level (high/medium/low), recommended symbols/files, and guidance. Use as opening move for any task.4 params

Plan the next turn by analyzing query against the codebase. Returns confidence level (high/medium/low), recommended symbols/files, and guidance. Use as opening move for any task.

Parameters* required
max_recommendedinteger
Maximum number of symbols to recommend.default: 5
modelstring
Optional. Your active model identifier (e.g. 'claude-haiku-4-5'). When supplied and adaptive_tiering is enabled, plan_turn invokes the tier-switch logic as a side effect — the exposed tool list is...
query*string
What you're looking for (task description or symbol name).
repo*string
Repository identifier.
register_editRegister file edits to invalidate caches. Call after editing files to clear BM25 cache and search result cache for the repo.3 params

Register file edits to invalidate caches. Call after editing files to clear BM25 cache and search result cache for the repo.

Parameters* required
file_paths*array
List of file paths that were edited.
reindexboolean
If True, also reindex the files.default: false
repo*string
Repository identifier.
audit_agent_configAudit agent configuration files (CLAUDE.md, .cursorrules, copilot-instructions.md, etc.) for token waste. Reports per-file token cost, stale symbol references, dead file paths, redundancy between global and project configs, bloat patterns, and scope leaks. Cross-references aga...2 params

Audit agent configuration files (CLAUDE.md, .cursorrules, copilot-instructions.md, etc.) for token waste. Reports per-file token cost, stale symbol references, dead file paths, redundancy between global and project configs, bloat patterns, and scope leaks. Cross-references aga...

Parameters* required
project_pathstring
Project directory to scan for config files. Defaults to cwd.
repostring
Repository identifier for cross-referencing symbols and files. If omitted, skips stale-reference and dead-path checks.
get_dependency_graphGet the file-level dependency graph for a given file. Traverses import relationships up to 3 hops. Use to understand what a file depends on ('imports'), what depends on it ('importers'), or both. Prerequisite for blast radius analysis. Set cross_repo=true to include cross-repo...5 params

Get the file-level dependency graph for a given file. Traverses import relationships up to 3 hops. Use to understand what a file depends on ('imports'), what depends on it ('importers'), or both. Prerequisite for blast radius analysis. Set cross_repo=true to include cross-repo...

Parameters* required
cross_repoboolean
When true, include cross-repo edges (imports that resolve to packages in other indexed repos). Default: false.default: false
depthinteger
Number of hops to traverse (1–3)default: 1
directionstring
'imports' (files this file depends on), 'importers' (files that depend on this file), or 'both'one of imports · importers · bothdefault: imports
file*string
File path within the repo (e.g. 'src/server.py')
repo*string
Repository identifier (owner/repo or just repo name)
get_symbol_diffDiff symbol sets between two indexed snapshots. Shows added, removed, and changed symbols. Branch workflow: index branch A as repo-main, index branch B as repo-feature, then diff.2 params

Diff symbol sets between two indexed snapshots. Shows added, removed, and changed symbols. Branch workflow: index branch A as repo-main, index branch B as repo-feature, then diff.

Parameters* required
repo_a*string
First repo identifier (the 'before' snapshot)
repo_b*string
Second repo identifier (the 'after' snapshot)
get_class_hierarchyGet the full inheritance hierarchy for a class: ancestors (base classes via extends/implements) and descendants (subclasses/implementors). Works across Python, Java, TypeScript, C#, and any language where class signatures contain 'extends' or 'implements'.2 params

Get the full inheritance hierarchy for a class: ancestors (base classes via extends/implements) and descendants (subclasses/implementors). Works across Python, Java, TypeScript, C#, and any language where class signatures contain 'extends' or 'implements'.

Parameters* required
class_name*string
Name of the class to analyse
repo*string
Repository identifier (owner/repo or just repo name)
get_related_symbolsFind symbols related to a given symbol using heuristic clustering: same-file co-location (weight 3), shared importers (weight 1.5), and name-token overlap (weight 0.5/token). Useful for discovering what else to read when exploring an unfamiliar codebase.3 params

Find symbols related to a given symbol using heuristic clustering: same-file co-location (weight 3), shared importers (weight 1.5), and name-token overlap (weight 0.5/token). Useful for discovering what else to read when exploring an unfamiliar codebase.

Parameters* required
max_resultsinteger
Maximum results (default 10, max 50)default: 10
repo*string
Repository identifier (owner/repo or just repo name)
symbol_id*string
ID of the symbol to find relatives for
suggest_queriesSuggest search queries, entry-point files, and index stats. Good first call on an unfamiliar repo — surfaces most-imported files, top keywords, and ready-to-run example queries.1 params

Suggest search queries, entry-point files, and index stats. Good first call on an unfamiliar repo — surfaces most-imported files, top keywords, and ready-to-run example queries.

Parameters* required
repo*string
Repository identifier (owner/repo or just repo name)
get_blast_radiusFind all files affected by changing a symbol. Returns confirmed files (import + name match) and potential files (import only, e.g. wildcard). Use before renaming or deleting a symbol. Set cross_repo=true to also find consumers in other indexed repos. Set include_source=true to...10 params

Find all files affected by changing a symbol. Returns confirmed files (import + name match) and potential files (import only, e.g. wildcard). Use before renaming or deleting a symbol. Set cross_repo=true to also find consumers in other indexed repos. Set include_source=true to...

Parameters* required
call_depthinteger
When > 0, also find symbols that *call* this symbol (call-level analysis). Returns a callers list alongside the import-level confirmed/potential. Max 3. Default 0 (disabled).default: 0
cross_repoboolean
When true, also find files in other indexed repos that consume this repo's package. Default: false.default: false
decorator_filterstring
Optional: filter confirmed results to only those containing symbols with this decorator (case-insensitive substring match)
depthinteger
Import hops to traverse (1 = direct importers only, max 3). Default 1.default: 1
fqnstring
PHP fully-qualified class name (e.g. 'App\Models\User'). Resolves to symbol via PSR-4. Alternative to symbol.
include_depth_scoresboolean
When true, adds impact_by_depth (files grouped by hop distance) and per-depth risk scores. overall_risk_score and direct_dependents_count are always included. Default false.default: false
include_sourceboolean
When true, each confirmed file includes source_snippets (lines referencing the symbol) and symbols_in_file (nearby symbol signatures). Use for fix-ready context without extra tool calls. Default fa...default: false
repo*string
Repository identifier (owner/repo or just repo name)
source_budgetinteger
Max tokens for source snippets across all files (default 8000). Files are prioritized by reference count.default: 8000
symbol*string
Symbol name or ID to analyse (e.g. 'calculateScore' or a full symbol ID)
get_call_hierarchyReturn incoming callers and outgoing callees for a symbol, N levels deep. Uses AST-derived call detection: callers = symbols in importing files that mention this name; callees = imported symbols mentioned in this symbol's body. Useful for understanding how a symbol fits into t...4 params

Return incoming callers and outgoing callees for a symbol, N levels deep. Uses AST-derived call detection: callers = symbols in importing files that mention this name; callees = imported symbols mentioned in this symbol's body. Useful for understanding how a symbol fits into t...

Parameters* required
depthinteger
Maximum hops to traverse (1–5). Default 3.default: 3
directionstring
'callers' = who calls this symbol; 'callees' = what this symbol calls; 'both' (default).one of callers · callees · bothdefault: both
repo*string
Repository identifier (owner/repo or just repo name)
symbol_id*string
Symbol name or full ID to analyse. Use search_symbols to find IDs.
get_impact_previewShow what breaks if a symbol is removed or renamed. Walks the call graph transitively to find every symbol that calls this one, returning affected symbols grouped by file with call-chain paths. Use this before deleting or renaming a symbol to understand full impact. For a stru...2 params

Show what breaks if a symbol is removed or renamed. Walks the call graph transitively to find every symbol that calls this one, returning affected symbols grouped by file with call-chain paths. Use this before deleting or renaming a symbol to understand full impact. For a stru...

Parameters* required
repo*string
Repository identifier (owner/repo or just repo name)
symbol_id*string
Symbol name or full ID to analyse. Use search_symbols to find IDs.
get_symbol_provenanceTrace the complete authorship lineage and evolution narrative of a symbol through git history. Returns every commit that touched the symbol (or its file), classified into semantic categories (creation, bugfix, refactor, feature, perf, rename, revert, etc.) with extracted commi...3 params

Trace the complete authorship lineage and evolution narrative of a symbol through git history. Returns every commit that touched the symbol (or its file), classified into semantic categories (creation, bugfix, refactor, feature, perf, rename, revert, etc.) with extracted commi...

Parameters* required
max_commitsinteger
Maximum commits to analyse (default 25, max 100).default: 25
repo*string
Repository identifier (owner/repo or just repo name)
symbol*string
Symbol name or full ID as returned by search_symbols.
get_pr_risk_profileProduce a unified risk assessment for all changes between two git refs (branch, PR, or SHA range). Fuses five signals — blast radius, complexity, churn, test gaps, and change volume — into a single composite risk_score (0.0–1.0) with actionable recommendations. Returns the top...4 params

Produce a unified risk assessment for all changes between two git refs (branch, PR, or SHA range). Fuses five signals — blast radius, complexity, churn, test gaps, and change volume — into a single composite risk_score (0.0–1.0) with actionable recommendations. Returns the top...

Parameters* required
base_refstring
Base SHA/ref to compare from. Defaults to the SHA stored at index time.
daysinteger
Churn look-back window in days (default 90).default: 90
head_refstring
Head SHA/ref to compare to (default 'HEAD').default: HEAD
repo*string
Repository identifier (owner/repo or just repo name)
get_dependency_cyclesDetect circular import chains in a repository. Returns every strongly-connected component (set of files that mutually import each other, directly or transitively). Run this to identify architectural problems before a refactor, or to understand why a module is hard to test in i...1 params

Detect circular import chains in a repository. Returns every strongly-connected component (set of files that mutually import each other, directly or transitively). Run this to identify architectural problems before a refactor, or to understand why a module is hard to test in i...

Parameters* required
repo*string
Repository identifier (owner/repo or just repo name)
get_coupling_metricsReturn afferent coupling (Ca), efferent coupling (Ce), and instability score for a file/module. Ca = files that import this module (dependents). Ce = files this module imports (dependencies). Instability I = Ce/(Ca+Ce): 0 = stable, 1 = unstable. Use to identify fragile modules...2 params

Return afferent coupling (Ca), efferent coupling (Ce), and instability score for a file/module. Ca = files that import this module (dependents). Ce = files this module imports (dependencies). Instability I = Ce/(Ca+Ce): 0 = stable, 1 = unstable. Use to identify fragile modules...

Parameters* required
module_path*string
File path within the repo (e.g. 'src/utils.py')
repo*string
Repository identifier (owner/repo or just repo name)
get_layer_violationsCheck whether imports respect declared architectural layer boundaries. Reports every import that crosses a forbidden layer boundary. Layer rules can be passed directly or defined in .jcodemunch.jsonc under 'architecture.layers'. Use to enforce clean architecture and detect dep...2 params

Check whether imports respect declared architectural layer boundaries. Reports every import that crosses a forbidden layer boundary. Layer rules can be passed directly or defined in .jcodemunch.jsonc under 'architecture.layers'. Use to enforce clean architecture and detect dep...

Parameters* required
repo*string
Repository identifier (owner/repo or just repo name)
rulesarray
Layer definitions. Each entry: {name, paths: [...], may_not_import: [...]}. If omitted, reads from .jcodemunch.jsonc architecture.layers.
check_rename_safeCheck whether renaming a symbol to a new name would cause name collisions. Scans the symbol's own file and every file that imports it, looking for an existing symbol with the proposed new name. Returns safe=true when no collisions are found. Run this before any rename/refactor...3 params

Check whether renaming a symbol to a new name would cause name collisions. Scans the symbol's own file and every file that imports it, looking for an existing symbol with the proposed new name. Returns safe=true when no collisions are found. Run this before any rename/refactor...

Parameters* required
new_name*string
Proposed new symbol name (not a full ID, just the name).
repo*string
Repository identifier (owner/repo or just repo name)
symbol_id*string
Symbol ID to rename (e.g. 'src/utils.py::helper#function'). Bare name accepted when unambiguous.
check_delete_safeComposite preflight: can this symbol be deleted safely? Combines find_importers (cross-repo), check_references, find_dead_code confidence, runtime evidence (Phase 7 traces when available), and entry-point heuristics into a single verdict + one-line recommended_action. Verdict...4 params

Composite preflight: can this symbol be deleted safely? Combines find_importers (cross-repo), check_references, find_dead_code confidence, runtime evidence (Phase 7 traces when available), and entry-point heuristics into a single verdict + one-line recommended_action. Verdict...

Parameters* required
cross_repoboolean
Include other indexed repos in the analysis (default true).default: true
include_runtimeboolean
Consult runtime_calls for production evidence (default true).default: true
repo*string
Repository identifier
symbol*string
Symbol ID or name to evaluate for deletion safety.
find_implementationsFind concrete implementations of an interface, abstract class, or method. Multi-source resolution with confidence scoring: LSP dispatch (1.0), AST class hierarchy (0.85), duck-typed name match (0.65), decorator handler (0.45). Classifies each impl (subclass_override / interfac...8 params

Find concrete implementations of an interface, abstract class, or method. Multi-source resolution with confidence scoring: LSP dispatch (1.0), AST class hierarchy (0.85), duck-typed name match (0.65), decorator handler (0.45). Classifies each impl (subclass_override / interfac...

Parameters* required
cross_repoboolean
Also search other indexed repos via the package registry (default false).default: false
include_subclassesboolean
Walk class hierarchy for class-kind targets (default true).default: true
max_resultsinteger
Cap on returned implementations (default 50).default: 50
rank_by_importanceboolean
Sort by confidence then PageRank × byte_length (default true).default: true
relationship_kindsarray
Optional whitelist: subclass_override, interface_impl, duck_typed, decorator_handler, subclass. Defaults to all.
repo*string
Repository identifier
symbol*string
Symbol ID or name of the interface/abstract/method to analyse.
token_budgetinteger
Hard cap on response payload (default 4000).default: 4000
plan_refactoringGenerate edit-ready refactoring instructions for renaming, moving, extracting, or changing the signature of a symbol. Returns {old_text, new_text} blocks for every affected file — directly compatible with Edit tool. Handles import rewrites, collision detection, new file genera...7 params

Generate edit-ready refactoring instructions for renaming, moving, extracting, or changing the signature of a symbol. Returns {old_text, new_text} blocks for every affected file — directly compatible with Edit tool. Handles import rewrites, collision detection, new file genera...

Parameters* required
depthinteger
Import hops to traverse (1-3, default 2).default: 2
new_filestring
Destination file path for move/extract operations.
new_namestring
New name for rename operations.
new_signaturestring
New function signature (e.g. 'foo(x, y, z=0)').
refactor_type*string
Type of refactoring to plan.one of rename · move · extract · signature
repo*string
Repository identifier (owner/repo or just repo name)
symbol*string
Symbol name or ID to refactor. For extract, comma-separated list (e.g. 'helper,process_data').
get_dead_code_v2Find likely-dead functions and methods using three independent evidence signals: (1) the symbol's file is not reachable from any entry point via the import graph (filename heuristic + package.json main/module/exports/bin), (2) no indexed symbol calls this symbol in the call gr...5 params

Find likely-dead functions and methods using three independent evidence signals: (1) the symbol's file is not reachable from any entry point via the import graph (filename heuristic + package.json main/module/exports/bin), (2) no indexed symbol calls this symbol in the call gr...

Parameters* required
file_patternstring
Optional glob (e.g. `src/**`, `*.py`) — only analyse symbols whose file matches.
include_testsboolean
Include test files in analysis (default false).default: false
max_resultsinteger
Cap on returned dead symbols (default 100, 0 = unlimited). _meta.truncated + _meta.total_matches flag when capped.default: 100
min_confidencenumber
Minimum confidence threshold 0.0–1.0 (default 0.5 = at least 2/3 signals).default: 0.5
repo*string
Repository identifier (owner/repo or just repo name)
get_extraction_candidatesIdentify functions in a file that are good candidates for extraction to a shared module. A candidate must have high cyclomatic complexity (doing a lot) AND be called from multiple other files (already implicitly shared). Results are ranked by score = complexity × caller_file_c...4 params

Identify functions in a file that are good candidates for extraction to a shared module. A candidate must have high cyclomatic complexity (doing a lot) AND be called from multiple other files (already implicitly shared). Results are ranked by score = complexity × caller_file_c...

Parameters* required
file_path*string
Relative file path within the repo (e.g. 'src/utils.py').
min_callersinteger
Minimum number of distinct caller files (default 2).default: 2
min_complexityinteger
Minimum cyclomatic complexity threshold (default 5).default: 5
repo*string
Repository identifier (owner/repo or just repo name)
get_symbol_complexityReturn cyclomatic complexity, nesting depth, and parameter count for a single symbol. Complexity data is stored at index time (requires jcodemunch-mcp >= 1.16 / INDEX_VERSION 7). assessment field: 'low' (1-4), 'medium' (5-10), 'high' (11+). Re-index the repo if all metrics sho...2 params

Return cyclomatic complexity, nesting depth, and parameter count for a single symbol. Complexity data is stored at index time (requires jcodemunch-mcp >= 1.16 / INDEX_VERSION 7). assessment field: 'low' (1-4), 'medium' (5-10), 'high' (11+). Re-index the repo if all metrics sho...

Parameters* required
repo*string
Repository identifier (owner/repo or just repo name)
symbol_id*string
Full symbol ID as returned by search_symbols or get_file_outline.
get_churn_rateReturn git churn metrics for a file or symbol: commit count, unique authors, first_seen date, last_modified date, and churn_per_week over a configurable window. assessment: 'stable' (<=1/week), 'active' (<=3/week), 'volatile' (>3/week). Requires a locally indexed repo (index_f...3 params

Return git churn metrics for a file or symbol: commit count, unique authors, first_seen date, last_modified date, and churn_per_week over a configurable window. assessment: 'stable' (<=1/week), 'active' (<=3/week), 'volatile' (>3/week). Requires a locally indexed repo (index_f...

Parameters* required
daysinteger
Look-back window in days (default 90).default: 90
repo*string
Repository identifier (owner/repo or just repo name)
target*string
Relative file path (e.g. 'src/utils.py') or a full symbol ID.
get_hotspotsReturn the top-N highest-risk symbols ranked by hotspot score = cyclomatic_complexity x log(1 + commits_last_N_days). Identifies code that is both complex and frequently changed — the highest bug-introduction risk in the codebase. Methodology matches CodeScene/Adam Tornhill. R...4 params

Return the top-N highest-risk symbols ranked by hotspot score = cyclomatic_complexity x log(1 + commits_last_N_days). Identifies code that is both complex and frequently changed — the highest bug-introduction risk in the codebase. Methodology matches CodeScene/Adam Tornhill. R...

Parameters* required
daysinteger
Churn look-back window in days (default 90).default: 90
min_complexityinteger
Minimum cyclomatic complexity to include (default 2).default: 2
repo*string
Repository identifier (owner/repo or just repo name)
top_ninteger
Number of results to return (default 20).default: 20
get_repo_healthReturn a one-call triage snapshot of the entire repository: symbol counts, dead code %, average cyclomatic complexity, top 5 hotspots, dependency cycle count, and unstable module count. Designed to be the first tool called in any new session — one call gives a complete picture...2 params

Return a one-call triage snapshot of the entire repository: symbol counts, dead code %, average cyclomatic complexity, top 5 hotspots, dependency cycle count, and unstable module count. Designed to be the first tool called in any new session — one call gives a complete picture...

Parameters* required
daysinteger
Churn look-back window for hotspot calculation (default 90).default: 90
repo*string
Repository identifier (owner/repo or just repo name)
get_untested_symbolsFind functions and methods with no evidence of being exercised by any test file. Uses import-graph reachability + name matching (AST call_references when available, word-boundary text heuristic as fallback). Returns symbols classified as 'unreached' (no test file imports the s...4 params

Find functions and methods with no evidence of being exercised by any test file. Uses import-graph reachability + name matching (AST call_references when available, word-boundary text heuristic as fallback). Returns symbols classified as 'unreached' (no test file imports the s...

Parameters* required
file_patternstring
Optional glob to narrow which source files are analysed (e.g. 'src/**/*.py').
max_resultsinteger
Cap on returned symbols (default 100).default: 100
min_confidencenumber
Minimum confidence to include (0.0–1.0, default 0.5).default: 0.5
repo*string
Repository identifier (owner/repo or just repo name)
search_astCross-language AST pattern matching. Finds structural code patterns across all 70+ indexed languages using a single query — no need to know language-specific AST node types. Two modes: (1) preset anti-patterns (empty_catch, bare_except, deeply_nested, nested_loops, god_functio...6 params

Cross-language AST pattern matching. Finds structural code patterns across all 70+ indexed languages using a single query — no need to know language-specific AST node types. Two modes: (1) preset anti-patterns (empty_catch, bare_except, deeply_nested, nested_loops, god_functio...

Parameters* required
categorystring
Run all presets in a category: security, error_handling, complexity, performance, maintenance, or all.
file_patternstring
Glob filter on file paths (e.g. 'src/**/*.py').
languagestring
Restrict scan to one language (e.g. 'python', 'typescript').
max_resultsinteger
Cap on total matches returned (default 50).default: 50
patternstring
Preset name (empty_catch, bare_except, deeply_nested, nested_loops, god_function, eval_exec, hardcoded_secret, todo_fixme, magic_number, reassigned_param) or custom query (call:NAME, string:/REGEX/...
repo*string
Repository identifier (owner/repo or just repo name)
get_symbol_importanceReturn the most architecturally important symbols in a repo, ranked by PageRank or in-degree centrality on the import graph. Useful for orientation: surfaces the symbols that most of the codebase depends on. New tool: use after indexing to understand repo architecture at a gla...4 params

Return the most architecturally important symbols in a repo, ranked by PageRank or in-degree centrality on the import graph. Useful for orientation: surfaces the symbols that most of the codebase depends on. New tool: use after indexing to understand repo architecture at a gla...

Parameters* required
algorithmstring
'pagerank' (default) = full PageRank on import graph; 'degree' = simple in-degree count (faster).one of pagerank · degreedefault: pagerank
repo*string
Repository identifier (owner/repo or just repo name)
scopestring
Limit to a subdirectory prefix (e.g. 'src/core')
top_ninteger
Number of top symbols to return (default 20, max 200)default: 20
find_similar_symbolsFind clusters of similar functions/methods/classes — consolidation candidates. Blends three signals: semantic (embedding cosine when embed_repo has run), structural (signature-token Jaccard + size ratio), and behavioral (callee-set Jaccard). Runs union-find clustering, classif...9 params

Find clusters of similar functions/methods/classes — consolidation candidates. Blends three signals: semantic (embedding cosine when embed_repo has run), structural (signature-token Jaccard + size ratio), and behavioral (callee-set Jaccard). Runs union-find clustering, classif...

Parameters* required
include_kindsarray
Symbol kind whitelist. Defaults to ['function', 'method', 'class'].
include_testsboolean
When False (default), test files are skipped — tests intentionally share shapes.default: false
max_clustersinteger
Cap on clusters returned (default 25).default: 25
min_sizeinteger
Minimum byte_length per symbol (default 30; filters out getters/wrappers).default: 30
repo*string
Repository identifier (owner/repo or just repo name)
scopestring
Optional glob to limit to a subdirectory (e.g. 'src/core/*').
semantic_weightnumber
Embedding weight when embeddings are present (0.0–1.0). Default 0.6.default: 0.6
thresholdnumber
Minimum combined similarity to form a cluster edge (0.0–1.0). Default 0.80.default: 0.8
token_budgetinteger
Hard cap on the response's payload (default 4000).default: 4000
get_repo_mapQuery-less, token-budgeted, signature-level overview of a repository. Groups symbols by file, ranks files by PageRank on the import graph, and greedy-packs signatures (not bodies) under token_budget. Designed for cold-start orientation — 'I just cloned this repo, what matters...5 params

Query-less, token-budgeted, signature-level overview of a repository. Groups symbols by file, ranks files by PageRank on the import graph, and greedy-packs signatures (not bodies) under token_budget. Designed for cold-start orientation — 'I just cloned this repo, what matters...

Parameters* required
include_kindsarray
Optional list of symbol kinds to restrict results (e.g. ['class', 'function']).
max_per_fileinteger
Max signatures emitted per file (default 5, capped at 50).default: 5
repo*string
Repository identifier (owner/repo or just repo name)
scopestring
Optional glob to limit to a subdirectory (e.g. 'src/core/*').
token_budgetinteger
Hard cap on returned tokens (default 2048).default: 2048
find_dead_codeFind dead code — files and symbols with zero importers and no entry-point role. Uses the import graph to identify unreachable code. Returns confidence scores (1.0 = provably unreachable, 0.7 = all importers are themselves dead). Set granularity='file' for file-level results only.5 params

Find dead code — files and symbols with zero importers and no entry-point role. Uses the import graph to identify unreachable code. Returns confidence scores (1.0 = provably unreachable, 0.7 = all importers are themselves dead). Set granularity='file' for file-level results only.

Parameters* required
entry_point_patternsarray
Additional glob patterns to treat as live roots (e.g. 'cli/*.py', 'scripts/*').
granularitystring
'symbol' (default) returns dead symbols; 'file' returns dead files only.one of symbol · filedefault: symbol
include_testsboolean
Treat test files as live roots (default false — test files are excluded from dead code candidates).default: false
min_confidencenumber
Minimum confidence threshold 0.0–1.0. Default 0.8. Use 1.0 for provably unreachable only.default: 0.8
repo*string
Repository identifier (owner/repo or just repo name)
get_ranked_contextAssemble the best-fit context for a query within a token budget. Ranks all symbols by relevance (BM25) and/or centrality (PageRank), loads source for the top candidates, and packs greedily until token_budget is exhausted. Use when you want 'the best N tokens of context for thi...7 params

Assemble the best-fit context for a query within a token budget. Ranks all symbols by relevance (BM25) and/or centrality (PageRank), loads source for the top candidates, and packs greedily until token_budget is exhausted. Use when you want 'the best N tokens of context for thi...

Parameters* required
fusionboolean
Enable multi-signal fusion (Weighted Reciprocal Rank) for ranking. Combines lexical, structural, and identity channels.default: false
include_kindsarray
Optional list of symbol kinds to restrict results (e.g. ['class', 'function']).
query*string
Natural language or identifier describing the task (max 500 chars)
repo*string
Repository identifier (owner/repo or just repo name)
scopestring
Optional glob pattern to limit search to a subdirectory (e.g. 'src/core/*').
strategystring
'combined' (default) = BM25 + PageRank weighted sum. 'bm25' = pure text relevance. 'centrality' = PageRank only, filtered to query-matching symbols.one of combined · bm25 · centralitydefault: combined
token_budgetinteger
Hard cap on returned tokens (default 4000).default: 4000
assemble_task_contextTask-aware single-call orchestrator. Auto-classifies task into explore/debug/refactor/extend/audit/review intent, runs the right sub-tools, returns one source-attributed capsule under token_budget.7 params

Task-aware single-call orchestrator. Auto-classifies task into explore/debug/refactor/extend/audit/review intent, runs the right sub-tools, returns one source-attributed capsule under token_budget.

Parameters* required
cross_repoboolean
When True, layer cross-repo signals (default false).default: false
includearray
Optional whitelist of stages to run (e.g. ['anchor', 'blast', 'runtime']).
intentstring
Optional override; auto-detected from task when omitted.one of explore · debug · refactor · extend · audit · review
repo*string
Repository identifier
symbolsarray
Optional anchor symbol IDs or names; auto-extracted from task when omitted.
task*string
Natural-language task description. Anchors auto-extracted from task text.
token_budgetinteger
End-to-end hard cap on returned tokens (default 8000).default: 8000
get_changed_symbolsMap a git diff to affected symbols: given two commits, returns which symbols were added, removed, modified, or renamed. Useful after merging a PR to answer 'what actually changed?' for code review or regression triage. Requires a locally indexed repo (index_folder). Defaults t...5 params

Map a git diff to affected symbols: given two commits, returns which symbols were added, removed, modified, or renamed. Useful after merging a PR to answer 'what actually changed?' for code review or regression triage. Requires a locally indexed repo (index_folder). Defaults t...

Parameters* required
include_blast_radiusboolean
Also return downstream importers (blast radius) for each changed symbol (default false).default: false
max_blast_depthinteger
Hop limit when include_blast_radius=true (default 3, max 5).default: 3
repo*string
Repository identifier — must be locally indexed with index_folder
since_shastring
Compare from this git SHA or ref. Defaults to the SHA stored at index time.
until_shastring
Compare to this git SHA or ref (default 'HEAD').default: HEAD
embed_repoPrecompute and cache symbol embeddings for semantic search. Optional warm-up: search_symbols with semantic=true lazily embeds missing symbols on first use, but embed_repo warms the cache upfront so the first semantic query returns immediately. Requires an embedding provider (J...3 params

Precompute and cache symbol embeddings for semantic search. Optional warm-up: search_symbols with semantic=true lazily embeds missing symbols on first use, but embed_repo warms the cache upfront so the first semantic query returns immediately. Requires an embedding provider (J...

Parameters* required
batch_sizeinteger
Symbols per embedding batch (default 50).default: 50
forceboolean
Recompute all embeddings even if they already exist (default false).default: false
repo*string
Repository identifier (owner/repo or just repo name)
get_cross_repo_mapReturn which indexed repos depend on which other indexed repos at the package level. Shows the full cross-repository dependency map based on package names extracted from manifest files (pyproject.toml, package.json, go.mod, Cargo.toml, etc.). Use to visualize how your indexed...1 params

Return which indexed repos depend on which other indexed repos at the package level. Shows the full cross-repository dependency map based on package names extracted from manifest files (pyproject.toml, package.json, go.mod, Cargo.toml, etc.). Use to visualize how your indexed...

Parameters* required
repostring
Optional repo ID to filter. If omitted, returns the full cross-repo map.
get_group_contractsSurface the de-facto API contracts across a group of indexed repos. Walks each member's named imports, resolves them to symbols in other members via the package registry, and classifies each shared symbol into one of four verdict tiers: 'de_facto_api' (used by ≥min_importers e...8 params

Surface the de-facto API contracts across a group of indexed repos. Walks each member's named imports, resolves them to symbols in other members via the package registry, and classifies each shared symbol into one of four verdict tiers: 'de_facto_api' (used by ≥min_importers e...

Parameters* required
churn_daysinteger
Window for stability scoring (default 90).default: 90
classifyboolean
Attach verdict tier per contract. Default true.default: true
include_dead_contractsboolean
Surface public symbols with zero external importers. Default false.default: false
include_internalboolean
Surface leaky_internal contracts (architecture violations). Default true.default: true
max_contractsinteger
Cap on returned contracts (default 50).default: 50
min_importersinteger
Minimum distinct external repo importers to surface a contract (default 2).default: 2
repos*array
List of indexed repo IDs (owner/name or bare names). Must be ≥2.
token_budgetinteger
Hard cap on response payload (default 4000).default: 4000
get_tectonic_mapDiscover the logical module topology of a codebase by fusing three coupling signals: structural (import edges), behavioral (shared symbol references), and temporal (git co-churn). Returns tectonic plates (auto-detected file clusters), each with an anchor file, cohesion score,...3 params

Discover the logical module topology of a codebase by fusing three coupling signals: structural (import edges), behavioral (shared symbol references), and temporal (git co-churn). Returns tectonic plates (auto-detected file clusters), each with an anchor file, cohesion score,...

Parameters* required
daysinteger
Git co-churn look-back window in days (default 90)default: 90
min_plate_sizeinteger
Minimum files per plate to include; smaller groups go to isolated_files (default 2)default: 2
repo*string
Repository identifier (owner/repo or just repo name)
get_signal_chainsDiscover how external signals (HTTP requests, CLI commands, scheduled tasks, events) propagate through the codebase via the call graph. Each signal chain traces a path from a gateway (entry point) through its callees to leaf symbols. Two modes: (1) Discovery — omit symbol to m...5 params

Discover how external signals (HTTP requests, CLI commands, scheduled tasks, events) propagate through the codebase via the call graph. Each signal chain traces a path from a gateway (entry point) through its callees to leaf symbols. Two modes: (1) Discovery — omit symbol to m...

Parameters* required
include_testsboolean
Include test_* functions as gateways (default false).default: false
kindstring
Filter gateways by kind: http, cli, event, task, main, test.one of http · cli · event · task · main · test
max_depthinteger
BFS depth limit per chain (1–8, default 5).default: 5
repo*string
Repository identifier (owner/repo or just repo name)
symbolstring
Symbol name or ID for lookup mode. When provided, returns only chains containing that symbol. Omit for discovery mode (all chains).
render_diagramRender any graph-producing tool's output as rich, annotated Mermaid markup. Pass the raw output dict from get_call_hierarchy, get_signal_chains, get_tectonic_map, get_dependency_cycles, get_impact_preview, get_blast_radius, or get_dependency_graph. Auto-detects the source tool...3 params

Render any graph-producing tool's output as rich, annotated Mermaid markup. Pass the raw output dict from get_call_hierarchy, get_signal_chains, get_tectonic_map, get_dependency_cycles, get_impact_preview, get_blast_radius, or get_dependency_graph. Auto-detects the source tool...

Parameters* required
max_nodesinteger
Maximum nodes before smart pruning (default 80, range 10–200).default: 80
source*object
Raw output dict from any supported graph-producing tool.
themestring
Visual theme: 'flow' (architecture), 'risk' (impact), 'minimal' (docs). Default: flow.one of flow · risk · minimaldefault: flow
get_project_intelAuto-discover and parse non-code knowledge files (Dockerfiles, CI configs, docker-compose, K8s manifests, .env templates, Makefiles, package.json scripts) and cross-reference them to indexed code symbols. Returns structured intelligence grouped by category: infra, ci, config,...3 params

Auto-discover and parse non-code knowledge files (Dockerfiles, CI configs, docker-compose, K8s manifests, .env templates, Makefiles, package.json scripts) and cross-reference them to indexed code symbols. Returns structured intelligence grouped by category: infra, ci, config,...

Parameters* required
categorystring
Category to return: all, infra, ci, config, deps, api, data.one of all · infra · ci · config · deps · apidefault: all
repo*string
Repository identifier (owner/repo or display name).
scope_pathstring
Optional subpath (relative to source_root) to restrict intel discovery to a single workspace member — e.g. 'packages/api'. When omitted, the whole repo is scanned. Use `list_workspaces` to enumerat...
list_workspacesEnumerate monorepo workspace members for an indexed repo. Detects pnpm (pnpm-workspace.yaml), yarn/npm (package.json workspaces), turborepo (turbo.json), lerna (lerna.json), rush (rush.json), Go (go.work), and Cargo ([workspace] members). Returns [{path, package_name, manager}...1 params

Enumerate monorepo workspace members for an indexed repo. Detects pnpm (pnpm-workspace.yaml), yarn/npm (package.json workspaces), turborepo (turbo.json), lerna (lerna.json), rush (rush.json), Go (go.work), and Cargo ([workspace] members). Returns [{path, package_name, manager}...

Parameters* required
repo*string
Repository identifier (owner/repo or display name).
winnow_symbolsRun a multi-axis constraint query against the index in a single round trip. Accepts an ordered list of criteria (AND) intersecting signals no other tool composes: kind, language, name (regex), file glob, cyclomatic complexity, decorator, direct call references, summary/docstri...5 params

Run a multi-axis constraint query against the index in a single round trip. Accepts an ordered list of criteria (AND) intersecting signals no other tool composes: kind, language, name (regex), file glob, cyclomatic complexity, decorator, direct call references, summary/docstri...

Parameters* required
criteria*array
Ordered list of filters. Each item is {axis, op, value}. Supported axes: kind (in/eq), language (in/eq), name (eq/matches), file (matches - glob), complexity (>,<,>=,<=,==), decorator (contains), c...
max_resultsinteger
Hard cap on returned results.default: 20
orderstring
one of asc · descdefault: desc
rank_bystring
Ranking axis for survivors.one of importance · complexity · churn · namedefault: importance
repo*string
Repository identifier (owner/repo or just repo name)
set_tool_tierExplicit tier override for the current session. Narrows or widens the exposed tool list to 'core' / 'standard' / 'full'. Prefer plan_turn(model=...) for routine per-task use; use set_tool_tier only when you need an explicit override (e.g. escalate mid-task to 'full' after a ca...1 params

Explicit tier override for the current session. Narrows or widens the exposed tool list to 'core' / 'standard' / 'full'. Prefer plan_turn(model=...) for routine per-task use; use set_tool_tier only when you need an explicit override (e.g. escalate mid-task to 'full' after a ca...

Parameters* required
tier*string
one of core · standard · full
announce_modelAgent self-reports its active model identifier. Server resolves to a tier via model_tier_map (fuzzy: normalize → exact → glob → substring → '*' → 'full') and narrows the exposed tool list accordingly. Idempotent: a second call with the same model is a cheap no-op. Prefer calli...1 params

Agent self-reports its active model identifier. Server resolves to a tier via model_tier_map (fuzzy: normalize → exact → glob → substring → '*' → 'full') and narrows the exposed tool list accordingly. Idempotent: a second call with the same model is a cheap no-op. Prefer calli...

Parameters* required
model*string
Your active model identifier, e.g. 'claude-haiku-4-5'.

Sponsors

Readme

jCodeMunch MCP

An MCP server that retrieves source code by symbol, not by file, using tree-sitter AST parsing. It uses 96.2% fewer tokens per lookup on average than grep-and-read on our 15-lookup benchmark (90.4% to 99.2% across the lookups, at pinned commits), so your agent stops spending its context window on whole files.

Benchmark: 5 queries on each of express, fastapi and gin at pinned commits, tokens counted with tiktoken cl100k_base, jcodemunch-mcp 1.108.426 with the served-response count of #1361 (the benchmark counts the text the server sends on a default install). A lookup is one search_symbols plus get_symbol_source on its top 3 hits, against grep-and-read (rank files by match count, read the top 3 whole). Per lookup, not per session. Reproduce with benchmarks/REPRODUCING.md.


View the full README on GitHub

Details

Repository
github.com/jgravelle/jcodemunch-mcp
Website
jcodemunch.com
Package
jcodemunch-mcp
Transport
STDIO
Registry
MCP registry, active
Prompts
5
Tools verified
Jun 10, 2026

More from jgravelle