Skip to main content
Glama
YuCPbit
by YuCPbit

๐Ÿงพ mcp-proof

Ship an MCP server with a receipt.

One command audits any MCP server โ€” tools, resources and prompts, either protocol era, stdio or Streamable HTTP โ€” and hands your client a fingerprinted, reproducible delivery report plus a CI regression suite they keep.

ci python checks transports license

English ยท ็ฎ€ไฝ“ไธญๆ–‡

A real audit of the official MCP filesystem server: 25 conformance checks, MSSS compliance table, 34 regression fixtures โ€” all green.


โœจ What you get

  • ๐Ÿ” Wire-level protocol checks across every surface and both eras โ€” mcp-proof speaks raw JSON-RPC to your server and auto-detects its era: 30 checks for the 2026-07-28 modern era (server/discover, _meta envelope enforcement, resultType, ttlMs/cacheScope on every cacheable result, -32022 version rejection, HTTP routing-header enforcement) and 25 for the initialize-handshake era โ€” exact error codes, schema validity, structured output, stdout hygiene, pagination safety, dedicated resources & prompts lanes, and verified negative probes: TOOL-07 sends inputs that provably violate the declared inputSchema and warns when the server answers them normally, quoting the minimal reproducer. Capability-aware in both directions: surfaces a server does not advertise are skipped, surfaces it does advertise must work.

  • ๐Ÿ›ก๏ธ Security audit tied to a public standard โ€” 6 deterministic checks (tool-description poisoning, invisible/bidi characters, leaked credentials, unconstrained injection surfaces, advertised shell execution), each mapped to canonical control IDs of the 24-control MCP Server Security Standard, rendered as a full compliance table in every report.

  • ๐Ÿ“ผ A regression suite your client keeps โ€” records in either protocol era; golden fixtures with SHA-256 provenance freeze the server's behaviour; replay grades every drift (BREAKING / VALUE / COSMETIC / LATENCY), understands structured output, preserves stateful call order, and ships with a ready-to-paste GitHub Actions gate.

  • ๐Ÿ“„ A report for humans and machines โ€” self-contained HTML with sticky navigation, per-check anchors (report.html#SEC-03), attention/passed filters and a collapsible MSSS matrix; --pdf for print. The same versioned model ships as --json (schema v1), --junit for any CI, and --sarif for the GitHub Security tab.

  • ๐Ÿ” Reproducible by design โ€” zero LLM calls, zero API keys. Every hash is computed from behaviour alone โ€” timestamps and latency live in a separate, unhashed observation layer โ€” so identical server behaviour produces an identical report fingerprint and acceptance is verification, not trust.

  • ๐Ÿงฏ Annotations-first call planning โ€” MCP tool annotations outrank the name heuristic in both directions: readOnlyHint rescues read-only tools the regex would over-block, destructiveHint catches mutators it would miss; unannotated tools fall back to the conservative heuristic. mcp-proof plan shows exactly what auto-baselining would call and on what basis, before anything touches production; --include-destructive and --edge-cases opt into more.

  • ๐Ÿ“‹ A contract diff for CI โ€” mcp-proof inspect freezes the served surface (capabilities + tools + resources + prompts, fully paginated) into a fingerprinted manifest; mcp-proof diff classifies every change as BREAKING / ADDITIVE / METADATA and exits non-zero on breaking ones โ€” schema tightening, enum narrowing, required-flips, removed output fields and weakened safety annotations all count.

Related MCP server: MCProbe

๐Ÿš€ Quick start

pip install git+https://github.com/YuCPbit/mcp-proof
mcp-proof run python my_server.py --fixtures fixtures/ --out report.html

Auditing a running HTTP server instead? mcp-proof run --url http://localhost:8000/mcp --out report.html

Exit code 0 means: every MUST check passed, zero security findings, zero behavioural drift โ€” a one-line CI gate.

mcp-proof plan python my_server.py                            # what would auto-baselining call, and why
mcp-proof record python my_server.py --fixtures fixtures/    # freeze the behavioural contract
mcp-proof replay --fixtures fixtures/ -- python my_server.py  # fail on any drift
mcp-proof inspect python my_server.py --out baseline.json     # freeze the contract surface
mcp-proof diff baseline.json current.json                     # BREAKING / ADDITIVE / METADATA, exit 1 on breaking

See the difference in 60 seconds with the built-in demo pair โ€” a clean server and one with nine planted violations:

mcp-proof run python demo/good_server.py --fixtures demo/fixtures-good --out report-good.html   # โ†’ SHIP-READY
mcp-proof run python demo/bad_server.py --out report-bad.html                                    # โ†’ 5 MUST failures, 3 security findings

๐Ÿ“Š Real audits, real reports

Target

Verdict

Report

Official MCP filesystem server (@modelcontextprotocol/server-filesystem)

โœ… SHIP-READY โ€” 11/11 MUST checks, 34/34 replays clean, 4 write tools auto-skipped

HTML ยท PDF

2026-07-28 modern-era server (zero-dep, cross-validated against the official v2 SDK)

โœ… SHIP-READY โ€” era auto-detected via server/discover, 21/21 MUST incl. negative probes, 2/2 replays

HTML

Demo server with 9 planted violations

โŒ NOT SHIP-READY โ€” 5 MUST failures + 3 security findings, every one caught with evidence

HTML

Well-behaved demo server

โœ… SHIP-READY โ€” 16/16 MUST, full three-lane pass incl. regression baseline

HTML

๐Ÿ”ฌ The three lanes

Lane

What it proves

How

Protocol conformance

The server implements MCP correctly on the wire โ€” era negotiation, JSON-RPC error semantics, tool/resource/prompt surfaces, output schemas, capability consistency, pagination, stdout hygiene

A hand-rolled JSON-RPC probe observes the raw byte stream, so nothing is smoothed over

Security & hygiene

Tool metadata is clean: no injected instructions, hidden Unicode, leaked secrets, or unconstrained execution surfaces

Deterministic static analysis, every finding carrying its MSSS control ID

Behaviour regression

The server still does exactly what it did at delivery

Record/replay of provenance-fingerprinted golden fixtures, drift graded by severity

Every lane feeds one report โ€” and the report ends with a prioritized fix list, so it doubles as a remediation plan.

๐Ÿ“ก Protocol support

Transports

stdio โœ… ยท Streamable HTTP โœ…

Surfaces

tools โœ… ยท resources โœ… ยท prompts โœ… โ€” capability-aware in both directions

Modern era 2026-07-28 (server/discover, stateless _meta)

โœ… conformance lane, auto-detected โ€” --era auto|modern|legacy

Legacy era (initialize handshake, 2024-11-05 โ†’ 2025-11-25)

โœ… all lanes

Regression lane

โœ… both eras โ€” SDK session (legacy) ยท probe-backed session (modern)

The modern lane is validated against the official v2 SDK in both directions: the official client adopts mcp-proof's hand-rolled modern test server via server/discover, and mcp-proof runs all three lanes fully green against official v2 SDK servers on both transports โ€” stdio and Streamable HTTP with SSE responses (scripts/crosscheck_modern_server.py).

Works with servers in any language โ€” mcp-proof talks to the process (or URL), not to your codebase.

โš™๏ธ CI in one step

- uses: YuCPbit/mcp-proof@v0.5.0
  with:
    server-command: python my_server.py
    fixtures: fixtures/

The job fails unless the server is ship-ready, and leaves mcp-proof-report.html / .json / .junit.xml / .sarif behind for upload. Prefer raw commands? mcp-proof run โ€ฆ --junit r.xml --sarif r.sarif plus mcp-proof diff is the same gate.

๐Ÿ—๏ธ Build on the audit-clean template

Building a server rather than auditing one? templates/server-starter/ is a fastmcp server that passes this audit out of the box โ€” constrained input schemas, proper error semantics, structured output, every practice annotated with the check ID it satisfies. Copy, implement your tools, audit, ship with the report.

๐Ÿ–ฅ๏ธ Platforms

macOS

โœ… developed & fully validated

Linux

โœ… exercised in CI

Windows

โœ… exercised in CI

๐Ÿ—บ๏ธ Roadmap

Release

Focus

v0.3

โœ… Dual-era protocol support, shipped on main โ€” era auto-detection, 19 modern-era checks, dual-era regression sessions, validated against the official v2 SDK on both transports

v0.4

โœ… Capability-aware resources & prompts lanes ยท contract manifest inspect / diff with a breaking-change gate ยท annotations-first call plan

v0.5

โœ… Versioned JSON report model ยท JUnit & SARIF outputs ยท reusable GitHub Action (uses: YuCPbit/mcp-proof@v0.5.0) ยท report UI: sticky nav, anchors, filters

v0.6

โœ… Two-phase argument synthesis ($ref / allOf / const / pattern / format / bounds / multipleOf) ยท verified schema-violating negative probes (TOOL-07) with minimal reproducers

Later

Opt-in semantic lane (LLM-graded assertions) โ€” parked until the deterministic core is complete

๐Ÿ” Limitations

mcp-proof proves what can be proven deterministically, and says which is which:

  • Security checks cover the observable protocol and metadata surface. MSSS controls that need deployment, source or process evidence are always reported as manual review โ€” never as passed.

  • Auto-baselining classifies tools by a conservative name/description heuristic. Review the skip list in the fixtures manifest before trusting a baseline recorded against production.

  • Semantic correctness (does the answer mean the right thing?) is outside the deterministic core by design.

๐Ÿ“„ License

MIT โ€” the taxonomy in the MSSS compliance section follows the MCP Server Security Standard (CC BY-SA 4.0).

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

โ€“Maintainers
โ€“Response time
0dRelease cycle
8Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    A
    maintenance
    A stdio MCP server that audits other MCP servers over the live protocol. It connects to any MCP target (stdio or HTTP), lints every tool's schema for agent-usability, then actually calls the tools with deliberately broken inputs to see how the server handles them, and returns a 0โ€“100 conformance score with a per-dimension breakdown rendered as Markdown.
    6
    6
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Audits MCP server configurations for security risks including capability inventory, SSRF, prompt injection, and drift detection. Works in read-only mode and can also be used as an MCP server to let AI agents audit their own attack surface.
    4
    MIT

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

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/YuCPbit/mcp-proof'

If you have feedback or need assistance with the MCP directory API, please join our Discord server