
dmt-receipts
io.github.Colchora/dmt-receipts
Prepare and verify TAP/Ordinals payloads for AI agent memories on Bitcoin.
Documentation
DMT Receipts
Portable, Bitcoin-permanent agent memories via the TAP Protocol / Ordinals.
DMT Receipts is a local stdio MCP server (prepare_memory, verify_inscription) and a browser demo. It turns a five-field dmt-memory/v1 JSON object into an inscription-ready payload. Permanence means those memory bytes are committed on Bitcoin L1 as Ordinals inscription content under TAP ("p":"tap"). Keep the memory and inscription id / txid in storage you control. After prepare_memory, status is prepared. A wallet or Ordinals tool inscribes the bytes and pays the Bitcoin fee.
Live site · Protocol recipe · Repo show-and-tell · Full specification · TAP specs
Maintainer: github.com/Colchora
Start here
The live site prepares and verifies a memory in the browser. Nothing is uploaded; receipts stay in localStorage until you export them. This package is the same protocol as a local MCP server. It is not published to the npm registry, so install it from a clone (below) or use the site.
| What you want | Where |
|---|---|
| Prepare a memory, no install | Live app → Anchor |
| Verify an inscription | Live app → Verify |
| Receipts saved in this browser | Live app → Receipts |
| Prove the local tools | npm ci then node examples/run-demo.mjs |
| Agent index (tools, run, demo) | llms.txt in this repo |
| Canonical byte rules | live llms.txt |
| Full protocol | spec.md |
| Machine-readable manifest | agent.json |
| MCP registry id | io.github.Colchora/dmt-receipts (server.json, glama.json) |
Optional honor-system funding is separate from inscription fees: Support and Buyback.
What a receipt does—and does not—establish
| A receipt can establish | A receipt cannot establish |
|---|---|
These exact canonical bytes were inscribed as Ordinals content in a Bitcoin transaction (when inscription_id / content match). | Who created or owns those bytes; authorship needs a separate signature scheme. |
Local verify_inscription can recompute the digest and optionally fetch public inscription content for comparison. | Truth, accuracy, originality, intent, or exclusive ownership of the memory. |
| TAP indexers / Ordinals explorers can show the inscription independently of this repo. | A free hash-only calendar proof. Inscription fees are real Bitcoin fees. |
This MCP server does not broadcast transactions or pay fees. Status after prepare_memory is prepared, not inscribed.
Show and tell
Node.js 18+. npm ci installs dependencies and builds dist/index.js. The server speaks MCP on stdin and stays open until a client connects.
git clone https://github.com/Colchora/dmt-receipts.git
cd dmt-receipts
npm ci
node examples/run-demo.mjs
The script calls prepare_memory on examples/demo-memory.json, then verify_inscription with no inscription id. A passing run prints:
| Check | Value |
|---|---|
sha256 | 76f3f9ff531cecbfe46e676e932f9b0d9d02b3d7c04e5a558924a8092cb0294b |
byte_length | 170 |
status | prepared |
matches_expected_sha256 | true |
ok | false until the bytes are inscribed |
ok stays false while the memory is only prepared. Inscription content that matches the canonical bytes is what makes a later verify succeed. The same numbers are in examples/expected-digest.json.
Cursor loads .cursor/mcp.json after the build. ${workspaceFolder} is the directory that contains that file:
{
"mcpServers": {
"dmt-receipts": {
"type": "stdio",
"command": "node",
"args": ["${workspaceFolder}/dist/index.js"]
}
}
}
Claude Desktop and other clients use an absolute path to the built file:
{
"mcpServers": {
"dmt-receipts": {
"command": "node",
"args": ["/absolute/path/to/dmt-receipts/dist/index.js"]
}
}
}
Call prepare_memory with the five fields in examples/demo-memory.json (agent_id, key, content, tags, created_at). Pass the returned memory and sha256 to verify_inscription with fetch_content: false and include_trac: false until you have an inscription_id.
Tools:
prepare_memory— canonicalize a memory, hash it, and return an Ordinals/TAP inscription recipe (content UTF-8 + optionaldtapointer).verify_inscription— recompute the digest; optionally fetch inscription content and compare; return explorer links.
Walkthrough: examples/README.md. Agent index: llms.txt. Protocol bytes: live llms.txt.
Checks
npm run typecheck
npm run build
npm test
npm run typecheck runs tsc --noEmit. The compiler uses strict, noUncheckedIndexedAccess, and exactOptionalPropertyTypes. npm test rebuilds dist/, runs the unit tests, and runs examples/run-demo.mjs.
Prepare, inscribe, verify
- Call
prepare_memorywithagent_id,key, andcontent. - Inscribe
inscription_recipe.content_utf8as Ordinals content (application/jsonortext/plain) with TAP Wallet or any Ordinals/TAP tool. Optional TAPdta(≤512 bytes) may carrysha256:<hex>on token-deploy flows. - Store the memory with
inscription_id/txid. - Call
verify_inscriptionwith the memory andinscription_id.
The same prepare and verify steps work in the browser with no install: Anchor, then Verify.
Canonical memory format
Compact UTF-8 JSON, no trailing newline, keys sorted by Unicode code point, literal non-ASCII:
{"agent_id":"demo-agent","content":"Remember this exact state.","created_at":"2026-11-05T17:00:00Z","key":"notes/hello","tags":["demo"]}
| Field | Type | Notes |
|---|---|---|
agent_id | string | Stable identifier for the agent. |
key | string | Memory key, slug, or path. |
content | string, object, array, number, or boolean | Nested values must be JSON-compatible. |
tags | array of strings | Use [] when there are no tags. |
created_at | string | ISO-8601 UTC ending in Z, whole-second precision. |
| (extensions) | any JSON value | Optional. Extra fields are sorted with everything else and included in the hash. prepare_memory keeps additional tool arguments. |
Protocol and privacy
Inscription content is public on Bitcoin. Do not inscribe secrets. This tool never uploads memory bytes to a backend of its own; if you fetch content during verify, you contact a public explorer.
License
MIT
Support & Tap buyback
Optional honor-system funding lives on the live site:
- Support plans — Free prepare, Support, Tap buyback
- Buyback hub — all contribution proceeds are directed here (USDC address + local payment-reference log)
Prepare/inscribe memory tooling stays free aside from Bitcoin network inscription fees paid to miners/inscribers. This repository does not process card payments.
https://github.com/Colchora/dmt-receipts/releases/download/v0.2.0/dmt-receipts-0.2.0.mcpb# mcpb: https://github.com/Colchora/dmt-receipts/releases/download/v0.2.0/dmt-receipts-0.2.0.mcpb