Version
codebase-memory-mcp 0.9.1-rc.1
Platform
macOS (Apple Silicon)
Install channel
GitHub release archive / install.sh / install.ps1
Binary variant
standard
What happened, and what did you expect?
index_status enumerates every parse_partial file and up to 500 not_indexed files inline, with no way to trim or omit them. The result is an enormous response for what is usually a "how big is the graph, is it ready?" question — and the overwhelming majority of the payload is files the indexer deliberately ignores by design (ignored-suffix assets, gitignored files), not gaps anyone can act on.
On a private Angular monorepo the MCP index_status response is 105,771 chars (~26k tokens):
| block |
chars |
content |
parse_partial |
54,876 |
all 402 files enumerated |
not_indexed |
53,829 |
500 files listed, 494 of them .svg/.png icon assets |
| everything else |
~1,000 |
project, nodes, edges, status, root_path |
That is ~26k tokens of context for ~1k tokens of signal, on the tool an agent naturally calls first to orient itself. It also sits oddly beside the RC's headline "~99% fewer output tokens" — the tree/TOON format applies to the graph query tools, but index_status (and check_index_coverage) still emit raw JSON with full inline listings.
check_index_coverage --scopes . has the same shape: on the same repo it returns ~15k tokens where the first 200 entries are almost entirely ignored-suffix SVG assets, burying the handful of real parse_partial source files.
--verbose only adds a git-context block; there is no inverse.
Suggestions (any one would fix the practical problem):
- Default to counts + a few examples, and require an opt-in flag (or
check_index_coverage) for the full listing — the parse_partial block already has a truncated field and a note pointing at the logfile, so the mechanism exists.
- Never inline
not_indexed entries whose reason is by-design (gitignore, ignored-suffix, excluded subtree) — a per-reason count is strictly more useful than 494 SVG paths.
- Accept a
limit / include parameter so callers can ask for what they need.
Reproduction
Public repro repo: https://github.com/artaommahe/codebase-memory-mcp-rc-repros — see Case C. It contains 600 .svg files under assets/icons/, correctly classified as ignored-suffix.
git clone https://github.com/artaommahe/codebase-memory-mcp-rc-repros
cd codebase-memory-mcp-rc-repros
codebase-memory-mcp cli index_repository --repo-path "$PWD" --mode full --name cbm-rc-repros
codebase-memory-mcp cli index_status --project cbm-rc-repros | wc -c
Observed:
~8k tokens of status for a graph of 42 nodes / 54 edges. 500 of the 600 not_indexed entries are enumerated, and all 500 are .svg assets; the not_indexed block alone is 33,719 chars of JSON.
Project scale (if relevant)
The 105,771-char figure is from a private Angular monorepo: 11,788 files, 63,840 nodes / 120,805 edges, --mode full. The linked repro is self-contained dummy code.
Confirmations
- I searched existing issues and this is not a duplicate.
- My reproduction uses shareable code (a dummy snippet or a public OSS repository), not proprietary code.
Posted by Claude Code on behalf of @artaommahe
Version
codebase-memory-mcp 0.9.1-rc.1
Platform
macOS (Apple Silicon)
Install channel
GitHub release archive / install.sh / install.ps1
Binary variant
standard
What happened, and what did you expect?
index_statusenumerates everyparse_partialfile and up to 500not_indexedfiles inline, with no way to trim or omit them. The result is an enormous response for what is usually a "how big is the graph, is it ready?" question — and the overwhelming majority of the payload is files the indexer deliberately ignores by design (ignored-suffixassets, gitignored files), not gaps anyone can act on.On a private Angular monorepo the MCP
index_statusresponse is 105,771 chars (~26k tokens):parse_partialnot_indexed.svg/.pngicon assetsThat is ~26k tokens of context for ~1k tokens of signal, on the tool an agent naturally calls first to orient itself. It also sits oddly beside the RC's headline "~99% fewer output tokens" — the tree/TOON format applies to the graph query tools, but
index_status(andcheck_index_coverage) still emit raw JSON with full inline listings.check_index_coverage --scopes .has the same shape: on the same repo it returns ~15k tokens where the first 200 entries are almost entirelyignored-suffixSVG assets, burying the handful of realparse_partialsource files.--verboseonly adds a git-context block; there is no inverse.Suggestions (any one would fix the practical problem):
check_index_coverage) for the full listing — theparse_partialblock already has atruncatedfield and anotepointing at the logfile, so the mechanism exists.not_indexedentries whose reason is by-design (gitignore,ignored-suffix,excluded subtree) — a per-reason count is strictly more useful than 494 SVG paths.limit/includeparameter so callers can ask for what they need.Reproduction
Public repro repo: https://github.com/artaommahe/codebase-memory-mcp-rc-repros — see Case C. It contains 600
.svgfiles underassets/icons/, correctly classified asignored-suffix.Observed:
~8k tokens of status for a graph of 42 nodes / 54 edges. 500 of the 600
not_indexedentries are enumerated, and all 500 are.svgassets; thenot_indexedblock alone is 33,719 chars of JSON.Project scale (if relevant)
The 105,771-char figure is from a private Angular monorepo: 11,788 files, 63,840 nodes / 120,805 edges,
--mode full. The linked repro is self-contained dummy code.Confirmations
Posted by Claude Code on behalf of @artaommahe