Doichain

io.github.neubuot由 GitHub 账号 neubuot 发布v1.5.0更新于 Oct 24, 2026

Proof of existence, names and chain data of the Doichain blockchain for AI agents

已验证Streamable HTTP可网页运行金融开发者工具

概览

AI 生成的概览

面向 Doichain 区块链的远程 MCP 服务器:把 SHA-256 哈希锚定为防篡改时间戳,并读取名称、区块、交易和地址数据。

可以做什么
  • 把 SHA-256 哈希锚定上链作为存在性证明,并查询某哈希是否已锚定及锚定时间
  • 在服务器端计算短文本的 SHA-256,并查询当日剩余锚定额度
  • 查询名称的当前值、所有者与到期时间,查看名称历史、批量到期检查和前缀搜索
  • 读取链状态、区块、交易和地址余额
  • 验证某条消息是否由某个 Doichain 地址的私钥签名
适用场景
适合需要证明某份文件或某段陈述在特定时间点之前已经存在,或事后核验此类证明的场景。也适合在不运行节点的情况下查看 Doichain 的名称记录、区块、交易和地址余额。
运行要求
需要一个远程 Streamable HTTP 端点;无需账号、API 密钥或安装。可选在 X-API-Key 请求头中提供自有密钥以解除锚定额度限制。客户端需能通过 HTTPS 访问该端点;由于不支持 CORS,直接在网页中运行的客户端不可用。
安装前请注意
anchor_proof 是唯一的写入操作,会把哈希以及可选备注或文件名永久发布到公开区块链上;托管端点使用运营方钱包注册名称。免费锚定按 IP 地址和每日限额,网页版聊天应用的用户共享同一额度。名称约 36,000 个区块后到期,之后任何人都可重新注册。证明只表明存在性,不表明作者身份。hash_text 会把文本发送到服务器,机密文件应在本地计算哈希。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Doichain,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.neubuot%2Fdoichain/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "doichain": {
      "type": "http",
      "url": "https://doi-api.sendlabs.de/mcp"
    }
  }
}

README

[Doichain MCP logo]

Doichain MCP Server

Tamper-evident timestamps for your AI agent.
Prove that a document already existed at a given time: anchor its hash on the Doichain (proof of existence), verify proofs and read names, blocks and addresses.
One URL, no account, no API key, no installation.

[MCP Registry] [Endpoint] [CI] [License: MIT] [Python 3.11+] [MCP 2024-11-05 to 2026-07-28]

Quick start · Tools · How it works · Limits · Security · Tool reference · Self-hosting · Deutsch


Endpoint: https://doi-api.sendlabs.de/mcp · Streamable HTTP · stateless · no authentication required

The Doichain is a public blockchain with a built-in name-value store (a Namecoin descendant, merge-mined with Bitcoin). This server makes it usable for any agent that speaks the Model Context Protocol: Claude, ChatGPT, Cursor, VS Code Copilot and many more. Ask your agent in plain language, it picks the right tool itself:

"Anchor the hash of offer-2026.pdf on the Doichain." "Did this contract already exist before October 1?" "Are d/example or id/alice about to expire?" "How is the Doichain doing right now?"

Opening the endpoint in a browser shows the landing page with setup instructions.

Quick start

Claude Code

bash
claude mcp add --scope user --transport http doichain https://doi-api.sendlabs.de/mcp

Check with claude mcp list. Without --scope user the server only applies to the current project.

Claude (web and desktop)

  1. Open Customize → Connectors and click +.
  2. Choose Add custom connector, name it Doichain and paste https://doi-api.sendlabs.de/mcp.
  3. In a chat, enable it via + → Connectors.

Custom connectors also work on the free plan (one connector). On Team and Enterprise an owner adds it in the organization settings.

ChatGPT

Turn on Settings → Security and login → Developer mode, then create an app under Plugins → + with the URL above and authentication None. Developer mode is available on the web for Plus, Pro, Business, Enterprise and Education.

Cursor

~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):

json
{  "mcpServers": {    "doichain": { "url": "https://doi-api.sendlabs.de/mcp" }  }}

VS Code (Copilot agent mode)

.vscode/mcp.json:

json
{  "servers": {    "doichain": { "type": "http", "url": "https://doi-api.sendlabs.de/mcp" }  }}

Any other client

SettingValue
URLhttps://doi-api.sendlabs.de/mcp
TransportStreamable HTTP (http / streamable-http), stateless, JSON responses
Authenticationnone, optionally your own key in the X-API-Key header
Protocol versions2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25, 2026-07-28

Try it without an AI client using the MCP Inspector: npx @modelcontextprotocol/inspector, choose Streamable HTTP and enter the URL. A small Python example is in examples/check_proof.py.

Tools

ToolWhat it doesAccess
anchor_proofAnchor the SHA-256 of a document as a tamper-evident timestamp (proof of existence, name poe/<sha256>). Already anchored hashes return the existing proof. An expired hash is only registered again with reanchor_expired: true.writes
check_proofIs this hash anchored, since when, in which block? Always reports the first anchoring and shows a later registration of the name separately.reads
hash_textSHA-256 of a short text (up to 40,000 characters), computed on the server, nothing stored.server-side
get_anchoring_quotaProofs still available today for the caller's IP address.reads
lookup_nameCurrent value, owner and expiry of a name such as d/example or id/alice.reads
get_name_historyEvery registration and update of a name, newest first.reads
check_name_expiryUp to 25 names at once: active, expiring soon, expired or free, with dates.reads
search_namesNames by prefix (for example all poe/ proofs), with paging. Expired names with include_expired.reads
get_chain_statusBlock height, sync state, last block, fork check, average block interval.reads
get_blockA block by height or hash.reads
get_transactionA transaction with outputs, addresses and name operations.reads
get_addressBalance of an address, optionally with recent transactions.reads
verify_messageCheck a message signed with a Doichain address (legacy M…/N… addresses).reads

All tools return structured JSON (structuredContent) and carry MCP tool annotations. Only anchor_proof is not read-only. Parameters, return fields and examples: docs/tools.md.

How a proof of existence works

mermaid
sequenceDiagram    participant U as You    participant A as AI agent    participant M as Doichain MCP server    participant D as Doichain    U->>A: "Anchor offer-2026.pdf"    A->>A: sha256sum offer-2026.pdf (the file never leaves your machine)    A->>M: anchor_proof(sha256)    M->>D: name_doi poe/<sha256> = {"v":1,"alg":"sha256",...}    D-->>M: transaction id (pending)    M-->>A: txid, verify URL    Note over D: next block, usually within 10 minutes    U->>A: "Did this document exist before October 1?"    A->>M: check_proof(sha256)    M->>D: name_show / name_history    M-->>A: confirmed, block 433,335, 2026-09-25 23:21 UTC

Only the hash, and optionally a public note or file name, goes on chain. A SHA-256 cannot be turned back into the document. Anyone can verify a proof later with check_proof or on verifile.it, and changing a single byte of the document produces a different hash.

What a proof shows, and for how long:

  • The timestamp is permanent. The anchoring transaction and its block time stay in the blockchain history for good.
  • The name is not. poe/<sha256> stays active for 36,000 blocks (about 250 days at ten minutes per block). After that anyone can register it again, with their own note and address. check_proof keeps reporting the first anchoring as the proof time and shows a later registration separately in latest_registration. anchor_proof does not register an expired hash again unless you ask for it with reanchor_expired, and search_names lists expired proofs with include_expired.
  • Existence, not authorship. A proof shows that a document with this hash existed no later than the block time. It does not show who submitted it. The hosted endpoint registers the names from the operator's wallet, which pays for them and holds them.

Agents need access to the file to hash it (Claude Code, Cursor, VS Code). In a plain chat, Verifile is the easiest way: drop the file, it is hashed in the browser and anchored with one click.

Limits and quotas

LimitValue
Anchoringfree for users, 10 proofs per IP address per UTC day, at most 200 per day for all users together
Requests10 per second per IP address (burst 40), JSON-RPC error -32000 with Retry-After: 1 when exceeded
Request size256 KB, hash_text up to 40,000 characters
Reading and checkingunlimited within the request rate

Hosted chat apps (Claude on the web, ChatGPT) connect from their providers' data centers, so all their users share the quota of those addresses. For regular anchoring use a client that connects from your own machine (Claude Code, Cursor, VS Code) or ask DOI Labs for an own key. Anchoring pauses automatically when the operating balance of the node wallet falls below a reserve, reading keeps working.

Security and privacy

  • Hashes only. The server accepts no files. hash_text sees a short text and forgets it immediately.
  • No wallet functions. The server cannot send coins, change names or call node RPCs. Its only write operation is anchor_proof, for which the REST API registers the name from the operator's wallet. It runs as a separate service under its own system user, without read access to the API's key file, and may only open local connections.
  • Prompt injection protection. Names and values written to the chain by strangers are returned in fields ending in _untrusted together with a notice, and the server instructions tell agents to treat them as data only.
  • DNS rebinding protection. Host and Origin headers are validated.
  • No tracking. No cookies, no third-party resources on the landing page. Like any web server, IP addresses appear in access logs and count toward the daily quota. Content is not stored.

Found a vulnerability? Please use private vulnerability reporting, see SECURITY.md.

Protocol behavior

  • Streamable HTTP in stateless mode with JSON responses, so any number of workers can serve requests without session affinity.
  • POST /mcp for all MCP messages. GET /mcp from a browser returns the landing page, any other GET or HEAD returns 405 with Allow: POST (there is no server-to-client SSE stream in stateless mode).
  • No JSON-RPC batches (removed from the protocol in 2025-06-18). No CORS, so clients running directly inside a web page are not supported.
  • GET /mcp/health for monitoring.

Architecture

AI agent ──HTTPS──▶ nginx ──▶ doichain-mcp (this repo, 127.0.0.1:8081)                                  │  REST calls only, client IP passed on for the quota                                  ▼                          Doichain REST API (127.0.0.1:8080) ──▶ Doichain Core v31.1.6 + ElectrumX

The MCP server is a thin, stateless layer over the Doichain REST API (interactive docs), which runs next to a full Doichain Core node. See docs/self-hosting.md to run your own instance.

Development

bash
python -m venv .venv. .venv/bin/activate          # Windows: .venv\Scripts\activatepip install -e ".[dev]"pytest -q                     # offline tests, the REST API is mockedruff check .
# run locally against the public REST API (reading works, anchoring needs your own key)
[![Doichain Seal](https://doi-api.sendlabs.de/seal/github/neubuot/doichain-mcp/seal.svg)](https://doi-api.sendlabs.de/seal/github/neubuot/doichain-mcp)DOI_MCP_API_URL=https://doi-api.sendlabs.de python -m doichain_mcpnpx @modelcontextprotocol/inspector   # connect to http://127.0.0.1:8081/mcp

Releases follow semantic versioning. Pushing a tag vX.Y.Z runs the tests and publishes server.json to the official MCP Registry via GitHub Actions (OIDC, no secrets). The tag, server.json and pyproject.toml must carry the same version. See CONTRIBUTING.md and CHANGELOG.md.

Related

License and operator

MIT © 2026 DOI Labs AG. The hosted endpoint is operated by DOI Labs, legal notice.

来源:README.md,提交 b7c51f3

工具

13

get_chain_status

Doichain network status

Current state of the Doichain network as seen by the node behind this server: block height, sync state, time of the last block, fork check, node version, peers, mempool size and whether public anchoring is available.

无需输入参数。

hash_text

SHA-256 of a text

Compute the SHA-256 digest of a short text (UTF-8) on the server, for example to anchor a statement or a message with anchor_proof. The text is sent to the server but not stored or logged. For files and for confidential texts compute the hash locally instead (sha256sum file, or Get-FileHash -Algorithm SHA256).

输入参数text必填

check_proof

Check a proof of existence

Check whether a SHA-256 hash is anchored on the Doichain (name poe/<sha256>) and since when. Returns status (confirmed, pending, expired, unknown) and at the top level block height, block time, transaction and links of the first anchoring, which is the proof time. If the name was updated later or registered again after it expired (possibly by someone else), that registration is reported separately in latest_registration with its own holder and record, which are not part of the original proof. A confirmed or expired proof shows that a document with exactly this hash existed no later than the block time, not who submitted it.

输入参数sha256必填

anchor_proof

Anchor a proof of existence

Anchor a SHA-256 hash on the Doichain as a tamper-evident timestamp (proof of existence, name poe/<sha256>). Free for users, limited per IP address and day (see get_anchoring_quota). Confirms with the next block, usually within 10 minutes, then check_proof returns block height and time. If the hash is already anchored or pending, the existing proof is returned instead of creating a second one. If an earlier proof of the hash has expired, it stays valid and is returned with expired true. Nothing is registered unless reanchor_expired is true. Only the hash and the optional note and file name become public, never the document itself. The operator of this server pays for the name and holds it. The proof shows that a document with this hash existed no later than the block time, not who submitted it.

输入参数notesha256必填filenamereanchor_expired

get_anchoring_quota

Remaining anchoring quota

How many proofs can still be anchored today (UTC day) within the free public quota for the caller's IP address. Hosted chat apps connect from their own servers, so their users share one quota. Callers that send their own API key in the X-API-Key header have no quota.

无需输入参数。

lookup_name

Look up a Doichain name

Read the current value, owner address and expiry of a Doichain name. Unregistered names come back with exists false and status not_registered (the name is free). Expired names have status expired and the real expiry date.

输入参数name必填

get_name_history

History of a Doichain name

All registrations and updates of a name, newest first: block height, transaction, owner address and the value at that time. Shows who held a name when, and every value it ever had.

输入参数name必填limit

check_name_expiry

Check when names expire

Check up to 25 names at once: status (active, expiring_soon, expired, not_registered), blocks left, an estimated expiry date for active names (from the measured block interval) and the real expiry date for expired names. Names expire 36,000 blocks after their last update and are renewed by updating them from the owning wallet.

输入参数names必填warn_days

search_names

Search names by prefix

List names that start with a prefix, in the node's order (shorter names first, then byte order). Lists only active names unless include_expired is true. Expired names (for example old poe/ proofs) stay in the chain history and are listed with include_expired. Page through large results with next_after until exhausted is true. Names and values are chosen by arbitrary users (name_untrusted, value_untrusted).

输入参数afterlimitprefix必填include_expired

get_block

Get a block

Header data of a block by height or hash: time, confirmations, number of transactions and the first 50 transaction IDs.

输入参数block必填

get_transaction

Get a transaction

A transaction with confirmations, block time, outputs (amount in DOI and address) and any name operation (name_doi, name_update, ...) it contains.

输入参数txid必填

get_address

Address balance and history

Confirmed and unconfirmed balance of a Doichain address in DOI, optionally with its most recent transactions. Invalid addresses return an error with the reason.

输入参数address必填history_limitinclude_history

verify_message

Verify a signed message

Check whether a message was signed with the private key of a Doichain address (signmessage format). Only legacy addresses (M... or N...) can sign messages, bech32 addresses (dc1q...) are not supported. Useful to confirm that a statement really comes from the holder of an address.

输入参数address必填message必填signature必填

版本历史

2
  1. v1.5.0最新Sep 27, 2026
  2. v1.4.1Sep 26, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分