dotnet-coverage-mcp
dotnet-coverage-mcp
Un servidor MCP (Model Context Protocol) que brinda a los asistentes de IA — Claude Code, Gemini CLI y otros — acceso directo a las herramientas de cobertura de pruebas de .NET. Ejecuta dotnet test, analiza XML de Cobertura, identifica ramas no cubiertas, compara la cobertura entre ejecuciones y añade código de prueba, todo a través de stdio.
Propósito
Este servidor permite que un asistente de IA ejecute pruebas unitarias, recopile datos de cobertura y analice resultados, todo sin salir del chat. En lugar de ejecutar manualmente dotnet test y analizar informes, la IA puede llamar directamente a las herramientas del servidor para:
Descubrir archivos fuente y crear lotes inteligentes según el presupuesto de líneas
Ejecutar un conjunto filtrado de pruebas y recopilar cobertura
Leer resúmenes de cobertura compactos y optimizados para IA (tasas de línea/rama a nivel de método)
Verificar la cobertura por archivo contra una tasa objetivo configurable (80% por defecto)
Identificar ramas no cubiertas como JSON estructurado
Comparar la cobertura entre ejecuciones para ver solo lo que cambió
Añadir nuevo código de prueba a un archivo de prueba existente con escrituras atómicas
Related MCP server: codecov-mcp-server
Cómo funciona
El servidor se inicia como un proceso de consola y se comunica a través de stdio usando el protocolo MCP. Un cliente compatible con MCP (Claude Code, Gemini CLI, etc.) lanza el proceso y llama a sus herramientas como si fueran funciones.
AI Client <--stdio/MCP--> dotnet-coverage-mcp <--shell--> dotnet test + reportgeneratorHerramientas disponibles
Herramienta | Descripción |
| Descubre archivos |
| Ejecuta |
| Analiza |
| Obtiene la cobertura de un único archivo fuente desde XML de Cobertura. Devuelve |
| Encuentra condiciones de rama no cubiertas para métodos que coinciden con un nombre dado. Devuelve todos los métodos coincidentes con soporte de nombre parcial. Admite |
| Compara el XML de Cobertura actual contra la línea base. Muestra cambios a nivel de método, incluidos métodos nuevos y eliminados. Admite |
| Inserta o añade código de prueba C# en un archivo de prueba. Admite inserción basada en anclas con coincidencia de respaldo tolerante a espacios en blanco. Usa escrituras atómicas para evitar la corrupción de archivos. |
| Elimina archivos de estado de sesión y directorios |
Flujo de trabajo por lotes
Para proyectos con muchos archivos fuente, el flujo de trabajo recomendado es:
Descubrir — Llama a
GetSourceFilesen una carpeta o.csprojpara obtener todos los archivos y lotes inteligentesEjecutar una vez — Llama a
RunTestsWithCoveragecon un filtro amplio (p. ej.,*) para recopilar cobertura en todos los archivosVerificar por archivo — Llama a
GetFileCoveragepara cada archivo del lote actual (análisis XML instantáneo, sin re-ejecutar pruebas)Enfocar — Elige los 3 métodos con menor cobertura de ramas y llama a
GetUncoveredBranchespara cada unoEscribir pruebas — Usa
AppendTestCodepara añadir métodos de pruebaRe-ejecutar y comparar — Ejecuta las pruebas una vez, llama a
GetCoverageDiffpara verificar la mejoraRepetir — Continúa hasta que los archivos del lote cumplan la tasa objetivo (80% por defecto) o 3 ciclos sin mejora, luego pasa al siguiente lote
Esto minimiza las invocaciones de dotnet test (el principal cuello de botella) mientras sigue el progreso por archivo.
Concurrencia
Varios agentes de IA pueden ejecutarse en paralelo pasando un sessionId a cada llamada de herramienta, lo que aísla sus artefactos de cobertura:
Directorios de salida aislados —
RunTestsWithCoveragecreaTestResults-{hash}/ycoveragereport-{hash}/por sesión, evitando que un agente elimine el XML de otro durante el análisisArchivos de estado acotados — El estado de cobertura se escribe en
.mcp-coverage/.coverage-state-{hash}, por lo queResolveCoberturaPathresuelve el XML correcto para cada sesiónLíneas base acotadas —
GetCoverageDiffalmacena líneas base como.coverage-prev-{hash}.xmlpor sesiónEscrituras atómicas — Todas las escrituras de archivos (archivos de estado y código de prueba) usan escribir-a-temporal-luego-renombrar para evitar la corrupción por condiciones de carrera o fallos del proceso
Limitación: los resultados de compilación no están acotados por sesión.
sessionIdaísla los artefactos de cobertura, no la compilación de .NET.dotnet testcompila el proyecto de destino en susobj/ybin/compartidos, que no son por sesión, por lo que dos agentes que ejecutanRunTestsWithCoveragecontra el mismo proyecto de prueba al mismo tiempo chocan en esos resultados y fallan conbuildError(p. ej.,CS2012: el archivo está siendo usado por otro proceso). Ejecuta agentes en paralelo contra proyectos de prueba diferentes, o en copias de trabajo separadas del repositorio. Varios agentes en un solo proyecto están bien siempre que sus compilaciones dedotnet testno se superpongan.
Sin sessionId, las herramientas usan valores predeterminados compartidos: seguro para uso de un solo agente.
Requisitos
.NET 9.0 SDK (o posterior) — https://dotnet.microsoft.com/download
Herramienta global reportgenerator — el servidor la invoca para renderizar informes de cobertura (instalada en el paso Instalación a continuación)
Un cliente compatible con MCP (Claude Code, Gemini CLI, etc.)
COVERAGE_MCP_ALLOWED_ROOT— recomendado. Establécelo en la raíz de tu repositorio para restringir el acceso al sistema de archivos de cada herramienta a ese subárbol. Cualquier ruta pasada por el cliente fuera de esta raíz se rechaza conpathNotAllowed. Si no se establece, el servidor registra una advertencia una vez y acepta cualquier ruta (compatible con versiones anteriores, pero no recomendado para entornos compartidos).export COVERAGE_MCP_ALLOWED_ROOT=/path/to/your/repo
Instalación
Instala el servidor como una herramienta global de .NET desde NuGet:
dotnet tool install --global dotnet-coverage-mcpEl servidor depende de la herramienta global reportgenerator para renderizar informes de cobertura: instálala también:
dotnet tool install --global dotnet-reportgenerator-globaltoolDespués de la instalación, el comando dotnet-coverage-mcp está en tu PATH.
Compilar y ejecutar (desde el código fuente)
cd <path-to-dotnet-coverage-mcp>
# Restore dependencies
dotnet restore
# Build
dotnet build
# Run
dotnet runEl servidor se iniciará y esperará mensajes MCP a través de stdin/stdout.
Configuración del cliente MCP
Después de instalar la herramienta global (dotnet tool install --global dotnet-coverage-mcp),
registra el servidor con tu cliente MCP. Establece COVERAGE_MCP_ALLOWED_ROOT al
repositorio en el que quieres que opere el servidor.
Claude Code
claude mcp add coverage --env COVERAGE_MCP_ALLOWED_ROOT=/path/to/your/repo -- dotnet-coverage-mcpClaude Desktop
Añade a claude_desktop_config.json (Configuración → Desarrollador → Editar configuración):
{
"mcpServers": {
"coverage": {
"command": "dotnet-coverage-mcp",
"env": {
"COVERAGE_MCP_ALLOWED_ROOT": "/path/to/your/repo"
}
}
}
}Cursor
Añade a ~/.cursor/mcp.json (global) o .cursor/mcp.json (por proyecto):
{
"mcpServers": {
"coverage": {
"command": "dotnet-coverage-mcp",
"env": {
"COVERAGE_MCP_ALLOWED_ROOT": "/path/to/your/repo"
}
}
}
}VS Code (GitHub Copilot)
Añade a .vscode/mcp.json:
{
"servers": {
"coverage": {
"type": "stdio",
"command": "dotnet-coverage-mcp",
"env": {
"COVERAGE_MCP_ALLOWED_ROOT": "/path/to/your/repo"
}
}
}
}Ejecutar desde el código fuente
Para ejecutar desde el código fuente en lugar de la herramienta global, usa dotnet run:
{
"mcpServers": {
"coverage": {
"command": "dotnet",
"args": ["run", "--project", "<path-to-dotnet-coverage-mcp>"],
"transport": "stdio"
}
}
}O apunta directamente al ejecutable compilado:
{
"mcpServers": {
"coverage": {
"command": "<path-to-dotnet-coverage-mcp>\\bin\\Debug\\net9.0\\DotNetCoverageMcp.exe",
"transport": "stdio"
}
}
}Parámetros de las herramientas
GetSourceFiles
Parámetro | Tipo | Obligatorio | Descripción |
| string | Sí | Ruta a un archivo |
| int | No | Máximo total de líneas por lote (por defecto: 300). Los archivos pequeños se agrupan; los grandes tienen su propio lote. |
RunTestsWithCoverage
Parámetro | Tipo | Obligatorio | Descripción |
| string | Sí | Ruta completa al proyecto de prueba |
| string | Sí | Cadena de filtro de prueba (se compara con |
| string | No | Directorio de trabajo; por defecto, el directorio del proyecto |
| bool | No | Cuando es |
| string | No | Aísla los directorios de salida ( |
| string | No | Restringe la recopilación de cobertura a los tipos que coincidan con este nombre (filtro |
| bool | No | Cuando es |
GetCoverageSummary
Parámetro | Tipo | Obligatorio | Descripción |
| string | Sí | Ruta completa al archivo |
| double | No | Cuando se establece (una fracción en |
| int | No | Devuelve solo las N clases con menor cobertura de rama (los resultados se ordenan de peor a mejor). Omítalo para todas las clases. |
| int | No | Conserva como máximo esta cantidad de métodos con menor cobertura de rama por clase, recortando el resto. Omítelo para conservar todos los métodos. |
GetFileCoverage
Parámetro | Tipo | Obligatorio | Descripción |
| string | Sí | Ruta a |
| string | Sí | Nombre del archivo fuente a buscar (p. ej., |
| string | No | Resuelve el archivo de estado con ámbito de sesión para aislamiento concurrente. |
| double | No | Umbral de cobertura (0.0–1.0) utilizado para calcular |
GetUncoveredBranches
Parámetro | Tipo | Obligatorio | Descripción |
| string | Sí | Ruta a |
| string | Sí | Nombre del método a inspeccionar (se admite coincidencia parcial; devuelve todos los métodos que coincidan) |
| string | No | Resuelve el archivo de estado con ámbito de sesión para aislamiento concurrente. |
GetCoverageDiff
Parámetro | Tipo | Obligatorio | Descripción |
| string | Sí | Ruta al |
| string | No | Directorio para almacenar la línea base; por defecto, el directorio principal del XML |
| string | No | Aísla la línea base como |
AppendTestCode
Parámetro | Tipo | Obligatorio | Descripción |
| string | Sí | Ruta completa al archivo de prueba |
| string | Sí | Código C# a insertar |
| string | No | Si se proporciona, inserta el código después de la última aparición de esta cadena (con respaldo tolerante a espacios en blanco). Si se omite, agrega antes de la última |
CleanupSession
Parámetro | Tipo | Obligatorio | Descripción |
| string | Sí | Directorio de trabajo del proyecto que contiene |
| string | No | Cuando se establece, elimina solo los archivos de estado y directorios con ámbito de esta sesión. |
| int | No | Cuando se omite |
Archivos de estado
Todos los archivos de estado se escriben en un subdirectorio .mcp-coverage/ dentro del directorio de trabajo, manteniendo limpia la raíz del proyecto. Agregue .mcp-coverage/ al .gitignore del repositorio de destino.
Archivo | Propósito |
| Ruta XML de Cobertura predeterminada para uso de un solo agente |
| Ruta XML de Cobertura con ámbito de sesión |
| Línea base de cobertura predeterminada para diff |
| Línea base de cobertura con ámbito de sesión |
Plugin (Skills y agente)
Este repositorio incluye un directorio plugin/ con skills de Claude Code y una definición de agente para flujos de trabajo guiados de cobertura de pruebas:
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% coverageLas skills admiten NUnit, xUnit y MSTest con documentación de referencia independiente del framework en references/unit.md y references/integration.md.
Dependencias
Paquete | Versión | Propósito |
| 10.0.7 | DI y hospedaje |
| 1.2.0 | Marco de servidor MCP |
| 5.3.0 | AST de Roslyn para inserción segura de código y conteo preciso de métodos (~15 MB) |
Seguridad
dotnet-coverage-mcp se ejecuta como un proceso stdio local y valida cada argumento de herramienta contra COVERAGE_MCP_ALLOWED_ROOT para limitar el acceso al sistema de archivos. Consulte SECURITY.md para conocer el modelo de amenazas, las recomendaciones de endurecimiento y cómo informar una vulnerabilidad.
Contribuciones
Las contribuciones son bienvenidas. Consulte CONTRIBUTING.md para la configuración de desarrollo, las pautas de solicitudes de extracción y las convenciones de código. Los cambios notables se registran en CHANGELOG.md.
Publicación
Solo para mantenedores: el proceso de lanzamiento, la publicación en NuGet y el envío al registro de MCP están documentados en RELEASING.md.
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