The distinction matters most on `query_usages` — inheritance, generic constraints and `nameof` references are usages that no text search will surface. The digest-then-read pattern is the other thing to adopt early: on a file of a few thousand lines, reading the outline first and pulling two members costs a fraction of reading the file.
An MCP server that opens your `.sln` or `.slnx` through MSBuild Workspaces and compiles every project in memory. All of its tools run against a real Roslyn semantic model rather than text search, and NuGet types are resolved alongside your own source.
- query_symbol — find types, methods, properties, fields, extension methods, constants and enum values across the solution and its NuGet packages
- get_type_details — properties, methods, base types and nested types, including for NuGet types
- query_usages — every usage of a type: calls, constructor calls, property and field reads and writes, generic arguments and constraints, return and parameter types, inheritance, `nameof`, `typeof`, `is` and `as`, with predicate filtering and scan scope control
- read_cs_file_digest — a structural outline of a large file, types and members with line numbers and no implementations; then `read_large_cs_file` fetches only the members you name
- decompile_type — decompile any type from a NuGet assembly back to C#, with ILSpy built in and no external tool needed
- code_lens — fully-qualified types for a line range: locals, field and property types, call signatures, object creations and declarations
- get_project_design and `get_project_design_details` — abstraction groups by namespace and the dependencies between them, with `*` wildcard support
- One server handles any number of solutions; the workspace is cached with file watchers, so `.cs` edits recompile incrementally while `.csproj` or `.sln` changes invalidate the cache
The .NET 10 SDK, then `dotnet tool install -g HoldMyCoolantMeatbag.AmazingMCP`. It runs as an HTTP server on http://localhost:7777 by default, changeable with `--urls`, and clients connect with `"type": "http"`. Output sizes are tunable: `--Symbol:QueryOutputLineLimit` (100), `--ReadCs:ReadOutputMaxLength` (20000), `--ProjectDesign:DetailsOutputMaxLength` (30000) and `--QueryUsages:QueryMatchLimit` (200). `--DisabledTools` takes a comma-separated list if you want fewer tools in context. The first call against a solution is slow because it compiles; later calls are not.
One command — dotnet tool install -g HoldMyCoolantMeatbag.AmazingMCP
