🔌 MCP server

Give an AI agent the ability to prove what it saw and when. Timestamp a hash, archive a page, fetch a URL with a receipt — all anchored on the Bitcoin SV blockchain, all verifiable by anyone without trusting bsv.cx.

Connect

Endpointhttps://bsv.cx/mcp
TransportStreamable HTTP (stateless)
Authnone — verification is free; paid tools are pay-per-call over HTTP
{
  "mcpServers": {
    "bsv-cx": { "url": "https://bsv.cx/mcp" }
  }
}

Clients that only speak stdio can bridge with npx mcp-remote https://bsv.cx/mcp.

Tools

notarize_hash

Anchor a sha256 digest in a Bitcoin SV transaction, proving the content existed at this time. Send ONLY the hash — the content never leaves your machine, and bsv.cx cannot see what was hashed. Free. Idempotent: the same hash returns the same record.

  • sha256 — sha256 hex digest of the exact bytes you want to timestamp
  • label optional — optional public note stored with the proof

verify_hash

Look up a sha256 across EVERY bsv.cx protocol — notary timestamps, verifiable-fetch receipts, notarized captures, web-page archives, Merkle batch roots and attestations — and return when it was anchored and the transaction that proves it. A hash anchored by any of these counts as found. Free, and never rate-limited into unavailability.

  • sha256 — the sha256 hex digest to look up

spv_verify

Verify ANY Bitcoin (BSV) Merkle inclusion proof — a BEEF envelope (BRC-62), a BUMP (BRC-74), or a raw TSC proof — against block headers bsv.cx syncs itself over the BSV P2P network, NOT an explorer. Returns confirmed / rejected / inconclusive. This is the trustless core: you send only the proof (never the root), we fold the root ourselves and check it against a header we hold — so you never have to trust bsv.cx. Works for ANY txid's proof, not just bsv.cx's own anchors. Free.

  • beef optional — a BEEF envelope (BRC-62) as hex — easiest input; carries the tx and its merkle path
  • bump optional — a BUMP (BRC-74) merkle path as hex; must be paired with txid
  • txid optional — 64-hex txid; required with bump, or with a raw TSC proof
  • height optional — block height (raw TSC proof only)
  • index optional — the transaction's index in the block (raw TSC proof only)
  • nodes optional — TSC merkle branch nodes as hex, or "*" for a duplicated node (raw TSC proof only)

proofpack

For any CONFIRMED BSV transaction id, get a freshly SPV-verified bundle: BEEF (BRC-62) and BUMP (BRC-74) plus bsv.cx's own self-synced header-tip attestation. bsv.cx fetches the Merkle proof and folds it against block headers it syncs over the BSV P2P network BEFORE serving, so you receive a bundle that already confirms — verifiable by any @bsv/sdk client with no bsv.cx-specific code. Verification itself is free at /spv/verify; this does the fetch + fold + package for you and is priced per call (pay over HTTP with an x402 payment — see /pay).

  • txid — the confirmed transaction id to package a proof bundle for

archive_url

Capture a web page as it looks right now — screenshot and text — and anchor a hash of that capture on-chain. Use this before relying on a page you cite, so a later edit or deletion cannot be denied. Free.

  • url — the page to capture
  • thorough optional — wait for lazy-loaded content; slower but better for long or image-heavy pages

get_archive

Fetch the manifest for a previous archive_url capture: when it was taken, and its proof. Free.

  • hash — the capture hash returned by archive_url

verifiable_fetch

Fetch a URL as readable text AND get a receipt anchoring a hash of the exact bytes returned, so you can later prove what the page said when you read it. Priced per call (pay over HTTP with an x402 payment — see /pay).

  • url — the page to fetch
  • thorough optional — wait for lazy-loaded content

batch_timestamp

Anchor a Merkle root over many sha256 digests in a single transaction — far cheaper per item than notarizing each one. Each hash gets an inclusion proof. Priced per call (pay over HTTP with an x402 payment — see /pay).

  • hashes — sha256 hex digests to timestamp together

service_status

Report whether anchoring is currently working. Call this if a tool reports something stored but not anchored.

  • no arguments

What it costs

Verifying anythingalways free — a proof nobody can check is not a proof
notarize_hash, archive_urlfree
verifiable_fetch, batch_timestamppriced per call — pay over HTTP with an x402 payment (this MCP interface cannot attach a BSV payment)

What we can and cannot see

Your documentsnever sent — notarize_hash takes a digest, not content
Pages you archivewe fetch them ourselves, so those URLs are visible to us

A hash covers exact bytes. Re-encoding a file — a platform re-compressing an image or video on upload — changes its hash, so the proof covers your original, not a re-encoded copy someone else holds.

What a timestamp does and does not prove

It proves those exact bytes existed no later than that block. It does not prove who made them, that they are true, or that they are original. Anyone can timestamp anything, including someone else's work.

Questions or something broken? Report a problem.