Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
MCP server that gives AI coding agents Roslyn's compiler view of a .NET solution.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"dotnetdevmcp": {
"command": "dnx",
"args": [
"DotNetDevMCP",
"--yes"
]
}
}
}在终端中运行这条命令
claude mcp add dotnetdevmcp -- dnx DotNetDevMCP --yes粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"dotnetdevmcp": {
"command": "dnx",
"args": [
"DotNetDevMCP",
"--yes"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"dotnetdevmcp": {
"type": "stdio",
"command": "dnx",
"args": [
"DotNetDevMCP",
"--yes"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日
注册名称已通过 GitHub 账户 csa7mdm 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.3.4)于42天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 .NET。
同一分类中有:Spec Driven Development, Remote Desktop Commander, AI Deprecations
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
AI model shutdown dates, replacements, change feed and webhook alerts for 8 providers.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
An MCP server that gives AI coding agents real .NET tooling: Roslyn code intelligence, dotnet build/test, affected-test selection, and an orchestrator that runs those tools concurrently as a dependency graph.
Agents working on .NET code usually get by with grep and shelling out to dotnet. That means they read files instead of symbols, edit text instead of syntax trees, and run one command at a time. DotNetDevMCP replaces that with 37 tools by default (53 with the optional groups below enabled) that use the compiler's view of your solution and can run builds, tests and analysis in parallel.
New here? The wiki has a first-session tutorial, setup for every MCP client, and troubleshooting.
Requires the .NET 10 SDK.
Claude Code
claude mcp add dotnetdevmcp -- dnx DotNetDevMCP --yes
VS Code / Visual Studio (.mcp.json or .vscode/mcp.json)
{
"servers": { "dotnetdevmcp": { "type": "stdio", "command": "dnx", "args": ["DotNetDevMCP", "--yes"] } } }
Claude Desktop / Cursor / any stdio client (mcpServers form)
{
"mcpServers": { "dotnetdevmcp": { "command": "dnx", "args": ["DotNetDevMCP", "--yes", "--", "--load-solution", "C:/src/MyApp/MyApp.sln"] } } }
dnx downloads the package from NuGet.org on first run. Prefer a permanent install? dotnet tool install -g DotNetDevMCP, then use dotnetdevmcp as the command.
Pass --load-solution to have Roslyn load your solution at startup, or let the agent call SharpTool_LoadSolution when it needs to. --http --port 3001 serves Streamable HTTP instead of stdio (localhost only, no authentication: see Security); it rejects requests carrying a foreign Origin header or a non-localhost Host header. --allowed-origin (repeatable) adds an extra origin to that allow-list, e.g. --allowed-origin http://localhost:5173 for a local dev-server proxy that forwards its Origin - the server sends no CORS headers, so this doesn't let a browser page call it directly. --clean-env starts dotnet and git with a minimal environment so tokens and cloud credentials in environment variables aren't passed on. dotnetdevmcp --help lists everything.
Git and Monitoring tools (see the table below) are off by default - a shell an agent already has covers them, and every registered tool costs context tokens in every session. Pass --enable git,monitoring (comma-separated and/or repeated, e.g. --enable git --enable monitoring) to turn either or both on.
By default, the Roslyn edit tools (SharpTool_RenameSymbol, OverwriteMember, AddMember, MoveMember, FindAndReplace, CreateRoslynDocument, OverwriteRoslynDocument, ManageUsings, ManageAttributes) never touch git - they apply changes to disk and return the usual compile-check output, nothing else. Pass --git-commit-edits to opt into the old behavior: each edit creates a sharptools/ branch (if you aren't already on one) and commits the change, which is also what SharpTool_Undo needs in order to revert. Without the flag, SharpTool_Undo returns an explanatory error instead of failing obscurely. (--disable-git still exists but is a no-op now that git integration is opt-in by default.)
| Group | Tools | What they do |
|---|---|---|
| Code intelligence (Roslyn) | 21 | Load a solution; search and view definitions; find references and implementations; add, overwrite, move and rename members; manage usings and attributes; find-and-replace with syntax awareness; complexity analysis; undo. Forked from SharpTools. |
| Testing | 3 | dotnet_test_run (one dotnet test per project or solution, TRX parsed into per-test results with messages and stack traces), dotnet_test_discover, and dotnet_test_affected: Roslyn walks references from your changed files to the test methods that reach them, and runs only those. |
| Build | 4 | dotnet build, restore, clean, build with MSBuild properties. Structured error/warning output. |
| Analysis | 5 | Project dependency graph, circular-dependency detection, quality metrics, outdated-package scan. |
| Orchestration | 4 | orchestrate_parallel runs any of the server's own tools concurrently; execute_workflow runs them as a DAG. Resource limits and metrics. |
| Git *(opt-in)* | 10 | Status, branches, checkout, stage, commit, diff, log, push, pull. Enable with --enable git. |
| Monitoring *(opt-in)* | 6 | Process performance metrics, GC stats, resource utilization, health check, profiling sessions. Enable with --enable monitoring. |
Things you can say to an agent with this server attached:
MyApp.sln, find every implementation of IOrderRepository, and rename GetById to FindById across the solution."The tools above are individually useful. The orchestrator is what makes them fast. Any tool on the server can be dispatched by name, in parallel or as a dependency graph, from a single call:
{
"name": "execute_workflow", "arguments": { "workflowName": "ci", "steps": [ { "name": "build-tests", "toolName": "dotnet_build", "arguments": { "projectPath": "tests/Api.Tests/Api.Tests.csproj" } }, { "name": "build-worker", "toolName": "dotnet_build", "arguments": { "projectPath": "src/Worker/Worker.csproj" } }, { "name": "test-api", "toolName": "dotnet_test_run", "arguments": { "path": "tests/Api.Tests/Api.Tests.csproj", "noBuild": true }, "dependsOn": ["build-tests"] }, { "name": "deps", "toolName": "dotnet_detect_circular_dependencies", "arguments": { "projectPath": "src/Api/Api.csproj" } } ] } }
build-tests, build-worker and deps start immediately; test-api waits for build-tests. Steps are throttled by a resource manager (default: processor count, adjustable with configure_resource_limits). Failures are reported per step; a failed dependency stops its dependents.
Under the hood this is ConcurrentExecutor / WorkflowEngine / ResourceManager, plain C# classes in DotNetDevMCP.Orchestration that can be used without MCP.
Measured with BenchmarkDotNet on an i7-10750H, .NET 10.0.9. The orchestration benchmarks use Task.Delay stand-ins for I/O-bound work, so they measure the engine's overhead and scheduling, not dotnet itself.
| Scenario (20 ops × 50 ms) | Mean | vs sequential |
|---|---|---|
| Sequential | 1,237 ms | 1.00 |
ConcurrentExecutor, throttled to 5 | 246 ms | 0.20 |
ConcurrentExecutor, unthrottled (12 cores) | 123 ms | 0.10 |
WorkflowEngine with dependencies | 185 ms | 0.15 |
Task.WhenAll (lower bound) | 62 ms | 0.05 |
| Workflow with a mix of dependent and independent steps | Mean | vs sequential |
|---|---|---|
| Sequential | 308 ms | 1.00 |
WorkflowEngine | 185 ms | 0.60 |
After an edit, the agent usually reruns the whole suite. dotnet_test_affected asks Roslyn instead: take the symbols declared in the changed files, follow references (up to maxDepth hops, default 8) until you land in a method with [Fact], [Theory], [Test], [TestCase] or [TestMethod], then run exactly those. Changed files default to the git working tree, or gitBase: "main" for a branch. dryRun: true lists the tests without running them; framework: "net10.0" runs one target framework of multi-targeted test projects.
The walk has a time budget (maxSelectionSeconds, default 10). A change to code that everything depends on reaches too much to trace cheaply; then the test projects that reference the changed projects run instead (the whole solution if that's all of them), and the response says so (selectionComplete: false, ranScope). The same happens when the selection is more than 20% of all tests (maxSelectedFraction), where a filtered run is no faster. Changed files the walk can't trace (a .csproj, .razor, appsettings.json, a deleted file) switch to the same project fallback and are listed in untracedFiles; a changed Directory.Build.props, global.json or .editorconfig runs the whole solution. You never get a silently partial selection. Runs are killed after timeoutSeconds (default 600) so a hanging test cannot hang the agent; the response names the test modules that never finished. maxDepth: 3 narrows more changes but misses more tests. Works with VSTest and with Microsoft.Testing.Platform ("test": { "runner": "Microsoft.Testing.Platform" } in global.json). The project fallback also follows restored NuGet package references (a test project whose obj/project.assets.json references another solution project's package id, with no ProjectReference between them, is still selected). A change to Directory.Packages.props is narrowed to the test projects that actually use the package ids whose version moved only when it is the *only* changed file (documentation outside every project aside), only the Version attributes actually changed (not a Condition, a GlobalPackageReference, or any other edit riding along), and every solution project has been restored; any other change to that file, a change alongside another file, or an unrestored project anywhere in the solution runs the whole solution instead, with a note explaining which of those applied.
On this repository, editing ConcurrentExecutor.cs selects 22 of 44 tests (the ConcurrentExecutorTests plus the OrchestrationServiceTests that reach it through OrchestrationService). Measured through the MCP tool, build included, i7-10750H:
| Tests | Wall | |
|---|---|---|
dotnet test from a shell | 44 | 9 s |
dotnet_test_run | 44 | 8.3 s |
dotnet_test_affected (change to ConcurrentExecutor.cs) | 22 | 6.6 s |
The suite here is small, so the saving is small. On a real library the picture is clearer: benchmarks/polly replays 40 Polly commits and injects faults into its code. A one-file change ran its 5 affected tests in 5.1 s against 48.1 s for the net10.0 suite (same session), and the selections included 111 of the 112 tests the injected faults broke (the miss builds its object through reflection). Changes that reach hundreds of tests gain nothing: of the last 40 commits, 16 ran a filtered selection and 24 ran th
只显示了开头部分;其余内容请在仓库中阅读