DotNetDevMCP MCP server
2026년 10월 19일 커밋.NET 솔루션에 대한 Roslyn 코드 인텔리전스, .NET 빌드 및 테스트 기능, 그리고 병렬 작업 오케스트레이션을 AI 코딩 에이전트에게 제공합니다.
다른 이름 csa7mdm/DotNetDevMCP
- 스타
- 0
- Tools
- —
- 다운로드, 30일
- —
- 최신 버전
- 0.3.4
- 마지막 커밋
- 2026년 10월 19일
- 라이선스
- MIT
DotNetDevMCP MCP란?
DotNetDevMCP은(는) MCP server입니다. .NET 솔루션에 대한 Roslyn 코드 인텔리전스, .NET 빌드 및 테스트 기능, 그리고 병렬 작업 오케스트레이션을 AI 코딩 에이전트에게 제공합니다.
프로젝트 README에서 생성된 요약
DotNetDevMCP MCP server 정보
DotNetDevMCP는 단순한 텍스트 검색을 실제 컴파일러 인텔리전스로 대체하여 AI 코딩 에이전트가 .NET 생태계와 깊게 통합될 수 있도록 지원합니다. 기본적인 파일 읽기에 의존하는 대신 Roslyn을 사용하여 심볼, 구문 트리 및 프로젝트 의존성을 이해합니다. 이를 통해 에이전트는 전체 솔루션에 걸쳐 심볼 이름 변경이나 멤버 이동과 같은 복잡한 리팩터링 작업을 정밀하게 수행할 수 있습니다.
개발자는 Claude Code, VS Code, Cursor 또는 Claude Desktop과 같은 클라이언트에서 stdio를 통해 이 서버를 사용할 수 있습니다. 작동을 위해 .NET 10 SDK가 필요합니다. 서버에는 코드 인텔리전스, 빌드, 테스트 및 분석을 아우르는 37개의 기본 도구 세트가 포함되어 있습니다. 또한 개발 워크플로를 가속화하기 위해 여러 작업을 동시에 실행하거나 의존성 그래프로 실행할 수 있는 특화된 오케스트레이터를 갖추고 있습니다.
표준 명령 외에도 이 서버는 영향받는 테스트 선택(affected-test selection) 기능을 통해 고급 테스트 기능을 제공합니다. 이 기능은 Roslyn을 사용하여 수정된 파일에서 특정 테스트 메서드로의 변경 사항을 추적하므로 관련 있는 테스트만 실행되도록 보장합니다. 사용자는 Git 및 모니터링 도구 그룹을 선택하여 에이전트의 기능을 확장할 수도 있습니다.
활용 사례
- 1복잡한 심볼 리팩터링 수행에이전트가 특정 인터페이스의 모든 구현체를 찾아 전체 솔루션에서 메서드 이름을 변경할 수 있습니다.
- 2타겟팅된 영향 테스트 실행전체 테스트 스위트를 실행하는 대신, 최근 코드 변경 사항에 의해 직접적인 영향을 받는 테스트만 실행할 수 있습니다.
- 3병렬 빌드 워크플로 실행개발자가 에이전트에게 여러 프로젝트를 동시에 빌드하고 그에 해당하는 테스트를 실행하도록 지시할 수 있습니다.
- 4프로젝트 아키텍처 분석에이전트가 프로젝트 의존성 그래프 내의 순환 의존성과 같은 구조적 문제를 식별할 수 있습니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
자동 검사
2026년 11월 14일에 실행됨전체 보고서 →아직 인증되지 않았습니다. 서버는 80점 이상의 점수, 심각한 결함 없음, 그리고 검사에 충분한 데이터를 갖추어야 합니다. 검사 방식 · 점수를 높이기 위해 수정할 항목
- 소스 저장소 연결 및 접근 가능csa7mdm/dotnetdevmcp is public and reachablegithub.com/csa7mdm/dotnetdevmcp ↗통과
- 패키지가 이 저장소를 소스로 명시검사되지 않음
- 빌드 출처(Sigstore 증명)검사되지 않음
- 오픈 소스 라이선스 (OSI)MITspdx.org/licenses/MIT.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-10-19github.com/csa7mdm/dotnetdevmcp ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음검사되지 않음
- 패키지 및 해당 종속성에 중요한 보안 권고 없음검사되지 않음
- 모델에 대한 숨겨진 지침 없음0 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨검사되지 않음
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기DotNetDevMCP
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.
Install
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 <path> 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 <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/<timestamp> 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.)
What the agent gets
| 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:
- "Load
MyApp.sln, find every implementation ofIOrderRepository, and renameGetByIdtoFindByIdacross the solution." - "Run only the tests affected by what I just changed, and show me the failures with stack traces."
- "Build the API and the worker projects at the same time, then run both test projects."
- "Which projects have circular dependencies?"
Orchestration
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.
Numbers
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 |
Affected tests
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 the full suite. The first selection of a session on busy code is slower (Roslyn binds the files it touches, then caches them). dryRun: true shows what it picked and why (via).
Security
DotNetDevMCP runs as you, for an agent you trust with your code. dotnet build and dotnet test execute whatever the solution
contains, so a malicious test or .csproj runs with your privileges, exactly as it would in your terminal; the server adds no
sandbox. What it does guarantee: tool arguments can't smuggle extra options into dotnet or git, Roslyn edits stay inside the
solution directory, and --clean-env keeps secrets in environment variables away from child processes. For code you don't
trust, run the agent and the server together in a container or VM with no credentials; the image below contains only the
server, which already keeps builds and tests off your machine. Don't expose --http beyond localhost. Details:
SECURITY.md.
Run it in a container
The server can run in a container with no network, capped memory and processes, no capabilities, and only your repository mounted, so builds and tests the agent triggers can't reach the rest of your machine. Build the image (v0.3.4 is the first release with a Dockerfile), restore once with network, then register the sandboxed server:
docker build -t dotnetdevmcp https://github.com/csa7mdm/DotNetDevMCP.git#v0.3.4
docker run --rm -v "${PWD}:/src" -v dotnetdevmcp-nuget:/home/mcp/.nuget/packages --memory 8g --memory-swap 8g --pids-limit 512 --cap-drop ALL --security-opt no-new-privileges --entrypoint dotnet dotnetdevmcp restore /src/YourSolution.sln
claude mcp add dotnetdevmcp -- docker run -i --rm --network none -v "${PWD}:/src" -v dotnetdevmcp-nuget:/home/mcp/.nuget/packages:ro --memory 8g --memory-swap 8g --pids-limit 512 --cap-drop ALL --security-opt no-new-privileges dotnetdevmcp --load-solution /src/YourSolution.sln
This is the Docker Desktop form (Windows, macOS): run it from PowerShell, WSL or macOS, or prefix each command with
MSYS_NO_PATHCONV=1 in Git Bash. Native Linux needs a --user variant, and Windows repos with core.autocrlf need one extra
setting for git mode; both are in SECURITY.md,
along with what each flag blocks and the tests that prove it.
It doesn't protect everything: the mounted repository is writable by design; only the server is contained, not the agent or
the docker CLI (which needs root-equivalent daemon access on Linux); restore runs the solution's own build logic with
network access; a shared package cache can carry a planted build file from one repo to another (use one volume per untrusted
repo); and Docker Desktop's boundary is a VM kernel shared by all your containers.
Help, feedback and contributing
- Questions, ideas, "is this a bug?": Discussions.
- Something broke: open a bug report. The tool name and the arguments it got are the most useful part.
- Want to help? Start with a good first issue or read CONTRIBUTING. Running DotNetDevMCP on your own solution and reporting what happened helps just as much.
- Docs: the wiki (tutorial, tool reference, troubleshooting) is open to edits.
- Security: report privately.
- Using it at work? Tell me in Discussions: it decides what gets built next. If your team wants help setting it up on your solution (affected-test tuning,
--clean-envfor private feeds, CI), or wants early input on team features (shared config, audit logging, sandboxed runs), say so there. - Everyone here follows the Code of Conduct. If DotNetDevMCP saves you time, you can sponsor its development.
Build from source
git clone https://github.com/csa7mdm/DotNetDevMCP.git
cd DotNetDevMCP
dotnet build -c Release
dotnet test -c Release
dotnet run --project src/DotNetDevMCP.Server -- --help
To use a local build from an MCP client, point command at src/DotNetDevMCP.Server/bin/Release/net10.0/dotnetdevmcp (.exe on Windows).
Layout
src/
DotNetDevMCP.Server/ entry point; stdio or HTTP; packs as the `dotnetdevmcp` tool
DotNetDevMCP.CodeIntelligence/ Roslyn tools (SharpTools fork)
DotNetDevMCP.Testing/ dotnet test runner, TRX parsing, Roslyn affected-test selection
DotNetDevMCP.Build/ dotnet build/restore/clean
DotNetDevMCP.Analysis/ dependency graph, quality metrics
DotNetDevMCP.SourceControl/ git
DotNetDevMCP.Orchestration/ ConcurrentExecutor, WorkflowEngine, ResourceManager, orchestration tools
DotNetDevMCP.Monitoring/ process metrics
DotNetDevMCP.Core/ interfaces and models shared by the above
tests/ xUnit tests
benchmarks/ BenchmarkDotNet suite; polly/ measures the tools on Polly
docs/architecture/ design notes and ADRs
Built on the official MCP C# SDK 2.x. Package versions are managed centrally in Directory.Packages.props.
Status
0.3.4. The Roslyn tools are mature (they come from SharpTools). Testing, build, git and orchestration are newer and have been exercised on this repository and a few others; expect rough edges on unusual project layouts. Issues and PRs welcome, see CONTRIBUTING.
Known gaps: dotnet_test_affected follows C# references only (no reflection, no DI-by-convention, no string-keyed lookups), so a change reached only through those paths will not select the test; use dryRun to check what it picks. Calls through an interface or base class are followed. The project fallback follows ProjectReferences and NuGet package references: package references are now followed when the test project has been restored; cross-repo consumers are not. Builds and tests are not sandboxed (see Security). Tests that hang instead of failing are only caught by a run that finishes. Test attribute detection covers xUnit, NUnit and MSTest by attribute name. Past the command-line length limit the filter widens from methods to classes, then to the whole project (more tests, never fewer).
Credits and license
MIT. The code-intelligence module is a fork of SharpTools by кɵɵѕнī, also MIT; see LICENSE, NOTICE and ADR-001 for why it was forked rather than referenced.
DotNetDevMCP MCP 질문
DotNetDevMCP는 기본적으로 어떤 도구를 제공하나요?
Roslyn 코드 인텔리전스, 빌드, 테스트 및 분석 도구를 포함하여 기본적으로 37개의 도구를 제공하며, 선택적 그룹을 추가하면 53개까지 확장할 수 있습니다.
여러 .NET 도구를 동시에 실행할 수 있나요?
네, 이 서버에는 의존성 그래프 또는 병렬 실행을 통해 도구를 동시에 실행할 수 있는 오케스트레이터가 포함되어 있습니다.
서버 실행을 위해 특정 .NET 버전이 필요한가요?
네, .NET 10 SDK가 필요합니다.