Skip to content

v0.2.0

Pre-release
Pre-release

Choose a tag to compare

@MatiasPujado MatiasPujado released this 09 Aug 23:53
· 8 commits to main since this release

Driven by two field reports from real work-PC usage: bulk metadata cost about
19x the tokens of the equivalent bash line, and SVN working copies were
invisible to the registry. A third report claim was checked and found false —
vcs data was never cached, only a misleading scanned_at field suggested it was.

Coverage

  • Discovery indexes .svn working copies alongside .git; ProjectNode carries
    vcs_type: 'git' | 'svn'. The svn binary is never invoked, so remote, branch
    and is_clean stay null for those projects rather than being guessed.
  • New tool list_files(project, glob?) over rg --files, respecting
    .gitignore, filtering secret-pattern files, capped at 500 with a truncated
    flag. Eleven tools total.
  • read_file takes optional offset and limit for line-based paging.
  • search takes limit (default 50, max 500) and reports truncated. Previously
    it capped silently at 100.
  • scanned_at dropped from project_info and from ProjectNode; the tool
    description now states that vcs state is queried live on every call.

Token economy

  • All structured responses are compact JSON. Pretty-printing cost 20-40% on
    every reply.
  • list_projects takes include: ['branch','is_clean','stack'], so one call
    answers a whole-group metadata sweep instead of N project_info calls.
  • list_projects returns a {fields, rows} matrix: rows are positional against
    fields, so keys are paid once rather than once per project. Same shape with
    and without include. This is a breaking change for any consumer that read
    payload.projects[i].name.

Benchmark

A token benchmark drives the real server over stdio and compares every tool
against an information-equivalent bash command, counting through Anthropic's
count_tokens against a pinned model. Without credentials it counts UTF-8
bytes and labels itself DEGRADED rather than silently substituting a proxy.

Measured on claude-opus-5 over 42 projects in 16 groups, mcp vs bash:
map_workspace 0.51, list_groups 0.58, list_files 0.61, project_info 0.68,
read_file 1.01-1.03, find_project 1.42, list_projects sweep 1.70,
write_file 1.74, list_projects 1.77, search 2.15. Schema cost is 1886 tokens
once per session, repaid by roughly three map_workspace calls.

The bulk sweep is 1355 tokens against 15184 for 42 project_info calls, 11.2x
smaller, past the 10x design target. The matrix took that figure from 6.6x.

The list_projects rows stay above parity by design: their bash baselines
print strictly less than the tool returns, so near-parity is the ceiling.

Latency is unchanged and well inside budget: cold scan 87 ms, registry tools
under 1 ms, project_info 5.6 ms, search 6.7 ms. 109 tests, 100% statements,
branches, functions and lines.

Requires Node.js >= 22, git and ripgrep on PATH. Three runtime dependencies.
The README now documents three install routes — an npm pack tarball needing no
registry, credentials or CA trust; clone and build; and a private registry —
plus how to register the server with clients other than Claude Code.