
Coverctl
io.github.klarlabs-studio由 GitHub 帳號 klarlabs-studio 發布v1.20.0更新於 Oct 24, 2026
Go code coverage analysis tool with MCP server for AI-powered coverage workflows
概覽
本機 MCP 伺服器,執行專案原生的測試覆蓋率並依網域套用覆蓋率門檻,讓 AI 編碼代理在提交前檢查覆蓋率政策
- 可以做什麼
- 執行含覆蓋率的測試並套用設定好的政策,回傳各網域的通過/失敗、檔案與警告(check)。建議覆蓋率門檻,並依網域排序覆蓋率欠帳,協助代理決定投入方向(suggest、debt)。唯讀資源提供覆蓋率欠帳、已記錄趨勢、門檻建議與偵測到的專案設定。CI 模式下另有初始化設定、分析既有覆蓋率報告、記錄歷史、比較兩份報告、產生 SVG 徽章,以及將報告發佈到拉取請求的工具。
- 適用情境
- 適用於 AI 編碼代理在有覆蓋率要求的程式庫中修改程式碼,並希望在同一個工作階段內、而非 CI 失敗後才發現回歸的情況。也適合以單一設定對多語言程式庫依網域套用最低覆蓋率的專案。
- 執行需求
- 以本機程序透過 stdio 執行,從對應平台的安裝包安裝(macOS、Linux、Windows)。需要專案本身的語言工具鏈與覆蓋率執行器,以及程式庫中的 .coverctl.yaml 政策檔。未宣告帳號、API 金鑰或環境變數;可用首次執行的診斷指令驗證安裝。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Coverctl,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
coverctl
Agent-loop coverage governance for all sorts of languages — coverage your AI coding agent calls before commit, not a dashboard you read after CI.
Works with Python, TypeScript/JavaScript, Java, Rust, Go, C#, C/C++, PHP, Ruby, Swift, Dart, Scala, Elixir, and Shell — one .coverctl.yaml, one MCP surface. Not a Go cover tool.
Get started ↓ · Languages ↓ · What it looks like ↓ · MCP tools ↓ · CLI reference ↓ · Why this exists ↓ · Community ↓
[MCP] [15 languages] [Releases]
"Our AI agents ship code fast, but they're blind to coverage policy while editing. We only see breakage in CI, after context is gone, and the same agent then guesses its way to a fix."
Same policy model on every language: auto-detect the runner, group paths into domains, enforce mins before commit. Mock-heavy or exotic layouts may need an explicit domains: block in .coverctl.yaml.
coverctl is not a Go cover CLI: it is policy + MCP over each language's native coverage runner (vs go test -cover / pytest --cov).
Get started
Wire into Claude Code (~/.config/claude-code/mcp.json):
Ask the agent: "Run coverctl check and tell me which domains regressed."
For Cursor / Cline / Claude Desktop / Aider / Continue / OpenCode and other MCP clients, see docs/src/content/docs/mcp.mdx. All MCP-capable clients work; coverctl mcp serve runs in agent mode by default (3 tools: check, suggest, debt). Use --mode=ci for the full nine-tool surface.
Validate the install end-to-end:
What it looks like in the agent loop
Rendered for clarity — your client may format tool-calls differently.
The regression that used to surface in CI 8 minutes later is fixed in the same agent turn.
The agent does well: reads check output verbatim, calls suggest to find uncovered files, calls debt to rank smallest fixes, re-runs check to confirm.
Watch for: agents lowering thresholds in .coverctl.yaml to "fix" a failure (it's not a fix). Agents claiming coverage rose without a new check call (hallucination). Agents ignoring rejection error_code and retrying with the same input.
coverctl returns deterministic structured signals; the agent's fix still needs a human reading. The full contract is in docs/src/content/docs/mcp.mdx.
Why this exists
AI coding agents write code blind to coverage. They edit, you commit, the regression surfaces in CI minutes or hours later — too late to course-correct in the same session. Dashboards (Codecov, Coveralls) and raw language runners (go test -cover, pytest --cov, nyc) target humans reading numbers after the fact — not agents enforcing policy mid-edit.
coverctl is built for the agent loop (and is not a replacement for Go's cover tooling):
- Catches regressions before commit. Coverage feedback in the agent's edit turn — not minutes after CI fails. The wedge metric is regressions caught pre-commit.
- Agent-callable via MCP. Speaks MCP — the multi-vendor agent-tool standard now governed by Anthropic, OpenAI, Google, Microsoft, AWS. Works with every MCP-capable client today; works with whatever ships next without modification.
- Polyglot governance, one config. One
.coverctl.yamlenforces per-domain thresholds across 15 languages. On Go repos it may invokego testthe way it invokespytestelsewhere — then applies the same domain policy. Agents touch any language; coverage governance must too. - Local-first. Your source never leaves the machine. Agent calls coverctl over stdio, not over a SaaS API. No account, no upload, no third-party dependency in the agent's reach.
- Hardened MCP surface. Input + output sanitization defends against prompt-injection through test-runner flags and hostile filenames in coverage profiles (Lethal Trifecta).
The CLI and MCP server are Apache-2.0 licensed and stay free. A hosted layer for cross-repo coverage history is on the roadmap (see docs/strategy/monetization-decision.md) — additive, not a paywall.
MCP tools
Agent mode advertises three tools (check, suggest, debt) for reliable agent tool selection. CI mode (--mode=ci) adds the rest.
MCP resources (read-only context)
Security boundaries
coverctl treats MCP traffic as untrusted in both directions, per the Lethal Trifecta threat model.
- Input boundary. Agent mode accepts typed capabilities (
packages,tags,race,short,run,timeout) and rejects arbitrary runnertestArgsso coverctl cannot be used as a generic command-execution MCP server. Dangerous flags (--rootdir,--cov-config,-D,-I,--require,--init-script,--node-options, ...) are also denied as defense in depth. Agent mode cannot select an alternate policy file, filter check to a subset of domains, narrowcoverageScope(shrinking measurement can hide untested domains), skip the test run viafromProfile, or use incremental check (an empty diff auto-passes); repository.coverctl.yamlis authoritative and verification must execute tests against the full policy. Rejection responses use a stable schema witherror_codeand agent-actionableremediation. CLI invocations from a human terminal are not sanitized; the human is the trust boundary there. - Output boundary. User-controlled identifiers flowing back to the agent (filenames in coverage profiles, domain names, package paths) are percent-encoded rather than destructively replaced, so distinct names stay distinct (
src/über.godoes not collapse into another file). Control characters, backticks, and markdown metacharacters cannot render as instructions. Prevents return-trip prompt injection through a hostile PR or attacker-named test file.
coverctl is local-first. The default install transmits nothing — no telemetry, no analytics, no source data. An opt-in --mcp-telemetry flag emits structured tool-call events to stderr for users who want to instrument their own pipelines (format documented in docs/design/mcp-metrics-spec.md). Adversarial + happy-path evals (85+ scenarios under internal/eval/scenarios/) gate every release on rejection-schema integrity and prompt-injection resistance.
Canonical intent: docs/strategy/system-intent.md. Full threat model + residual risk: docs/security/mcp-threat-model.md.
CLI reference
The CLI is the substrate behind the MCP server; humans can use it directly.
Global flags: -q/--quiet, --no-color, --ci (combines quiet + GitHub Actions annotations).
Test-execution flags
check, run, record accept toolchain flags forwarded to the underlying test runner:
Terminal flow (without an agent)
If you prefer running coverctl directly:
If a step fails: coverctl detect --dry-run previews init output; coverctl check -o json surfaces structured failure detail; coverctl record --commit "$(git rev-parse HEAD)" --branch "$(git rev-parse --abbrev-ref HEAD)" provides metadata explicitly in CI.
Configuration
.coverctl.yaml (schema: schemas/coverctl.schema.json):
Domains are named path groups, not language packages. match uses path globs for most languages (src/auth/**) or Go package paths when the project is Go (./internal/auth/...):
Per-domain enforcement is the point: overall coverage hides regressions in critical paths. coverctl evaluates each domain against its own minimum and fails the build if any domain falls below. Per-language starters: docs quick start. How this differs from raw runners: vs native coverage.
Go-only footnote: why numbers can differ from plain go test ./...
On Go projects coverctl may pass -coverpkg spanning configured domains so a package is credited for tests of other packages that exercise it. Plain go test ./... credits only a package's own tests — two legitimate numbers; coverctl's is usually higher. This is Go runner behavior, not the product model. Prefer coverctl check profiles when comparing history. --from-profile reports whatever the supplied profile measured.
Advanced
Multi-package monorepo? Use extends: for inherited policies. Starting point: copy templates/coverctl.yaml.
Supported languages
One product across 15 languages. coverctl auto-detects which runner to call; you write path domains once.
Per-language config examples: docs quick start.
GitHub Action
For platform & devex teams
Standardizing coverage policy across many polyglot repos? coverctl ships with the artifacts your security and procurement reviews will ask for:
- MCP threat model — input + output boundary controls, prompt-injection defense, residual risks.
- Rejection schema reference — stable
error_code+remediationcontract for agent recovery. - GTM funnel metrics spec — what's instrumented and how telemetry stays opt-in.
Considering coverctl org-wide? Open a GitHub issue with label platform-evaluation — happy to walk through architecture and trust boundaries.
Community
- Claude Code Plugin Marketplace — install
coverctldirectly via/plugin install. - MCP Registry — listed at registry.modelcontextprotocol.io.
- GitHub Discussions — go.klarlabs.de/coverctl/discussions.
- Sponsor coverctl development — github.com/sponsors/felixgeelhaar.
Used coverctl for a few weeks? Run coverctl survey to share PMF feedback (local-only by default; nothing transmitted unless you opt in).
Built by Felix Geelhaar with contributions from the polyglot AI-coding community.
Contributing
- TDD: tests before behavior changes.
- Meet each domain's
minin.coverctl.yaml(default 80% when unset). This repo is Go, so dogfood withgo run ./cmd/coverctl check(policy over the runner — not a substitute for readinggo testfailures). - Conventional Commits (
feat:,fix:,chore:, ...) for Relicta version-bump logic. mainis protected; merge via PR after CI green (.github/workflows/go.yml+.github/workflows/eval.yml).- Run
gofmt -wandgolangci-lint v2before pushing.
Architecture details for contributors: ARCHITECTURE.md.
Releases
Managed by Relicta. Do not push v* tags manually.
Security
See SECURITY.md for disclosure policy. MCP-input sanitization (internal/mcp/sanitize.go) and output canonicalization (internal/mcp/sanitize_output.go) are the primary defenses against prompt-injection-driven argument and content attacks; report bypasses privately.
來源:README.md,提交 2abd070
工具
0版本歷史
1- v1.20.0最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分