coverage-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@coverage-mcpcheck coverage for package fanya/schedule"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
coverage-mcp
把 tool/ 那套 Bash + 内嵌 Python 的 JaCoCo 分支覆盖率能力,抽成 Python 全栈内核 + MCP server,
定位「Java 分支级、按测试类、能指到未覆盖行的 agent 覆盖率反馈器」,填补现有 MCP
(test-coverage-mcp 只给%、se333 instruction/方法/全量)的精确缺口。
进度
M0 解析层 ✅ csv/xml/surefire + 未覆盖分支行,搬成可单测纯函数(对 optaplanner 真实报告快照锁定)。
M1 端到端 ✅ runner 复刻 maven 覆盖率链路;与 bash
run-module-test.sh对同一 case 逐字段一致(含未覆盖行)。M2 MCP 壳 ✅ FastMCP 暴露
coverage_check,返回紧凑 JSON。M3 按包自动收集 + JSON 瘦身 ✅
--package fanya/schedule一条测整包;uncovered 的 file 相对模块路径省 token。M4 去耦合 ✅ 砍掉对
tool/env.sh、git bash、IDEA 集成参数的依赖;maven 发现 + 配置走纯 Python(env.py+jacov.toml);跨平台 subprocess 直调 mvn。已独立 git 仓 + CI + entry points。
Related MCP server: codecov-mcp-server
结构
src/jacov/
model.py 数据模型 + 阈值兼容(80 / 0.8)
jacoco.py 解析 jacoco.csv / jacoco.xml / surefire(对齐 run-module-test.sh 三段)
runner.py 复刻 maven 覆盖率链路(复用 tool/env.sh 的 Maven 环境)
check.py 编排 + 人读输出 + 结构化组装(check_coverage / build_result)
server.py FastMCP server(coverage_check 工具)
tests/ 14 个用例(解析层 11 + 组装层 3),fixture 取自 optaplanner 真实报告跑测试
cd coverage-mcp
python -m pytest -q # 免安装(pyproject 配 pythonpath=src)命令行用(人类用法)
适用于 PowerShell / CMD / Git Bash。命令一行写完最省事,不要用 bash 的
\换行。
第 0 步:装一次(只做一次)
pip install -e coverage-mcp装完后 python -m jacov.check 在任何目录都能用——不用设 PYTHONPATH,也不用 cd 进 coverage-mcp。
最常用:测一个业务包(自动收集该包的测试类 + 业务类)
在项目根目录执行:
python -m jacov.check --module-dir fanyajwproject-course-v2\fanyajwproject-course-v2 --package fanya/schedule --min-branch 80--package fanya/schedule 会自动找该包下所有 *Test.java 当测试、所有 .java 当业务类,不用手列一长串。
或者:手动指定测试类 / 业务类
python -m jacov.check --module-dir optaplanner-jxjy\optaplanner-jxjy --tests TeacherDayOfWeekParseStrategyTest --cover CommonMethods --min-branch 80参数
参数 | 必填 | 含义 |
| 是 | 模块目录(含 |
| 与 | 业务包(如 |
| 与 | 测试类,逗号分隔(如 |
| 否 | 卡覆盖率的业务类,逗号分隔;不填 = 整模块汇总 |
| 否 | 最低分支覆盖率,写 |
| 否 | 跳过编译(代码已编译时更快) |
| 否 | 每个测试类用独立 JVM(严格隔离,多测试类时慢) |
看懂输出
测试结果汇总 → 总数 / 通过 / 失败
分支覆盖率汇总 → 每个业务类 [PASS/FAIL] 分支总数 / 已覆盖 / 未覆盖 / 覆盖率
未完全覆盖分支 → 文件:行号 + MISS(全没覆盖)/ PARTIAL(只覆盖一半)+ 源码退出码:全通过且达标 = 0,否则 = 1(可用于 CI / 脚本判断成败)。
⚠️ PowerShell 用户注意
别抄 bash 写法:
PYTHONPATH=src python ...(PS 不支持这种前缀赋值)和行尾\换行(PS 续行符是反引号`)——都会报Missing expression after unary operator '--'。装好包后一行命令最干净,什么前缀都不用加。
配置(jacov.toml,可选)
不放 jacov.toml 时走默认:maven 从 PATH / MAVEN_HOME 自动发现、JaCoCo 0.8.11、JDK17 add-opens、settings 和本地仓用 maven 默认(~/.m2)。
需要自定义时,把 jacov.example.toml 复制为 jacov.toml(已被 .gitignore,因含机器相关路径):
[maven]
home = "/path/to/maven3" # 本机没有 mvn/mvnw 时,指向 maven 安装根(其下有 bin/mvn)
settings = "/path/to/settings.xml" # 私有仓 / 镜像 / 凭据
local_repo = "/path/to/.m2/repository"
[jacoco]
version = "0.8.11"
excludes = "com.sun.proxy.*" # instrument 排除(动态代理类,避免污染覆盖率)
[test]
add_opens = ["java.base/java.lang"] # fork 测试 JVM 的 --add-opens(JDK17+)查找顺序:从 --module-dir 上溯 → 包目录。
全量纯测试(像 Jenkins,不跑覆盖率)
只想跑测试看通过/失败、不要覆盖率(更快),用 jacov.runtests:
# 全量:模块下所有 *Test.java(相当于 mvn test)
python -m jacov.runtests --module-dir fanyajwproject-course-v2\fanyajwproject-course-v2
# 只测某个包 / 某几个类
python -m jacov.runtests --module-dir fanyajwproject-course-v2\fanyajwproject-course-v2 --package fanya/schedule
python -m jacov.runtests --module-dir fanyajwproject-course-v2\fanyajwproject-course-v2 --tests FooTest,BarTest跑的过程实时显示编译(
Building/Compiling)和每个测试类(Running XxxTest/Tests run: N),不会静默——能看到跑到哪、卡在哪。结尾 Jenkins 式汇总:套件 / 用例 / 通过 / 失败 / 错误 / 跳过 + 失败套件清单;退出码 0(全过)/ 1(有失败)。
⚠️ 全量可能慢(course-v2 ~1900 用例、~3 分钟,大头是少数连外部/DB 的集成测试);只验证某块用
--package秒级。
项目编译(Python 版)
jacov.compile 把旧 tool/compile.sh 的项目编译策略迁到 Python,适合 CLI 和 MCP 共用。
# 默认双层项目:clean → compile
python -m jacov.compile fanyajwproject-course-v2 --workspace-root C:\Users\lin\IdeaProjects
# shared-jar:clean → install -Dmaven.test.skip=true
python -m jacov.compile fanyajw-shared-jar --workspace-root C:\Users\lin\IdeaProjects
# rpc:按旧脚本 7 步串联 clean/install/compile
python -m jacov.compile fanyajwproject-rpc --workspace-root C:\Users\lin\IdeaProjects装包后也可以直接用:
jacov-compile fanyajwproject-course-v2 --workspace-root C:\Users\lin\IdeaProjects编译日志统一写到 <workspace-root>/target/maven-logs/,避免 mvn clean 删除模块自身 target 时把正在写入的日志删掉。执行过程中会打印当前步骤、总步骤数、已耗时、单步开始/结束时间和单步耗时。
Git Bash 下 Windows 路径请用正斜杠,例如
--workspace-root C:/Users/lin/IdeaProjects。不要写C:\Users\lin\IdeaProjects,反斜杠会被 Git Bash 当转义符吞掉。
性能与开关
覆盖率合并成单条 maven 命令(prepare-agent → 测试 → report),避免多次 JVM 冷启动;多测试类默认复用 fork JVM。
开关(CLI 反向) | 默认 | 说明 |
| True | True 含增量编译(测最新代码);False 用 |
| True | True 多测试类复用同一 fork JVM(快 ~4x);False 每类独立 JVM(严格隔离) |
实测 course-v2 schedule 包 21 测试:拆 3 次 maven + 独立 JVM 会超时 → 合并 1 条 + 复用 fork 12s(覆盖率逐字段一致)。
若怀疑测试间静态状态污染导致覆盖率异常,用 --no-reuse 切独立 JVM 对照。
接入 Claude Code(MCP)
装包:
pip install -e coverage-mcp(带 mcp 依赖)。在项目
.mcp.json的mcpServers里加一个jacov条目(command 用本机 python.exe 绝对路径,与装包的解释器一致;已有别的 server 就并列加):{ "mcpServers": { "jacov": { "command": "<python.exe 绝对路径>", "args": ["-m", "jacov.server"] } } }重启 Claude Code(或
/mcp重连)。之后可调coverage_check(module_dir, tests, cover, min_branch)。
注:
coverage_check首次调用会真跑 maven(编译 + 测试 + JaCoCo),耗时分钟级。 返回紧凑 JSON:status / tests / coverage / uncovered(行号+MISS·PARTIAL+源码) / reports。
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- 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/ProgrammerDream/coverage-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server