dotnet-coverage-mcp
dotnet-coverage-mcp
Claude Code、Gemini CLI などのAIアシスタントに .NET のテストカバレッジツールへの直接アクセスを提供する MCP (Model Context Protocol) サーバーです。dotnet test の実行、Cobertura XML の解析、未カバーのブランチの特定、実行間のカバレッジ差分、テストコードの追加を、すべて stdio 経由で行えます。
目的
このサーバーにより、AIアシスタントはチャットから離れることなく、単体テストの実行、カバレッジデータの収集、結果の分析を行うことができます。dotnet test を手動で実行してレポートを解析する代わりに、AI はサーバーのツールを直接呼び出して次のことができます:
ソースファイルを発見し、行数予算に基づいてスマートなバッチを作成
フィルタリングされたテストセットを実行してカバレッジを収集
コンパクトで AI 向けに最適化されたカバレッジサマリーを読み取る(メソッドレベルの行/ブランチ率)
設定可能な目標率(デフォルト 80%)に対するファイルごとのカバレッジを確認
未カバーのブランチを構造化 JSON として特定
実行間のカバレッジ差分を確認し、変更された部分だけを把握
既存のテストファイルに新しいテストコードをアトミック書き込みで追加
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 をベースラインと比較します。新規追加・削除されたメソッドを含むメソッドレベルの変更を示します。並行実行の分離のための |
| C# テストコードをテストファイルに挿入または追加します。空白の差異を許容するフォールバックマッチングによるアンカーベースの挿入をサポートします。ファイル破損を防ぐためにアトミック書き込みを使用します。 |
| セッション状態ファイルと |
バッチワークフロー
ソースファイルが多いプロジェクトでは、次のワークフローが推奨されます:
発見 — フォルダまたは
.csprojに対してGetSourceFilesを呼び出し、すべてのファイルとスマートバッチを取得一度実行 — 広いフィルター(例:
*)で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として保存しますアトミック書き込み — すべてのファイル書き込み(状態ファイルとテストコード)は、一時ファイルへの書き込み後にリネームする方式を使用し、競合状態やプロセスクラッシュによる破損を防ぎます
制限 — ビルド出力はセッションスコープではありません。
sessionIdはカバレッジアーティファクトを分離しますが、.NET ビルドは分離しません。dotnet testは対象プロジェクトを共有のobj/とbin/にコンパイルしますが、これらはセッションごとではないため、同じテストプロジェクトに対して同時にRunTestsWithCoverageを実行する2つのエージェントは、それらの出力で衝突し、buildError(例:CS2012: the file is being used by another process)で失敗します。並行エージェントは異なるテストプロジェクトに対して実行するか、リポジトリの別々の作業コピーで実行してください。1つのプロジェクトで複数のエージェントを実行する場合も、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
Parameter | Type | Required | Description |
| string | Yes |
|
| string | Yes | テストフィルター文字列( |
| string | No | 作業ディレクトリ。デフォルトはプロジェクトディレクトリ |
| bool | No |
|
| string | No | 出力ディレクトリ( |
| string | No | この名前と一致する型にカバレッジ収集を制限(coverlet の |
| bool | No |
|
GetCoverageSummary
Parameter | Type | Required | Description |
| string | Yes | 生成された |
| double | No | 設定時( |
| int | No | ブランチカバレッジが最も低い N 個のクラスのみを返します(結果は悪い順にソート)。省略すると全クラスを返します。 |
| int | No | クラスごとにブランチカバレッジが最も低いメソッドを最大この数だけ保持し、残りを削除します。省略すると全メソッドを保持します。 |
GetFileCoverage
Parameter | Type | Required | Description |
| string | Yes |
|
| string | Yes | 検索するソースファイル名(例: |
| string | No | 並行分離のためのセッションスコープの状態ファイルを解決します。 |
| double | No |
|
GetUncoveredBranches
Parameter | Type | Required | Description |
| string | Yes |
|
| string | Yes | 検査するメソッド名(部分一致をサポート。一致するすべてのメソッドを返します) |
| string | No | 並行分離のためのセッションスコープの状態ファイルを解決します。 |
GetCoverageDiff
Parameter | Type | Required | Description |
| string | Yes | 現在の |
| string | No | ベースラインを保存するディレクトリ。デフォルトは XML の親ディレクトリ |
| string | No | ベースラインを |
AppendTestCode
Parameter | Type | Required | Description |
| string | Yes | 対象の |
| string | Yes | 挿入する C# コード |
| string | No | 指定した場合、この文字列の最後の出現箇所の後にコードを挿入します(空白を許容するフォールバック付き)。省略した場合、最後の |
CleanupSession
Parameter | Type | Required | Description |
| string | Yes |
|
| string | No | 設定時、このセッションにスコープされた状態ファイルとディレクトリのみを削除します。 |
| int | No |
|
状態ファイル
すべての状態ファイルは作業ディレクトリ内の .mcp-coverage/ サブディレクトリに書き込まれ、プロジェクトルートをクリーンに保ちます。ターゲットリポジトリの .gitignore に .mcp-coverage/ を追加してください。
File | Purpose |
| シングルエージェント使用時のデフォルトの Cobertura XML パス |
| セッションスコープの Cobertura XML パス |
| 差分用のデフォルトのカバレッジベースライン |
| セッションスコープのカバレッジベースライン |
プラグイン(スキルとエージェント)
このリポジトリには、ガイド付きテストカバレッジワークフローのための 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 にフレームワーク非依存のリファレンスドキュメントがあります。
依存関係
Package | Version | Purpose |
| 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