Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
git clone --depth 1 https://github.com/VuDZ/RoslynMcpServerWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/rules/vudz/roslynmcpserver/roslyn-mcp-overview)<a href="https://agentmods.dev/rules/vudz/roslynmcpserver/roslyn-mcp-overview"><img src="https://agentmods.dev/badge/rules/vudz/roslynmcpserver/roslyn-mcp-overview/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/rules/vudz/roslynmcpserver/roslyn-mcp-overview"><img src="https://agentmods.dev/badge/rules/vudz/roslynmcpserver/roslyn-mcp-overview.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.03629 | $0.03629 |
| Opus 5.5 | $0.01452 | $0.01452 |
| Sonnet 5.5 | $0.00726 | $0.00726 |
| Haiku 4.5 | $0.00363 | $0.00363 |
Grade A, and why
roslyn-mcp-overview scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 102 lines — stays where its author put it; the contents beside it link to each section on GitHub.
RoslynMcpServer overview
MCP server (stdio) for C# analysis: Roslyn workspaces + ILSpy decompile. TFM net10.0, version in RoslynMcpServer.csproj (currently 1.5.15). Package id RoslynMcpServer. Self-contained publish for win/osx/linux RIDs.
Layout
Program.cs— MSBuild bootstrap, optionalROSLYN_MCP_WORKSPACE→ cwd, Serilog tologs/mcp-*.logunderAppContext.BaseDirectory(each line prefixed with a harness session id)Hosting/— DI (AddRoslynMcpServerTools),McpToolRegistryTools/— MCP tool classes (Workspace, CodeAnalysis, Skeleton, Build, Run, Test, NuGet, Utility, …)Services/—Workspace(SolutionManager),Analyzers,Build,Editing,Navigation,Resolve,Testing; helpers that do not belong to one of those stay at the rootDiagnostics/— parsers (build, VSTest, NuGet audit), SDK mismatch, MSBuild locatorRoslynMcpServer.Tests/— xUnit;InternalsVisibleTo- Docs:
README.md(EN+RU),AGENTS.md.sample(copy to app repos asAGENTS.md)
DI / tools
Tools are singletons registered in RoslynMcpServiceCollectionExtensions. Inject SolutionManager — do not new workspaces/HTTP. Heavy services via constructor.
Related consumer
Real-world validation often uses BrqMover (c:\Devel\BrqMover) — app repo with its own AGENTS.md; do not hardcode that path into this repo’s docs/rules.
Version history (agent-relevant)
- 1.5.7 — Linux SDK fallback also searches
/usr/lib/dotnetand~/.dotnet. Missing-SDK messages nameDOTNET_ROOT/PATHoff Windows.get_mcp_server_infopublishes with the current process RID. Analyzer path keys are case-sensitive off Windows - 1.5.6 — a watcher event during the additional-file or
.editorconfigcontent read no longer drops that save for the rest of the flush. The flush reads the path again a few times and publishes only after the bytes are accepted. An unstable, unreadable, missing, or still-open own write stays deferred - 1.5.4 — saved additional-file and analyzer-config text is applied on the published snapshot (
WithAdditionalDocumentText/WithAnalyzerConfigDocumentText) during the same flush as.cs. NotTryApplyChanges. XAML, resx, Razor, evaluation-input paths, and new or deleted files stay out. Coverage-unknown does not block a document already in the graph and is not cleared by the replace - 1.5.3 — DLL tests share one solution-target
buildPolicy(auto/always/never) onrun_dotnet_test,run_specific_test, andrun_test_by_filterwhenbinariesPathis set - 1.5.2 — disk watcher follows the loaded graph: recursive project directories, non-recursive watches for linked files and walk-up props outside them. One user
.cstext updates every document of that path. Non-C# inputs are recorded by role and are not text-synced. Own writes match saved bytes, including BOM. Semantic flush does not clear input revisions.search_coderoots are unchanged - 1.5.1 — WPF
{ProjectName}_{random}_wpftmp.csprojcreate/delete does not mark the project graph stale unless that path is a loaded project. A real project-file change during the build still does - 1.5.0 — MCP C# SDK 2.2.0. Group enablement batches
tools/list_changedwith the SDKDeferChangedEventsscope.2025-11-25sessions receive that notification directly;2026-07-28sessions receive it aftersubscriptions/listen(toolsListChanged). Plugin projects referenceModelContextProtocol2.2 (Major.Minormust match the host assembly) - 1.4.19 — disk watcher error and directory-rename callbacks still request a full re-read when the logger throws (
Logger.Logrethrows a provider failure such as Windows Event LogObjectDisposedException); the callback no longer kills the process - 1.4.18 — plugins:
IRoslynMcpPluginassemblies load beforeBuildfromplugins/<id>/, thepluginskey ofRoslynMcp.jsonc, orROSLYN_MCP_PLUGINS(dev directory shadow-copied); a plugin that cannot be loaded is skipped with[RoslynMcp] plugin skipped (<id or path>): <reason>on stderr and inlogs/mcp-*.logwhile the host still starts;get_mcp_server_infolists loaded plugins and skips,get_tool_helpreportsKind/Grouppluginfrom the start report; plugin tools are intools/listandRegistered MCP tools, not inMcpToolCatalogorlist_tool_groups, andlite/fulldo not filter them - 1.4.17 —
get_changed_filesreads git stdout and stderr together, closes stdin, and stops the process after 180s plus up to 3s of cleanup (Kill(entireProcessTree)on Windows, Linux, and macOS) - 1.4.16 — shared
logs/mcp-*.loglines include a harness session id ([cursor-k7m2],[opencode-4mht]): parent exe name, or node command-line package/directory; 4-char suffix; unknown parent iscli; command line is not logged - 1.4.15 — writes preserve the file's BOM state (no BOM added to BOM-free files, none stripped from BOM files);
SourceTextEncodingresolves existing document → candidate → on-disk BOM - 1.3.32 —
DotNetCliRunnertimeout kills the process then drains pipes (no hang on canceledReadToEndAsync); lifecycle hostbuildhonorsTimeoutMs - 1.3.31 —
update_file_content/apply_patchdo not recreate missing-on-disk.cs; disk-sync does notWithDocumentTexta deleted known document - 1.3.30 — disk-sync updates texts of known documents only (no
AddDocument/RemoveDocument); new/deleted.cs→ composition-stale + reload, not<Compile Include>/ NETSDK1022 - 1.3.29 — single
TestAttributeMatcher(base-chain walk) shared byget_test_listandrun_specific_test; customFactAttribute-derived attributes ([AnalyzerLifecycleFact],[WpfFact]) discovered and filterable;DataRowAttributeno longer a test marker;get_test_listaddstotalTestMethodsFound(before filters) and only blames filters when the workspace did find tests - 1.3.28 —
get_test_listdiscovered 0 tests on every real workspace:GetSymbolInfo(AttributeSyntax).Symbolis the attribute constructor (.ctor), and names were compared without theAttributesuffix (FactvsFactAttribute); now resolvesContainingType+ strips suffix/qualifier, syntactic fallback only when unbound;TestDiscoveryHelperTestsfixtures now reference corelib +System.Runtime+xunit.coreso attributes actually bind (they were false-green) - 1.3.27 —
run_dotnet_test/run_specific_test/run_test_by_filter/run_dotnet_runemit the same MCP progress heartbeats as build (dotnet build/dotnet test/dotnet run; 5 s; no stdout);RunSeparatedAsynctakes optionalCliProgressWatch - 1.3.26 — progress
elapsed= current step only (boundary =starting); numericProgress= strictly increasing whole seconds, noTotal(not a percentage); adapter detects SDK no-op progress so a token-less call starts no timer - 1.3.25 —
run_dotnet_buildemits MCPnotifications/progressheartbeats (step label, elapsed, previous exit; no stdout) via a reusableDotNetCliRunner/DotNetBuildProbeseam; no schema change, no host-timeout fix - 1.3.24 — test tools include VSTest
Standard Output/Error(ConversationId,ITestOutputHelper) with per-stream budgets;includeFullOutput/maxOutputChars - 1.3.23 —
run_specific_testmatches xUnit method-only /FQN(args)display names (dot-bounded suffix); slow durations[3 m 8 s]valid - 1.3.22 — test failure text keeps multiline
Error Message:; MSBuildBuild FAILED/0 Error(s)footer after failed tests is not compile/silent failure - 1.3.21 — U-ARB-01: inaccessible original analyzer path is skip (no rewrite, not missing)
- 1.3.20 — preserve
DependencyUnsupported/ main-only through a full publication ban (v3 S8) - 1.3.19 — mixed analyzer prepare: per-reference applied/excluded/banned publication (v3 S5), no
HasAnyApplied - 1.3.18 — withhold opt-in semantics when provenance capture unsuitable (V3-R3); cached
truedoes not repair - 1.3.17 — persistent fail-closed publication after a failed opt-in (V3-R2)
- 1.3.16 — reject stale write bases before any disk/workspace mutation (V3-R1 / A4-09)
- 1.3.15 — no implicit semantic workspace load (
FindDocumentAsync; U-ARB-04-IMPL-1) - 1.3.14 — atomic analyzer load/prepare boundary (U-ARB-04)
- 1.3.13 —
shadowCopyInSolutionAnalyzersactivation is session-sticky (U-ARB-05); disable viareset_workspace - 1.3.12 — analyzer provenance acceptance (E5-S4)
- 1.3.11 — analyzer provenance diagnostics: stable internal reason codes (E5-S3)
- 1.3.10 — analyzer provenance rollout: exact load-session F-09 join only (E5-S2)
- 1.3.9 — analyzer provenance capture via design-time binlog replay (F-09)
- 1.3.8 — workspace write boundary (epoch 4): preflight → exact inverse → persist → apply/reconciliation
- 1.3.7 — overlay loader contract: restart-required, main-only (epoch 3)
- 1.3.6 — immutable content-hashed analyzer generation mapping (epoch 2); zero analyzer I/O on edit
- 1.3.5 — overlay fix: shadow rewrite stays in-memory, never
TryApplyChanges(v1.3.4 corrupted real.csproj) - 1.3.4 —
load_workspaceshadowCopyInSolutionAnalyzers(superseded by 1.3.5) - 1.3.3 —
load_workspacelogProjectOutputDiagnostics - 1.3.2 —
binariesPathonrun_specific_test/run_dotnet_test;run_test_by_filterhonorsnoBuild - 1.3.1 —
get_test_listprojectName/nameContainsfilters - 1.3.0 —
run_test_by_filter(raw VSTest--filter) - 1.2.3 —
run_dotnet_buildprojectName(sln-tvirtual path);-p:Configurationin probes - 1.2.2 —
load_workspacebriefOutput - 1.2.1 —
load_workspacebuildArgs(session-cached; build only) - 1.2.0 — tool profiles
full/lite,ROSLYN_MCP_TOOL_GROUPS,list_tool_groups/get_tool_help/enable_tool_group - 1.1.1 — decompile
assemblyName: dotted simple names (Spectre.Console) no longer truncated - 1.1.0 — disk watcher: saved
.cs(IDE/git) sync into MSBuildWorkspace before symbol search; no keystroke/unsaved buffers;.csprojchanges skip load cache, not OpenSolutionAsync from the watcher - 1.0.35 — Roslyn 5.9.0; dedicated VS 2026 / MSBuild 18 BuildHost (
XMakeElements) load/symbol failure (not SDK mismatch) - 1.0.34 —
load_workspace: wrapped design-time MSBuild warnings (ASPDEPR007 / IncludeOpenAPIAnalyzers, MSB3270, analyzer metadata refs) are warnings, not hard Failure - 1.0.33 —
load_workspaceoptionaltargetFramework(inner TFM for CrossTargeting /TargetFrameworks); dedicated missing-Compileload report - 1.0.32 —
run_specific_test: VSTest Passed/Failed lines accept[1 s]/[1 m 28 s]durations (not onlyms) - 1.0.31 —
run_dotnet_test/run_specific_test: separate incrementaldotnet buildthendotnet test --no-build(parser sees test output only) - 1.0.30 —
apply_patchreplaceAll: advance past inserted text (hang when newString contains oldString) - 1.0.29 —
load_workspaceoptional Configuration/Platform (cached for build/test); empty-TFM ResolvePackageAssets dedicated fail - 1.0.28 —
run_dotnet_test: infer Passed when.slnxVSTest omits thePassed:line - 1.0.27 —
load_workspace: NU1701 / TFM-compat restore warnings soft (not fatal);Msbuild failedwrapper wordfailedis not blocking by itself - 1.0.26 — agent diagnostics: client-abort
load_workspace, emptyget_test_list,run_specific_testpath/filter mismatch hints - 1.0.25 —
run_dotnet_build: default--no-incremental; effective exit = last build step (restore cannot mask) - 1.0.22 —
run_specific_test: VSTest-safe method filters (~, no(), no bogus leading.on dotted FQNs) - 1.0.21 —
load_workspace: NuGet prune / unused PackageReference advisories soft (warnings), not hard Failure - 1.0.20 — optional
configuration(-c) onrun_dotnet_build/run_dotnet_test/run_specific_test - 1.0.19 —
.slnxaccepted byload_workspace/ build / test / discovery (prefer solution files for multi-config) - 1.0.18 — tool
[Description]accuracy pass (build probe, decompile resolve, NuGet timeouts, AST params) - 1.0.17 —
run_dotnet_test/run_specific_testoptionalnoBuild/noRestore - 1.0.15 —
search_codecaseSensitive; no-workspace candidate paths;rename_project; branding recipe in AGENTS - 1.0.14 —
run_dotnet_run,run_nuget_audit,get_changed_files, workspace health onload_workspace - 1.0.13 — exact assembly resolve (deps.json + NuGet), no fuzzy
Contains - 1.0.10+ — SDK pin from
global.json, build probe, VSTest parser,MCP_MSBUILD_SDK_MISMATCH
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 8d ago Changed 8b99939063ff
- 9d ago Changed · +1 lines · +68 tokens per session 92f90e0af558
- 11d ago Changed · +1 lines · +69 tokens per session 55b80f85d8b4
- 1mo ago Changed · +4 lines · +313 tokens per session f52d3e56aea3
- 1mo ago Changed · +1 lines · +99 tokens per session dcb13c6480a2
- 1mo ago Changed · +2 lines · +238 tokens per session c11420319300
- 1mo ago Changed · +2 lines · +139 tokens per session 6a312230cfaf
- 1mo ago Changed · +1 lines · +47 tokens per session c15f991f48cb
- 1mo ago Changed · +1 tokens per session 1230487ac02f
- 1mo ago First seen · 90 lines · 2,655 tokens per session scan A 55d98f5d9b3b
roslyn-mcp-overview is a cursor rule published in the GitHub repository VuDZ/RoslynMcpServer (8 stars, last pushed yesterday), licensed MIT. It adds 3,629 tokens to every session, about $0.0145 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-14.
Other cursor rules, from other repositories
aspnet-abp-cursorrules-prompt-file
Cursor rules for Aspnet Abp.
python-app
Here's how the python application is organized.
typescript
Here's how frontend code is organized in web/app/.
context7
Beautiful themed components for Uno Platform in C#.
pn-go-backend
Go backend style, env, and error handling. Use for API and server code (Gin, Fiber, Echo).
pn-ruby-backend
Ruby backend style, env, and error handling. Use for API and server code (Rails, Sinatra).