Dmt Receipts

io.github.ColchoraPublished by GitHub account Colchorav0.2.0Updated Nov 6, 2026

Prepare and verify TAP/Ordinals payloads for AI agent memories on Bitcoin.

Overview

AI-generated overview

Local MCP server that canonicalizes AI agent memories into Bitcoin Ordinals/TAP inscription payloads and verifies inscribed content.

What you can do
  • Prepare a memory: canonicalize a five-field dmt-memory/v1 JSON object, hash it, and return an Ordinals/TAP inscription recipe with content bytes and an optional dta pointer.
  • Verify an inscription: recompute the digest, optionally fetch public inscription content to compare, and return explorer links.
  • Keep the returned memory and sha256 for later verification once an inscription id or txid exists.
When to use it
Use it when you want agent memories committed permanently on Bitcoin L1 as Ordinals content under TAP and need a deterministic, hash-checkable payload before inscribing. Not needed if you only want ordinary local memory storage.
Requirements
Runs as a local stdio process built from a git clone with Node.js 18+ (npm ci builds dist/index.js); it is not published to npm. Clients are configured with a node command pointing at the built file. No accounts, API keys or environment variables are declared. Verifying with content fetch contacts a public explorer.
Before you install
Inscription content is public on Bitcoin, so secrets must never be inscribed. The server does not broadcast transactions or pay fees; a separate wallet or Ordinals tool inscribes the bytes and pays real Bitcoin fees, and status stays prepared until then. A receipt does not prove authorship, ownership or accuracy. Optional honor-system funding and a buyback hub are separate from inscription fees.

Installation

In SourceWeft

  1. Open Dmt Receipts in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

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

[MIT license] [Node.js 18+]

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 wantWhere
Prepare a memory, no installLive app → Anchor
Verify an inscriptionLive app → Verify
Receipts saved in this browserLive app → Receipts
Prove the local toolsnpm ci then node examples/run-demo.mjs
Agent index (tools, run, demo)llms.txt in this repo
Canonical byte ruleslive llms.txt
Full protocolspec.md
Machine-readable manifestagent.json
MCP registry idio.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 establishA 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.

sh
git clone https://github.com/Colchora/dmt-receipts.gitcd dmt-receiptsnpm cinode 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:

CheckValue
sha25676f3f9ff531cecbfe46e676e932f9b0d9d02b3d7c04e5a558924a8092cb0294b
byte_length170
statusprepared
matches_expected_sha256true
okfalse 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:

json
{  "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:

json
{  "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 + optional dta pointer).
  • 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.

Prepare, inscribe, verify

  1. Call prepare_memory with agent_id, key, and content.
  2. Inscribe inscription_recipe.content_utf8 as Ordinals content (application/json or text/plain) with TAP Wallet or any Ordinals/TAP tool. Optional TAP dta (≤512 bytes) may carry sha256:<hex> on token-deploy flows.
  3. Store the memory with inscription_id / txid.
  4. Call verify_inscription with the memory and inscription_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:

json
{"agent_id":"demo-agent","content":"Remember this exact state.","created_at":"2026-11-05T17:00:00Z","key":"notes/hello","tags":["demo"]}
FieldTypeNotes
agent_idstringStable identifier for the agent.
keystringMemory key, slug, or path.
contentstring, object, array, number, or booleanNested values must be JSON-compatible.
tagsarray of stringsUse [] when there are no tags.
created_atstringISO-8601 UTC ending in Z, whole-second precision.
(extensions)any JSON valueOptional. 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.

Source: README.md at commit 371a1d5

Tools

0
SourceWeft started this package once in an isolated sandbox, without credentials, to list its tools. That failed: the package type cannot run in the sandbox.

Version history

1
  1. v0.2.0LatestNov 6, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts