mcp-quality
The CI quality suite for MCP server builders
Lint, contract-test, benchmark, and load-test your MCP server before you ship it. The
pytest+lighthousefor the servers agents depend on.
▶ See the live demo — the token tax and the disambiguation matrix, captured from real runs. Or the leaderboard: mcp-quality run against real public MCP servers.
$ mcp-quality run "python my_server.py" --legibility
Legibility F archive_record⇄delete_record confused 100% of the time ← caught before you ship
Cost D 8,792 toolset tokens — paid on every turn, before anything works
Status: v0.1 implemented — all five families, CLI, CI, badge. See the roadmap.
Why
Security scanners already answer "is this server malicious?" (mcp-scan, Cisco's mcp-scanner, and others own that lane). The quality question — "is this server any good?" — now has point tools too: mcp-xray scores token tax and tool confusion into a single grade, and Cisco's mcp-scanner added readiness heuristics. But those are things you run by hand. There is still no lighthouse/pytest for MCP: no CI-native suite that unifies the quality dimensions (contract, legibility, cost, performance, light security) into one graded gate, catches quality regressions across commits, prints a badge, and hands off to a full behavioral simulation.
mcp-xray is an X-ray you run by hand; mcp-quality is the pytest in .github/workflows that blocks the merge. It is a quality-and-reliability suite — it treats security as one check, defers deep security to the specialists (integrate, don't reinvent), and unifies the quality point tools rather than competing with them (credit where due — they prove the demand).
Quickstart
pip install mcp-quality
mcp-quality run "python my_server.py" # graded A–F report + MCP Quality Score
mcp-quality run "python my_server.py" --json --fail-under B # CI gate
mcp-quality static ./server.mcp.json # offline / air-gapped CI
Use it in CI
# .github/workflows/mcp-quality.yml
name: MCP Quality
on: [push, pull_request]
jobs:
mcp-quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with: { python-version: "3.12" }
- run: pip install mcp-quality
- run: mcp-quality run "python my_server.py" --fail-under B --no-regressions
The zero-LLM fast path (Contract + Cost) runs deterministically with no model and no
network beyond your server. Add --all for the full five families, --legibility --model ollama:qwen2.5-3b for the agent-comprehension score, or --deep-security to
fold in mcp-scan / Cisco findings. Commit a baseline with mcp-quality snapshot "…" so
--no-regressions can catch a silently-broken tool in the PR.
The five check families
Contract (LLM-free): spec conformance, schema validity, determinism probe, snapshot regression. · Legibility (the differentiator): agent-comprehension score, the disambiguation matrix (delete vs archive confusion rate), description lints with proposed rewrites. · Cost: token weight of your whole toolset, per-tool bloat, $-per-task estimates. · Performance: concurrent-agent load with real MCP semantics (not naive HTTP), p50/p95/p99, connection-leak detection. · Security-lite: OWASP MCP Top 10 basics, with --deep-security shelling out to mcp-scan / Cisco.
Outputs a terminal report, JSON for CI, and an mcp-quality: A badge for your README. See SPEC.md and ROADMAP.md.
Part of the Swarm Proof toolkit
Trust infrastructure for the agent economy — seven projects, one thesis.
| Project | What it does |
|---|---|
| stampede | Point a herd of realistic agents at your system before real ones arrive |
| mockworld | A synthetic internet for agents — fake Stripe, Gmail, exchange, instantly |
| mcp-quality ← you are here | The CI quality suite for MCP servers — lint, contract-test, benchmark, load |
| costbomb | Denial-of-wallet fuzzing — find the inputs that make your agent spend $500 |
| exactly-once | Idempotency middleware so agent side-effects fire once |
| agent-postmortems | A structured incident database + post-mortem standard for agent failures |
| awesome-agent-reliability | The curated map of the field |
License
Apache-2.0. Zero-LLM fast path for Contract/Cost/Performance; legibility checks are provider-agnostic and Ollama-friendly. Citable via CITATION.cff.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_quality-0.1.0.tar.gz.
File metadata
- Download URL: mcp_quality-0.1.0.tar.gz
- Upload date:
- Size: 148.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0b36c92877235c6498a157722b7fc7df83cde998a7871c6aeeaf039feb209ee
|
|
| MD5 |
5036e1c4311e8c648b397201b09da11c
|
|
| BLAKE2b-256 |
bac84119f4b54f3f465dcf030ace8c71d9d5412b7e436b703915ac18012fda53
|
Provenance
The following attestation bundles were made for mcp_quality-0.1.0.tar.gz:
Publisher:
release.yml on swarmproof/mcp-probe
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_quality-0.1.0.tar.gz -
Subject digest:
b0b36c92877235c6498a157722b7fc7df83cde998a7871c6aeeaf039feb209ee - Sigstore transparency entry: 2625756122
- Sigstore integration time:
-
Permalink:
swarmproof/mcp-probe@fbe36355b756a67bd03d445b4923da20000259b9 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/swarmproof
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@fbe36355b756a67bd03d445b4923da20000259b9 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mcp_quality-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mcp_quality-0.1.0-py3-none-any.whl
- Upload date:
- Size: 89.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a9fcb899d97663a8bec301f9d17484392176ee5d6da9d9f95c4e6717eef743c
|
|
| MD5 |
50f5647d793cd7aba6b7168587dd1696
|
|
| BLAKE2b-256 |
6e8d3678132e37a160bc88de9ae4f165beefcc9137e83909469ce45d54df3540
|
Provenance
The following attestation bundles were made for mcp_quality-0.1.0-py3-none-any.whl:
Publisher:
release.yml on swarmproof/mcp-probe
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_quality-0.1.0-py3-none-any.whl -
Subject digest:
7a9fcb899d97663a8bec301f9d17484392176ee5d6da9d9f95c4e6717eef743c - Sigstore transparency entry: 2625756134
- Sigstore integration time:
-
Permalink:
swarmproof/mcp-probe@fbe36355b756a67bd03d445b4923da20000259b9 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/swarmproof
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@fbe36355b756a67bd03d445b4923da20000259b9 -
Trigger Event:
release
-
Statement type: