# Roslyn Workbench MCP (nuget · Lantean.Roslyn.Workbench.Mcp)

Bring Visual Studio-style C# fixes and refactorings to your AI agent with local Roslyn Code Actions.

- Trust score: 92/100 (high trust)
- Change this week: +5
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- nuget · `Lantean.Roslyn.Workbench.Mcp`: 92/100 (this document), [markdown](https://verifymcp.io/servers/lantean-code-roslyn-workbench-mcp/lantean-roslyn-workbench-mcp.md), [page](https://verifymcp.io/servers/lantean-code-roslyn-workbench-mcp/lantean-roslyn-workbench-mcp)

## Channel facts

- Registry: `nuget`
- Package: `Lantean.Roslyn.Workbench.Mcp`
- Version: `1.2.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - No production dependencies, so there is no dependency health to assess.
- **Provenance & Transparency**: 100/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to lantean-code/roslyn-workbench-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 8 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 78/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 10114 tokens (~168/item across 60 items; 48 tools + 12 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 73/100
  - Stability observed for 22 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 48 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 50 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the Roslyn Workbench MCP server?

Roslyn Workbench MCP runs locally as a NuGet package, launched with dnx Lantean.Roslyn.Workbench.Mcp@1.2.0 --yes. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add lantean-code-roslyn-workbench-mcp -- dnx Lantean.Roslyn.Workbench.Mcp@1.2.0 --yes
```

### Cursor

```json
{
  "mcpServers": {
    "lantean-code-roslyn-workbench-mcp": {
      "command": "dnx",
      "args": [
        "Lantean.Roslyn.Workbench.Mcp@1.2.0",
        "--yes"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "lantean-code-roslyn-workbench-mcp": {
      "command": "dnx",
      "args": [
        "Lantean.Roslyn.Workbench.Mcp@1.2.0",
        "--yes"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add lantean-code-roslyn-workbench-mcp -- dnx Lantean.Roslyn.Workbench.Mcp@1.2.0 --yes
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "lantean-code-roslyn-workbench-mcp": {
      "type": "local",
      "command": [
        "dnx",
        "Lantean.Roslyn.Workbench.Mcp@1.2.0",
        "--yes"
      ],
      "enabled": true
    }
  }
}
```

### Hermes

```yaml
mcp_servers:
  lantean-code-roslyn-workbench-mcp:
    command: "dnx"
    args: ["Lantean.Roslyn.Workbench.Mcp@1.2.0", "--yes"]
```

### Netclaw

```json
{
  "McpServers": {
    "lantean-code-roslyn-workbench-mcp": {
      "Transport": "stdio",
      "Command": "dnx",
      "Arguments": [
        "Lantean.Roslyn.Workbench.Mcp@1.2.0",
        "--yes"
      ]
    }
  }
}
```

### Other

```json
{
  "mcpServers": {
    "lantean-code-roslyn-workbench-mcp": {
      "command": "dnx",
      "args": [
        "Lantean.Roslyn.Workbench.Mcp@1.2.0",
        "--yes"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 92, +1)

No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-03 (score 91, +2)

- [functional regression] Schema quality: 115 → 168
- [functional improvement] Schema quality: unverified → 100
- [functional] Package version: 1.1.0 → 1.2.0

### 2026-11-02 (score 89, +1)

No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-31 (score 88, +1)

No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-29 (score 87, +1)

No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-27 (score 86, +1)

No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-25 (score 85, +1)

No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-23 (score 84, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (48)

### `get-solution-structure` (~250 tokens)

Get Solution Structure

Maps the loaded solution into solution folders and projects with workspace-relative paths, target frameworks and direct project references. Use this first to discover project and document selectors; use get-dependency-graph for a dependency graph or get-code-context to read a selected source region. Documents are omitted unless includeDocuments=true. Independent limits default to 200 folders, 100 projects, 50 references per project and 200 documents per project. Returns solutionPath and bounded folders and projects collections; check their hasMore flags and those on each projectReferences or documents collection for truncation. This read-only query can report ProjectStructureUnavailable if hierarchy or target-framework information cannot be obtained.

Input parameters:

- `documentsPerProjectLimit` (integer|null): Maximum number of documents to return for each project.
- `foldersLimit` (integer|null): Maximum number of folders to return.
- `includeDocuments` (boolean): Whether documents should be included in project projections.
- `projectReferencesPerProjectLimit` (integer|null): Maximum number of direct project references to return for each project.
- `projectsLimit` (integer|null): Maximum number of projects to return.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-project-details` (~226 tokens)

Get Project Details

Inspects one selected project, returning target frameworks, compilation and parse options, project references, metadata references and analyzers. Use get-solution-structure to discover projects, then use this to inspect project configuration and dependencies. Document references are opt-in through includeDocuments and do not include file contents; use get-document-outline to inspect declarations in one document. Collections are bounded independently, including a default 200-document limit when requested. Check each returned collection for hasMore before treating it as complete.

Input parameters:

- `analyzersLimit` (integer|null): Maximum number of analyzers to return.
- `documentsLimit` (integer|null): Maximum number of documents to return.
- `includeDocuments` (boolean): Whether documents should be included.
- `metadataReferencesLimit` (integer|null): Maximum number of metadata references to return.
- `project` (object, required): Provide projectId, name, path, targetFramework, or any combination.
- `projectReferencesLimit` (integer|null): Maximum number of project references to return.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-document-options` (~156 tokens)

Get Document Options

Inspects configuration for one selected document, returning language version and project-level nullable context. Use this to understand configuration behind diagnostic results; use get-diagnostics for findings or get-project-details for broader project configuration. Source nullable directives can override the reported project-level context. Detailed parse options and analyser configuration are omitted by default: request includeParseOptions for documentation mode and preprocessor symbols, or includeAnalyzerConfig for project configuration-file paths and syntax-tree analyser options.

Input parameters:

- `document` (object, required): Target document.
- `includeAnalyzerConfig` (boolean): Whether to include effective analyser configuration.
- `includeParseOptions` (boolean): Whether to include parse options.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-document-outline` (~181 tokens)

Get Document Outline

Returns a semantic declaration tree for one document, with names, kinds, locations and nested children. Use this to navigate the structure of a known file; use search-symbols to discover declarations across documents, or get-symbol-info for detailed symbol metadata. Members are included by default. Defaults to 200 projected nodes below the document root and 16 hierarchy levels. Check truncated for content omitted by the node or depth limit; root may be null when syntax or semantic information is unavailable.

Input parameters:

- `document` (object, required): Target document.
- `includeMembers` (boolean): Whether member nodes should be included.
- `maxDepth` (integer): The maximum semantic hierarchy depth below the document root.
- `nodesLimit` (integer|null): The optional maximum total number of projected outline nodes.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-code-context` (~316 tokens)

Get Code Context

Reads source around a location, returning the resolved location, text, enclosingSymbols and diagnostics. Use this to inspect a search result or diagnostic in context; use get-symbol-info for symbol details or get-diagnostics for broader diagnostic analysis. Includes all lines touched by the selection plus 10 lines before and after by default; beforeLines and afterLines each accept 0 to 100 and are clipped at document boundaries. Enclosing symbols and compiler diagnostics are opt-in via includeEnclosingSymbols and includeDiagnostics, both false by default. Diagnostics cover the selected span, not the expanded text window or project analysers. Limits default to 16 enclosing symbols and 50 diagnostics; check each collection.hasMore. Reads the loaded workspace without modifying source.

Input parameters:

- `afterLines` (integer|null): The optional number of lines to include after the selected location.
- `beforeLines` (integer|null): The optional number of lines to include before the selected location.
- `diagnosticsLimit` (integer|null): Maximum number of diagnostics to return.
- `enclosingSymbolsLimit` (integer|null): Maximum number of enclosing symbols to return.
- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `includeDiagnostics` (boolean): Whether diagnostics should be included for the selected span.
- `includeEnclosingSymbols` (boolean): Whether the enclosing symbol chain should be included.
- `location` (object, required): The location selector.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `search-symbols` (~229 tokens)

Search Symbols

Finds source type and member declarations using a Roslyn name pattern and optional semantic filters. Use this to discover symbols by name; use resolve-symbol for a known source location, then get-symbol-info to inspect a chosen symbol. Searches the selected document or projects, or the loaded solution when scope is omitted. Filters narrow the candidate set. Returns symbol references, capped at 100 by default; check symbols.hasMore before treating the results as complete. Input: Provide query, metadataName, or both.

Input parameters:

- `accessibilities` (array|null): The included accessibilities.
- `kinds` (array|null): The included symbol kinds.
- `metadataName` (string): Filters declaration metadata names by a case-insensitive substring; also supplies the search pattern when query is omitted.
- `namespace` (string|null): The optional namespace filter.
- `query` (string): Source-name query.
- `scope` (object|null): The optional scope selector.
- `symbolsLimit` (integer|null): Maximum number of results to return.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `resolve-symbol` (~171 tokens)

Resolve Symbol

Resolves the symbol at a source location or selection, returning a symbol reference, a reusable selector when available and bounded source declarations. Use this to turn a known location into a target for symbol inspection; use search-symbols when only a name is known, or get-symbol-info for detailed metadata. Echo the location snapshot in expectedSnapshot to reject stale locations. Returns up to 32 source declarations by default; check declarations.hasMore. Metadata-only symbols may have no source declarations.

Input parameters:

- `declarationsLimit` (integer|null): Maximum number of declarations to return.
- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `location` (object, required): The location selector.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-symbol-info` (~207 tokens)

Get Symbol Info

Inspects one resolved symbol, returning accessibility, modifiers, associated type and source declaration locations, plus method parameters and return type when applicable. Use this after search-symbols or resolve-symbol to understand a chosen declaration; use find-references for its usages or get-symbol-members to enumerate type members. XML documentation is opt-in through includeDocumentation. Defaults to 32 declarations and 64 method parameters, bounded independently; check declarations.hasMore and parameters.hasMore when present. Metadata-only symbols may have no source declarations.

Input parameters:

- `declarationsLimit` (integer|null): Maximum number of declarations to return.
- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `includeDocumentation` (boolean): Whether XML documentation should be included.
- `parametersLimit` (integer|null): Maximum number of parameters to return.
- `symbol` (object, required): The symbol selector.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-symbol-members` (~233 tokens)

Get Symbol Members

Lists members of a resolved named type to inspect its declaration surface. Use get-api-surface for an accessibility-filtered API inventory or get-symbol-info for details about one member. Defaults to explicitly declared members of the selected type, including non-public members. includeInherited adds base-type members except private, implicit and constructor/destructor members. includeExplicitInterface adds declarations from all implemented or inherited interfaces, not just explicit implementations on the selected type. Both options default to false. Returns symbol and a distinct, bounded members collection; membersLimit defaults to 100. Check members.hasMore for truncation. Reads the loaded workspace without modifying source.

Input parameters:

- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `includeExplicitInterface` (boolean): Whether explicit interface members should be included.
- `includeInherited` (boolean): Whether inherited members should be included.
- `membersLimit` (integer|null): Maximum number of results to return.
- `symbol` (object, required): The symbol selector.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-symbol-attributes` (~200 tokens)

Get Symbol Attributes

Inspects attributes attached to a resolved symbol, returning their types, inherited flags and rendered constructor and named arguments. Use this for attribute metadata; use get-symbol-info for general symbol details. Defaults to directly declared attributes. includeInherited follows base types or overridden methods, properties and events, honours Inherited and AllowMultiple settings, and does not traverse interface declarations. Returns symbol and a bounded attributes collection; attributesLimit defaults to 50. Check attributes.hasMore for truncation. Reads Roslyn metadata without instantiating attributes or executing their constructors.

Input parameters:

- `attributesLimit` (integer|null): Maximum number of results to return.
- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `includeInherited` (boolean): Whether inherited attributes should be included.
- `symbol` (object, required): The symbol selector.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `go-to-definition` (~176 tokens)

Go To Definition

Locates declaration sites for a resolved symbol, preferring its source definition in the loaded solution. Use this to navigate to a declaration; use find-references for usages or find-implementations for concrete implementations. Returns symbol and a bounded definitions collection, which can contain multiple source locations for partial declarations. If no source location exists, returns a metadata definition record rather than decompiled source. definitionsLimit defaults to 32; check definitions.hasMore for truncation. Reads the workspace without modifying files.

Input parameters:

- `definitionsLimit` (integer|null): Maximum number of definitions to return.
- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `symbol` (object, required): The symbol selector.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `find-references` (~258 tokens)

Find References

Finds source usages of a resolved symbol, with locations, containing symbols and access classification where available. Use this to locate usages or inspect writes; use find-callers when you need incoming calls grouped by calling symbol. Searches the selected scope, or the loaded solution when scope is omitted. Declarations are included by default and share the default 100-occurrence limit with references. Check references.hasMore before treating the results as complete.

Input parameters:

- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `includeContext` (boolean): Include the trimmed source line for each returned reference when available; declaration entries have no context. Defaults to false.
- `includeDefinitions` (boolean): Include source declarations alongside references within the same result limit; defaults to true.
- `referencesLimit` (integer|null): Caps returned occurrences, including declarations when requested. Omitted or null uses 100; zero returns no occurrences.
- `scope` (object|null): Limits references and declarations to the selected documents or projects; omitted searches the loaded solution.
- `symbol` (object, required): Provide exactly one of location or documentationCommentId.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `find-callers` (~273 tokens)

Find Callers

Finds callers of a resolved symbol and groups source call sites by calling symbol. Use this to trace incoming calls; use find-references for general source usages or find-callees for calls made by a selected member. Searches the selected scope, or the loaded solution when scope is omitted. Defaults to 100 callers and 100 call sites per caller, limited independently. Check callers.hasMore and each caller's callSites.hasMore before treating the results as complete.

Input parameters:

- `callSitesPerCallerLimit` (integer|null): Caps call sites independently for each returned caller. Omitted or null uses 100; zero retains callers without call sites.
- `callersLimit` (integer|null): Caps returned callers independently of the call-site limit. Omitted or null uses 100; zero returns no callers.
- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `includeContext` (boolean): Include the trimmed source line for each returned call site when available; defaults to false.
- `scope` (object|null): Limits caller discovery to the selected documents or projects; omitted searches the loaded solution.
- `symbol` (object, required): Provide exactly one of location or documentationCommentId.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `find-callees` (~278 tokens)

Find Callees

Finds distinct method and constructor targets invoked by a source executable symbol or selected executable region. Use this for outgoing calls; use find-callers for incoming call sites. Reads the loaded workspace without executing code. Direct calls are the default; includeIndirect traverses reachable source bodies up to maxDepth (default 3, direct calls at depth 1). Nested lambda and local-function bodies are skipped during each body scan. Returns source and a bounded callees collection, not call sites or runtime dispatch targets. calleesLimit defaults to 100; check callees.hasMore for result truncation within the requested depth. Input: Provide exactly one of symbol or location.

Input parameters:

- `calleesLimit` (integer|null): Maximum number of results to return.
- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `includeIndirect` (boolean): Whether reachable source callees should be traversed transitively.
- `location`: Source location or executable region whose contained callees should be found.
- `maxDepth` (integer): The maximum call depth to traverse when indirect callees are included. Direct callees are at depth one.
- `symbol` (object): Symbol whose callees should be found.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `find-implementations` (~202 tokens)

Find Implementations

Finds implementations of a resolved interface or member and returns symbol references. Use this to locate implementing types or members; use find-overrides for overrides of a virtual or abstract member, or find-references for source usages. Searches projects selected by scope, or the loaded solution when scope is omitted. Returns up to 100 implementations by default; check implementations.hasMore before treating the results as complete.

Input parameters:

- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `implementationsLimit` (integer|null): Caps returned distinct implementation symbols. Omitted or null uses 100; zero returns no implementations.
- `scope` (object|null): Selects projects to search; a document scope searches its containing project. Omitted searches the loaded solution.
- `symbol` (object, required): Provide exactly one of location or documentationCommentId.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `find-overrides` (~229 tokens)

Find Overrides

Finds distinct overriding methods, properties or events for a resolved member. Use this to follow virtual or abstract member overrides; use find-implementations for interface implementations or find-derived-types for type inheritance. Searches the selected projects, or the loaded solution when scope is omitted; a document scope searches its containing project. Returns the selected symbol and a bounded overrides collection of symbol references. overridesLimit defaults to 100; check overrides.hasMore before treating the list as complete. This is a read-only symbol search and does not execute the member.

Input parameters:

- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `overridesLimit` (integer|null): Caps returned distinct overriding members. Omitted or null uses 100; zero returns no overrides.
- `scope` (object|null): Selects projects to search; a document scope searches its containing project. Omitted searches the loaded solution.
- `symbol` (object, required): Provide exactly one of location or documentationCommentId.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `find-derived-types` (~242 tokens)

Find Derived Types

Finds source types derived from a resolved named type, with their inheritance distance. Use this to explore descendants; use get-type-hierarchy for base types as well, or find-implementations for interface member implementations. For an interface, includes derived interfaces and implementing types. Searches projects selected by scope, or the loaded solution when scope is omitted. Defaults to three inheritance levels and 100 returned types. Check derivedTypes.hasMore for truncation within maxDepth; deeper types are excluded.

Input parameters:

- `derivedTypesLimit` (integer|null): Caps returned derived types within maxDepth. Omitted or null uses 100; zero returns no derived types.
- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `maxDepth` (integer): Maximum traversal depth; directly derived types are at depth one.
- `scope` (object|null): Selects projects to search; a document scope searches its containing project. Omitted searches the loaded solution.
- `symbol` (object, required): Provide exactly one of location or documentationCommentId.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-type-hierarchy` (~290 tokens)

Get Type Hierarchy

Inspects the inheritance neighbourhood of a resolved named type, returning type, baseTypes, interfaces and derivedTypes. Use this for a combined hierarchy view; use find-derived-types when you need a scoped descendant search. Derived types are included by default and searched across the loaded solution; includeDerived=false omits that collection. maxDepth defaults to 3 for base and derived types, with direct relationships at depth 1; it does not limit the transitive interface list. Independent result limits default to 16 base types, 64 interfaces and 100 derived types. Check each collection.hasMore for result truncation; base and derived counts describe only the requested depth. Read-only; no code is executed.

Input parameters:

- `baseTypesLimit` (integer|null): Maximum number of base types to return.
- `derivedTypesLimit` (integer|null): Maximum number of derived types to return.
- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `includeDerived` (boolean): Whether derived types should be included.
- `interfacesLimit` (integer|null): Maximum number of interfaces to return.
- `maxDepth` (integer): The maximum base-type and derived-type traversal depth. Direct relationships are at depth one.
- `symbol` (object, required): The symbol selector.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `find-overloads` (~193 tokens)

Find Overloads

Lists callable signatures for a resolved method or constructor so you can compare parameter and return types. Requires a callable symbol; use search-symbols to discover one first. Methods are matched by name and method kind within the same containing type; instance constructors include only explicitly declared constructors. The selected callable can appear in the results. This does not resolve a call against arguments or collect inherited overloads. Returns symbol and a bounded overloads collection ordered by parameter count then signature. overloadsLimit defaults to 50; check overloads.hasMore for truncation. Reads symbols without invoking code.

Input parameters:

- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `overloadsLimit` (integer|null): Maximum number of results to return.
- `symbol` (object, required): The symbol selector.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-partial-declarations` (~168 tokens)

Get Partial Declarations

Returns source declaration locations for a resolved symbol, ordered by document path and source position. Use this to navigate split partial type declarations; use get-symbol-info for symbol metadata or find-references for usages. Only declarations belonging to the resolved symbol are returned: partial method definition and implementation parts are not combined automatically. Metadata-only or implicitly declared symbols may return no declarations. Defaults to 32 locations; check declarations.hasMore before treating the results as complete.

Input parameters:

- `declarationsLimit` (integer|null): Maximum number of results to return.
- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `symbol` (object, required): The symbol selector.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-symbol-dependencies` (~187 tokens)

Get Symbol Dependencies

Lists distinct direct dependencies found in a resolved symbol signature and supported executable operations, including referenced types and members. Use this for outgoing relationships; use get-symbol-dependents to find source symbols that reference the selected symbol, or get-dependency-graph for relationships across a scope. Dependencies may include metadata symbols. Containing assembly names are included by default. Returns up to 100 dependencies by default; check dependencies.hasMore before treating the inventory as complete.

Input parameters:

- `dependenciesLimit` (integer|null): Maximum number of results to return.
- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `includeAssemblies` (boolean): Whether containing assembly names should be included with each dependency.
- `symbol` (object, required): The symbol selector.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-symbol-dependents` (~211 tokens)

Get Symbol Dependents

Finds distinct enclosing symbols at source references to a resolved symbol. Use this to identify incoming dependencies; use get-symbol-dependencies for outgoing dependencies, find-references for individual source occurrences, or get-change-impact for relationship counts. Searches the selected documents or projects, or the loaded solution when scope is omitted. Returns up to 100 dependent symbol references by default; check dependents.hasMore before treating the results as complete.

Input parameters:

- `dependentsLimit` (integer|null): Caps returned distinct dependent symbols. Omitted or null uses 100; zero returns no dependents.
- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `scope` (object|null): Limits the source references used to discover dependents to the selected documents or projects; omitted searches the loaded solution.
- `symbol` (object, required): Provide exactly one of location or documentationCommentId.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-dependency-graph` (~200 tokens)

Get Dependency Graph

Builds a dependency graph at Project, Namespace, Type or Symbol granularity, with edges directed from dependents to dependencies. Use this to inspect relationships across a scope; use get-symbol-dependencies or get-symbol-dependents for one symbol, or get-change-impact for a symbol-centred count summary. Project granularity uses selected projects; other granularities use selected source documents. Omitted scope covers the loaded solution. Defaults to Type granularity, 200 nodes and 400 edges. Check both nodes.hasMore and edges.hasMore; omitted nodes also exclude their connected edges.

Input parameters:

- `edgesLimit` (integer|null): Maximum number of edges to return.
- `granularity` (string): The dependency graph granularity.
- `nodesLimit` (integer|null): Maximum number of nodes to return.
- `scope` (object|null): The scope to graph.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `find-dependency-cycles` (~259 tokens)

Find Dependency Cycles

Finds mutually dependent groups in a static dependency graph for the selected scope, or the loaded solution when scope is omitted. Use this to investigate circular coupling; use get-dependency-graph to inspect individual dependency edges. granularity defaults to Type; Namespace groups source dependencies and Project uses direct project references. A document scope uses its containing project for Project granularity. Returns a bounded cycles collection of strongly connected node groups, not ordered traversal paths. cyclesLimit defaults to 25; check cycles.hasMore for additional groups. Analysis budgets default to 25000 nodes and 100000 edges; exceeding either rejects the query with AnalysisLimitExceeded rather than returning a partial cycle analysis. Narrow the scope or raise the relevant budget to retry. Read-only; no tests or application code are run.

Input parameters:

- `cyclesLimit` (integer|null): Maximum number of results to return.
- `edgesLimit` (integer|null): The maximum number of graph edges to analyse.
- `granularity` (string): The dependency graph granularity.
- `nodesLimit` (integer|null): The maximum number of graph nodes to analyse.
- `scope` (object|null): The scope to analyse.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `find-unused-symbols` (~184 tokens)

Find Unused Symbols

Uses only compiler diagnostics CS0168, CS0169 and CS0219 to identify candidate unused symbols. Use this to review potentially removable locals and private members; inspect find-references before removing code, or get-diagnostics for the underlying warnings. includeInternal widens the accessibility filter; generated-looking documents are excluded by default. Searches the selected scope, or the loaded solution when scope is omitted. Returns up to 50 candidates by default; check candidates.hasMore before treating the candidate list as complete.

Input parameters:

- `candidatesLimit` (integer|null): Maximum number of results to return.
- `excludeGenerated` (boolean): Whether generated files should be excluded.
- `includeInternal` (boolean): Whether internal members should be included.
- `scope` (object|null): The optional search scope.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `find-duplicate-code` (~225 tokens)

Find Duplicate Code

Finds groups of whole executable blocks with identical statement text after whitespace normalisation. Use this to locate duplication candidates for manual inspection; identifiers and literal values remain significant, so this is not semantic clone detection. Scans block-bodied methods, constructors, local functions and accessors in the selected scope, or the loaded solution when scope is omitted; expression bodies and arbitrary statement subsequences are not candidates. minimumStatements defaults to 3 top-level statements per block. Returns groups with statementCount and bounded occurrences containing symbol and location pointers, without source excerpts or edits. Limits default to 25 groups and 100 occurrences per group; check groups.hasMore and each occurrences.hasMore independently.

Input parameters:

- `groupsLimit` (integer|null): Maximum number of results to return.
- `minimumStatements` (integer): The minimum statement count to consider.
- `occurrencesPerGroupLimit` (integer|null): Maximum number of occurrences to return for each duplicate group.
- `scope` (object|null): The optional search scope.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-diagnostics` (~183 tokens)

Get Diagnostics

Returns compiler diagnostics and diagnostics from analysers referenced by the selected projects. Use this for general diagnostic inspection; use analyze-async for the additional bundled AsyncFixer rule set, or get-document-options to inspect document configuration. Omitted scope searches the loaded solution. Document scope keeps diagnostics whose primary source location belongs to that document; broader scopes can include findings without source locations. Requested diagnostic IDs and severities filter results before the default 200-diagnostic limit. Check diagnostics.hasMore before treating the report as complete.

Input parameters:

- `diagnosticsLimit` (integer|null): Maximum number of results to return.
- `ids` (array|null): The included diagnostic identifiers.
- `scope` (object|null): The optional scope selector.
- `severities` (array|null): The included diagnostic severities.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `analyze-nullability` (~216 tokens)

Analyze Nullability

Reports compiler diagnostics whose IDs begin with CS86 for focused nullable analysis. Use get-diagnostics for other compiler or project analyser findings, and get-document-options to inspect project-level nullable context. A supplied location overrides scope and keeps diagnostics intersecting its resolved span; echo its expectedSnapshot. Without a location, searches the selected scope or the loaded solution by default. Findings depend on compiler settings and are limited to 50 by default; check findings.hasMore.

Input parameters:

- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `findingsLimit` (integer|null): Caps returned nullable-flow diagnostics. Omitted or null uses 50; zero returns no findings.
- `location` (object|null): Provide exactly one of span or selection.
- `scope` (object|null): Selects documents or projects to analyse when location is omitted; omitted searches the loaded solution. Ignored when location is supplied.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `analyze-async` (~147 tokens)

Analyze Async

Reports only bundled AsyncFixer01 through AsyncFixer06 diagnostics plus compiler warning CS4014 for selected source documents. Use this for focused async/await review, including bundled rules when the project does not reference AsyncFixer; use get-diagnostics for general compiler and project analyser findings. Searches the selected scope, or the loaded solution when scope is omitted. Returns up to 50 findings by default; check findings.hasMore before treating the report as complete.

Input parameters:

- `findingsLimit` (integer|null): Maximum number of results to return.
- `scope` (object|null): The optional search scope.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `analyze-disposables` (~162 tokens)

Analyze Disposables

Heuristically flags local declarations of IDisposable or IAsyncDisposable values that lack a recognised disposal pattern. Use this for advisory resource-handling review; verify ownership transfers and control flow before acting. Using declarations are skipped, and supported direct or finally-block Dispose/DisposeAsync calls are recognised. Analysis is limited to local declarations and recognised patterns; use get-diagnostics for configured compiler and analyser rules. Searches the selected scope, or the loaded solution when scope is omitted. Returns up to 50 findings by default; check findings.hasMore.

Input parameters:

- `findingsLimit` (integer|null): Maximum number of results to return.
- `scope` (object|null): The optional search scope.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `analyze-control-flow` (~203 tokens)

Analyze Control Flow

Analyses entry and exit reachability, exit points and return statements for an exact complete statement or contiguous sibling statements in one executable body. Use this to understand a selected region; use get-control-flow-graph for the enclosing executable graph, or analyze-data-flow for variable-flow information. The selection must match statement spans exactly; a caret or partial statement is rejected. Echo the current expectedSnapshot. Exit points and return statements are limited independently to 100 each by default; check exits.hasMore and returns.hasMore.

Input parameters:

- `exitsLimit` (integer|null): Maximum number of exit points to return.
- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `location` (object, required): An exact complete statement or contiguous statement range to analyze.
- `returnsLimit` (integer|null): Maximum number of return statements to return.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `analyze-data-flow` (~194 tokens)

Analyze Data Flow

Returns Roslyn variable sets for declarations, reads, writes, captures and data flowing into or out of an exact expression, complete statement or contiguous sibling statements in one executable body. Use this when planning to extract or move selected code; use get-operation-tree for semantic operation structure, or analyze-control-flow for region reachability and exits. Echo the current expectedSnapshot and select exact syntax spans. Each variable category is limited independently to 50 symbols by default; check its hasMore before treating the category as complete.

Input parameters:

- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `location` (object, required): An exact expression, complete statement or contiguous statement range to analyze.
- `symbolsPerCategoryLimit` (integer|null): Maximum number of symbols to return in each data-flow category.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-operation-tree` (~202 tokens)

Get Operation Tree

Projects a semantic IOperation tree with operation kinds, types, constant-value presence and source locations. Use this to inspect the semantic structure at a source location; use analyze-data-flow for variable-flow sets or get-control-flow-graph for branches and successors. If the selected syntax node has no operation, the first immediate child with an operation is used. Echo the current expectedSnapshot. Defaults to 200 total nodes and maxDepth 8, counting the root at depth zero. Check the result and node truncated flags; nodesLimit zero returns a null root.

Input parameters:

- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `location` (object, required): The selected location.
- `maxDepth` (integer): The maximum traversal depth.
- `nodesLimit` (integer|null): The optional maximum total number of projected operation nodes.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-control-flow-graph` (~264 tokens)

Get Control Flow Graph

Builds a Roslyn control-flow graph for a source symbol or the executable body enclosing a source location, with basic blocks, reachability, successor ordinals, operations and flow regions. Use this to inspect branching across an executable body; use analyze-control-flow for reachability and exits of an exact statement region, or get-operation-tree for nested semantic operations. Defaults to 64 blocks, 32 regions and 32 operations per block, bounded independently. Check blocks.hasMore, regions.hasMore and each block operations.hasMore; successor ordinals may refer to blocks omitted by the block limit. Input: Provide exactly one of symbol or location.

Input parameters:

- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `location`: Source location whose enclosing executable body should be graphed.
- `maxBlocks` (integer|null): The maximum number of projected basic blocks.
- `maxOperationsPerBlock` (integer|null): The maximum number of projected operations in each basic block.
- `maxRegions` (integer|null): The maximum number of projected flow regions.
- `symbol` (object): Symbol whose control-flow graph should be returned.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-change-impact` (~244 tokens)

Get Change Impact

Summarises source references, method callers, overrides, implementing types for interfaces and a public-surface indicator for a resolved symbol. Use this as static relationship evidence when planning a symbol change; use get-symbol-dependents for the referencing symbols themselves, or get-dependency-graph for a scoped graph. Counts reflect the selected scope, or the loaded solution when scope is omitted. Supporting source-reference locations are limited to 100 by default, independently of the counts; check locations.hasMore before treating the returned locations as complete.

Input parameters:

- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `locationsLimit` (integer|null): Caps returned reference locations without limiting impact counts. Omitted or null uses 100; zero returns counts without locations.
- `scope` (object|null): Selects documents for references and callers, and projects for override and implementation counts. A document scope uses its containing project for those counts; omitted searches the loaded solution.
- `symbol` (object, required): Provide exactly one of location or documentationCommentId.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-api-surface` (~171 tokens)

Get API Surface

Lists API declarations from source in the selected scope, with symbol references, accessibility and obsolete status. Use this to inventory accessible types and members; use search-symbols to locate declarations by name, or get-symbol-info to inspect one symbol. Omitted scope searches the loaded solution. Defaults to Public accessibility, includes obsolete symbols and returns up to 100 symbols. Check symbols.hasMore before treating the inventory as complete.

Input parameters:

- `includeObsolete` (boolean): Whether obsolete symbols should be included.
- `minimumAccessibility` (string): The minimum accessibility threshold as Public, Protected, or Internal.
- `scope` (object|null): The search scope.
- `symbolsLimit` (integer|null): Maximum number of results to return.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-test-impact` (~296 tokens)

Get Test Impact

Suggests tests to inspect after changing a resolved symbol, using static direct references to the target or its owning type. This heuristic can include tests that use another member of that type and misses indirect helper-call dependencies; it is not a coverage report or a guarantee of the tests affected. Candidate methods are selected by type names ending in Test, Tests, Spec or Specs, or method names starting GIVEN_ or containing _THEN_Should; test attributes alone do not select candidates. testScope limits candidate documents or projects and defaults to the loaded solution. Returns symbol and a bounded tests collection with test symbols and locations; includeReasons defaults to false. testsLimit defaults to 100; check tests.hasMore for truncation. Does not execute tests.

Input parameters:

- `expectedSnapshot` (object|null): Echo the snapshot returned with the data or transaction state used to construct this request.
- `includeReasons` (boolean): Include explanations of why each returned test may be affected; defaults to false and does not change which tests match.
- `symbol` (object, required): Provide exactly one of location or documentationCommentId.
- `testScope` (object|null): Limits candidate test discovery to the selected documents or projects; omitted searches the loaded solution.
- `testsLimit` (integer|null): Caps returned likely impacted tests. Omitted or null uses 100; zero returns no tests.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `submit-error-report` (~176 tokens)

Submit Error Report

Submits a reviewed unexpected-failure report through the configured provider. First use prepare-error-report and review its destination, payloadJson and payloadDigest, then supply its unexpired submissionHandle. Use get-error-details for local investigation instead. Prompt consent (default) requests client approval and offers exception-message removal; Always consent skips the prompt. Declined or unavailable approval sends nothing; declining also discards the handle. Success means provider acceptance: Sentry queues an external event, while the Logging provider writes locally. It does not confirm remote delivery or offer retraction. Reusing a retained successful handle returns its receipt without dispatching again; an expired handle requires a new prepared report. Result: Returns the dispatcher, provider report reference and dispatched payload digest.

Input parameters:

- `submissionHandle` (string, required): Opaque handle returned for the exact reviewed payload to submit.

### `prepare-error-report` (~78 tokens)

Prepare Error Report

Creates the complete external payload without network activity. Exception messages may contain Workspace data. Present the returned destination, payload JSON string and digest to the user before calling submit-error-report when approval is required; the user can choose to remove exception messages during submission.

Input parameters:

- `correlationId` (string, required): Correlation identifier of the captured failure to prepare for review.

### `workspace-open` (~195 tokens)

Workspace Open

Loads an additional workspace for inspection and, when enabled by Host policy, staged mutation. Open only a fully trusted workspace: loading evaluates MSBuild project logic, evaluated source inputs including external linked or package-provided documents become queryable, and later diagnostic or Code Action operations can load and execute project analysers with the Host's permissions. Documents outside workspaceRoot remain read-only. If instance status reports that the workspace is or may be in use elsewhere, use it only for necessary queries, expect results to become stale, and coordinate mutation ownership before starting a transaction.

Input parameters:

- `alias` (string|null): The optional caller-friendly alias for the workspace.
- `msBuildProperties` (object|null): The optional allowlisted MSBuild global properties used to evaluate this workspace.
- `path` (string, required): The absolute solution or project path to load.
- `workspaceRoot` (string|null): The optional absolute repository or workspace root used for coordination and transaction boundaries.

### `server-status` (~145 tokens)

Server Status

Reports Host health without requiring a loaded workspace. Use this to diagnose startup, component availability, tool publication or effective operational policy; use workspace-status for one workspace and get-diagnostics for source findings. detail defaults to Minimal, returning server/Roslyn versions, MSBuild and Code Action component status and toolCount. Full additionally returns effective non-sensitive configuration, startup warnings, plugin status and unfinished recovery records; Standard currently has the same projection as Minimal. This read-only query does not load a workspace, run source diagnostics or repair recovery state. Result: server diagnostics, effective configuration, plugin status, and unfinished recovery state.

Input parameters:

- `detail` (string): Amount of server status detail to return.

### `workspace-status` (~173 tokens)

Workspace Status

Inspects a loaded workspace, returning its lifecycle state, identity, project/document counts, active transaction, reloadRequired, detected external change and other live instances. Use this before mutation or after external edits; use server-status for Host configuration and component health. detail defaults to Standard; Full also includes workspace load diagnostics. Advisory instance-status diagnostics can appear at any detail level. Checking status detects external input changes and can mark the workspace out of date or its transaction conflicted. Treat a workspace that is or may be in use elsewhere as query-only, use it only when necessary, and expect results to become stale; coordinate mutation ownership first. No source files are written.

Input parameters:

- `detail` (string): Amount of workspace status detail to return.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `list-code-actions` (~280 tokens)

List Code Actions

Discovers applicable Roslyn Code Fixes and refactorings for a document, selection or caret. Use this to choose an actionId for stage-code-action in mutation-enabled modes, or a Code Fix with advertised fixAllScopes for prepare-fix-all. Echo the current expectedSnapshot. Omitted range selects the whole document; a zero-length range selects a caret, using zero-based UTF-16 positions. Returns up to 50 action leaves by default; check actions.hasMore. Action IDs are temporary, process-local and tied to the exact workspace snapshot: rediscover after changes or expiry. Listing stores references but does not stage changes or write source files.

Input parameters:

- `diagnosticIds` (array|null): The optional diagnostic identifier filter for code fixes.
- `document` (object, required): Target document.
- `expectedSnapshot` (object, required): Echo the snapshot returned with the data or transaction state used to construct this request.
- `includeProvenance` (boolean): Whether returned actions should reference a response-level runtime provider catalogue.
- `kinds` (string, required): The kinds of actions to discover.
- `limit` (integer|null): The maximum number of action leaves to return.
- `range` (object|null): The optional selection or caret range. An omitted range selects the complete document.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `workspace-close` (~96 tokens)

Workspace Close

Closes the selected workspace and releases its loaded solution, file watching and Host resources without changing source files. Use this when finished with a workspace; use workspace-reload to refresh an out-of-date workspace and continue working. An active or conflicted transaction blocks close: commit or roll it back first. Use workspace-open to load the workspace again.

Input parameters:

- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `workspace-list` (~104 tokens)

Workspace List

Lists workspaces currently loaded in this Host, returning their identities and transactionOwnerWorkspaceId when a transaction is active. Use this to discover workspaceId, alias or path selectors before workspace-status or other workspace tools; use workspace-open to load a new workspace. Takes no workspace selector and can return an empty list. This read-only inventory does not discover repositories on disk or workspaces loaded only by other Host processes. Use workspace-status for lifecycle, reload requirements and advisory cross-instance information.

### `prepare-fix-all` (~251 tokens)

Prepare Fix All

Evaluates one supported Document, Project or Solution Fix All operation for a Code Fix from list-code-actions, without staging or writing source files. Supply the originating actionId, an advertised fixAllScopes value and the matching expectedSnapshot; refactorings and already-prepared Fix All references are not accepted. Rejects operations exceeding maxChanges source documents, default 50. The affectedDocuments preview is limited separately to 20 identities by default; check its hasMore and totalCount. Returns a new temporary actionId for stage-code-action in mutation-enabled modes: use this prepared ID, not the originating ID, with the same snapshot. Staging revalidates the exact prepared change set.

Input parameters:

- `actionId` (string, required): The opaque originating Code Fix reference.
- `affectedDocumentsLimit` (integer|null): The maximum number of affected document identities to return.
- `expectedSnapshot` (object, required): Echo the snapshot returned with the data or transaction state used to construct this request.
- `maxChanges` (integer|null): The maximum number of changed source documents to allow.
- `scope` (string, required): The explicit Fix All scope.
- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `workspace-reload` (~167 tokens)

Workspace Reload

Recreates an out-of-date loaded workspace from its current on-disk solution or project inputs. Use this after workspace-status reports reloadRequired or a query reports WorkspaceOutOfDate; use workspace-open for a workspace not yet loaded. An active transaction blocks reload: finish it first, rolling back if conflicted. A workspace that is not out of date is rejected with WorkspaceReloadNotRequired. Preserves workspaceId and alias, but replaces the loaded solution with a new workspace epoch and snapshot; resolve document, symbol and action references again before reuse. Returns workspace identity, project/document counts and load diagnostics. Reload evaluates trusted MSBuild project logic with Host permissions; it does not apply staged source changes.

Input parameters:

- `workspace` (object|null): Provide workspaceId, alias, path, or any combination.

### `get-error-details` (~67 tokens)

Get Error Details

Returns temporary local diagnostic details for an unexpected tool or resource-read failure. The result may contain paths and user-authored identifiers, is intended only for the trusted local agent, and must never be submitted externally.

Input parameters:

- `correlationId` (string, required): Correlation identifier returned with the failed tool invocation.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/lantean-code-roslyn-workbench-mcp/lantean-roslyn-workbench-mcp#diagnostics

## Score history

- 2026-11-05: 92
- 2026-11-04: 92
- 2026-11-03: 91
- 2026-11-02: 89
- 2026-11-01: 88
- 2026-10-31: 88
- 2026-10-30: 87
- 2026-10-29: 87
- 2026-10-28: 86
- 2026-10-27: 86
- 2026-10-26: 85
- 2026-10-25: 85
- 2026-10-24: 84
- 2026-10-23: 84
- 2026-10-22: 83
- 2026-10-21: 83
- 2026-10-20: 68
- 2026-10-19: 79
- 2026-10-18: 79
- 2026-10-17: 79
- 2026-10-16: 79
- 2026-10-15: 79
- 2026-10-14: 79
- 2026-10-13: 50
- 2026-10-12: 50

## Common questions

### What is the Roslyn Workbench MCP server?

Roslyn Workbench MCP is listed in the public MCP registry as io.github.lantean-code/roslyn-workbench-mcp. Bring Visual Studio-style C# fixes and refactorings to your AI agent with local Roslyn Code Actions. This page covers its NuGet package (Lantean.Roslyn.Workbench.Mcp).

### Is the Roslyn Workbench MCP server safe to use?

Roslyn Workbench MCP scores 92 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Roslyn Workbench MCP server expose?

Roslyn Workbench MCP exposes 48 tools: get-solution-structure, get-project-details, get-document-options, get-document-outline, get-code-context, and 43 more. Their descriptions and schemas cost roughly 9,758 tokens of context every time the server is loaded.

### Is the Roslyn Workbench MCP server still maintained?

Roslyn Workbench MCP is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the Roslyn Workbench MCP server under?

Roslyn Workbench MCP declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- NuGet package: https://www.nuget.org/packages/Lantean.Roslyn.Workbench.Mcp
- Socket report: https://socket.dev/nuget/package/Lantean.Roslyn.Workbench.Mcp
- Repository: https://github.com/lantean-code/roslyn-workbench-mcp
- Website: https://lantean-code.github.io/roslyn-workbench-mcp/1.2.0/
- Changelog RSS feed: https://verifymcp.io/servers/lantean-code-roslyn-workbench-mcp/lantean-roslyn-workbench-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/lantean-code-roslyn-workbench-mcp/lantean-roslyn-workbench-mcp.json
- HTML version of this page: https://verifymcp.io/servers/lantean-code-roslyn-workbench-mcp/lantean-roslyn-workbench-mcp
