dotnet-coverage-mcp
dotnet-coverage-mcp
Ein MCP-Server (Model Context Protocol), der KI-Assistenten – Claude Code, Gemini CLI und andere – direkten Zugriff auf .NET-Testabdeckungswerkzeuge gibt. Führen Sie dotnet test aus, parsen Sie Cobertura-XML, identifizieren Sie nicht abgedeckte Verzweigungen, vergleichen Sie die Abdeckung zwischen Läufen und fügen Sie Testcode hinzu – alles über stdio.
Zweck
Dieser Server ermöglicht es einem KI-Assistenten, Unit-Tests auszuführen, Abdeckungsdaten zu sammeln und Ergebnisse zu analysieren – ganz ohne den Chat zu verlassen. Statt dotnet test manuell auszuführen und Berichte zu parsen, kann die KI die Tools des Servers direkt aufrufen, um:
Quelldateien zu entdecken und intelligente Stapel nach Zeilenbudget zu erstellen
Eine gefilterte Reihe von Tests auszuführen und Abdeckung zu sammeln
Kompakte, KI-optimierte Abdeckungszusammenfassungen zu lesen (Methoden-Level-Zeilen-/Verzweigungsraten)
Die Abdeckung pro Datei gegen eine konfigurierbare Zielrate zu prüfen (Standard 80%)
Nicht abgedeckte Verzweigungen als strukturiertes JSON zu identifizieren
Die Abdeckung zwischen Läufen zu vergleichen, um nur das zu sehen, was sich geändert hat
Neuen Testcode an eine bestehende Testdatei mit atomaren Schreibvorgängen anzuhängen
Related MCP server: codecov-mcp-server
So funktioniert es
Der Server startet als Konsolenprozess und kommuniziert über stdio mit dem MCP-Protokoll. Ein MCP-kompatibler Client (Claude Code, Gemini CLI usw.) startet den Prozess und ruft seine Tools auf, als wären sie Funktionen.
AI Client <--stdio/MCP--> dotnet-coverage-mcp <--shell--> dotnet test + reportgeneratorVerfügbare Tools
Tool | Beschreibung |
| Entdeckt |
| Führt |
| Parst |
| Holt die Abdeckung für eine einzelne Quelldatei aus Cobertura-XML. Gibt |
| Findet nicht abgedeckte Verzweigungsbedingungen für Methoden, die einem bestimmten Namen entsprechen. Gibt alle passenden Methoden mit teilweiser Namensunterstützung zurück. Unterstützt |
| Vergleicht aktuelles Cobertura-XML mit der Basislinie. Zeigt Methoden-Level-Änderungen einschließlich neuer und entfernter Methoden. Unterstützt |
| Fügt C#-Testcode in eine Testdatei ein oder hängt ihn an. Unterstützt ankerbasierte Einfügung mit leerzeichen-toleranter Fallback-Matching. Verwendet atomare Schreibvorgänge, um Dateibeschädigung zu verhindern. |
| Entfernt Sitzungszustandsdateien und |
Stapel-Workflow
Für Projekte mit vielen Quelldateien ist der empfohlene Workflow:
Entdecken – Rufen Sie
GetSourceFilesfür einen Ordner oder ein.csprojauf, um alle Dateien und intelligente Stapel zu erhaltenEinmal ausführen – Rufen Sie
RunTestsWithCoveragemit einem breiten Filter (z. B.*) auf, um Abdeckung über alle Dateien zu sammelnPro Datei prüfen – Rufen Sie
GetFileCoveragefür jede Datei im aktuellen Stapel auf (sofortiges XML-Parsing, kein erneuter Testlauf)Fokussieren – Wählen Sie die 3 Methoden mit der niedrigsten Verzweigungsabdeckung und rufen Sie
GetUncoveredBranchesfür jede aufTests schreiben – Verwenden Sie
AppendTestCode, um Testmethoden hinzuzufügenErneut ausführen und vergleichen – Führen Sie Tests einmal aus, rufen Sie
GetCoverageDiffauf, um Verbesserungen zu überprüfenWiederholen – Fahren Sie fort, bis die Stapeldateien die Zielrate (Standard 80%) erreichen oder 3 Zyklen ohne Verbesserung, dann wechseln Sie zum nächsten Stapel
Dies minimiert dotnet test-Aufrufe (den Hauptengpass) und verfolgt gleichzeitig den Fortschritt pro Datei.
Parallelität
Mehrere KI-Agenten können parallel laufen, indem sie jedem Toolaufruf eine sessionId übergeben, die ihre Abdeckungsartefakte isoliert:
Isolierte Ausgabeverzeichnisse –
RunTestsWithCoverageerstelltTestResults-{hash}/undcoveragereport-{hash}/pro Sitzung, wodurch verhindert wird, dass ein Agent die XML eines anderen mitten im Parsen löschtBereichsbezogene Zustandsdateien – Der Abdeckungszustand wird in
.mcp-coverage/.coverage-state-{hash}geschrieben, sodassResolveCoberturaPathdie korrekte XML für jede Sitzung auflöstBereichsbezogene Basislinien –
GetCoverageDiffspeichert Basislinien als.coverage-prev-{hash}.xmlpro SitzungAtomare Schreibvorgänge – Alle Dateischreibvorgänge (Zustandsdateien und Testcode) verwenden Schreiben-in-Temp-Dann-Umbenennen, um Beschädigungen durch Wettlaufsituationen oder Prozessabstürze zu verhindern
Einschränkung – Build-Ausgaben sind nicht sitzungsbezogen.
sessionIdisoliert Abdeckungsartefakte, nicht den .NET-Build.dotnet testkompiliert das Zielprojekt in seine gemeinsamenobj/- undbin/-Verzeichnisse, die nicht pro Sitzung sind. Wenn also zwei AgentenRunTestsWithCoveragegegen dasselbe Testprojekt gleichzeitig ausführen, kollidieren sie bei diesen Ausgaben und schlagen mitbuildErrorfehl (z. B.CS2012: Die Datei wird von einem anderen Prozess verwendet). Führen Sie parallele Agenten gegen verschiedene Testprojekte aus oder auf separaten Arbeitskopien des Repos. Mehrere Agenten auf einem Projekt sind in Ordnung, solange ihredotnet test-Builds sich nicht überlappen.
Ohne sessionId verwenden die Tools gemeinsame Standardwerte – sicher für den Einzelagenten-Einsatz.
Anforderungen
.NET 9.0 SDK (oder höher) – https://dotnet.microsoft.com/download
reportgenerator globales Tool – der Server ruft es auf, um Abdeckungsberichte zu rendern (im Install-Schritt unten installiert)
Ein MCP-kompatibler Client (Claude Code, Gemini CLI usw.)
COVERAGE_MCP_ALLOWED_ROOT– empfohlen. Setzen Sie es auf Ihre Repository-Wurzel, um den Dateisystemzugriff jedes Tools auf diesen Teilbaum zu beschränken. Jeder Pfad, der vom Client außerhalb dieser Wurzel übergeben wird, wird mitpathNotAllowedabgelehnt. Wenn nicht gesetzt, protokolliert der Server einmal eine Warnung und akzeptiert jeden Pfad (abwärtskompatibel, aber nicht für gemeinsame Umgebungen empfohlen).export COVERAGE_MCP_ALLOWED_ROOT=/path/to/your/repo
Installieren
Installieren Sie den Server als globales .NET-Tool von NuGet:
dotnet tool install --global dotnet-coverage-mcpDer Server hängt vom globalen Tool reportgenerator ab, um Abdeckungsberichte zu rendern – installieren Sie es ebenfalls:
dotnet tool install --global dotnet-reportgenerator-globaltoolNach der Installation ist der Befehl dotnet-coverage-mcp auf Ihrem PATH.
Build & Ausführen (aus dem Quellcode)
cd <path-to-dotnet-coverage-mcp>
# Restore dependencies
dotnet restore
# Build
dotnet build
# Run
dotnet runDer Server startet und wartet auf MCP-Nachrichten über stdin/stdout.
MCP-Client-Konfiguration
Nach der Installation des globalen Tools (dotnet tool install --global dotnet-coverage-mcp),
registrieren Sie den Server bei Ihrem MCP-Client. Setzen Sie COVERAGE_MCP_ALLOWED_ROOT auf das
Repository, auf dem der Server arbeiten soll.
Claude Code
claude mcp add coverage --env COVERAGE_MCP_ALLOWED_ROOT=/path/to/your/repo -- dotnet-coverage-mcpClaude Desktop
Fügen Sie zu claude_desktop_config.json hinzu (Einstellungen → Entwickler → Konfiguration bearbeiten):
{
"mcpServers": {
"coverage": {
"command": "dotnet-coverage-mcp",
"env": {
"COVERAGE_MCP_ALLOWED_ROOT": "/path/to/your/repo"
}
}
}
}Cursor
Fügen Sie zu ~/.cursor/mcp.json (global) oder .cursor/mcp.json (pro Projekt) hinzu:
{
"mcpServers": {
"coverage": {
"command": "dotnet-coverage-mcp",
"env": {
"COVERAGE_MCP_ALLOWED_ROOT": "/path/to/your/repo"
}
}
}
}VS Code (GitHub Copilot)
Fügen Sie zu .vscode/mcp.json hinzu:
{
"servers": {
"coverage": {
"type": "stdio",
"command": "dotnet-coverage-mcp",
"env": {
"COVERAGE_MCP_ALLOWED_ROOT": "/path/to/your/repo"
}
}
}
}Aus dem Quellcode ausführen
Um aus dem Quellcode statt des globalen Tools auszuführen, verwenden Sie dotnet run:
{
"mcpServers": {
"coverage": {
"command": "dotnet",
"args": ["run", "--project", "<path-to-dotnet-coverage-mcp>"],
"transport": "stdio"
}
}
}Oder zeigen Sie direkt auf die kompilierte ausführbare Datei:
{
"mcpServers": {
"coverage": {
"command": "<path-to-dotnet-coverage-mcp>\\bin\\Debug\\net9.0\\DotNetCoverageMcp.exe",
"transport": "stdio"
}
}
}Tool-Parameter
GetSourceFiles
Parameter | Typ | Erforderlich | Beschreibung |
| string | Ja | Pfad zu einer |
| int | Nein | Maximale Gesamtzeilen pro Stapel (Standard: 300). Kleine Dateien werden gruppiert; große Dateien erhalten ihren eigenen Stapel. |
RunTestsWithCoverage
Parameter | Type | Required | Description |
| string | Ja | Vollständiger Pfad zum |
| string | Ja | Testfilterzeichenfolge (abgeglichen mit |
| string | Nein | Arbeitsverzeichnis; standardmäßig das Projektverzeichnis |
| bool | Nein | Wenn |
| string | Nein | Isoliert Ausgabeverzeichnisse ( |
| string | Nein | Beschränkt die Abdeckungserfassung auf Typen, die diesem Namen entsprechen (coverlet |
| bool | Nein | Wenn |
GetCoverageSummary
Parameter | Type | Required | Description |
| string | Ja | Vollständiger Pfad zur generierten |
| double | Nein | Wenn gesetzt (ein Bruchteil in |
| int | Nein | Nur die N Klassen mit der niedrigsten Zweigabdeckung zurückgeben (Ergebnisse sind nach schlechtesten zuerst sortiert). Für alle Klassen weglassen. |
| int | Nein | Behalte höchstens so viele Methoden mit der niedrigsten Zweigabdeckung pro Klasse, der Rest wird entfernt. Weglassen, um alle Methoden zu behalten. |
GetFileCoverage
Parameter | Type | Required | Description |
| string | Ja | Pfad zu |
| string | Ja | Name der Quelldatei, die nachgeschlagen werden soll (z. B. |
| string | Nein | Löst die sitzungsbezogene Zustandsdatei für die gleichzeitige Isolierung auf. |
| double | Nein | Abdeckungsschwellenwert (0.0–1.0) zur Berechnung von |
GetUncoveredBranches
Parameter | Type | Required | Description |
| string | Ja | Pfad zu |
| string | Ja | Name der zu untersuchenden Methode (Teilübereinstimmung unterstützt; gibt alle übereinstimmenden Methoden zurück) |
| string | Nein | Löst die sitzungsbezogene Zustandsdatei für die gleichzeitige Isolierung auf. |
GetCoverageDiff
Parameter | Type | Required | Description |
| string | Ja | Pfad zur aktuellen |
| string | Nein | Verzeichnis zum Speichern der Basislinie; standardmäßig das übergeordnete Verzeichnis der XML |
| string | Nein | Isoliert die Basislinie als |
AppendTestCode
Parameter | Type | Required | Description |
| string | Ja | Vollständiger Pfad zur Ziel- |
| string | Ja | C#-Code zum Einfügen |
| string | Nein | Wenn angegeben, wird Code nach dem letzten Vorkommen dieser Zeichenfolge eingefügt (mit leerzeichen-toleranter Rückfalloption). Wenn weggelassen, wird vor der letzten |
CleanupSession
Parameter | Type | Required | Description |
| string | Ja | Projektarbeitsverzeichnis, das |
| string | Nein | Wenn gesetzt, werden nur Zustandsdateien und Verzeichnisse entfernt, die auf diese Sitzung beschränkt sind. |
| int | Nein | Wenn |
Zustandsdateien
Alle Zustandsdateien werden in ein .mcp-coverage/-Unterverzeichnis im Arbeitsverzeichnis geschrieben, sodass das Projektstammverzeichnis sauber bleibt. Fügen Sie .mcp-coverage/ zur .gitignore des Ziel-Repositorys hinzu.
Datei | Zweck |
| Standard-Cobertura-XML-Pfad für die Einzel-Agent-Nutzung |
| Sitzungsbezogener Cobertura-XML-Pfad |
| Standard-Abdeckungsbasislinie für Diff |
| Sitzungsbezogene Abdeckungsbasislinie |
Plugin (Skills & Agent)
Dieses Repository enthält ein plugin/-Verzeichnis mit Claude-Code-Fähigkeiten und einer Agent-Definition für geführte Testabdeckungs-Workflows:
plugin/
├── plugin.json
├── agents/
│ └── test-coverage.agent.md
└── skills/
├── scaffold-test-files/ — Create test directories and files mirroring source structure
├── run-coverage/ — Run tests and view coverage reports
├── analyze-coverage-gaps/ — Find uncovered branches and compare diffs
└── improve-test-coverage/ — Iterative loop to reach 80% coverageDie Fähigkeiten unterstützen NUnit, xUnit und MSTest mit framework-agnostischen Referenzdokumenten in references/unit.md und references/integration.md.
Abhängigkeiten
Paket | Version | Zweck |
| 10.0.7 | DI und Hosting |
| 1.2.0 | MCP-Server-Framework |
| 5.3.0 | Roslyn-AST für sichere Code-Einfügung und genaue Methodenzählung (~15MB) |
Sicherheit
dotnet-coverage-mcp läuft als lokaler stdio-Prozess und validiert jedes Tool-Argument gegen COVERAGE_MCP_ALLOWED_ROOT, um den Dateisystemzugriff einzuschränken. Siehe SECURITY.md für das Bedrohungsmodell, Härtungsempfehlungen und wie Sie eine Schwachstelle melden.
Beiträge
Beiträge sind willkommen. Siehe CONTRIBUTING.md für Entwicklungseinrichtung, Pull-Request-Richtlinien und Code-Konventionen. Nennenswerte Änderungen werden in CHANGELOG.md verfolgt.
Veröffentlichung
Nur für Maintainer – der Release-Prozess, die NuGet-Veröffentlichung und die MCP-Registry-Einreichung sind in RELEASING.md dokumentiert.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that enables AI agents to debug .NET applications using netcoredbg. It supports core debugging tasks like setting breakpoints, stepping through code, and inspecting variables or stack traces.1MIT
- AlicenseAqualityFmaintenanceMCP server for Codecov that provides tools to get commit coverage totals and prompts to suggest tests to write.1736ISC
- AlicenseAqualityCmaintenanceAn MCP server that exposes 41 Azure DevOps tools to AI assistants, enabling management of pipelines, repositories, pull requests, releases, work items, test management, and wikis through natural language.41MIT
- AlicenseAqualityAmaintenanceAn MCP server that brings senior-QA discipline to AI coding assistants, enabling test planning, TDD, mutation testing, and code review.486Apache 2.0
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for AI access to SmartBear tools, including BugSnag, Reflect, Swagger, PactFlow, QTM4J.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Hyeonu-Cha/dotnet-coverage-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server