About KeyHalve - verify sealed documents
KeyHalve verify-MCP is a public, read-only server for checking KeyHalve-sealed documents across supported platforms. It verifies status, integrity, attestations, and time locks without receiving decryption keys; sealed contents remain in the holder’s browser.
Key features
- 01Check active or revoked status
- 02Verify ciphertext integrity
- 03Validate rail attestations
- 04Assess time-lock validity
- 05Fail-closed verification verdict
Use cases
- 01Check whether a sealed document was revoked
- 02Verify ciphertext against its issuance commitment
- 03Confirm a document’s rail attestation
- 04Check validity within a time window
MCP support
Exposes the `keyhalve_verify`, `keyhalve_status`, and `keyhalve_explain` tools over stateless Streamable HTTP. All tools are read-only and require no authentication.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://mcp.keyhalve.com/mcpclaude mcp add --transport http com-keyhalve-verify https://mcp.keyhalve.com/mcp{"mcpServers":{"com-keyhalve-verify":{"type":"http","url":"https://mcp.keyhalve.com/mcp"}}}Open in Cursor{"servers":{"com-keyhalve-verify":{"type":"http","url":"https://mcp.keyhalve.com/mcp"}}}Open in VS Code{"mcpServers":{"com-keyhalve-verify":{"type":"http","url":"https://mcp.keyhalve.com/mcp"}}}{"mcpServers":{"com-keyhalve-verify":{"serverUrl":"https://mcp.keyhalve.com/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
3| Parameter | Type | Required | Description |
|---|---|---|---|
| input | string | Yes | A KeyHalve verify URL, QR-code text, or bare document id. |
Details
From the project READMEKeyHalve verify-MCP
Free, public, no-account MCP server that lets any AI verify KeyHalve-sealed documents — from any platform on the rail (ValidPay, CheckBooks, …). Seal = the door (a platform's paid MCP). Verify = the room (this one, free forever).
- Endpoint:
https://mcp.keyhalve.com/mcp(Streamable HTTP, stateless) - Tools:
keyhalve_verify·keyhalve_status·keyhalve_explain— all read-only, no auth
The blindness rule
This server never receives decryption keys. A verify URL carries the holder's key share in
the #key= fragment; parseInput discards any fragment before any other logic runs, and the
response says so. Verification here covers everything provable without the key:
| Check | Meaning |
|---|---|
| status | active / revoked (with reason) on the issuing platform |
| ciphertext integrity | SHA-256 of the served ciphertext = commitment recorded at issuance (v2) |
| rail attestation | Ed25519-verified against the pinned rail key; dual-sign content binding when present |
| time lock | validity window judged client-side (Patent D semantics) |
| issuer trust | fail-closed: declared at best, never proof |
Reading the sealed contents still happens only in the holder's browser — exactly like the web
verifier. The overall verdict fails closed: any failed check → FAILED — DO NOT TRUST.
Design notes
- Zero runtime dependencies. WebCrypto only; the whole protocol layer is hand-auditable.
Same reasoning as the pinned-key rail client in
keyhalve-website. - Stateless. No sessions, no SSE, no KV, no cookies; every POST gets
application/json. Request bodies are never logged. - Tenant-neutral. Platforms come from the same manifest data as the web verifier
(
TENANT_MANIFESTinsrc/verifier.ts); onboarding a platform = one data entry. - Fail closed. Unreachable rail, malformed share, partial dual-sign binding, unknown id prefix — all report NOT verified, never a soft pass.
Develop / deploy
npm ci
npm run typecheck && npm test # 32 tests
npm run dev # wrangler dev
Deploys are manual (deploy.yml via workflow_dispatch, same discipline as rail/console).
Needs the CLOUDFLARE_API_TOKEN repo secret; the route mcp.keyhalve.com is a custom domain
on the business CF account (same account as the watchdog scheduler).
Directory submissions (Mike-gated)
Submitting to the Claude Connectors Directory / ChatGPT App Directory is an outward-facing step — prepared separately, goes out only on Mike's go.
Listings
Directory-listing assets live in this repo — reuse them, don't invent copy:
llms-install.md— AI-agent install steps (Cline's AI-driven install; also the canonical per-client snippets).glama.json— Glama claim file (maintainers; their live schema is maintainers-only).assets/icon-400.png— 400×400 icon (white split-circle glyph on Ink #0E1116, from the brand kit).- Descriptions must stay byte-consistent with
src/tools.tsand pass the approved-claims register (no "split key", no "tamper-proof", no issuer-identity claims).
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.