Verify blockchain-anchored timestamp proofs offline (ProofLedger, OpenTimestamps-compatible). MCP server exposing proof verification as tools for AI assistants.
Strong tool definitions with clear, domain-specific descriptions and well-structured parameters. All 5 tools have explicit schemas with type information and parameter descriptions. Naming follows verb_noun convention (compute_, verify_, explain_, create_). Descriptions average ~180 chars, well within the 10 - 1024 baseline. All parameters are typed and described. However, some parameter descriptions lack format constraints and validation guidance. Output schemas are not explicitly documented in the parameter definitions. Error handling descriptions are present but could be more granular (e.g., no guidance on retryability). Tool risk annotations (READ_ONLY vs WRITE) are present, which is a positive signal for security awareness.
Compute the cryptographic hash of a local file. The file is read and hashed locally; its contents are never uploaded or transmitted. SHA-256 (the default) is the algorithm used by Bitcoin, Polygon, and blockchain timestamp services such as ProofLedger. Use this to obtain the fingerprint that a timestamp proof anchors, or to confirm a file has not changed.
Create a blockchain timestamp proof for a local file, via ProofLedger. This is the only tool here that uses the network, and the only one that needs an account. Use it when the user wants to PROVE a file exists as of now, rather than check an existing proof. The file's SHA-256 is computed locally and only that digest is sent - the file itself never leaves the machine. The hash is anchored on Polygon (included on every plan, free tier included); Bitcoin anchoring is metered per anchor. Requires a ProofLedger API key in the PROOFLEDGER_API_KEY environment variable. If it is missing, this returns the steps to get a free one - show them to the user rather than treating it as a failure.
Explain, in plain language, what a blockchain timestamp proof contains. Does not require the original file. Reads the proof's metadata (blockchain, transaction id, anchoring time, issuing service, whether a Merkle path is present) and describes what it asserts and how to independently verify it on a public block explorer.
Verify a local file against a blockchain-anchored timestamp proof. Recomputes the file's hash locally and checks it against the hash recorded in the proof JSON. If a Merkle path is present, it recomputes the Merkle root. Confirms a blockchain transaction reference is present. A passing result means the file is byte-for-byte identical to the file that was timestamped, and the proof points to a public transaction (on Polygon or Bitcoin) that anyone can check on a block explorer.
Output schemas not documented. Tool descriptions explain what is returned (e.g., 'passing result means...'), but formal return types and field structures are not visible in parameter definitions. LLMs cannot infer downstream field availability for chaining.
Parameter format constraints are described in prose but not formalized as JSON Schema patterns or enums. E.g., 'algorithm' accepts 'sha256', 'sha512', 'sha1', 'md5' but is not declared as an enum; 'proof_json' accepts 'JSON string OR path' but no validation rule is visible.
Error guidance is minimal. Descriptions mention what tools do (e.g., 'confirms a blockchain transaction reference is present') but do not explain recovery paths. E.g., verify_hash does not state 'If hash mismatch, the file has been modified, cannot verify'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 64 | 2026-07-28+ | v2 |
Verify a known file hash against inline proof data. Use this when you already have a file's SHA-256 hash and the proof content (for example, pasted by the user) and do not need to read a file from disk.
create_proof's 'PROOFLEDGER_API_KEY' environment variable is mentioned in the description but not validated as a tool parameter. The description states 'If it is missing, this returns the steps to get a free one', but tool invocation does not show conditional behavior or clear error messages.