covdbg-mcp
MCP server for covdbg: C++ code coverage on Windows for AI agents. Run tests, find uncovered code, and add targeted tests. No rebuild required.
covdbg measures coverage of the Windows binaries you already build, using their PDB debug information: x64, ARM64 and 32-bit x86. It works like a debugger: it starts your executable, reads the PDB, and places lightweight probes while the program runs. The MCP server is built into the covdbg executable (since v1.3.0) and is started with covdbg mcp.
This repository holds the MCP registry metadata (server.json, glama.json) and the MCP Bundle manifest (manifest.json) for covdbg. The server itself ships with covdbg.
What an agent can do
- Run coverage on a test executable without rebuilding it.
- Rank files by uncovered lines.
- Read the uncovered code with surrounding context.
- Add a focused test, re-run it, and confirm the gap is closed.
- Query coverage databases (
.covdb) with read-only SQL, and merge them, also across checkouts and builds.
Requirements
- Windows x64, or Windows on ARM (ARM64)
- covdbg 1.3.0 or newer. This README describes covdbg 1.5.0.
- An executable with PDB debug symbols (MSVC or any PDB-producing toolchain). The x64 covdbg measures x64 and 32-bit x86 programs; the ARM64 covdbg measures ARM64 programs (covdbg 1.5 and newer).
- A one-time
covdbg login(covdbg 1.4 and newer sign in to one team, and runs need a seat in that team), orCOVDBG_PROJECT_TOKENfor CI. A public repository in GitHub Actions needs neither (covdbg 1.5 and newer, see Licensing in CI). - A
.covdbg.yamlnext to the target executable, or aconfig_pathpassed torun(see the configuration reference)
Install covdbg
- Installer (recommended): installer.msi, or installer-arm64.msi for Windows on ARM. It installs to
%LocalAppData%\Programs\Liasoft\covdbgand adds that directory to your userPATH. - Portable: portable.zip, or portable-arm64.zip for Windows on ARM. Extract it anywhere and add the directory to your
PATHyourself. Keep the agent DLLs next tocovdbg.exe: covdbg looks for them only there.
There is no separate 32-bit covdbg. The x64 build ships libcovdbg32.dll, a 32-bit build of its agent, and measures 32-bit programs with the same covdbg.exe.
Then open a new terminal and sign in:
covdbg --version
covdbg login
Sign-in is team-scoped: in the browser you choose one team (your personal team, or a team you own or hold a seat in), and the agent's runs are licensed for that team. Use covdbg login --team <slug> to choose it up front, and covdbg whoami to see which team is active.
Licensing in CI
In CI, set COVDBG_PROJECT_TOKEN in the server's environment; the run is licensed for the token's team.
A public repository in GitHub Actions needs no project token (covdbg 1.5 and newer). Grant the job permissions: id-token: write: without COVDBG_PROJECT_TOKEN and without a stored sign-in, covdbg presents the token GitHub issues to the job, which names the repository it runs in. GitHub issues no such token to a pull request from a fork. A private repository still needs a project token, and a project token that is set takes precedence.
Client setup
The server uses stdio transport. Start it from your project directory, or pass --workspace <dir>.
| Option | Environment variable | Default | Purpose |
|---|---|---|---|
--workspace <dir> |
working directory | The project directory; the default root for discover |
|
--query-timeout <ms> |
COVDBG_MCP_QUERY_TIMEOUT_MS |
5000 | How long one query statement may run, 1 to 600000 ms (covdbg 1.5 and newer). The option wins over the variable. |
Claude Code
From the project directory:
claude mcp add covdbg -- covdbg mcp
Or add a project .mcp.json:
{
"mcpServers": {
"covdbg": {
"command": "covdbg",
"args": ["mcp"]
}
}
}
VS Code
.vscode/mcp.json:
{
"servers": {
"covdbg": {
"type": "stdio",
"command": "covdbg",
"args": ["mcp", "--workspace", "${workspaceFolder}"]
}
}
}
Cursor
.cursor/mcp.json:
{
"mcpServers": {
"covdbg": {
"command": "covdbg",
"args": ["mcp"]
}
}
}
Claude Desktop (MCP Bundle)
- Download
covdbg.mcpbfrom the latest release. - Open it with Claude Desktop, or drag it into Settings → Extensions.
- Set the following:
- covdbg executable: the path to
covdbg.exe. The default is the MSI install location. - Workspace: your project directory.
- Project token: optional. Leave it empty if you have run
covdbg login; runs are then licensed for the team you signed in to (seecovdbg whoami).
- covdbg executable: the path to
The bundle does not contain covdbg itself. It launches your installed covdbg.exe, so covdbg updates take effect without a new bundle.
Tools
| Tool | Purpose | Main inputs |
|---|---|---|
guide |
Workflow and configuration guidance. Call it before the first run. | optional topic (workflow, config, excludes, baseline, merging, uncovered, children, libraries) |
discover |
Find executables and coverage databases | optional root |
run |
Start a coverage run; returns a run session right away | target; optional target_arguments, config_path, output_path, follow_children |
wait_run |
Wait briefly or collect the completed result | session_id; optional timeout_seconds |
cancel_run |
Terminate a run | session_id |
open_coverage |
Open an existing database read-only | path |
files |
Rank files by uncovered lines | session_id; optional limit, max_coverage_percent |
code |
Read uncovered source segments with context | session_id, file_path |
query |
Run one read-only SQL statement, within a time limit | session_id, sql; optional max_rows |
merge |
Combine databases, also from different checkouts and builds | input_paths, output_path |
close |
Release a run or coverage session | session_id |
Limits and behavior
- Run session IDs start with
run-; coverage session IDs start withcovdb-. - At most 8 runs in flight and 32 open coverage sessions. A run counts while its covdbg process is alive; once
wait_runhas seen it finish, it no longer takes a slot. wait_runblocks for at most 30 seconds. If it reportsstillRunning, call it again.- Run outcomes are
success,no_functions_to_track,license_failure, orerror. - covdbg's exit code does not carry the target's exit code, so check test results separately.
follow_childrenmeasures the processes the target starts. A launcher without debug information of its own, such asctest.exeorcmd.exe, runs unmeasured and covdbg measures its children, sorunwith targetctest.exe,target_arguments--test-dir buildandfollow_childrenmeasures the test binaries CTest runs. Every process of one binary adds its hits to one database (covdbg 1.5 and newer).querystops a statement still running at the time limit, 5000 ms unless--query-timeoutsays otherwise, and answers with an error; the session stays open. It also bounds a statement's size: at most 100 KiB of SQL, expressions nested 250 deep, 100SELECTs in one compound,LIKE/GLOBpatterns of 1000 bytes, and 16 MiB for any one string or blob (covdbg 1.5 and newer).mergematches source files recorded in different checkouts by their path relative to each run'ssource_root, and keeps different builds at one module path, such as the x64 and ARM64 builds of a test, side by side (covdbg 1.5 and newer).remappedModulesandremappedFilessay how many it matched that way.- covdbg 1.5.0 writes coverage databases with schema 8 and refuses
.covdbfiles written by earlier versions. Record that coverage again.
Upgrading while the server runs
From covdbg 1.5.0, the installer can upgrade or uninstall covdbg while a client holds covdbg mcp open, without a reboot. The running server keeps answering from the old version, and the runs it starts use the newly installed covdbg.exe. Reconnect the server to get the new version of the server itself: in Claude Code, /mcp → covdbg → Reconnect.
Environment variables
| Variable | Purpose |
|---|---|
COVDBG_PROJECT_TOKEN |
Project token for CI or headless use. Local use relies on covdbg login, which is bound to one team. |
COVDBG_OUTPUT |
Fixed default output location. Avoid reusing one location across a suite, since later runs overwrite earlier results. |
COVDBG_MCP_QUERY_TIMEOUT_MS |
Time limit for one query statement, 1 to 600000 ms (default 5000). A value outside that range is ignored. --query-timeout wins when both are given. |
Documentation
Publishing (maintainers)
Keep version in manifest.json and server.json, and the release tag in the server.json package URL, in sync.
Build the bundle.
.mcpbignorelimits it tomanifest.json,icon.pngandLICENSE:npx @anthropic-ai/mcpb validate manifest.json npx @anthropic-ai/mcpb pack . covdbg.mcpbCreate the GitHub release
v<version>and uploadcovdbg.mcpbas an asset.Put the bundle's hash into
fileSha256inserver.json:(Get-FileHash covdbg.mcpb -Algorithm SHA256).Hash.ToLower()Publish to the MCP registry. The
com.covdbg/*namespace uses DNS authentication oncovdbg.com:mcp-publisher login dns --domain covdbg.com --private-key <key> mcp-publisher publishGlama picks up
glama.jsonfrom the repository.
License
The metadata in this repository is licensed under the Apache License 2.0. covdbg itself is licensed separately, with Free, Team, and Enterprise plans. See covdbg.com and the Licensing FAQ.