Skip to content

index_status returns ~26k tokens on a 11.8k-file repo (~8k on a 42-node repo) — payload dominated by deliberately-ignored files, with no way to trim #1356

Description

@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_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:

31931

~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

Metadata

Metadata

Assignees

No one assigned

    Labels

    editor/integrationEditor compatibility and CLI integrationwindowsWindows-specific issues

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions