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
parameter_object_preview ~373

Preview grouping method parameters into a record and rewriting every callsite. Refuses with a reason rather than partially proceeding; redeem the preview token through apply_with_verify.

NameTypeReqDescription
columninteger|nullOptional: 1-based column number of the method declaration
dtoFoldersarray|nullOptional folder segments under the project root for the new record file. Pass as a native JSON array, not a JSON-encoded string. Example: ["Models", "Requests"]. Defaults to folders derived from the…
dtoNamespacestring|nullOptional namespace for the new record. Defaults to the method's containing namespace.
dtoProjectNamestring|nullOptional override project for the new record. Defaults to the method's project. When different, every caller project must already reference it (no auto-add of <ProjectReference> in v1).
filePathstring|nullOptional: absolute path to the source file containing the method declaration
lineinteger|nullOptional: 1-based line number of the method declaration
metadataNamestring|nullOptional: bare fully-qualified method name without parentheses (e.g. 'Foo.Bar.Baz').
newTypeNamestringyesPascalCase name of the new record type (e.g. 'OrderRequest').
parameterNamestring|nullOptional name for the new single record-typed parameter on the rewritten method. Defaults to the camelCased newTypeName.
parameterNamesarrayyesNames of method parameters to group, in the order they should appear on the new record's primary constructor. Must contain at least two entries.
symbolHandlestring|nullOptional: stable symbol handle returned by other semantic tools
workspaceIdstringyesWorkspace session id from workspace_load.

No output schema declared.

No examples provided.

pragma_scope_widen ~131

Extend a matching '#pragma warning restore &lt;id&gt;' to cover an uncovered fire site. Refuses when the move would cross a #region/#endregion boundary or nest into another disable for the same id.

NameTypeReqDescription
diagnosticIdstringyesDiagnostic id whose 'restore' is being moved (e.g. CA2025)
filePathstringyesAbsolute path to the source file
lineintegeryes1-based line number that must be covered after the widen (the diagnostic fire site)
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

preview_code_action ~156

Preview the changes that a specific code action would make. Use get_code_actions first to get the available actions and their indices.

NameTypeReqDescription
actionIndexintegeryesThe index of the code action to preview (from get_code_actions result)
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.

preview_multi_file_edit ~143

Preview text edits to multiple files against a single Solution snapshot; returns per-file diffs plus a token redeemed via preview_multi_file_edit_apply.

NameTypeReqDescription
fileEditsarrayyesArray of file edits. Each has filePath (string) and edits (array of TextEditDto with startLine, startColumn, endLine, endColumn, newText)
skipSyntaxCheckbooleanWhen false (default), each C# file is parsed after edits; all non-hidden parse diagnostics and parser-recovered skipped text reject the preview. Set true only for intentional intermediate states.
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

preview_multi_file_edit_apply ~49

Apply a previously previewed multi-file edit. Rejects stale tokens if the workspace has changed since preview.

NameTypeReqDescription
previewTokenstringyesThe preview token returned by preview_multi_file_edit

No output schema declared.

No examples provided.

preview_record_field_addition ~188

Pre-flight audit for adding a positional field to a record: construction, deconstruction, property-pattern, and `with`-expression sites. Catches breaking shapes the C# compiler does NOT flag.

NameTypeReqDescription
defaultValuestring|nullOptional default-value expression to splice into rewritten construction sites (e.g. 'false', 'Guid.Empty'). When null, rewrites use a /* TODO */ placeholder.
newFieldNamestringyesThe proposed new positional field name (PascalCase, valid C# identifier)
newFieldTypestringyesThe proposed new field type display string (e.g. 'bool', 'System.Guid', 'string?')
recordMetadataNamestringyesFully qualified metadata name of the target record (e.g. 'SampleLib.MyRecord')
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

probe_position ~91

Return raw lexical and containing-symbol state at a source position without adjacent-identifier fallback; a whitespace caret reports Whitespace. Useful for test fixtures.

NameTypeReqDescription
columnintegeryes1-based column number
filePathstringyesAbsolute path to the source file
lineintegeryes1-based line number
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

project_diagnostics ~229

Get workspace diagnostics: compiler CS*, analyzers CA*/IDE*, and load issues. Unlike compile_check, which is CS-only, this includes analyzer and workspace results.

NameTypeReqDescription
diagnosticIdstring|nullOptional: filter to a specific diagnostic ID (e.g., CS8019, CA1000)
filestring|nullOptional: filter by file path
limitintegerMaximum diagnostics to return per call (default: 200); primary payload cap.
offsetintegerNumber of diagnostics to skip before returning results (default: 0)
projectNamestring|nullOptional: filter by project name
severitystring|nullMinimum severity (Error, Warning, Info, Hidden); default Info. total* fields ignore severity/diagnosticId filters; filteredDiagnostics counts matches before pagination.
summarybooleanWhen true, return counts grouped by diagnostic ID, severity, and category (no individual diagnostics). 10-100x smaller payload.
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

project_graph ~37

Get the project dependency graph and project metadata for a loaded workspace

NameTypeReqDescription
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

recommend_workflow ~141

Recommend a compact first-hop workflow for a task. Returns primaryTools, followUpTools, avoid, why, and requiredWorkspaceState so agents pick focused Roslyn tools without reading the full catalog.

NameTypeReqDescription
filePathstring|nullOptional absolute file path relevant to the task.
intentstring|nullOptional explicit intent label when the task text is ambiguous.
symbolstring|nullOptional symbol name, metadata name, or handle relevant to the task.
taskstringyesNatural-language task, e.g. 'find callers', 'outline this file', 'compile sanity', 'run related tests', or 'rename this symbol'.

No output schema declared.

No examples provided.

record_field_add_with_satellites_preview ~140

Composite preview proposing satellite edits (Clone/Snapshot/With) when a type gains a field. Requires ≥2 sibling fields with identical satellite coverage, else empty with `patternDetectionReason`.

NameTypeReqDescription
newFieldNamestringyesThe new field name (valid C# identifier)
newFieldTypestringyesThe new field type display string (e.g. 'int', 'string', 'System.Guid')
typeMetadataNamestringyesFully qualified metadata name of the target record/class (e.g. 'SampleLib.Counters')
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

remove_central_package_version_preview ~61

Preview removing a PackageVersion entry from Directory.Packages.props.

NameTypeReqDescription
packageIdstringyesNuGet package id to remove from Directory.Packages.props
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

remove_dead_code_apply ~37

Apply a previously previewed dead-code removal operation.

NameTypeReqDescription
previewTokenstringyesThe preview token returned by remove_dead_code_preview

No output schema declared.

No examples provided.

remove_dead_code_preview ~111

Preview removing unused symbols by handle, preserving exterior trivia. removeEmptyFiles deletes files only when no real declarations remain (UX-005).

NameTypeReqDescription
removeEmptyFilesbooleanWhen true, delete files whose remaining content is purely trivia or empty namespace shells after the removal (UX-005). False keeps the file and instead emits a warning
symbolHandlesarrayyesArray of stable symbol handles returned by semantic tools
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

remove_interface_member_preview ~112

Preview removal of a dead interface method, property, or event and every implementation. Refuses if a non-implementation caller exists; redeem via remove_dead_code_apply.

NameTypeReqDescription
interfaceMemberHandlestringyesSymbol handle from symbol_search/find_unused_symbols/etc. pointing at an interface method, property, or event.
removeEmptyFilesbooleanWhen true, also delete files left empty after the removal (default: false).
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

remove_package_reference_preview ~68

Preview removing a PackageReference from a project file.

NameTypeReqDescription
packageIdstringyesNuGet package id to remove
projectNamestringyesProject name or project file path within the loaded workspace
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

remove_project_reference_preview ~71

Preview removing a ProjectReference from a project file.

NameTypeReqDescription
projectNamestringyesProject name or project file path within the loaded workspace
referencedProjectNamestringyesReferenced project name or project file path
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

remove_target_framework_preview ~75

Preview removing a target framework from a project file.

NameTypeReqDescription
projectNamestringyesProject name or project file path within the loaded workspace
targetFrameworkstringyesTarget framework moniker to remove, for example net8.0
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

rename_apply ~44

Apply a previously previewed rename refactoring using its preview token. Rejects stale tokens if the workspace has changed.

NameTypeReqDescription
previewTokenstringyesPreview token from rename_preview.

No output schema declared.

No examples provided.

rename_preview ~235

Preview a workspace-wide symbol rename and its affected edits. Prefer symbolHandle for precise targeting; set summary=true for high-fan-out symbols (>150 references) to fit the MCP output cap.

NameTypeReqDescription
columninteger|nullOptional: 1-based column number of the symbol to rename
filePathstring|nullOptional: absolute path to the source file containing the symbol
lineinteger|nullOptional: 1-based line number of the symbol to rename
metadataNamestring|nullOptional: fully qualified metadata name, e.g. Namespace.TypeName
newNamestringyesThe new name for the symbol
summarybooleanWhen true, replace per-file unified diffs with compact one-line summaries. The stored preview still carries every real edit, so rename_apply rewrites all references correctly. Use for high-fan-out sy…
symbolHandlestring|nullOptional: stable symbol handle returned by other semantic tools
workspaceIdstringyesWorkspace session id from workspace_load.

No output schema declared.

No examples provided.

replace_invocation_preview ~165

Preview rewriting every oldMethod call to newMethod by matching parameter names and reordering arguments. Redeem the returned token with bulk_replace_type_apply.

NameTypeReqDescription
newMethodstringyesFully-qualified signature of the replacement method: 'Namespace.Type.NewMethod(ParamTypeA, ParamTypeB)'. Parameter names (matched against oldMethod's) drive the argument reorder.
oldMethodstringyesFully-qualified signature of the method being replaced: 'Namespace.Type.OldMethod(ParamType1, ParamType2)'. Parameter-type list disambiguates overloads.
scopestring|nullOptional: scope filter — reserved for future use (currently only 'all' is supported).
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

replace_string_literals_preview ~143

Preview replacing argument or initializer string literals with constant or identifier expressions for magic-string centralization; redeem via preview_multi_file_edit_apply.

NameTypeReqDescription
filePathstring|nullOptional: restrict scope to this file path
projectNamestring|nullOptional: restrict scope to this project (name or file path)
replacementsarrayyesReplacement pairs. Each has literalValue (the exact string literal to find, without quotes), replacementExpression (the C# expression text to substitute, e.g. 'Constants.MyValue'), and optional using…
workspaceIdstringyesWorkspace session id from workspace_load.

No output schema declared.

No examples provided.

restructure_preview ~172

Preview a syntax-tree pattern-based C# find-and-replace. __name__ placeholders capture and splice subexpressions; redeem the result through preview_multi_file_edit_apply.

NameTypeReqDescription
filePathstring|nullOptional: restrict scope to this file path
goalstringyesThe replacement goal. Must be the same syntactic kind as pattern. Placeholders are substituted (e.g., 'return new { count = __items__.Length, items = __items__ };')
patternstringyesThe pattern to match. C# expression or statement, with __name__ placeholders (e.g., 'return __items__;')
projectNamestring|nullOptional: restrict scope to this project (name or file path)
workspaceIdstringyesWorkspace session id from workspace_load.

No output schema declared.

No examples provided.

revert_apply_by_sequence ~78

Revert a specific earlier solution-snapshot apply by its workspace_changes sequence number. Refuses when a later apply touched the same file; revert blocking sequences first.

NameTypeReqDescription
sequenceNumberintegeryesThe sequence number reported by workspace_changes for the apply you want to revert
workspaceIdstringyesWorkspace session id from workspace_load.

No output schema declared.

No examples provided.

revert_last_apply ~64

SINGLE-SLOT LIFO: reverts only the latest apply; a second call reports 'No operation to revert'. For earlier workspace_changes entries, use revert_apply_by_sequence. Does not remove created files.

NameTypeReqDescription
workspaceIdstringyesWorkspace session id from workspace_load.

No output schema declared.

No examples provided.

scaffold_first_test_file_preview ~169

Preview scaffolding the FIRST <Service>Tests.cs fixture for a service. Errors when the destination file already exists — use scaffold_test_preview for follow-on tests.

NameTypeReqDescription
serviceMetadataNamestringyesFully-qualified type name of the production service (e.g. RoslynMcp.Roslyn.Services.RestructureService)
testFrameworkstringTest framework: mstest, xunit, nunit, or auto (infer from PackageReference in the test csproj)
testProjectNamestring|nullOptional: name or absolute path of the destination test project. When omitted, the scaffolder picks the unique project that references the service's containing project AND whose name ends in '.Tests'.
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

scaffold_test_apply ~35

Apply a previously previewed test scaffolding operation.

NameTypeReqDescription
previewTokenstringyesThe preview token returned by scaffold_test_preview

No output schema declared.

No examples provided.

scaffold_test_batch_preview ~125

Preview scaffolding test files for multiple target types in one composite preview; apply via apply_composite_preview.

NameTypeReqDescription
targetsarrayyesArray of targets. Each item: { targetTypeName: string, targetMethodName?: string }
testFrameworkstringTest framework: mstest, xunit, nunit, or auto (default — inferred from the test project's PackageReferences)
testProjectNamestringyesTest project name or project file path within the loaded workspace
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

scaffold_test_preview ~268

Preview scaffolding a new test file for a target type; MSTest/xUnit/NUnit auto-detected and a sibling fixture's conventions replicated.

NameTypeReqDescription
referenceTestFilestring|nullOptional: absolute path to an existing sibling test file whose scaffolding (class attributes, base class, IClassFixture<T> constructor) should be replicated. When omitted, the most-recently-modified…
targetMethodNamestring|nullOptional: target method name for the generated test stub
targetTypeNamestringyesTarget type name for the generated test
testFrameworkstringTest framework: mstest, xunit, nunit, or auto (infer from PackageReference in the test csproj)
testProjectNamestringyesTest project name or project file path within the loaded workspace
useSamplingbooleanWhen true on a 2026-07-28 request with MRTR sampling input support, request a sampled Given/When/Then test method name from the MCP client. Legacy and sampling-unsupported requests use the determinis…
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

scaffold_type_apply ~35

Apply a previously previewed type scaffolding operation.

NameTypeReqDescription
previewTokenstringyesThe preview token returned by scaffold_type_preview

No output schema declared.

No examples provided.

scaffold_type_preview ~206

Preview scaffolding a new type file in a project; interface members are stubbed unless implementInterface is false.

NameTypeReqDescription
baseTypestring|nullOptional: base type name
implementInterfacebooleanWhen true (default), auto-implement interface members of baseType/interfaces as NotImplementedException stubs; set false to emit an empty class body
interfacesarray|nullOptional: additional interface names to declare on the scaffolded type. Pass as a native JSON array, not a JSON-encoded string. Example: ["IDisposable", "IMyService"].
namespacestring|nullOptional: namespace override
projectNamestringyesProject name or project file path within the loaded workspace
typeKindstringType kind: class, interface, record, or enum
typeNamestringyesType name to create
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

security_analyzer_status ~52

Check whether security analyzer packages are present in the workspace. Returns which analyzers are installed and recommends missing packages for improved security coverage.

NameTypeReqDescription
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

security_diagnostics ~83

Get security-relevant diagnostics with OWASP categorization, severity classification, and fix hints. Filters the existing diagnostic pipeline to return only security findings.

NameTypeReqDescription
filestring|nullOptional: filter by file path
projectNamestring|nullOptional: filter by project name
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

semantic_grep ~188

Token-aware .NET regex search of C# identifiers, strings, comments, or all, not ripgrep. Identifier scope splits member access, so Task\.Run cannot match.

NameTypeReqDescription
limitintegerPage size — maximum hits to return per call (default 500). Hits beyond the 500-hit collection ceiling are dropped; narrow pattern or projectName if hasMore stays true at offset=500.
offsetintegerNumber of hits to skip before returning results (default: 0).
patternstringyes.NET regex pattern to match against token text.
projectNamestring|nullOptional: case-sensitive Project.Name filter to scope the walk.
scopestringToken-kind scope: 'identifiers' | 'strings' | 'comments' | 'all'.
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

semantic_search ~114

Search symbols with structured Roslyn predicates parsed from natural language, not embeddings or vector search. The async predicate requires the literal async modifier.

NameTypeReqDescription
limitintegerMaximum number of results to return (default: 50)
projectNamestring|nullOptional: filter by project name
querystringyesSemantic search query, e.g. 'async methods returning Task<bool>', 'classes implementing IDisposable', 'public static methods'
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

server_heartbeat ~51

Connection readiness block only (state/loadedWorkspaceCount/stdioPid/serverStartedAt); cheaper than server_info. Do not poll waiting for `idle` to self-advance — a workspace_load call is required.

Input schema present but exposes no named parameters.

NameTypeReqDescription
connectionobjectyes

No examples provided.

server_info ~48

Server version, capabilities, runtime, and workspace count plus a `connection` readiness block (state=idle|ready|degraded). workspace_list is authoritative for sessions; server_heartbeat is cheaper.

Input schema present but exposes no named parameters.

NameTypeReqDescription
capabilitiesobjectyes
catalogVersionstringyes
connectionobjectyes
osstringyes
pathBoundaryobject|nullyes
productBoundariesarrayyes
productShapestringyes
resourceServerNamesobjectyes
roslynVersionstringyes
runtimestringyes
serverstringyes
surfaceobjectyes
updateobject|nullyes
versionstringyes
workspaceCountintegeryes
workspaceCountHintstring|nullyes

No examples provided.

set_conditional_property_preview ~133

Preview setting an allowlisted property in a conditional PropertyGroup within a project file.

NameTypeReqDescription
conditionstringyesCondition expression using $(Configuration), $(TargetFramework), or $(Platform)
projectNamestringyesProject name or project file path within the loaded workspace
propertyNamestringyesAllowlisted property name (Nullable, LangVersion, ImplicitUsings, TargetFramework, DefineConstants, Optimize, DebugType, NoWarn, TreatWarningsAsErrors)
valuestringyesProperty value to set
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

set_diagnostic_severity ~142

Set dotnet_diagnostic.&lt;id&gt;.severity in .editorconfig for C# files (warning, suggestion, silent, none), scoped from a source file path.

NameTypeReqDescription
diagnosticIdstringyesDiagnostic id (e.g. CA1000, CS8602)
filePathstringyes(required) Absolute path to any C# file used to locate the applicable .editorconfig. Without this the server can't pick which .editorconfig to mutate.
severitystringyesSeverity: error, warning, suggestion, silent, or none
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

set_editorconfig_option ~127

Set a key/value in the applicable .editorconfig for a C# source file, creating one when needed. Read current options first; this direct apply is reversible through revert_last_apply.

NameTypeReqDescription
filePathstringyesAbsolute path to the C# source file whose .editorconfig should be updated.
keystringyesEditorConfig key (e.g. dotnet_diagnostic.CA1000.severity)
valuestringyesValue (e.g. warning, suggestion, silent, none)
workspaceIdstringyesWorkspace session id from workspace_load.

No output schema declared.

No examples provided.

set_project_property_preview ~107

Preview setting an allowlisted property in a project file.

NameTypeReqDescription
projectNamestringyesProject name or project file path within the loaded workspace
propertyNamestringyesAllowlisted property name (Nullable, LangVersion, ImplicitUsings, TargetFramework, DefineConstants, Optimize, DebugType, NoWarn, TreatWarningsAsErrors)
valuestringyesProperty value to set
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

source_generated_documents ~51

List source-generated documents for a workspace or specific project

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

No output schema declared.

No examples provided.

split_class_preview ~112

Preview splitting a type into a new partial class file by moving selected members.

NameTypeReqDescription
filePathstringyesAbsolute path to the source file containing the type
memberNamesarrayyesMember names to move into the new partial class file
newFileNamestringyesFile name for the new partial class file, for example Dog.Behavior.cs
typeNamestringyesType name to split
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

split_service_with_di_preview ~169

Composite preview that splits a service type into N partition implementations plus a forwarding facade, and emits DI-registration deltas, under one preview token.

NameTypeReqDescription
hostRegistrationFilestring|nullAbsolute path to the file containing the existing services.Add* registration for sourceType; pass null to scan the workspace for any matching registration.
partitionsarrayyesPartition specs: each { typeName, memberNames[] } — every MemberName must exist on sourceType and each member must belong to exactly one partition.
sourceFilePathstringyesAbsolute path to the source file containing the type to split
sourceTypestringyesName of the concrete type to split (e.g., 'Foo')
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

suggest_refactorings ~93

Return ranked workspace refactoring suggestions from complexity metrics, cohesion (LCOM4), and unused-symbol detection; each carries severity, target location, and a recommended tool sequence.

NameTypeReqDescription
limitintegerMaximum number of suggestions to return (default: 20)
projectNamestring|nullOptional: filter by project name
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

symbol_impact_sweep ~252

Sweep downstream impact of a symbol change: references, non-exhaustive switches (CS8509/CS8524/IDE0072), and mapper/converter-suffix callsites. Returns a suggested-tasks list.

NameTypeReqDescription
columninteger|nullOptional: 1-based column number
filePathstring|nullOptional: absolute path to the source file containing the symbol
lineinteger|nullOptional: 1-based line number
maxItemsPerCategoryinteger|nullOptional cap on items per category (References, MapperCallsites, SwitchExhaustivenessIssues). Use together with summary=true on extremely high-fan-out symbols.
metadataNamestring|nullOptional: fully qualified metadata name (preferred when caller knows the symbol shape)
summarybooleanWhen true, drops per-reference 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 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.

symbol_info ~192

Get detailed information for a symbol at a file position. Strict resolution returns NotFound on whitespace; use allowAdjacent=true to walk to a neighbouring token.

NameTypeReqDescription
allowAdjacentbooleanDefault false (strict). When true, the resolver walks to the preceding token when the exact-position lookup misses — restores the pre-v1.19.1 lenient behavior that could silently resolve whitespace t…
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.

symbol_refactor_preview ~102

Composite preview chaining heterogeneous refactor operations (rename, multi-file edit, structural rewrite) in order. Atomic: a failure in any step aborts the whole preview.

NameTypeReqDescription
operationsarrayyesOrdered list of operations. Each is { kind: 'rename'|'edit'|'restructure', ...kind-specific fields }. Order matters — later ops see earlier ops' rewritten state.
workspaceIdstringyesThe workspace session identifier returned by workspace_load

No output schema declared.

No examples provided.

symbol_relationships ~213

Summarize one symbol's definitions, references, implementations, base members, and overrides. A member type-token caret auto-promotes to its enclosing member.

NameTypeReqDescription
columninteger|nullOptional: 1-based column number
filePathstring|nullOptional: absolute path to the source file
limitintegerMaximum number of items to return per relationship bucket (default: 100)
lineinteger|nullOptional: 1-based line number
metadataNamestring|nullOptional: fully qualified metadata name, e.g. Namespace.TypeName
preferDeclaringMemberbooleanWhen true (default), a caret on a method's return-type token or a property's type token is auto-promoted to the enclosing member symbol. Set to false to resolve the type token literally.
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.

symbol_search ~332

Search workspace symbols by case-insensitive substring; wildcards and regex metacharacters are matched literally. Use summary=true for broad queries.

NameTypeReqDescription
allowElicitationbooleanDefault false (agent-first). When false, a query matching more than one symbol returns the full paginated candidate list to the calling agent. When true AND the client supports form elicitation, a >1…
kindstring|nullOptional: filter by symbol kind (Class, Method, Property, Field, Interface, etc.)
limitintegerMaximum number of results to return (default: 50, max: 50)
namespacestring|nullOptional: filter by namespace
offsetintegerNumber of results to skip before returning (default: 0)
projectNamestring|nullOptional: filter by project name
querystringyesSearch query — substring match (case-insensitive). Pass bare fragments, not wildcards or regex.
summarybooleanWhen true, drops expensive per-symbol fields (documentation, parameters, baseTypes, interfaces, modifiers, returnType) to keep the response small for broad queries. Locator-essential fields (name, fu…
workspaceIdstringyesThe workspace session identifier returned by 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.