dotnet-coverage-mcp
dotnet-coverage-mcp
MCP(Model Context Protocol) 서버로, Claude Code, Gemini CLI 등 AI 어시스턴트에게 .NET 테스트 커버리지 도구에 대한 직접 액세스를 제공합니다. dotnet test 실행, Cobertura XML 파싱, 커버되지 않은 브랜치 식별, 실행 간 커버리지 비교(diff), 테스트 코드 추가를 모두 stdio를 통해 수행합니다.
목적
이 서버는 AI 어시스턴트가 채팅을 벗어나지 않고도 단위 테스트를 실행하고, 커버리지 데이터를 수집하며, 결과를 분석할 수 있게 해줍니다. dotnet test를 수동으로 실행하고 보고서를 파싱하는 대신, AI가 서버의 도구를 직접 호출하여 다음을 수행할 수 있습니다:
소스 파일을 검색하고 라인 예산(line budget) 기준으로 스마트 배치 구성
필터링된 테스트 집합을 실행하고 커버리지 수집
간결하고 AI에 최적화된 커버리지 요약 읽기(메서드 수준 라인/브랜치 비율)
구성 가능한 목표 비율(기본 80%)에 대한 파일별 커버리지 확인
커버되지 않은 브랜치를 구조화된 JSON으로 식별
실행 간 커버리지 비교(diff)로 변경된 사항만 확인
기존 테스트 파일에 새 테스트 코드를 원자적 쓰기(atomic write)로 추가
Related MCP server: codecov-mcp-server
작동 방식
서버는 콘솔 프로세스로 시작되며 MCP 프로토콜을 사용해 stdio를 통해 통신합니다. MCP 호환 클라이언트(Claude Code, Gemini CLI 등)가 프로세스를 실행하고 도구를 함수처럼 호출합니다.
AI Client <--stdio/MCP--> dotnet-coverage-mcp <--shell--> dotnet test + reportgenerator사용 가능한 도구
도구 | 설명 |
| 파일, 폴더 또는 |
| XPlat Code Coverage로 |
|
|
| Cobertura XML에서 단일 소스 파일의 커버리지를 가져옵니다. |
| 주어진 이름과 일치하는 메서드의 커버되지 않은 브랜치 조건을 찾습니다. 부분 이름 매칭을 지원하며 일치하는 모든 메서드를 반환합니다. |
| 현재 Cobertura XML을 기준선(baseline)과 비교합니다. 추가 및 제거된 메서드를 포함한 메서드 수준 변경 사항을 보여줍니다. 동시성 격리를 위해 |
| 테스트 파일에 C# 테스트 코드를 삽입하거나 추가합니다. 공백 허용 폴백 매칭을 통한 앵커 기반 삽입을 지원합니다. 파일 손상을 방지하기 위해 원자적 쓰기를 사용합니다. |
| 세션 상태 파일과 |
배치 워크플로
소스 파일이 많은 프로젝트의 경우 권장 워크플로는 다음과 같습니다:
검색 — 폴더 또는
.csproj에서GetSourceFiles를 호출하여 모든 파일과 스마트 배치를 가져옵니다1회 실행 — 광범위한 필터(예:
*)로RunTestsWithCoverage를 호출하여 모든 파일의 커버리지를 수집합니다파일별 확인 — 현재 배치의 각 파일에 대해
GetFileCoverage를 호출합니다(즉시 XML 파싱, 테스트 재실행 없음)집중 — 브랜치 커버리지가 가장 낮은 메서드 3개를 선택하고 각각에 대해
GetUncoveredBranches를 호출합니다테스트 작성 —
AppendTestCode를 사용하여 테스트 메서드를 추가합니다재실행 및 비교 — 테스트를 한 번 실행하고
GetCoverageDiff를 호출하여 개선을 확인합니다반복 — 배치 파일이 목표 비율(기본 80%)을 충족하거나 개선 없이 3주기가 지날 때까지 계속한 후 다음 배치로 이동합니다
이렇게 하면 파일별 진행 상황을 추적하면서도 dotnet test 호출(주요 병목 지점)을 최소화할 수 있습니다.
동시성
여러 AI 에이전트가 각 도구 호출에 sessionId를 전달하여 병렬로 실행할 수 있으며, 이를 통해 커버리지 아티팩트가 격리됩니다:
격리된 출력 디렉터리 —
RunTestsWithCoverage는 세션별로TestResults-{hash}/및coveragereport-{hash}/를 생성하여 한 에이전트가 다른 에이전트의 XML을 파싱 중에 삭제하는 것을 방지합니다범위가 지정된 상태 파일 — 커버리지 상태는
.mcp-coverage/.coverage-state-{hash}에 기록되므로ResolveCoberturaPath가 각 세션에 대해 올바른 XML을 찾습니다범위가 지정된 기준선 —
GetCoverageDiff는 세션별로 기준선을.coverage-prev-{hash}.xml로 저장합니다원자적 쓰기 — 모든 파일 쓰기(상태 파일 및 테스트 코드)는 임시 파일에 쓴 후 이름을 바꾸는 방식(write-to-temp-then-rename)을 사용하여 경쟁 조건이나 프로세스 충돌로 인한 손상을 방지합니다
제한 사항 — 빌드 출력물은 세션 범위로 격리되지 않습니다.
sessionId는 .NET 빌드가 아닌 커버리지 아티팩트만 격리합니다.dotnet test는 대상 프로젝트를 공유obj/및bin/에 컴파일하며 이는 세션별로 구분되지 않으므로, 두 에이전트가 동시에 동일한 테스트 프로젝트에 대해RunTestsWithCoverage를 실행하면 해당 출력물에서 충돌하여buildError(예:CS2012: the file is being used by another process)로 실패합니다. 병렬 에이전트는 서로 다른 테스트 프로젝트 또는 저장소의 별도 작업 복사본에서 실행하세요. 한 프로젝트에서 여러 에이전트를 실행하는 것은dotnet test빌드가 겹치지 않는 한 문제없습니다.
sessionId가 없으면 도구는 공유 기본값을 사용합니다 — 단일 에이전트 사용에는 안전합니다.
요구 사항
.NET 9.0 SDK(이상) — https://dotnet.microsoft.com/download
reportgenerator 전역 도구 — 서버가 커버리지 보고서를 렌더링하기 위해 이 도구를 호출합니다(아래 설치 단계에서 설치)
MCP 호환 클라이언트(Claude Code, Gemini CLI 등)
COVERAGE_MCP_ALLOWED_ROOT— 권장. 저장소 루트로 설정하면 모든 도구의 파일시스템 접근이 해당 하위 트리로 제한됩니다. 클라이언트가 이 루트 밖의 경로를 전달하면pathNotAllowed로 거부됩니다. 설정하지 않으면 서버는 경고를 한 번 기록하고 모든 경로를 허용합니다(하위 호환용이지만 공유 환경에서는 권장되지 않습니다).export COVERAGE_MCP_ALLOWED_ROOT=/path/to/your/repo
설치
NuGet에서 서버를 전역 .NET 도구로 설치합니다:
dotnet tool install --global dotnet-coverage-mcp서버는 커버리지 보고서를 렌더링하기 위해 reportgenerator 전역 도구에 의존합니다 — 함께 설치하세요:
dotnet tool install --global dotnet-reportgenerator-globaltool설치 후 dotnet-coverage-mcp 명령이 PATH에 추가됩니다.
소스에서 빌드 및 실행
cd <path-to-dotnet-coverage-mcp>
# Restore dependencies
dotnet restore
# Build
dotnet build
# Run
dotnet run서버가 시작되고 stdin/stdout을 통해 MCP 메시지를 기다립니다.
MCP 클라이언트 구성
전역 도구(dotnet tool install --global dotnet-coverage-mcp)를 설치한 후,
서버를 MCP 클라이언트에 등록하세요. COVERAGE_MCP_ALLOWED_ROOT를 서버가
작동할 저장소로 설정하세요.
Claude Code
claude mcp add coverage --env COVERAGE_MCP_ALLOWED_ROOT=/path/to/your/repo -- dotnet-coverage-mcpClaude Desktop
claude_desktop_config.json에 추가합니다(설정 → 개발자 → 구성 편집):
{
"mcpServers": {
"coverage": {
"command": "dotnet-coverage-mcp",
"env": {
"COVERAGE_MCP_ALLOWED_ROOT": "/path/to/your/repo"
}
}
}
}Cursor
~/.cursor/mcp.json(전역) 또는 .cursor/mcp.json(프로젝트별)에 추가합니다:
{
"mcpServers": {
"coverage": {
"command": "dotnet-coverage-mcp",
"env": {
"COVERAGE_MCP_ALLOWED_ROOT": "/path/to/your/repo"
}
}
}
}VS Code (GitHub Copilot)
.vscode/mcp.json에 추가합니다:
{
"servers": {
"coverage": {
"type": "stdio",
"command": "dotnet-coverage-mcp",
"env": {
"COVERAGE_MCP_ALLOWED_ROOT": "/path/to/your/repo"
}
}
}
}소스에서 실행
전역 도구 대신 소스에서 실행하려면 dotnet run을 사용하세요:
{
"mcpServers": {
"coverage": {
"command": "dotnet",
"args": ["run", "--project", "<path-to-dotnet-coverage-mcp>"],
"transport": "stdio"
}
}
}또는 컴파일된 실행 파일을 직접 지정하세요:
{
"mcpServers": {
"coverage": {
"command": "<path-to-dotnet-coverage-mcp>\\bin\\Debug\\net9.0\\DotNetCoverageMcp.exe",
"transport": "stdio"
}
}
}도구 매개변수
GetSourceFiles
매개변수 | 유형 | 필수 | 설명 |
| string | 예 |
|
| int | 아니요 | 배치당 최대 총 라인 수(기본값: 300). 작은 파일은 함께 그룹화되고, 큰 파일은 자체 배치를 갖습니다. |
RunTestsWithCoverage
매개변수 | 유형 | 필수 | 설명 |
| string | 예 |
|
| string | 예 | 테스트 필터 문자열( |
| string | 아니요 | 작업 디렉터리; 기본값은 프로젝트 디렉터리 |
| bool | 아니요 |
|
| string | 아니요 | 출력 디렉터리( |
| string | 아니요 | 이 이름과 일치하는 유형으로 커버리지 수집을 제한합니다(cover |
| bool | 아니요 |
|
GetCoverageSummary
매개변수 | 유형 | 필수 | 설명 |
| string | 예 | 생성된 |
| double | 아니요 | 설정 시( |
| int | 아니요 | 분기 커버리지가 가장 낮은 N개 클래스만 반환합니다(결과는 최저 우선으로 정렬). 모든 클래스를 보려면 생략하십시오. |
| int | 아니요 | 클래스당 분기 커버리지가 가장 낮은 메서드를 최대 이 개수만 유지하고 나머지는 제거합니다. 모든 메서드를 유지하려면 생략하십시오. |
GetFileCoverage
매개변수 | 유형 | 필수 | 설명 |
| string | 예 |
|
| string | 예 | 조회할 소스 파일 이름(예: |
| string | 아니요 | 세션 범위 상태 파일을 해석하여 동시 격리를 지원합니다. |
| double | 아니요 |
|
GetUncoveredBranches
매개변수 | 유형 | 필수 | 설명 |
| string | 예 |
|
| string | 예 | 검사할 메서드 이름(부분 일치 지원; 일치하는 모든 메서드 반환) |
| string | 아니요 | 세션 범위 상태 파일을 해석하여 동시 격리를 지원합니다. |
GetCoverageDiff
매개변수 | 유형 | 필수 | 설명 |
| string | 예 | 현재 |
| string | 아니요 | 기준선 저장 디렉터리; 기본값은 XML의 부모 디렉터리 |
| string | 아니요 | 기준선을 |
AppendTestCode
매개변수 | 유형 | 필수 | 설명 |
| string | 예 | 대상 |
| string | 예 | 삽입할 C# 코드 |
| string | 아니요 | 제공 시 이 문자열의 마지막 발생 위치 뒤에 코드를 삽입합니다(공백 허용 폴백 포함). 생략하면 마지막 |
CleanupSession
매개변수 | 유형 | 필수 | 설명 |
| string | 예 |
|
| string | 아니요 | 설정 시 이 세션에 범위가 지정된 상태 파일과 디렉터리만 제거합니다. |
| int | 아니요 |
|
상태 파일
모든 상태 파일은 작업 디렉터리 내부의 .mcp-coverage/ 하위 디렉터리에 기록되어 프로젝트 루트를 깨끗하게 유지합니다. 대상 저장소의 .gitignore에 .mcp-coverage/를 추가하십시오.
파일 | 용도 |
| 단일 에이전트 사용을 위한 기본 Cobertura XML 경로 |
| 세션 범위 Cobertura XML 경로 |
| diff를 위한 기본 커버리지 기준선 |
| 세션 범위 커버리지 기준선 |
플러그인(스킬 및 에이전트)
이 저장소에는 안내된 테스트 커버리지 워크플로를 위한 Claude Code 스킬과 에이전트 정의가 포함된 plugin/ 디렉터리가 있습니다:
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% coverage스킬은 NUnit, xUnit, MSTest를 지원하며 references/unit.md 및 references/integration.md에 프레임워크에 구애받지 않는 참조 문서가 있습니다.
종속성
패키지 | 버전 | 용도 |
| 10.0.7 | DI 및 호스팅 |
| 1.2.0 | MCP 서버 프레임워크 |
| 5.3.0 | 안전한 코드 삽입 및 정확한 메서드 계산을 위한 Roslyn AST(~15MB) |
보안
dotnet-coverage-mcp는 로컬 stdio 프로세스로 실행되며 COVERAGE_MCP_ALLOWED_ROOT에 대해 모든 도구 인수를 검증하여 파일 시스템 액세스를 제한합니다. 위협 모델, 강화 권장 사항 및 취약점 신고 방법은 SECURITY.md를 참조하십시오.
기여
기여를 환영합니다. 개발 설정, 풀 리퀘스트 지침 및 코드 규칙은 CONTRIBUTING.md를 참조하십시오. 주요 변경 사항은 CHANGELOG.md에 기록됩니다.
릴리스
관리자 전용 — 릴리스 프로세스, NuGet 게시 및 MCP 레지스트리 제출은 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