TerseSharp 0.2.2

There is a newer version of this package available.
See the version list below for details.
dotnet tool install --global TerseSharp --version 0.2.2
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local TerseSharp --version 0.2.2
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=TerseSharp&version=0.2.2
                    
nuke :add-package TerseSharp --version 0.2.2
                    

TerseSharp

Your agent stops reading whole C# files.

A Roslyn-powered MCP server that lets a coding agent navigate, read, edit and refactor a .NET solution semantically — no Read, no Grep, no line-number Edit, no shelling out.

CI License .NET

v0.2.2 — 51 tools working end to end. Verified by 117 tests (29 unit + 88 E2E), where every E2E test drives a real server process over the real stdio transport against a real solution and asserts response values. Not yet built: the content-addressed index, trigram search and file watcher.

Why

An agent working a C# solution spends most of its context on the wrong shape of data:

Question With built-in tools
What's on OrderService? Read OrderService.cs → ~6,000 tokens
Who calls Submit? Grep "Submit" + 3 more reads → ~4,000 tokens
Rename SubmitSubmitAsync grep + 9 context-echoing edits, misses the interface
Why is the build red? full MSBuild output → ~8,000 tokens

Roslyn already knows all four answers semantically. TerseSharp hands them over in the shape the agent needs: a signature list instead of a file, real call sites instead of string matches, a solution-wide rename instead of a regex sweep, deduplicated diagnostics instead of build logs.

Install

No IDE, no licence, no Node, no Python, no language server, no API key, no network.

dotnet tool install -g TerseSharp

Register it with your agent — TerseSharp writes the config itself, you don't hand-edit JSON:

terse install                       # detect installed clients and register with all of them
terse install --client claude-code  # or pick one: claude-code | cursor | vscode | windsurf
terse install --skill               # also install the agent skill
terse doctor                        # verify SDK, MSBuild, workspace load, client registration

With no arguments the server walks up from the current directory, finds your .sln / .slnx / .slnf / .csproj, and loads it.

Prefer to configure it by hand:

{
  "mcpServers": {
    "terse-sharp": {
      "command": "terse",
      "args": ["serve", "--workspace", "C:/path/to/YourApp.slnx"]
    }
  }
}

What each tool replaces

Instead of Use Why
Read a .cs file get_file_outline types + members + line ranges, no bodies
Read to see one method get_symbol_source that member only
Grep a type or member name search_symbols declarations only; CamelHump (OSvcOrderService)
Grep to find callers find_usages real references; no comments, no string matches
Edit a .cs file replace_symbol_body addressed by symbol id, immune to line drift
find-and-replace a name rename_symbol solution-wide, incl. interfaces, overrides, doc crefs
dotnet build build deduplicated diagnostics, no MSBuild spew
dotnet test run_tests failures only; a green run is one line

The 51 tools

  • Workspaceload_workspace, workspace_status, list_workspaces, unload_workspace, list_projects
  • Navigationsearch_symbols, get_symbol, get_file_outline, get_type_outline, get_symbol_source, find_usages, find_implementations
  • Analyze & cleananalyze, format, cleanup, get_diagnostics
  • Editreplace_symbol_body, replace_symbol, add_member, delete_symbol, rename_symbol
  • Refactorextract_interface, move_type_to_file, move_type_to_namespace, change_signature, undo_last_change
  • Projects & solutionssolution_projects, solution_add_project, solution_remove_project, project_create, project_properties, project_set_property, project_add_reference, project_remove_reference, package_list, package_add, package_remove
  • XAMLxaml_outline, xaml_names, xaml_resources, xaml_bindings, xaml_validate, xaml_find
  • Filesread_text, write_text, edit_text, find_files, search_text, search_regex
  • Buildbuild, run_tests

Analysis without a licence

analyze runs the compiler plus every analyzer your projects already reference - CA rules, StyleCop, SonarAnalyzer, Roslynator, anything in your PackageReference list - down to info and hidden severity, which a normal build hides. It also reports dead code in the same list - unreferenced private members as TERSE001, plus the compiler's unused-field and unreachable-code hints - so one call covers everything. cleanup removes unused using directives, sorts what remains System-first and reformats to your .editorconfig. All Roslyn: no IDE, no external tool, no licence, no network.

Every response is one record per line, with an explicit truncated/total and an EXACT (Roslyn-resolved) or HEURISTIC (text/index) tag.

Safety

  • Symbol-addressed edits — no old_string echo, no line numbers to drift.
  • dryRun on every mutation returns the unified diff and writes nothing.
  • Compile-gated — an edit that introduces a new compile error is rolled back and the error returned. Pre-existing errors never block an edit. allowErrors: true opts out.
  • Diff-only responses — mutations return the diff and a changed-line count, never the file.
  • Workspace containment — paths compare by whole segment, so root C:\repo does not contain C:\repoEvil.
  • --read-only makes every mutating tool refuse and touch nothing.

Parallel worktrees

Run several agents at once across several git worktrees of one repo, and across unrelated repos — one server holding many workspaces (LRU, default 4), or many processes, or both. Every answer names its worktree and branch, and an ambiguous request returns AMBIGUOUS_WORKSPACE listing the candidates instead of guessing — answering from the wrong checkout is the one failure an agent cannot detect.

License

MIT Licensed. See LICENSE.

Built on Roslyn and the MCP C# SDK.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
0.14.0 0 8/1/2026
0.13.0 0 8/1/2026
0.12.0 0 8/1/2026
0.11.0 0 8/1/2026
0.10.0 0 8/1/2026
0.9.0 0 8/1/2026
0.8.0 21 7/31/2026
0.7.0 27 7/31/2026
0.6.0 33 7/31/2026
0.5.0 36 7/31/2026
0.4.0 31 7/31/2026
0.3.1 36 7/31/2026
0.3.0 40 7/31/2026
0.2.2 33 7/30/2026
0.2.1 30 7/30/2026
0.2.0 36 7/30/2026
0.1.1 33 7/30/2026
0.1.0 38 7/30/2026