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 →
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.
| Name | Type | Req | Description |
|---|---|---|---|
| column | integer|null | – | Optional: 1-based column number of the method declaration |
| dtoFolders | array|null | – | Optional 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… |
| dtoNamespace | string|null | – | Optional namespace for the new record. Defaults to the method's containing namespace. |
| dtoProjectName | string|null | – | Optional 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). |
| filePath | string|null | – | Optional: absolute path to the source file containing the method declaration |
| line | integer|null | – | Optional: 1-based line number of the method declaration |
| metadataName | string|null | – | Optional: bare fully-qualified method name without parentheses (e.g. 'Foo.Bar.Baz'). |
| newTypeName | string | yes | PascalCase name of the new record type (e.g. 'OrderRequest'). |
| parameterName | string|null | – | Optional name for the new single record-typed parameter on the rewritten method. Defaults to the camelCased newTypeName. |
| parameterNames | array | yes | Names of method parameters to group, in the order they should appear on the new record's primary constructor. Must contain at least two entries. |
| symbolHandle | string|null | – | Optional: stable symbol handle returned by other semantic tools |
| workspaceId | string | yes | Workspace session id from workspace_load. |
No output schema declared.
No examples provided.
pragma_scope_widen ~131
Extend a matching '#pragma warning restore <id>' 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.
| Name | Type | Req | Description |
|---|---|---|---|
| diagnosticId | string | yes | Diagnostic id whose 'restore' is being moved (e.g. CA2025) |
| filePath | string | yes | Absolute path to the source file |
| line | integer | yes | 1-based line number that must be covered after the widen (the diagnostic fire site) |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| actionIndex | integer | yes | The index of the code action to preview (from get_code_actions result) |
| 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.
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.
| Name | Type | Req | Description |
|---|---|---|---|
| fileEdits | array | yes | Array of file edits. Each has filePath (string) and edits (array of TextEditDto with startLine, startColumn, endLine, endColumn, newText) |
| skipSyntaxCheck | boolean | – | When 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. |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| previewToken | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| defaultValue | string|null | – | Optional default-value expression to splice into rewritten construction sites (e.g. 'false', 'Guid.Empty'). When null, rewrites use a /* TODO */ placeholder. |
| newFieldName | string | yes | The proposed new positional field name (PascalCase, valid C# identifier) |
| newFieldType | string | yes | The proposed new field type display string (e.g. 'bool', 'System.Guid', 'string?') |
| recordMetadataName | string | yes | Fully qualified metadata name of the target record (e.g. 'SampleLib.MyRecord') |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| column | integer | yes | 1-based column number |
| filePath | string | yes | Absolute path to the source file |
| line | integer | yes | 1-based line number |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| diagnosticId | string|null | – | Optional: filter to a specific diagnostic ID (e.g., CS8019, CA1000) |
| file | string|null | – | Optional: filter by file path |
| limit | integer | – | Maximum diagnostics to return per call (default: 200); primary payload cap. |
| offset | integer | – | Number of diagnostics to skip before returning results (default: 0) |
| projectName | string|null | – | Optional: filter by project name |
| severity | string|null | – | Minimum severity (Error, Warning, Info, Hidden); default Info. total* fields ignore severity/diagnosticId filters; filteredDiagnostics counts matches before pagination. |
| summary | boolean | – | When true, return counts grouped by diagnostic ID, severity, and category (no individual diagnostics). 10-100x smaller payload. |
| workspaceId | string | yes | The 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
| Name | Type | Req | Description |
|---|---|---|---|
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| filePath | string|null | – | Optional absolute file path relevant to the task. |
| intent | string|null | – | Optional explicit intent label when the task text is ambiguous. |
| symbol | string|null | – | Optional symbol name, metadata name, or handle relevant to the task. |
| task | string | yes | Natural-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`.
| Name | Type | Req | Description |
|---|---|---|---|
| newFieldName | string | yes | The new field name (valid C# identifier) |
| newFieldType | string | yes | The new field type display string (e.g. 'int', 'string', 'System.Guid') |
| typeMetadataName | string | yes | Fully qualified metadata name of the target record/class (e.g. 'SampleLib.Counters') |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| packageId | string | yes | NuGet package id to remove from Directory.Packages.props |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| previewToken | string | yes | The 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).
| Name | Type | Req | Description |
|---|---|---|---|
| removeEmptyFiles | boolean | – | When 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 |
| symbolHandles | array | yes | Array of stable symbol handles returned by semantic tools |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| interfaceMemberHandle | string | yes | Symbol handle from symbol_search/find_unused_symbols/etc. pointing at an interface method, property, or event. |
| removeEmptyFiles | boolean | – | When true, also delete files left empty after the removal (default: false). |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| packageId | string | yes | NuGet package id to remove |
| projectName | string | yes | Project name or project file path within the loaded workspace |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| projectName | string | yes | Project name or project file path within the loaded workspace |
| referencedProjectName | string | yes | Referenced project name or project file path |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| projectName | string | yes | Project name or project file path within the loaded workspace |
| targetFramework | string | yes | Target framework moniker to remove, for example net8.0 |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| previewToken | string | yes | Preview 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.
| Name | Type | Req | Description |
|---|---|---|---|
| column | integer|null | – | Optional: 1-based column number of the symbol to rename |
| filePath | string|null | – | Optional: absolute path to the source file containing the symbol |
| line | integer|null | – | Optional: 1-based line number of the symbol to rename |
| metadataName | string|null | – | Optional: fully qualified metadata name, e.g. Namespace.TypeName |
| newName | string | yes | The new name for the symbol |
| summary | boolean | – | When 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… |
| symbolHandle | string|null | – | Optional: stable symbol handle returned by other semantic tools |
| workspaceId | string | yes | Workspace 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.
| Name | Type | Req | Description |
|---|---|---|---|
| newMethod | string | yes | Fully-qualified signature of the replacement method: 'Namespace.Type.NewMethod(ParamTypeA, ParamTypeB)'. Parameter names (matched against oldMethod's) drive the argument reorder. |
| oldMethod | string | yes | Fully-qualified signature of the method being replaced: 'Namespace.Type.OldMethod(ParamType1, ParamType2)'. Parameter-type list disambiguates overloads. |
| scope | string|null | – | Optional: scope filter — reserved for future use (currently only 'all' is supported). |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| filePath | string|null | – | Optional: restrict scope to this file path |
| projectName | string|null | – | Optional: restrict scope to this project (name or file path) |
| replacements | array | yes | Replacement 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… |
| workspaceId | string | yes | Workspace 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.
| Name | Type | Req | Description |
|---|---|---|---|
| filePath | string|null | – | Optional: restrict scope to this file path |
| goal | string | yes | The replacement goal. Must be the same syntactic kind as pattern. Placeholders are substituted (e.g., 'return new { count = __items__.Length, items = __items__ };') |
| pattern | string | yes | The pattern to match. C# expression or statement, with __name__ placeholders (e.g., 'return __items__;') |
| projectName | string|null | – | Optional: restrict scope to this project (name or file path) |
| workspaceId | string | yes | Workspace 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.
| Name | Type | Req | Description |
|---|---|---|---|
| sequenceNumber | integer | yes | The sequence number reported by workspace_changes for the apply you want to revert |
| workspaceId | string | yes | Workspace 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.
| Name | Type | Req | Description |
|---|---|---|---|
| workspaceId | string | yes | Workspace 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.
| Name | Type | Req | Description |
|---|---|---|---|
| serviceMetadataName | string | yes | Fully-qualified type name of the production service (e.g. RoslynMcp.Roslyn.Services.RestructureService) |
| testFramework | string | – | Test framework: mstest, xunit, nunit, or auto (infer from PackageReference in the test csproj) |
| testProjectName | string|null | – | Optional: 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'. |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| previewToken | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| targets | array | yes | Array of targets. Each item: { targetTypeName: string, targetMethodName?: string } |
| testFramework | string | – | Test framework: mstest, xunit, nunit, or auto (default — inferred from the test project's PackageReferences) |
| testProjectName | string | yes | Test project name or project file path within the loaded workspace |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| referenceTestFile | string|null | – | Optional: 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… |
| targetMethodName | string|null | – | Optional: target method name for the generated test stub |
| targetTypeName | string | yes | Target type name for the generated test |
| testFramework | string | – | Test framework: mstest, xunit, nunit, or auto (infer from PackageReference in the test csproj) |
| testProjectName | string | yes | Test project name or project file path within the loaded workspace |
| useSampling | boolean | – | When 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… |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| previewToken | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| baseType | string|null | – | Optional: base type name |
| implementInterface | boolean | – | When true (default), auto-implement interface members of baseType/interfaces as NotImplementedException stubs; set false to emit an empty class body |
| interfaces | array|null | – | Optional: additional interface names to declare on the scaffolded type. Pass as a native JSON array, not a JSON-encoded string. Example: ["IDisposable", "IMyService"]. |
| namespace | string|null | – | Optional: namespace override |
| projectName | string | yes | Project name or project file path within the loaded workspace |
| typeKind | string | – | Type kind: class, interface, record, or enum |
| typeName | string | yes | Type name to create |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| file | string|null | – | Optional: filter by file path |
| 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.
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Page 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. |
| offset | integer | – | Number of hits to skip before returning results (default: 0). |
| pattern | string | yes | .NET regex pattern to match against token text. |
| projectName | string|null | – | Optional: case-sensitive Project.Name filter to scope the walk. |
| scope | string | – | Token-kind scope: 'identifiers' | 'strings' | 'comments' | 'all'. |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of results to return (default: 50) |
| projectName | string|null | – | Optional: filter by project name |
| query | string | yes | Semantic search query, e.g. 'async methods returning Task<bool>', 'classes implementing IDisposable', 'public static methods' |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| connection | object | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| capabilities | object | yes | – |
| catalogVersion | string | yes | – |
| connection | object | yes | – |
| os | string | yes | – |
| pathBoundary | object|null | yes | – |
| productBoundaries | array | yes | – |
| productShape | string | yes | – |
| resourceServerNames | object | yes | – |
| roslynVersion | string | yes | – |
| runtime | string | yes | – |
| server | string | yes | – |
| surface | object | yes | – |
| update | object|null | yes | – |
| version | string | yes | – |
| workspaceCount | integer | yes | – |
| workspaceCountHint | string|null | yes | – |
No examples provided.
set_conditional_property_preview ~133
Preview setting an allowlisted property in a conditional PropertyGroup within a project file.
| Name | Type | Req | Description |
|---|---|---|---|
| condition | string | yes | Condition expression using $(Configuration), $(TargetFramework), or $(Platform) |
| projectName | string | yes | Project name or project file path within the loaded workspace |
| propertyName | string | yes | Allowlisted property name (Nullable, LangVersion, ImplicitUsings, TargetFramework, DefineConstants, Optimize, DebugType, NoWarn, TreatWarningsAsErrors) |
| value | string | yes | Property value to set |
| workspaceId | string | yes | The workspace session identifier returned by workspace_load |
No output schema declared.
No examples provided.
set_diagnostic_severity ~142
Set dotnet_diagnostic.<id>.severity in .editorconfig for C# files (warning, suggestion, silent, none), scoped from a source file path.
| Name | Type | Req | Description |
|---|---|---|---|
| diagnosticId | string | yes | Diagnostic id (e.g. CA1000, CS8602) |
| filePath | string | yes | (required) Absolute path to any C# file used to locate the applicable .editorconfig. Without this the server can't pick which .editorconfig to mutate. |
| severity | string | yes | Severity: error, warning, suggestion, silent, or none |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| filePath | string | yes | Absolute path to the C# source file whose .editorconfig should be updated. |
| key | string | yes | EditorConfig key (e.g. dotnet_diagnostic.CA1000.severity) |
| value | string | yes | Value (e.g. warning, suggestion, silent, none) |
| workspaceId | string | yes | Workspace 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.
| Name | Type | Req | Description |
|---|---|---|---|
| projectName | string | yes | Project name or project file path within the loaded workspace |
| propertyName | string | yes | Allowlisted property name (Nullable, LangVersion, ImplicitUsings, TargetFramework, DefineConstants, Optimize, DebugType, NoWarn, TreatWarningsAsErrors) |
| value | string | yes | Property value to set |
| workspaceId | string | yes | The 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
| Name | Type | Req | Description |
|---|---|---|---|
| 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.
split_class_preview ~112
Preview splitting a type into a new partial class file by moving selected members.
| Name | Type | Req | Description |
|---|---|---|---|
| filePath | string | yes | Absolute path to the source file containing the type |
| memberNames | array | yes | Member names to move into the new partial class file |
| newFileName | string | yes | File name for the new partial class file, for example Dog.Behavior.cs |
| typeName | string | yes | Type name to split |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| hostRegistrationFile | string|null | – | Absolute path to the file containing the existing services.Add* registration for sourceType; pass null to scan the workspace for any matching registration. |
| partitions | array | yes | Partition specs: each { typeName, memberNames[] } — every MemberName must exist on sourceType and each member must belong to exactly one partition. |
| sourceFilePath | string | yes | Absolute path to the source file containing the type to split |
| sourceType | string | yes | Name of the concrete type to split (e.g., 'Foo') |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of suggestions to return (default: 20) |
| 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.
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.
| Name | Type | Req | Description |
|---|---|---|---|
| column | integer|null | – | Optional: 1-based column number |
| filePath | string|null | – | Optional: absolute path to the source file containing the symbol |
| line | integer|null | – | Optional: 1-based line number |
| maxItemsPerCategory | integer|null | – | Optional cap on items per category (References, MapperCallsites, SwitchExhaustivenessIssues). Use together with summary=true on extremely high-fan-out symbols. |
| metadataName | string|null | – | Optional: fully qualified metadata name (preferred when caller knows the symbol shape) |
| summary | boolean | – | When 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. |
| 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.
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.
| Name | Type | Req | Description |
|---|---|---|---|
| allowAdjacent | boolean | – | Default 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… |
| 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.
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.
| Name | Type | Req | Description |
|---|---|---|---|
| operations | array | yes | Ordered list of operations. Each is { kind: 'rename'|'edit'|'restructure', ...kind-specific fields }. Order matters — later ops see earlier ops' rewritten state. |
| workspaceId | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| column | integer|null | – | Optional: 1-based column number |
| filePath | string|null | – | Optional: absolute path to the source file |
| limit | integer | – | Maximum number of items to return per relationship bucket (default: 100) |
| line | integer|null | – | Optional: 1-based line number |
| metadataName | string|null | – | Optional: fully qualified metadata name, e.g. Namespace.TypeName |
| preferDeclaringMember | boolean | – | When 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. |
| 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.
symbol_search ~332
Search workspace symbols by case-insensitive substring; wildcards and regex metacharacters are matched literally. Use summary=true for broad queries.
| Name | Type | Req | Description |
|---|---|---|---|
| allowElicitation | boolean | – | Default 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… |
| kind | string|null | – | Optional: filter by symbol kind (Class, Method, Property, Field, Interface, etc.) |
| limit | integer | – | Maximum number of results to return (default: 50, max: 50) |
| namespace | string|null | – | Optional: filter by namespace |
| offset | integer | – | Number of results to skip before returning (default: 0) |
| projectName | string|null | – | Optional: filter by project name |
| query | string | yes | Search query — substring match (case-insensitive). Pass bare fragments, not wildcards or regex. |
| summary | boolean | – | When 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… |
| workspaceId | string | yes | The workspace session identifier returned by 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.