Skip to main content

correctover-ccs-mcp

Correctover CCS MCP Server — local-first MCP/Agent security tooling, exposed as MCP tools for Claude Desktop, Cursor, Cline, Windsurf, and any MCP client.

Zero network egress. Zero third-party dependencies. Data never leaves your machine.

MCP License Python


Why this exists

Every verification tool in this space gives you the same two-word answer: PASS or FAIL.

That is not enough when you actually have to resolve an incident. When a signed agent decision record has been altered, you do not need to know that something changed — you need to know which field, on which layer, changed from what to what.

This server exposes four tools, one of which does exactly that.

Tool What it does Who else does it
ccs_locate_tampering Field-level tamper localization — returns RFC 6901 JSON-Pointer paths, before/after values, and severity grading ❌ Nobody (see below)
ccs_verify_receipt Ed25519 signature + RFC 8785 JCS + SHA-256 + schema verification ✅ Many
ccs_audit_batch Batch audit up to 200 receipts, pass rate, tamper index list, optional hash-chain check ⚠️ Few
ccs_checkup_mcp_config 14-rule static security checkup on MCP/Agent configs ⚠️ Some

The differentiator, concretely

Given an original receipt and a suspect copy, ccs_locate_tampering returns this — not a boolean:

  critical  path=/checks/security/detail   (dotted: checks.security.detail)
  critical  path=/checks/security/status   (dotted: checks.security.status)
  high      path=/reason                   (dotted: reason)
  critical  path=/verdict                  (dotted: verdict)

Sigstore, C2PA, and comparable tools return only signatureValid: false. That tells you the artifact is bad. It does not tell you what to fix, or what to argue in a dispute.


Install

pip install correctover-ccs-mcp

Or from source:

git clone https://github.com/DSHCorrectover/ccs-conformance-vectors
cd ccs-conformance-vectors/ccs-mcp-server/correctover-ccs-mcp
pip install -e .

Configure your MCP client

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "correctover-ccs": {
      "command": "correctover-ccs-mcp"
    }
  }
}

Cursor / Cline / Windsurf use the same mcpServers shape. If you prefer to run it without installing:

{
  "mcpServers": {
    "correctover-ccs": {
      "command": "python",
      "args": ["/absolute/path/to/correctover_ccs_mcp/server.py"]
    }
  }
}

Providing public keys

CCS receipts carry public_key_id, not an inline public key — a self-declared key is not a trust root. Supply the key in whichever way fits your setup:

Method How
Tool argument public_key_pem parameter on ccs_verify_receipt / ccs_audit_batch
Environment variable CCS_PUBLIC_KEY — the PEM text directly
Key directory CCS_PUBKEY_DIR — looks up <public_key_id>.pem

If no key resolves, verification fails closed with a message telling you the public_key_id to fetch. It never assumes.


Usage examples

Localize tampering

"Compare original.json and suspect-receipt.json and tell me exactly what was changed."

{
  "name": "ccs_locate_tampering",
  "arguments": {
    "original": { "...": "..." },
    "suspect":  { "...": "..." }
  }
}

Audit a batch with hash-chain checking

{
  "name": "ccs_audit_batch",
  "arguments": {
    "batch": { "receipts": [ "...", "..." ] },
    "check_chain": true
  }
}

Returns total / valid / invalid / pass_rate / tampered_indexes / fail_reason_distribution, plus chain_check when requested.

Check up an MCP config before you run it

{
  "name": "ccs_checkup_mcp_config",
  "arguments": { "config": { "mcpServers": { "...": {} } } }
}

Returns risk_level plus per-finding rule_id, severity (CRIT/HIGH/MED/LOW), evidence, and remediation.


Verify this package yourself

Nothing here asks for your trust. Three commands:

# 1. Offline self-test — runs all four tools against bundled examples
python -m correctover_ccs_mcp.server --selftest

# 2. Full test suite (42 tests, incl. real MCP subprocess handshake)
python -m pytest tests/ -v

# 3. Inspect the tool contracts without connecting a client
python -m correctover_ccs_mcp.server --list-tools

All four tools are exercised in both directions — valid inputs must pass, and tampered, wrong-key, and missing-key inputs must be rejected, not silently allowed.


Tool reference

ccs_verify_receipt

Required receipt (object)
Optional public_key_pem (string)
Returns valid, verdict, public_key_source, full result.evidence (JCS byte count, SHA-256 digest, content-hash match, Ed25519 status, schema check)

ccs_audit_batch

Required batch (array, or {"receipts": [...]})
Optional check_chain (bool, default false), public_key_pem (string)
Limit 200 receipts per call — hard cap, oversized batches are rejected, never truncated
Returns total, valid, invalid, pass_rate, tampered_indexes, fail_reason_distribution, per-receipt results, plus chain_check when requested

ccs_checkup_mcp_config

Required config (object)
Accepts {"mcpServers": {...}}, {"config": {"mcpServers": {...}}}, or a bare {name: {...}} map
Returns risk_level, summary (per-severity counts), findings[] with rule_id / severity / evidence / remediation

Covers hardcoded credentials, arbitrary command execution, writable filesystem mounts, SSRF surface, cleartext HTTP, unpinned package runners, and more.

ccs_locate_tampering

Required original (object), suspect (object)
Returns tampered (bool), changes[] with path (RFC 6901 JSON-Pointer), path_dotted (original form), change type, original / suspect values, severity, remediation

Design decisions worth knowing

Fail-closed, not fail-open. Missing public key, unparseable config, oversized batch, malformed diff input — every one of these returns an explicit error. There is no path where a malformed input produces an affirmative verification result.

No network imports. The server source imports no HTTP or socket libraries. This is enforced by a test, not just a promise: test_no_network_imports fails the build if one is introduced.

Evidence, not verdicts. ccs_verify_receipt returns the JCS canonical byte count, the recomputed SHA-256, the content-hash comparison result, and the raw Ed25519 status. You can audit our reasoning rather than accept our conclusion.

JSON-Pointer at the boundary. The engine internally uses dotted paths; the MCP boundary normalizes to RFC 6901 and keeps the dotted form in path_dotted. Converted, not replaced.

No third-party dependencies. Ed25519, JCS canonicalization, and SHA-256 are implemented against the Python standard library. pip install pulls nothing else.


What this tool does NOT do

  • It does not establish trust in a public key. It verifies that a signature matches a key you supplied. Where that key came from is your problem, and rightly so.
  • It does not prove business impact. A receipt can be cryptographically pristine and describe something that should never have happened. Signature validity and correctness of the underlying action are different questions.
  • It does not replace human audit. The 14-rule checkup is a fast static triage over config documents. Runtime behavior, tool implementation code, permission boundaries, and data flows require manual review.
  • It does not provide third-party dated attestation. That is a separate, optional service. Everything here runs locally and produces a local verdict.

License

Elastic License 2.0 — see LICENSE.

Open standard, proprietary engine. You may use, copy, distribute, and modify this software. You may not provide it to third parties as a hosted or managed service.


Support


Correctover — AI Reliability

Metadata

Release files for correctover-ccs-mcp 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for correctover-ccs-mcp 1.0.0
File Size Uploaded
correctover_ccs_mcp-1.0.0.tar.gz 61.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for correctover-ccs-mcp 1.0.0
File Interpreter ABI Platform
correctover_ccs_mcp-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 119.4 kB

Release files / correctover_ccs_mcp-1.0.0.tar.gz

Download URL correctover_ccs_mcp-1.0.0.tar.gz
Size 61.2 kB
Tags Source
SHA-256 checksum
How to use checksums
243466f6ae8976e9a321dc3c6a9a6bd0467877deffd121b868fafe4225b57615
BLAKE2b-256 checksum
How to use checksums
f1994e59bc69f87982951758b0d3e0602021750d1738a780f092cf39200e5eaa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.1

Release files / correctover_ccs_mcp-1.0.0-py3-none-any.whl

Download URL correctover_ccs_mcp-1.0.0-py3-none-any.whl
Size 58.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c5df2d141aaf016d88e897a7cd0134964d21024f0e02ea1c495df0b1551eef16
BLAKE2b-256 checksum
How to use checksums
ef398febb52ecb22aa02449d353cf75f89f4e277f553ca0f9d58635bbff6d7c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.1

Release history Release notifications | RSS feed

1.0.1

2 release files

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page