Skip to main content
Glama
Nuraveda-Labs

@qed-proof/mcp

README.md
# @qed-proof/mcp

QED Proof as an [MCP](https://modelcontextprotocol.io) server. An AI agent says it did something; QED Proof reads the
destination itself — never the agent's own report — decides a verdict, and issues a signed receipt anyone can check.

This server lets any MCP client (Claude, Claude Code, Cursor, and others) submit claims, read verdicts, fetch receipts
and verify them offline, with no code.

## Tools

| Tool | What it does |
|---|---|
| `submit_claim` | Records a claim (an action on a target) for QED Proof to verify. Returns a `claim_id`, and the verdict when the check finishes inline. |
| `get_verdict` | A claim's state, verdict (`verified`, `late`, `mismatch`, `failed`, `unverifiable`), what it means, and the `receipt_id`. |
| `get_receipt` | The full signed receipt, with a shareable link. Receipts are public. |
| `verify_receipt` | Checks a receipt **offline**: schema, integer-only encoding, key validity, Ed25519 signature, claim digest, and Merkle inclusion. It doesn't read the chain, so the anchor is reported as not checked and the achieved trust level is at most 1. |
| `list_claims` | Recent claims in your workspace, with filters. |
| `list_connections` | Destinations your workspace has connected read-only, and whether a verifier is live for each. |

There are no tools to connect accounts, disconnect them or manage keys: those stay in the console.

**Actions verified today** are the ones with a published verifier profile in the QED Proof spec: `github.commit.push`,
`github.pr.open`, `github.checks.pass`, `x.post.publish` and `slack.message.post`. Any other action is accepted and
decided as `unverifiable` — QED Proof never guesses.

## Use it

You need a workspace API key from the console (**Developers** → **API keys**).

**Local (stdio):**

```bash
claude mcp add qed-proof --env QED_API_KEY=<your key> -- npx -y @qed-proof/mcp
```

Environment: `QED_API_KEY` (required for everything but offline verification), `QED_AGENT_ID` (the default `agent_id`
for claims; otherwise the MCP client's name), `QED_API_URL` (defaults to `https://api.qedproof.site`, e.g. for a
self-hosted node).

**Hosted (Streamable HTTP):** `https://mcp.qedproof.site/mcp` with `Authorization: Bearer <your key>`.

```bash
claude mcp add --transport http qed-proof https://mcp.qedproof.site/mcp --header "Authorization: Bearer <your key>"
```

The hosted server keeps no state and stores nothing. It forwards your key to the QED Proof API for each request, so
the API's own workspace scoping and rate limits apply, and it logs only the method, tool name, status and latency.

## Data

`target` and `params` of a claim are copied into its receipt, which is **public and permanent**. Receipts record
fingerprints and the facts a verifier read (a commit SHA, an HTTP status), never content.

## Develop

```bash
npm install
npm test          # includes every spec test vector
npm run build
```

Apache-2.0. QED Proof has no token.

TDQS

A4.3/5.0

Scored across 6 tools

Disambiguation5/5

Each tool maps to a clearly distinct operation: submit a claim, get a single verdict, retrieve a receipt, verify a receipt, list claims, and list connections. Though get_verdict and list_claims both expose verdict information, one is a targeted lookup and the other is a filtered list, so selection should be unambiguous.

Naming Consistency5/5

All tool names consistently follow a verb_noun snake_case pattern: get_*, list_*, submit_*, verify_*. There are no mixed casing styles, vague verbs, or unpredictable naming conventions.

Tool Count5/5

Six tools is well-scoped for the claim/receipt verification domain. Each tool covers a necessary step in the workflow without unnecessary duplication or bloat.

Completeness4/5

The full claim lifecycle is covered: submit, poll/check verdict, fetch receipt, verify receipt, and list claims/connections. The only notable limitation is that verify_receipt explicitly does not check the on-chain anchor, so full trust-level-2 verification is not available within this tool set, though this is documented as an intentional scope boundary.

Maintenance

ActivityMaintained
ResponsivenessNo issues