io.github.darylmcd/roslyn-mcp
NUGET · DARYLMCD.ROSLYNMCP · SCANNED SEP 20
Local-first MCP server for semantic C# analysis & refactoring via Roslyn & MSBuildWorkspace.
Available components
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
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
claude mcp add darylmcd-roslyn-mcp -- dnx Darylmcd.RoslynMcp@4.2.1 --yes
{
"mcpServers": {
"darylmcd-roslyn-mcp": {
"command": "dnx",
"args": [
"Darylmcd.RoslynMcp@4.2.1",
"--yes"
]
}
}
} {
"servers": {
"darylmcd-roslyn-mcp": {
"command": "dnx",
"args": [
"Darylmcd.RoslynMcp@4.2.1",
"--yes"
]
}
}
} codex mcp add darylmcd-roslyn-mcp -- dnx Darylmcd.RoslynMcp@4.2.1 --yes
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"darylmcd-roslyn-mcp": {
"type": "local",
"command": [
"dnx",
"Darylmcd.RoslynMcp@4.2.1",
"--yes"
],
"enabled": true
}
}
} mcp_servers:
darylmcd-roslyn-mcp:
command: "dnx"
args: ["Darylmcd.RoslynMcp@4.2.1", "--yes"] {
"McpServers": {
"darylmcd-roslyn-mcp": {
"Transport": "stdio",
"Command": "dnx",
"Arguments": [
"Darylmcd.RoslynMcp@4.2.1",
"--yes"
]
}
}
} {
"mcpServers": {
"darylmcd-roslyn-mcp": {
"command": "dnx",
"args": [
"Darylmcd.RoslynMcp@4.2.1",
"--yes"
]
}
}
} 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.
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 →
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 →
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.
| Name | Type | Req | Description |
|---|---|---|---|
| excludeMcpToolWrappers | boolean | – | When true (default), skip [McpServerTool]-attributed methods whose body is a single delegation, since MCP requires one wrapper shim per tool name. |
| limit | integer | – | Maximum number of groups to return (default: 50). |
| minLines | integer | – | Minimum body line count for a method to be considered (default: 10). Lower values produce more false-positive clusters. |
| projectFilter | string|null | – | Optional: filter by project name to scope the scan on large solutions. |
| similarityThreshold | number | – | Structural 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… |
| summary | boolean | – | When 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… |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| column | integer|null | – | Optional: 1-based column number — must point at the symbol name token |
| filePath | string|null | – | Optional: absolute path to the source file |
| includeGeneratedPartials | boolean | – | When true, emit every partial-declaration location (including generator-emitted .g.cs files). Default false dedupes to user-authored partials. |
| line | integer|null | – | Optional: 1-based line number |
| metadataName | string|null | – | Optional: fully qualified metadata name, e.g. Namespace.IMyInterface |
| symbolHandle | string|null | – | Optional: stable symbol handle returned by other semantic tools |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| includeInherited | boolean | – | Optional: 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… |
| memberName | string | yes | Bare 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… |
| projectName | string|null | – | Optional: restrict type resolution to one project by name (case-sensitive), for multi-targeted solutions where the same type could differ across TFMs. |
| typeMetadataName | string | yes | Fully qualified metadata name of the containing type, e.g. 'System.Math' or 'System.Collections.Generic.List`1' (backtick arity for generics). |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| column | integer|null | – | Optional: 1-based column number |
| filePath | string|null | – | Optional: absolute path to the source file |
| line | integer|null | – | Optional: 1-based line number |
| metadataName | string|null | – | Optional: fully qualified metadata name, e.g. Namespace.TypeName |
| symbolHandle | string|null | – | Optional: stable symbol handle returned by other semantic tools |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| column | integer|null | – | Optional: 1-based column number |
| filePath | string|null | – | Optional: absolute path to the source file containing the property |
| line | integer|null | – | Optional: 1-based line number |
| metadataName | string|null | – | Optional: fully qualified metadata name, e.g. Namespace.TypeName |
| symbolHandle | string|null | – | Optional: stable symbol handle returned by other semantic tools |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| allowElicitation | boolean | – | Default 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… |
| column | integer|null | – | Optional: 1-based column number |
| filePath | string|null | – | Optional: absolute path to the source file |
| limit | integer | – | Maximum number of references to return (default: 100) |
| line | integer|null | – | Optional: 1-based line number |
| metadataName | string|null | – | Optional: fully qualified metadata name, e.g. Namespace.TypeName |
| offset | integer | – | Number of references to skip before returning results (default: 0) |
| projectFilter | string|null | – | Optional: 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. |
| summary | boolean | – | When 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. |
| symbolHandle | string|null | – | Optional: stable symbol handle returned by other semantic tools |
| workspaceId | string|null | – | Optional: 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.
| Name | Type | Req | Description |
|---|---|---|---|
| includeDefinition | boolean | – | Include the definition location in each result (default: false) |
| maxItemsPerSymbol | integer | – | Maximum 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… |
| summary | boolean | – | When 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… |
| symbols | array | yes | Array of locator objects (max 50). Example shape: symbols: [ { metadataName: "SampleLib.IAnimal" }, { filePath: "C:/src/x.cs", line: 10, column: 5 } ] |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of usages to return per call (default: 200); primary payload cap. |
| offset | integer | – | Number of usages to skip before returning results (default: 0). |
| projectName | string|null | – | Optional: filter by project name |
| summary | boolean | – | When true, return only per-UsageKind aggregate counts (no item arrays). 10-100x smaller payload on reflection-heavy solutions. |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| column | integer|null | – | Optional: 1-based column number |
| filePath | string|null | – | Optional: absolute path to the source file |
| line | integer|null | – | Optional: 1-based line number |
| metadataName | string|null | – | Optional: fully qualified metadata name, e.g. Namespace.TypeName |
| symbolHandle | string|null | – | Optional: stable symbol handle returned by other semantic tools |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of file rollup entries to return (default: 100) |
| typeName | string | yes | Type name to resolve. Accepts a fully qualified metadata name (e.g. 'Namespace.TypeName' or 'List`1') or a short type name when unambiguous. |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| column | integer|null | – | Optional: 1-based column number |
| filePath | string|null | – | Optional: absolute path to the source file containing the type |
| limit | integer | – | Maximum number of mutating members to return (default: 100) |
| line | integer|null | – | Optional: 1-based line number |
| metadataName | string|null | – | Optional: fully qualified metadata name, e.g. Namespace.TypeName |
| symbolHandle | string|null | – | Optional: stable symbol handle returned by other semantic tools |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| column | integer|null | – | Optional: 1-based column number |
| filePath | string|null | – | Optional: absolute path to the source file containing the type |
| limit | integer | – | Maximum number of usages to return (default: 100) |
| line | integer|null | – | Optional: 1-based line number |
| metadataName | string|null | – | Optional: fully qualified metadata name, e.g. System.Collections.Generic.Dictionary`2 |
| offset | integer | – | Number of usages to skip before returning results (default: 0) |
| symbolHandle | string|null | – | Optional: stable symbol handle returned by other semantic tools |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| excludeConventionInvoked | boolean | – | When true (default), skip symbols matching convention-invoked shapes — EF ModelSnapshot, xUnit/MSTest/NUnit fixtures, ASP.NET middleware (Invoke/InvokeAsync(HttpContext)), SignalR Hubs, FluentValidat… |
| excludeEnums | boolean | – | When true, skip enum members (often referenced indirectly). |
| excludeRecordProperties | boolean | – | When true, skip properties declared on record types (often DTO/serialization shaped). |
| excludeTestProjects | boolean | – | When true, skip projects whose names look like test projects (*.Tests, *Tests). |
| excludeTests | boolean | – | When true, skip symbols in test fixture types (xUnit/NUnit/MSTest-shaped names and attributes). |
| includePublic | boolean | – | Include public symbols in the search (default: false, since public APIs may be consumed externally) |
| limit | integer | – | Maximum number of results to return (default: 50) |
| projectName | string|null | – | Optional: filter by project name |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| previewToken | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| diagnosticId | string | yes | Diagnostic identifier to fix everywhere, e.g. CS8019, IDE0005 |
| filePath | string|null | – | Required when scope is 'document': absolute path to the source file |
| projectName | string|null | – | Required when scope is 'project': the project name |
| scope | string | yes | Scope of the fix: 'document', 'project', or 'solution' |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| projectName | string|null | – | Optional: restrict the check to a specific project name. Defaults to all projects. |
| workspaceId | string | yes | Workspace 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
| Name | Type | Req | Description |
|---|---|---|---|
| previewToken | string | yes | Preview 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
| Name | Type | Req | Description |
|---|---|---|---|
| filePath | string | yes | Absolute path to the source file. |
| workspaceId | string | yes | Workspace 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
| Name | Type | Req | Description |
|---|---|---|---|
| previewToken | string | yes | Preview 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
| Name | Type | Req | Description |
|---|---|---|---|
| endColumn | integer | yes | 1-based end column of the range to format |
| endLine | integer | yes | 1-based end line of the range to format |
| filePath | string | yes | Absolute path to the source file. |
| startColumn | integer | yes | 1-based start column of the range to format |
| startLine | integer | yes | 1-based start line of the range to format |
| workspaceId | string | yes | Workspace 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
| Name | Type | Req | Description |
|---|---|---|---|
| endColumn | integer|null | – | Optional: 1-based end column number for a selection range |
| endLine | integer|null | – | Optional: 1-based end line number for a selection range |
| filePath | string | yes | Absolute path to the source file |
| startColumn | integer | yes | 1-based start column number |
| startLine | integer | yes | 1-based start line number |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| excludeTestProjects | boolean | – | When true, exclude MSBuild test projects (IsTestProject / test framework packages) from analysis |
| excludeTests | boolean | – | When true, exclude test classes (names/paths suggesting tests) from results after metrics are computed |
| filePath | string|null | – | Optional: filter by source file path |
| includeInterfaces | boolean | – | When true, include interface types in results and mark them with TypeKind=Interface |
| limit | integer | – | Maximum number of results to return (default: 50) |
| minMethods | integer|null | – | Optional: minimum instance method count threshold (default: 2) |
| projectName | string|null | – | Optional: filter by project name |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| column | integer | yes | 1-based column number |
| filePath | string | yes | Absolute path to the source file |
| filterText | string|null | – | Optional: case-insensitive prefix filter applied to candidate FilterText/DisplayText (UX-007) |
| line | integer | yes | 1-based line number |
| maxItems | integer | – | Maximum number of completion items to return (default: 100, must be > 0) |
| triggerCharacter | string|null | – | Optional: 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… |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| filePath | string|null | – | Optional: filter by source file path |
| filePaths | array|null | – | Optional: 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… |
| limit | integer | – | Maximum number of results to return (default: 50) |
| minComplexity | integer|null | – | Optional: minimum cyclomatic complexity threshold (default: return all) |
| projectName | string|null | – | Optional: filter by project name |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| excludeTestProjects | boolean | – | When true, exclude MSBuild test projects (IsTestProject / test framework packages) from analysis |
| includeInterfaces | boolean | – | When true, include interface types alongside classes/structs/records |
| limit | integer | – | Maximum number of results to return (default: 100) |
| projectName | string|null | – | Optional: filter by project name (case-insensitive exact match) |
| summary | boolean | – | When true, return per-project rollup counts (typeCount, avgInstability, stableCount, balancedCount, unstableCount, isolatedCount) without per-type detail rows. 10-100x smaller payload on multi-projec… |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum 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]). |
| offset | integer | – | 0-based offset into the paginated response. Applies to the registrations list in detailed mode and to the override-chain summary page when summary=true. |
| projectName | string|null | – | Optional: filter by project name |
| showLifetimeOverrides | boolean | – | When 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… |
| summary | boolean | – | When true, return a compact aggregate shape for large DI graphs. The detailed/default response is paginated via offset/limit when false. |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| filePath | string | yes | Absolute path to the source file to inspect. |
| workspaceId | string | yes | Workspace 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.
| Name | Type | Req | Description |
|---|---|---|---|
| includedNames | array|null | – | Optional: 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… |
| projectName | string | yes | Project name as loaded in the workspace |
| propertyNameFilter | string|null | – | Optional: case-insensitive substring filter applied to property names (e.g., 'Nullable', 'Target') |
| workspaceId | string | yes | Workspace 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.
| Name | Type | Req | Description |
|---|---|---|---|
| circularOnly | boolean | – | When true, return only namespaces and edges involved in circular dependencies |
| projectName | string|null | – | Optional: filter by project name |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| summary | boolean | – | When true, returns a compact per-package summary `{packageId, version, projectCount, distinctVersionCount}` instead of the full per-project graph. Default false preserves the verbose shape. |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| column | integer | yes | 1-based column number — must point at the token whose operation you want (UX-003) |
| filePath | string | yes | Absolute path to the source file. |
| line | integer | yes | 1-based line number |
| maxDepth | integer | – | Maximum depth of the operation tree to return (default: 3) |
| workspaceId | string | yes | Workspace 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.
| Name | Type | Req | Description |
|---|---|---|---|
| parametersJson | string | – | JSON object of named parameters the prompt expects (e.g. {"workspaceId":"...","filePath":"...","line":12}). Service-typed parameters (IDiagnosticService, IWorkspaceManager, etc.) are resolved automat… |
| promptName | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| endLine | integer|null | – | Optional: 1-based last line to return (inclusive). Defaults to the last line of the file. |
| filePath | string | yes | Absolute path to the source file |
| maxChars | integer | – | Maximum characters to return (default 65536). Truncates with a marker if the requested range exceeds the cap. |
| startLine | integer|null | – | Optional: 1-based first line to return (inclusive). Defaults to 1. |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| filePath | string|null | – | Optional: absolute path to the source file |
| metadataName | string|null | – | Optional: fully qualified metadata name, e.g. Namespace.TypeName |
| symbolHandle | string|null | – | Optional: stable symbol handle returned by other semantic tools |
| workspaceId | string|null | – | Optional: 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.
| Name | Type | Req | Description |
|---|---|---|---|
| endLine | integer|null | – | Optional: 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. |
| filePath | string | yes | Absolute path to the source file |
| maxDepth | integer | – | Maximum depth of the syntax tree to return (default: 3) |
| maxNodes | integer | – | Caps the total number of syntax nodes emitted. Walker stops at the first node that would exceed and emits TruncationNotice. Default 5000. |
| maxOutputChars | integer | – | LEAF-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. |
| maxTotalBytes | integer | – | Hard 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. |
| startLine | integer|null | – | Optional: 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. |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| projectName | string|null | – | Optional: specific test project name |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| allowElicitation | boolean | – | Default 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… |
| column | integer|null | – | Optional: 1-based column number |
| filePath | string|null | – | Optional: absolute path to the source file |
| line | integer|null | – | Optional: 1-based line number |
| metadataName | string|null | – | Optional: fully qualified metadata name, e.g. Namespace.TypeName |
| symbolHandle | string|null | – | Optional: stable symbol handle returned by other semantic tools |
| workspaceId | string|null | – | Optional: 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)
| Name | Type | Req | Description |
|---|---|---|---|
| column | integer|null | – | Optional: 1-based column number |
| filePath | string|null | – | Optional: absolute path to the source file |
| line | integer|null | – | Optional: 1-based line number |
| metadataName | string|null | – | Optional: fully qualified metadata name, e.g. Namespace.TypeName |
| symbolHandle | string|null | – | Optional: stable symbol handle returned by other semantic tools |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| column | integer|null | – | Optional: 1-based column number |
| declarationsLimit | integer | – | Maximum number of affected declarations to return (default: 100) |
| filePath | string|null | – | Optional: absolute path to the source file |
| line | integer|null | – | Optional: 1-based line number |
| metadataName | string|null | – | Optional: fully qualified metadata name, e.g. Namespace.TypeName |
| referencesLimit | integer | – | Maximum number of references to return per page (default: 100). Larger pages can blow MCP output budgets on broad-impact symbols. |
| referencesOffset | integer | – | Number of references to skip before returning results (default: 0) |
| summary | boolean | – | When 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. |
| symbolHandle | string|null | – | Optional: stable symbol handle returned by other semantic tools |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of analyzer rules to return (default: 100) |
| offset | integer | – | Number of analyzer rules to skip before returning results (default: 0) |
| projectName | string|null | – | Optional: filter by project name |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| column | integer|null | – | Optional: 1-based column number |
| filePath | string|null | – | Optional: absolute path to the source file |
| line | integer|null | – | Optional: 1-based line number |
| metadataName | string|null | – | Optional: fully qualified metadata name, e.g. Namespace.TypeName |
| symbolHandle | string|null | – | Optional: stable symbol handle returned by other semantic tools |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| newPackageId | string | yes | Replacement package id |
| newVersion | string | yes | Replacement package version |
| oldPackageId | string | yes | Existing package id to replace |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| previewToken | string | yes | Preview 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.
| Name | Type | Req | Description |
|---|---|---|---|
| destinationProjectName | string|null | – | Optional: destination project name or project file path; defaults to the source project |
| sourceFilePath | string | yes | Absolute path to the source file. |
| targetFilePath | string | yes | Absolute path to the destination file. |
| updateNamespace | boolean | – | When true, updates the namespace declaration in the moved file to match the destination folder |
| workspaceId | string | yes | Workspace 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
| Name | Type | Req | Description |
|---|---|---|---|
| previewToken | string | yes | Preview 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.
| Name | Type | Req | Description |
|---|---|---|---|
| sourceFilePath | string | yes | Absolute path to the source file containing the type. |
| targetFilePath | string|null | – | Optional: target file path. If omitted, defaults to {TypeName}.cs in the same directory |
| typeName | string | yes | Name of the type to move |
| workspaceId | string | yes | Workspace 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.
| Name | Type | Req | Description |
|---|---|---|---|
| preserveNamespace | boolean | – | When true, keep the type's current namespace if targetNamespace is null (legacy). When false (default), use targetNamespace or the target project's default namespace. |
| sourceFilePath | string | yes | Absolute path to the source file containing the type. |
| targetNamespace | string|null | – | Optional: explicit namespace for the moved type. When null and preserveNamespace is false, uses the target project's default namespace. |
| targetProjectName | string | yes | Target project name or project file path |
| typeName | string | yes | Name of the type declaration to move |
| workspaceId | string | yes | Workspace 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.
| Name | Type | Req | Description |
|---|---|---|---|
| includeTransitive | boolean | – | Include transitive (indirect) dependencies in the scan. Default: false |
| projectName | string|null | – | Optional: restrict scan to a specific project name |
| workspaceId | string | yes | The 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
| Name | Type | Req | Description |
|---|---|---|---|
| previewToken | string | yes | Preview 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
| Name | Type | Req | Description |
|---|---|---|---|
| filePath | string | yes | Absolute path to the source file. |
| workspaceId | string | yes | Workspace session id from workspace_load. |
No output schema declared.
No examples provided.
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.