@ledgerproof/mcp-server
Provides tools for issuing and verifying EU AI Act Article 50 transparency receipts, with daily Merkle roots anchored to the Bitcoin blockchain for immutability.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@ledgerproof/mcp-server issue a receipt for the AI-generated blog post"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@ledgerproof/mcp-server
A Model Context Protocol server that lets any
MCP client (Claude Desktop, Claude Code, IDEs, agents) issue and verify
EU AI Act Article 50 transparency receipts through
@ledgerproof/sdk.
LedgerProof implements the IETF SCITT architecture drafts
(draft-ietf-scitt-architecture-22) with COSE Receipts
(draft-ietf-cose-merkle-tree-proofs-18), and additionally anchors a daily
Merkle root to Bitcoin (OP_RETURN). It is an early implementation of live
IETF Internet-Drafts — not an RFC, not a standard, not certified, not "SCITT
compliant." That precision is deliberate; please keep it in any derived copy.
Issuing a receipt is a real, deliberate action: each receipt's daily Merkle root is anchored to Bitcoin, which costs a Bitcoin transaction fee. Do not wire agents to auto-issue on loose triggers. The bundled
ledgerproof_when_to_issueprompt spells out when issuance is (and isn't) appropriate.
Transports
This server speaks the two current MCP transports. The deprecated HTTP+SSE transport is intentionally not used.
stdio (default) — for local clients that launch the server as a subprocess.
Streamable HTTP (
StreamableHTTPServerTransport) — for networked clients. In this modeledgerproof_issue_receiptrequiresprecomputed_sha256and rejects raw payloads, so artifact bytes never cross the network.
Related MCP server: @humanaccepted/mcp
Tools
Tool | Purpose |
| Produce an Article-50 record for AI-generated content and register it. Exactly one of |
| Verify by |
| Poll a |
| SHA-256 a |
Prompt
ledgerproof_when_to_issue— scoped guidance: issue only when deliberately "producing an Article-50 transparency record for AI-generated content," and a reminder that anchoring costs a Bitcoin tx fee, so do not auto-fire on loose triggers.
Honest behavior notes / gaps
Anchoring is asynchronous. Issuance always returns
anchor_status: "pending". The server never reports a fabricated "anchored" status —ledgerproof_check_anchorreportsanchoredonly when the API returns a real Bitcointxid. Poll until then.Raw payloads stay local even on stdio. The SDK hashes the artifact locally and only the
artifact_hash(never the bytes) is sent to the LedgerProof API. Streamable HTTP additionally keeps the bytes off the MCP hop by requiringprecomputed_sha256.SCITT verification is guarded.
verifyTransparentStatementlives in the SDK'sscitt/module, which is being built in parallel and may not be exported yet. If it's absent,ledgerproof_verify_receipt(Transparent Statement mode) returns a clear "not available in the installed SDK" error instead of failing the build. Sequence-mode verification works today.precomputed_sha256issuance depends on an SDK feature. The basepublishAiArticle50always hashes raw bytes and exposes no precomputed-hash entrypoint. The server passes the hash through optimistically (forward-compat); if the installed SDK can't accept it, the tool returns a precise error rather than registering a record with the wrongartifact_hash. Until the SDK adds a precomputed-hash publish path, issue from rawartifactover stdio.
Configuration (environment variables)
Variable | Required | Default | Notes |
| yes | — | Legal-entity id (LEI/EUID/VAT/DID). Not an email. |
| yes | — | ISO country code, e.g. |
| yes | — | LedgerProof API key. |
| no |
| API base URL ( |
| no | ephemeral | Ed25519 signing seed (hex). Never logged. |
| no | — | Path to a file containing the hex seed (alt to |
| no |
| Key id registered with the service. |
HTTP-only (optional): PORT/LEDGERPROOF_MCP_PORT (default 3000),
LEDGERPROOF_MCP_HOST (default 127.0.0.1),
LEDGERPROOF_MCP_TRANSPORT=http (same as --http).
The Ed25519 signing key is never logged, never returned by any tool, and never serialized. Only its presence (
providedvsephemeral) is printed at boot.
Install / build
npm install
npm run build # tsc → dist/
npm run lint # tsc --noEmitRun
# stdio (default)
npx @ledgerproof/mcp-server
# Streamable HTTP on http://127.0.0.1:3000/mcp
npx @ledgerproof/mcp-server --http --port 3000MCP client config
stdio
{
"mcpServers": {
"ledgerproof": {
"command": "npx",
"args": ["-y", "@ledgerproof/mcp-server"],
"env": {
"LEDGERPROOF_PUBLISHER_ID": "LEI:5493001KJTIIGC8Y1R12",
"LEDGERPROOF_DEPLOYER_COUNTRY": "DE",
"LEDGERPROOF_API_KEY": "sk_live_...",
"LEDGERPROOF_API_BASE": "https://api-eu.ledgerproofhq.io",
"LEDGERPROOF_SIGNING_KEY_HEX": "<32-byte-hex-ed25519-seed>",
"LEDGERPROOF_KEY_ID": "default"
}
}
}
}Streamable HTTP
Start the server (npx @ledgerproof/mcp-server --http --port 3000), then point
the client at the URL:
{
"mcpServers": {
"ledgerproof": {
"type": "streamable-http",
"url": "http://127.0.0.1:3000/mcp"
}
}
}Over Streamable HTTP, call ledgerproof_hash_artifact first and pass the result
to ledgerproof_issue_receipt as precomputed_sha256 — raw payloads are
rejected on this transport by design.
License
Apache-2.0
Available Tools
4 toolsledgerproof_check_anchorCheck Bitcoin anchor statusARead-onlyIdempotent
Check whether a receipt's daily Merkle root has been anchored to Bitcoin yet. Returns anchor_status ('pending' or 'anchored') and, when anchored, the Bitcoin txid, block height/hash, and Merkle inclusion proof. Agents should poll this with the receipt's sequence after issuance until anchor_status becomes 'anchored' (the anchor is batched daily, so this can take time).
Inputs: sequence (required).
ledgerproof_hash_artifactHash an artifact (SHA-256)ARead-onlyIdempotent
Compute the SHA-256 (hex) of a payload using the SDK's hashing. PRIVACY: use this to obtain a precomputed hash so raw payloads never leave the machine — then pass the hash to ledgerproof_issue_receipt as precomputed_sha256. Over Streamable HTTP, issue_receipt REQUIRES precomputed_sha256 and rejects raw payloads, so hash locally first.
Inputs: payload (required).
ledgerproof_issue_receiptIssue an Article-50 transparency receiptA
Produce an EU AI Act Article 50 transparency record for a piece of AI-generated content and register it with LedgerProof. Provide EXACTLY ONE of artifact (the raw content; hashed locally, never uploaded) or precomputed_sha256 (a SHA-256 hex you computed yourself), plus the AI-system and deployer metadata. Mirrors the SDK's publishAiArticle50. Returns {sequence, entry_hash, verify_url, anchor_status}. anchor_status is ALWAYS 'pending' on issuance because Bitcoin anchoring is asynchronous (a daily Merkle root is written to an OP_RETURN, which costs a Bitcoin tx fee) — poll ledgerproof_check_anchor until it becomes 'anchored'. Do not issue on loose triggers.
Inputs: aiSystemId (required), deployerName (required), contentCategory (required), artifact, +12 more.
ledgerproof_verify_receiptVerify a transparency receiptARead-only
Verify a LedgerProof receipt. Provide EITHER {sequence} (looks up the chain entry from the public verifier) OR {transparent_statement} (a SCITT Transparent Statement bundle, verified with the trust-minimized §7 algorithm: issuer COSE_Sign1 signature, RFC 9162 inclusion proof, Transparency-Service receipt signature, and an independent Bitcoin OP_RETURN check). For a Transparent Statement, returns {issuerSignatureValid, inclusionProofValid, receiptSignatureValid, bitcoinConfirmed, valid, recomputedRoot}. The Transparency-Service PUBLIC key (for the receipt signature) is loaded from LEDGERPROOF_TS_PUBLIC_KEY_HEX or fetched from {apiBase}/v1/scitt/ts-key; the Bitcoin txid is taken from the statement wrapper, the txid arg, or a /v1/scitt anchor lookup. SCITT verification requires the SDK's scitt module to be present in the installed build.
Inputs: sequence, transparent_statement, txid, issuer_public_key_hex, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: hashing content, issuing a receipt, checking Bitcoin anchoring, and verifying a receipt. There is no overlap in functionality.
All tool names follow the consistent pattern 'ledgerproof_verb_noun' using snake_case. Verbs and nouns are clear and match the tool's action (hash_artifact, issue_receipt, check_anchor, verify_receipt).
Four tools is well-scoped for the domain of managing AI-generated content receipts. Each tool covers a necessary step in the workflow without unnecessary extras.
The tool set covers the full lifecycle: hash content (hash_artifact), issue receipt (issue_receipt), check anchoring status (check_anchor), and verify receipt (verify_receipt). No obvious gaps for the intended purpose.
Maintenance
Related MCP Connectors
Agent Content Watermark MCP — dedicated EU AI Act Article 50(2) GenAI watermarking. Visible +
AI governance MCP server for EU AI Act compliance and jurisdiction verification
Prove AI decisions in Bitcoin: 755 compliance checks, bank fraud proof, AI payment checks. Free.
Deterministic AI liability attribution with Bitcoin-anchored proof certificates.
Related MCP Servers
- AlicenseAqualityDmaintenanceDocument verification MCP server enabling AI agents to verify file authenticity by computing SHA-256 fingerprints locally and checking Bitcoin-anchored proofs via OpenTimestamps.55 npmMIT
- AlicenseAqualityDmaintenanceMCP server that auto-emits tamper-evident receipts for every tool call, enabling EU AI Act Article 12 compliance with signed, chain-linked receipts.1Apache 2.0
- AlicenseAqualityBmaintenanceThe open registry of AI agents. Every agent gets a free birth certificate (a number and a date) and can timestamp what it creates, or only its SHA-256, with an RFC 3161 timestamp and a Bitcoin anchor that anyone can verify without us. Free, no account.11MIT
- AlicenseNot gradedqualityDmaintenanceEnables EU AI Act Article 50(2) compliant watermarking of AI-generated content using C2PA manifest envelopes.55 PyPIMIT