Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.darylmcd/roslyn-mcp

NUGET · DARYLMCD.ROSLYNMCP · SCANNED SEP 20

Local-first MCP server for semantic C# analysis & refactoring via Roslyn & MSBuildWorkspace.

0 this week 85 Trust /100
Trust breakdown (7 categories)

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. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • No production dependencies, so there is no dependency health to assess. View diagnostics → Pass
Provenance & Transparency48
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 1 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability84
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 24596 tokens (~137/item across 179 items; 174 tools + 5 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management93
  • Stability check failed: the tool surface changed between 4.0.0 and 4.2.1: 0 tool removals, 1 breaking changes, 0 additions. See how to fix → Fail
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (5% of tools); any adoption earns full credit.Pass
Tool Safety81
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 2 of 9 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_file_preview" implies "delete" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Partial
  • An AI judge read all 176 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the io.github.darylmcd/roslyn-mcp server?

io.github.darylmcd/roslyn-mcp runs locally as a NuGet package, launched with dnx Darylmcd.RoslynMcp@4.2.1 --yes. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

nuget · Darylmcd.RoslynMcp

# add to Claude Code
claude mcp add darylmcd-roslyn-mcp -- dnx Darylmcd.RoslynMcp@4.2.1 --yes
// .cursor/mcp.json
{
  "mcpServers": {
    "darylmcd-roslyn-mcp": {
      "command": "dnx",
      "args": [
        "Darylmcd.RoslynMcp@4.2.1",
        "--yes"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "darylmcd-roslyn-mcp": {
      "command": "dnx",
      "args": [
        "Darylmcd.RoslynMcp@4.2.1",
        "--yes"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add darylmcd-roslyn-mcp -- dnx Darylmcd.RoslynMcp@4.2.1 --yes
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "darylmcd-roslyn-mcp": {
      "type": "local",
      "command": [
        "dnx",
        "Darylmcd.RoslynMcp@4.2.1",
        "--yes"
      ],
      "enabled": true
    }
  }
}
# ~/.hermes/config.yaml
mcp_servers:
  darylmcd-roslyn-mcp:
    command: "dnx"
    args: ["Darylmcd.RoslynMcp@4.2.1", "--yes"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "darylmcd-roslyn-mcp": {
      "Transport": "stdio",
      "Command": "dnx",
      "Arguments": [
        "Darylmcd.RoslynMcp@4.2.1",
        "--yes"
      ]
    }
  }
}
// mcp.json
{
  "mcpServers": {
    "darylmcd-roslyn-mcp": {
      "command": "dnx",
      "args": [
        "Darylmcd.RoslynMcp@4.2.1",
        "--yes"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93.

  • 19 Sept 26 +13
    • Malware scan: unverified → pass security
  • 18 Sept 26 −15
    • Malware scan: pass → unverified security
    • Package version: 4.2.0 → 4.2.1 functional
  • 17 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 96 to 100.

  • 15 Sept 26 +16
    • Malware scan: unverified → pass security
  • 14 Sept 26 −16
    • Malware scan: pass → unverified security
    • Stability: pass → fail security
    • Stability: pass → 0.90 functional
    • Package version: 4.1.2 → 4.2.0 functional
  • 13 Sept 26 0
    • Stability: 0.97 → pass security
  • 12 Sept 26 +1

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

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed nuget/Darylmcd.RoslynMcp@4.2.1

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem nuget
Reason Signature present, unreadable

Background: How many MCP packages publish verified provenance →

Dependencies 0 packages
Packages resolved 0
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 174 exposed · ~24,032 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
find_duplicated_methods ~285

Find clusters of method bodies with matching AST-normalized structure: internal copy-paste candidates for a shared helper. Bucketing uses body shape, not method name.

NameTypeReqDescription
excludeMcpToolWrappersbooleanWhen true (default), skip [McpServerTool]-attributed methods whose body is a single delegation, since MCP requires one wrapper shim per tool name.
limitintegerMaximum number of groups to return (default: 50).
minLinesintegerMinimum body line count for a method to be considered (default: 10). Lower values produce more false-positive clusters.
projectFilterstring|nullOptional: filter by project name to scope the scan on large solutions.
similarityThresholdnumberStructural similarity threshold in [0.0, 1.0] (default: 0.85). Exact structural duplicates score 1.0; the current implementation reports only exact-structural matches, so any value <= 1.0 behaves ide…
summarybooleanWhen true, omit each group's per-member `Methods` array (file paths + line spans) and return only per-cluster metadata. Smaller payload for large solutions where full member lists exceed the MCP outp…
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

find_implementations ~191

Find concrete implementations of an interface or abstract member. Use metadataName without an exact cursor; generator partials are deduped by default.

NameTypeReqDescription
columninteger|nullOptional: 1-based column number — must point at the symbol name token
filePathstring|nullOptional: absolute path to the source file
includeGeneratedPartialsbooleanWhen true, emit every partial-declaration location (including generator-emitted .g.cs files). Default false dedupes to user-authored partials.
lineinteger|nullOptional: 1-based line number
metadataNamestring|nullOptional: fully qualified metadata name, e.g. Namespace.IMyInterface
symbolHandlestring|nullOptional: stable symbol handle returned by other semantic tools
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

find_overloads ~270

Enumerate every overload of a member by type + name, including BCL/NuGet methods with no workspace source — the case symbol_search cannot reach.

NameTypeReqDescription
includeInheritedbooleanOptional: when true, also walk the base-class chain for additional overloads. Inaccessible (e.g. private) base members are excluded via Roslyn's own accessibility rules; there is no override-chain de…
memberNamestringyesBare member name to enumerate overloads of, e.g. 'Max'. No signature needed — resolves ALL overloads of that name. Extension methods are out of scope — query the extending static class directly inste…
projectNamestring|nullOptional: restrict type resolution to one project by name (case-sensitive), for multi-targeted solutions where the same type could differ across TFMs.
typeMetadataNamestringyesFully qualified metadata name of the containing type, e.g. 'System.Math' or 'System.Collections.Generic.List`1' (backtick arity for generics).
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

find_overrides ~140

Find true virtual or abstract overrides — only symbols actually marked `override`. Excludes sibling interface implementations; use member_hierarchy for those.

NameTypeReqDescription
columninteger|nullOptional: 1-based column number
filePathstring|nullOptional: absolute path to the source file
lineinteger|nullOptional: 1-based line number
metadataNamestring|nullOptional: fully qualified metadata name, e.g. Namespace.TypeName
symbolHandlestring|nullOptional: stable symbol handle returned by other semantic tools
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

find_property_writes ~140

Find every property assignment and classify its WriteKind as ObjectInitializer, Assignment, OutRef, or PrimaryConstructorBind.

NameTypeReqDescription
columninteger|nullOptional: 1-based column number
filePathstring|nullOptional: absolute path to the source file containing the property
lineinteger|nullOptional: 1-based line number
metadataNamestring|nullOptional: fully qualified metadata name, e.g. Namespace.TypeName
symbolHandlestring|nullOptional: stable symbol handle returned by other semantic tools
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

find_references ~380

Find every reference to one symbol across the solution. Use summary=true for high fan-out and projectFilter for named projects; use find_references_bulk for many symbols.

NameTypeReqDescription
allowElicitationbooleanDefault false (agent-first). When false, a metadataName resolving to more than one candidate returns the structured candidate list to the calling agent. When true AND the client supports form elicita…
columninteger|nullOptional: 1-based column number
filePathstring|nullOptional: absolute path to the source file
limitintegerMaximum number of references to return (default: 100)
lineinteger|nullOptional: 1-based line number
metadataNamestring|nullOptional: fully qualified metadata name, e.g. Namespace.TypeName
offsetintegerNumber of references to skip before returning results (default: 0)
projectFilterstring|nullOptional: case-sensitive Project.Name filter to scope the result; comma-separated for multiple projects (e.g. 'Foo.Core,Foo.Tests'). Null/empty preserves the unfiltered solution-wide walk.
summarybooleanWhen true, drops per-ref preview text to keep the response small for high-fan-out symbols. File path + line + column + classification still populated. Default false preserves the v1.18.2 shape.
symbolHandlestring|nullOptional: stable symbol handle returned by other semantic tools
workspaceIdstring|nullOptional: the workspace session identifier returned by workspace_load. With one workspace loaded you may omit it — the read-path middleware resolves it automatically; pass it explicitly when two or m…

No output schema declared.

No examples provided.

find_references_bulk ~259

Find references for up to 50 symbols in one call. Each locator sets exactly one of symbolHandle, metadataName, or filePath+line+column.

NameTypeReqDescription
includeDefinitionbooleanInclude the definition location in each result (default: false)
maxItemsPerSymbolintegerMaximum number of reference locations to keep per symbol (default: 100). Applied BEFORE the outer envelope is assembled so the cap actually bounds aggregate output. Each result's `truncated` flag ind…
summarybooleanWhen true, drops per-ref preview text to keep each symbol's references small for high-fan-out batches. File path + line + column + classification still populated. Default false preserves the v1.18.2…
symbolsarrayyesArray of locator objects (max 50). Example shape: symbols: [ { metadataName: "SampleLib.IAnimal" }, { filePath: "C:/src/x.cs", line: 10, column: 5 } ]
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

find_reflection_usages ~158

Find solution-wide reflection API usage, including typeof, Type.GetMethod, Activator.CreateInstance, and Assembly.Load, bucketed by UsageKind. isComplete=false means totals are lower bounds.

NameTypeReqDescription
limitintegerMaximum number of usages to return per call (default: 200); primary payload cap.
offsetintegerNumber of usages to skip before returning results (default: 0).
projectNamestring|nullOptional: filter by project name
summarybooleanWhen true, return only per-UsageKind aggregate counts (no item arrays). 10-100x smaller payload on reflection-heavy solutions.
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

find_shared_members ~143

Find private members of a type that are referenced by multiple public methods. Helps plan type extractions by identifying shared dependencies that would need duplication or extraction.

NameTypeReqDescription
columninteger|nullOptional: 1-based column number
filePathstring|nullOptional: absolute path to the source file
lineinteger|nullOptional: 1-based line number
metadataNamestring|nullOptional: fully qualified metadata name, e.g. Namespace.TypeName
symbolHandlestring|nullOptional: stable symbol handle returned by other semantic tools
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

find_type_consumers ~128

File-granularity rollup of source files referencing a named type, with deduped usage kinds and site counts. Unlike find_type_usages, it does not classify individual sites.

NameTypeReqDescription
limitintegerMaximum number of file rollup entries to return (default: 100)
typeNamestringyesType name to resolve. Accepts a fully qualified metadata name (e.g. 'Namespace.TypeName' or 'List`1') or a short type name when unambiguous.
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

find_type_mutations ~172

Heavy analysis: find every mutating member of a type (settable properties, methods writing instance state) and their external callers, classified as construction-phase vs post-construction.

NameTypeReqDescription
columninteger|nullOptional: 1-based column number
filePathstring|nullOptional: absolute path to the source file containing the type
limitintegerMaximum number of mutating members to return (default: 100)
lineinteger|nullOptional: 1-based line number
metadataNamestring|nullOptional: fully qualified metadata name, e.g. Namespace.TypeName
symbolHandlestring|nullOptional: stable symbol handle returned by other semantic tools
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

find_type_usages ~189

Find all type usages across the solution and classify each role, including return, parameter, property, field, generic argument, inheritance, cast, and construction.

NameTypeReqDescription
columninteger|nullOptional: 1-based column number
filePathstring|nullOptional: absolute path to the source file containing the type
limitintegerMaximum number of usages to return (default: 100)
lineinteger|nullOptional: 1-based line number
metadataNamestring|nullOptional: fully qualified metadata name, e.g. System.Collections.Generic.Dictionary`2
offsetintegerNumber of usages to skip before returning results (default: 0)
symbolHandlestring|nullOptional: stable symbol handle returned by other semantic tools
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

find_unused_symbols ~303

Find symbols with zero solution-wide references, with confidence levels. Skips convention-invoked shapes by default. Scan failures throw; successful scans may still under-count.

NameTypeReqDescription
excludeConventionInvokedbooleanWhen true (default), skip symbols matching convention-invoked shapes — EF ModelSnapshot, xUnit/MSTest/NUnit fixtures, ASP.NET middleware (Invoke/InvokeAsync(HttpContext)), SignalR Hubs, FluentValidat…
excludeEnumsbooleanWhen true, skip enum members (often referenced indirectly).
excludeRecordPropertiesbooleanWhen true, skip properties declared on record types (often DTO/serialization shaped).
excludeTestProjectsbooleanWhen true, skip projects whose names look like test projects (*.Tests, *Tests).
excludeTestsbooleanWhen true, skip symbols in test fixture types (xUnit/NUnit/MSTest-shaped names and attributes).
includePublicbooleanInclude public symbols in the search (default: false, since public APIs may be consumed externally)
limitintegerMaximum number of results to return (default: 50)
projectNamestring|nullOptional: filter by project name
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

fix_all_apply ~54

Apply a fix-all preview token across its recorded scope. Use only after fix_all_preview; tokens from unrelated preview families are rejected before workspace mutation.

NameTypeReqDescription
previewTokenstringyesThe preview token returned by fix_all_preview

No output schema declared.

No examples provided.

fix_all_preview ~149

Preview one Fix All provider across document, project, or solution scope. Use after list_analyzers or project_diagnostics; the result identifies per-occurrence code_fix_preview fallback when needed.

NameTypeReqDescription
diagnosticIdstringyesDiagnostic identifier to fix everywhere, e.g. CS8019, IDE0005
filePathstring|nullRequired when scope is 'document': absolute path to the source file
projectNamestring|nullRequired when scope is 'project': the project name
scopestringyesScope of the fix: 'document', 'project', or 'solution'
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

format_check ~75

Report documents that Roslyn would reformat without applying edits. Use projectName to scope the workspace-wide check; results include violations and change counts.

NameTypeReqDescription
projectNamestring|nullOptional: restrict the check to a specific project name. Defaults to all projects.
workspaceIdstringyesWorkspace session id from workspace_load.

No output schema declared.

No examples provided.

format_document_apply ~36

Apply a previously previewed format document operation using its preview token

NameTypeReqDescription
previewTokenstringyesPreview token from format_document_preview.

No output schema declared.

No examples provided.

format_document_preview ~49

Preview formatting a document: applies standard C# formatting rules

NameTypeReqDescription
filePathstringyesAbsolute path to the source file.
workspaceIdstringyesWorkspace session id from workspace_load.

No output schema declared.

No examples provided.

format_range_apply ~36

Apply a previously previewed range format operation using its preview token

NameTypeReqDescription
previewTokenstringyesPreview token from format_range_preview.

No output schema declared.

No examples provided.

format_range_preview ~130

Preview formatting a specific range within a document — more efficient than full-document formatting and produces smaller diffs

NameTypeReqDescription
endColumnintegeryes1-based end column of the range to format
endLineintegeryes1-based end line of the range to format
filePathstringyesAbsolute path to the source file.
startColumnintegeryes1-based start column of the range to format
startLineintegeryes1-based start line of the range to format
workspaceIdstringyesWorkspace session id from workspace_load.

No output schema declared.

No examples provided.

get_code_actions ~130

Get available Roslyn code fixes and refactorings at a position or selection range in a source file

NameTypeReqDescription
endColumninteger|nullOptional: 1-based end column number for a selection range
endLineinteger|nullOptional: 1-based end line number for a selection range
filePathstringyesAbsolute path to the source file
startColumnintegeryes1-based start column number
startLineintegeryes1-based start line number
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

get_cohesion_metrics ~211

Measure type cohesion via LCOM4 metrics. Identifies independent method clusters that share no state — a score > 1 suggests the type has multiple responsibilities and should be split.

NameTypeReqDescription
excludeTestProjectsbooleanWhen true, exclude MSBuild test projects (IsTestProject / test framework packages) from analysis
excludeTestsbooleanWhen true, exclude test classes (names/paths suggesting tests) from results after metrics are computed
filePathstring|nullOptional: filter by source file path
includeInterfacesbooleanWhen true, include interface types in results and mark them with TypeKind=Interface
limitintegerMaximum number of results to return (default: 50)
minMethodsinteger|nullOptional: minimum instance method count threshold (default: 2)
projectNamestring|nullOptional: filter by project name
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

get_completions ~213

Get IntelliSense completions at a member/token position, not the literal dot column. Use probe_position when uncertain; triggerCharacter='.' requests instance-member candidates.

NameTypeReqDescription
columnintegeryes1-based column number
filePathstringyesAbsolute path to the source file
filterTextstring|nullOptional: case-insensitive prefix filter applied to candidate FilterText/DisplayText (UX-007)
lineintegeryes1-based line number
maxItemsintegerMaximum number of completion items to return (default: 100, must be > 0)
triggerCharacterstring|nullOptional: trigger character (e.g. '.') that signals completion was invoked by typing this character. When supplied, Roslyn returns the member-access candidate set (instance members on the receiver ex…
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

get_complexity_metrics ~210

Calculate cyclomatic complexity, lines of code, nesting depth, parameter count, and an approximate maintainability index (0-100, higher is better) for methods in the workspace.

NameTypeReqDescription
filePathstring|nullOptional: filter by source file path
filePathsarray|nullOptional: list of source file paths to include (union with filePath). Pass as a native JSON array of absolute file paths, not a JSON-encoded string. Example: ["/abs/path/a.cs", "/abs/path/b.cs"]. Emp…
limitintegerMaximum number of results to return (default: 50)
minComplexityinteger|nullOptional: minimum cyclomatic complexity threshold (default: return all)
projectNamestring|nullOptional: filter by project name
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

get_coupling_metrics ~225

Compute per-type Martin coupling metrics: AfferentCoupling Ca, EfferentCoupling Ce, Instability I = Ce/(Ca+Ce). Classifies types stable / balanced / unstable / isolated. Companion to get_cohesion_metrics — cohesion looks inward, coupling outward.

NameTypeReqDescription
excludeTestProjectsbooleanWhen true, exclude MSBuild test projects (IsTestProject / test framework packages) from analysis
includeInterfacesbooleanWhen true, include interface types alongside classes/structs/records
limitintegerMaximum number of results to return (default: 100)
projectNamestring|nullOptional: filter by project name (case-insensitive exact match)
summarybooleanWhen true, return per-project rollup counts (typeCount, avgInstability, stableCount, balancedCount, unstableCount, isolatedCount) without per-type detail rows. 10-100x smaller payload on multi-projec…
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

get_di_registrations ~253

Scan solution DI registrations (AddSingleton/AddScoped/AddTransient) and map services to implementations. isComplete=false means totals are observed lower bounds.

NameTypeReqDescription
limitintegerMaximum items returned per call. Applies to the registrations list in detailed mode (default 100) and to the override-chain summary page when summary=true (clamped to [1, 500]).
offsetinteger0-based offset into the paginated response. Applies to the registrations list in detailed mode and to the override-chain summary page when summary=true.
projectNamestring|nullOptional: filter by project name
showLifetimeOverridesbooleanWhen true, also emit overrideChains[] grouping registrations by service type with the winning lifetime, lifetime-mismatch flag (Singleton vs Scoped vs Transient), and dead-registration count. Default…
summarybooleanWhen true, return a compact aggregate shape for large DI graphs. The detailed/default response is paginated via offset/limit when false.
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

get_editorconfig_options ~73

Get the effective .editorconfig options for a source file — returns the active code style rules, formatting settings, and naming conventions that Roslyn applies to the file.

NameTypeReqDescription
filePathstringyesAbsolute path to the source file to inspect.
workspaceIdstringyesWorkspace session id from workspace_load.

No output schema declared.

No examples provided.

get_msbuild_properties ~160

Dump evaluated MSBuild properties for a project. The full set is large (frequently 60KB+); always pass a propertyNameFilter substring or an includedNames allowlist unless you need everything.

NameTypeReqDescription
includedNamesarray|nullOptional: explicit allowlist of property names to return. Pass as a native JSON array, not a JSON-encoded string. Example: ["Nullable", "TargetFramework"]. Takes precedence over propertyNameFilter wh…
projectNamestringyesProject name as loaded in the workspace
propertyNameFilterstring|nullOptional: case-insensitive substring filter applied to property names (e.g., 'Nullable', 'Target')
workspaceIdstringyesWorkspace session id from workspace_load.

No output schema declared.

No examples provided.

get_namespace_dependencies ~74

Get the namespace dependency graph for the solution and detect circular namespace dependencies.

NameTypeReqDescription
circularOnlybooleanWhen true, return only namespaces and edges involved in circular dependencies
projectNamestring|nullOptional: filter by project name
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

get_nuget_dependencies ~102

List NuGet package references across workspace projects. isComplete=false means totals are observed lower bounds because one or more projects failed evaluation; healthy project data is retained.

NameTypeReqDescription
summarybooleanWhen true, returns a compact per-package summary `{packageId, version, projectCount, distinctVersionCount}` instead of the full per-project graph. Default false preserves the verbose shape.
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

get_operations ~130

Return the language-agnostic IOperation tree at an exact source token for behavioral analysis. Use a method identifier or operator token; approximate cursors may select a narrower operation.

NameTypeReqDescription
columnintegeryes1-based column number — must point at the token whose operation you want (UX-003)
filePathstringyesAbsolute path to the source file.
lineintegeryes1-based line number
maxDepthintegerMaximum depth of the operation tree to return (default: 3)
workspaceIdstringyesWorkspace session id from workspace_load.

No output schema declared.

No examples provided.

get_prompt_text ~153

Render any registered MCP prompt as plain text via the tool channel, for clients that cannot use the prompts/get channel. Pass `promptName` plus a `parametersJson` object; returns messages as JSON.

NameTypeReqDescription
parametersJsonstringJSON object of named parameters the prompt expects (e.g. {"workspaceId":"...","filePath":"...","line":12}). Service-typed parameters (IDiagnosticService, IWorkspaceManager, etc.) are resolved automat…
promptNamestringyesThe name of the prompt as registered with [McpServerPrompt(Name = "...")]. Use list_prompts on the resources channel or read roslyn://server/catalog for the full list.

No output schema declared.

No examples provided.

get_source_text ~175

Read source text of a document as the loaded Roslyn workspace currently sees it (may differ from disk until reload). Returns the full file by default; pass startLine/endLine (1-based, inclusive) to slice. Output is capped at maxChars.

NameTypeReqDescription
endLineinteger|nullOptional: 1-based last line to return (inclusive). Defaults to the last line of the file.
filePathstringyesAbsolute path to the source file
maxCharsintegerMaximum characters to return (default 65536). Truncates with a marker if the requested range exceeds the cap.
startLineinteger|nullOptional: 1-based first line to return (inclusive). Defaults to 1.
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

get_symbol_outline ~142

Alias for document_symbols for cross-MCP-server compatibility. Returns its canonical envelope with deprecation.canonicalName; prefer document_symbols in new code.

NameTypeReqDescription
filePathstring|nullOptional: absolute path to the source file
metadataNamestring|nullOptional: fully qualified metadata name, e.g. Namespace.TypeName
symbolHandlestring|nullOptional: stable symbol handle returned by other semantic tools
workspaceIdstring|nullOptional: the workspace session identifier returned by workspace_load. With one workspace loaded you may omit it — the read-path middleware resolves it automatically; pass it explicitly when two or m…

No output schema declared.

No examples provided.

get_syntax_tree ~327

Get a hierarchical syntax tree for a file or range, including node kinds and positions. Response budgets stop at the first cap and emit a TruncationNotice.

NameTypeReqDescription
endLineinteger|nullOptional: end line (1-based). When combined with startLine, returns all top-level nodes whose span overlaps [startLine, endLine] — including nodes that start before startLine or end after endLine.
filePathstringyesAbsolute path to the source file
maxDepthintegerMaximum depth of the syntax tree to return (default: 3)
maxNodesintegerCaps the total number of syntax nodes emitted. Walker stops at the first node that would exceed and emits TruncationNotice. Default 5000.
maxOutputCharsintegerLEAF-TEXT-ONLY budget: caps the total characters emitted in node.Text across all leaves. Does NOT bound structural JSON. Use maxTotalBytes for total response size. Default 65536.
maxTotalBytesintegerHard cap on estimated total JSON-serialized response size in bytes (~120 bytes per node + leaf text length). Use this to guarantee the response fits under the MCP cap. Default 65536.
startLineinteger|nullOptional: start line (1-based). When combined with endLine, returns all top-level nodes whose span overlaps [startLine, endLine] — including nodes that start before startLine or end after endLine.
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

get_test_coverage_map ~76

Alias for `test_coverage` (cross-MCP-server name compatibility — matches the python-refactor tool name). Prefer `test_coverage` directly in new code.

NameTypeReqDescription
projectNamestring|nullOptional: specific test project name
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

go_to_definition ~251

Find the definition location(s) of the symbol at a position or metadataName. Use find_implementations instead when the symbol is an interface or abstract member and you want the concrete declarations.

NameTypeReqDescription
allowElicitationbooleanDefault false (agent-first). When false, a metadataName resolving to more than one candidate returns the structured candidate list to the calling agent. When true AND the client supports form elicita…
columninteger|nullOptional: 1-based column number
filePathstring|nullOptional: absolute path to the source file
lineinteger|nullOptional: 1-based line number
metadataNamestring|nullOptional: fully qualified metadata name, e.g. Namespace.TypeName
symbolHandlestring|nullOptional: stable symbol handle returned by other semantic tools
workspaceIdstring|nullOptional: the workspace session identifier returned by workspace_load. With one workspace loaded you may omit it — the read-path middleware resolves it automatically; pass it explicitly when two or m…

No output schema declared.

No examples provided.

goto_type_definition ~142

Navigate to the type definition of a symbol (e.g., for a variable, go to its type's declaration rather than the variable's declaration)

NameTypeReqDescription
columninteger|nullOptional: 1-based column number
filePathstring|nullOptional: absolute path to the source file
lineinteger|nullOptional: 1-based line number
metadataNamestring|nullOptional: fully qualified metadata name, e.g. Namespace.TypeName
symbolHandlestring|nullOptional: stable symbol handle returned by other semantic tools
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

impact_analysis ~265

Analyze a symbol change's blast radius: references, affected declarations, and affected projects in one call. Use summary=true for broad-impact symbols to return counts only.

NameTypeReqDescription
columninteger|nullOptional: 1-based column number
declarationsLimitintegerMaximum number of affected declarations to return (default: 100)
filePathstring|nullOptional: absolute path to the source file
lineinteger|nullOptional: 1-based line number
metadataNamestring|nullOptional: fully qualified metadata name, e.g. Namespace.TypeName
referencesLimitintegerMaximum number of references to return per page (default: 100). Larger pages can blow MCP output budgets on broad-impact symbols.
referencesOffsetintegerNumber of references to skip before returning results (default: 0)
summarybooleanWhen true, drops the per-reference and per-declaration arrays and returns only the targetSymbol, affectedProjects list, totals, and hasMore flags. Default false preserves the v1.18.x shape.
symbolHandlestring|nullOptional: stable symbol handle returned by other semantic tools
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

list_analyzers ~119

List loaded Roslyn analyzers and their rules — which diagnostic IDs are available for code_fix_preview or fix_all_preview. offset/limit paginate the flattened rule list, not whole analyzers.

NameTypeReqDescription
limitintegerMaximum number of analyzer rules to return (default: 100)
offsetintegerNumber of analyzer rules to skip before returning results (default: 0)
projectNamestring|nullOptional: filter by project name
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

member_hierarchy ~145

Summarize a member's base chain, true `override` members, and sibling interface implementations — the superset of find_overrides and find_base_members.

NameTypeReqDescription
columninteger|nullOptional: 1-based column number
filePathstring|nullOptional: absolute path to the source file
lineinteger|nullOptional: 1-based line number
metadataNamestring|nullOptional: fully qualified metadata name, e.g. Namespace.TypeName
symbolHandlestring|nullOptional: stable symbol handle returned by other semantic tools
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

migrate_package_preview ~78

Preview migrating one package dependency to another across all affected projects in the loaded workspace.

NameTypeReqDescription
newPackageIdstringyesReplacement package id
newVersionstringyesReplacement package version
oldPackageIdstringyesExisting package id to replace
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

move_file_apply ~35

Apply a previously previewed file move using its preview token.

NameTypeReqDescription
previewTokenstringyesPreview token from move_file_preview.

No output schema declared.

No examples provided.

move_file_preview ~119

Preview moving an existing source file, optionally updating its namespace to match the destination folder.

NameTypeReqDescription
destinationProjectNamestring|nullOptional: destination project name or project file path; defaults to the source project
sourceFilePathstringyesAbsolute path to the source file.
targetFilePathstringyesAbsolute path to the destination file.
updateNamespacebooleanWhen true, updates the namespace declaration in the moved file to match the destination folder
workspaceIdstringyesWorkspace session id from workspace_load.

No output schema declared.

No examples provided.

move_type_to_file_apply ~39

Apply a previously previewed move-type-to-file refactoring

NameTypeReqDescription
previewTokenstringyesPreview token from move_type_to_file_preview.

No output schema declared.

No examples provided.

move_type_to_file_preview ~126

Preview moving a declaration from a multi-type source file into its own file in the same project. The source must contain at least two top-level types; use move_file_preview for single-type moves.

NameTypeReqDescription
sourceFilePathstringyesAbsolute path to the source file containing the type.
targetFilePathstring|nullOptional: target file path. If omitted, defaults to {TypeName}.cs in the same directory
typeNamestringyesName of the type to move
workspaceIdstringyesWorkspace session id from workspace_load.

No output schema declared.

No examples provided.

move_type_to_project_preview ~156

Preview moving a C# type declaration into another project.

NameTypeReqDescription
preserveNamespacebooleanWhen true, keep the type's current namespace if targetNamespace is null (legacy). When false (default), use targetNamespace or the target project's default namespace.
sourceFilePathstringyesAbsolute path to the source file containing the type.
targetNamespacestring|nullOptional: explicit namespace for the moved type. When null and preserveNamespace is false, uses the target project's default namespace.
targetProjectNamestringyesTarget project name or project file path
typeNamestringyesName of the type declaration to move
workspaceIdstringyesWorkspace session id from workspace_load.

No output schema declared.

No examples provided.

nuget_vulnerability_scan ~109

Scan NuGet references for known CVEs via `dotnet list package`. Default includeTransitive=false returns direct references only; pass true for transitive coverage. Requires .NET 8+ SDK.

NameTypeReqDescription
includeTransitivebooleanInclude transitive (indirect) dependencies in the scan. Default: false
projectNamestring|nullOptional: restrict scan to a specific project name
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

organize_usings_apply ~39

Apply a previously previewed organize usings operation using its preview token

NameTypeReqDescription
previewTokenstringyesPreview token from organize_usings_preview.

No output schema declared.

No examples provided.

organize_usings_preview ~54

Preview organizing using directives in a file: removes unused usings and sorts them

NameTypeReqDescription
filePathstringyesAbsolute path to the source file.
workspaceIdstringyesWorkspace session id from workspace_load.

No output schema declared.

No examples provided.

Common questions

What is the io.github.darylmcd/roslyn-mcp server?

io.github.darylmcd/roslyn-mcp is listed in the public MCP registry as io.github.darylmcd/roslyn-mcp. Local-first MCP server for semantic C# analysis & refactoring via Roslyn & MSBuildWorkspace. This page covers its NuGet package (Darylmcd.RoslynMcp).

Is the io.github.darylmcd/roslyn-mcp server safe to use?

io.github.darylmcd/roslyn-mcp scores 85 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. 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 io.github.darylmcd/roslyn-mcp server expose?

io.github.darylmcd/roslyn-mcp exposes 174 tools: add_central_package_version_preview, add_package_reference_preview, add_pragma_suppression, add_project_reference_preview, add_target_framework_preview, and 169 more. Their descriptions and schemas cost roughly 24,032 tokens of context every time the server is loaded.

Is the io.github.darylmcd/roslyn-mcp server still maintained?

io.github.darylmcd/roslyn-mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 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 io.github.darylmcd/roslyn-mcp server under?

io.github.darylmcd/roslyn-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.