Skip to content

v1.3.0 — Code navigation & editing tools

Choose a tag to compare

@phmatray phmatray released this 03 Jul 10:10

[1.3.0] - 2026-07-03

Added

  • Token-efficient code navigation tools — six new read-only MCP tools that let an AI agent
    retrieve precise structural/semantic information via Roslyn instead of reading whole files
    (source code typically dominates an agent's token budget):
    • search_symbols — find symbols by wildcard/substring name pattern, or outline a single file
    • get_symbol_info — a symbol's kind, accessibility, modifiers, signature, base types,
      interfaces, XML docs, and definition location (optionally its source) — the compact
      "go to definition" payload
    • find_references — every use site of a symbol across the solution, as location + snippet
    • find_implementations — implementations of an interface/member, overrides, or derived types
    • get_call_graph — a depth-bounded caller/callee graph with cycle detection
    • get_type_hierarchy — a type's base-class chain, interfaces, and derived types
  • Surgical code-editing tools — two new write tools that emit a member-level change (not a
    whole-file rewrite), keeping the tokens an agent produces proportional to the change. Both
    default to preview mode (previewOnly: true) like ApplyFixes, so nothing is written to disk
    unless the caller passes previewOnly: false explicitly:
    • edit_member — replace, add, or delete a single type member
    • rename_symbol — rename a symbol and update every reference across the solution (Roslyn rename)
  • IProjectLoader/ProjectLoader service that loads a project — and its containing solution when
    present, so references and renames span projects — into a fresh workspace per call, plus
    ICodeNavigationService and ICodeEditService and their response models.
  • Token-savings benchmark (RoselineMCP.TokenBenchmark) — a reproducible harness that runs the
    real services against RoselineMCP's own source and measures each tool's output against the source
    an agent would otherwise read, tokenized with cl100k_base. Systematic sweeps; results stamped with
    commit + date. Reproduce with dotnet run --project RoselineMCP.TokenBenchmark -c Release.
  • Documentation site (website/, Astro) with an overview, the tool reference, and the honest
    benchmark (charts + methodology + limitations), deployed to GitHub Pages via
    .github/workflows/deploy-docs.yml. Across 477 navigation tasks the read-only tools showed a
    pooled 81% / median 74% token reduction versus reading the corresponding files.

Changed

  • search_symbols file outline is now token-lean. The benchmark caught the outline costing
    tokens (it repeated the file path and fully-qualified name on every symbol); it now returns a
    lean projection (name, kind, signature, line), flipping its median from −45% to +30%.
    SymbolSummary also omits null fields from its JSON. Project-wide search is unchanged.

Fixed

  • dnx-based installs pulled an ancient 1.0.0. .mcp/server.json hardcoded version/
    packages[0].version at 1.0.0 — a version that was never released (releases start at 1.2.0)
    — so any client resolving the MCP manifest was told to fetch 1.0.0. Worse, despite
    PackageType=McpServer the manifest was never packed into the .nupkg (it lives at the repo
    root with no <None Include> wiring it in), so the McpServer package shipped without its own
    manifest. Fixed by: (1) correcting the manifest to the current release, (2) packing
    ../.mcp/server.json into the package at .mcp/server.json, and (3) stamping the version into
    the manifest from the release tag in publish-nuget.yml (mirroring MinVerVersionOverride) so
    it can never drift out of lockstep with the package version again.