MCPサーバー

Doichain

io.github.neubuot/doichain
暗号資産・Web3 セキュリティ 公開・接続可能 MCP 2025-11-25

このMCPでできること

Anchors document hashes, verifies proofs and signed messages, and provides Doichain names, blocks, transactions, balances, and network status.

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.
外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'title': 'anchor_proofArguments', 'required': ['sha256'], 'properties': {'note': {'anyOf': [{'type': 'string', 'maxLength': 160}, {'type': 'null'}], 'title': 'Note', 'default': None, 'description': 'Optional public note (max 160 characters), stored on the blockchain forever. No personal data, no secrets'}, 'sha256': {'type': 'string', 'title': 'Sha256', 'maxLength': 100, 'description': 'SHA-256 digest of the document, 64 hexadecimal characters, computed from the actual file. Never guess it and never send the document'}, 'filename': {'anyOf': [{'type': 'string', 'maxLength': 80}, {'type': 'null'}], 'title': 'Filename', 'default': None, 'description': 'Optional public file name (max 80 characters), stored forever. Only set it when the user explicitly wants the name public'}, 'reanchor_expired': {'type': 'boolean', 'title': 'Reanchor Expired', 'default': False, 'description': 'Only set to true when an earlier proof of this hash has expired and the user explicitly wants an additional, later registration. The original anchoring stays the proof time. The new registration adds a later timestamp and replaces the public note and holder of the name. Default false'}}}
出力スキーマ
{'type': 'object', 'title': 'anchor_proofDictOutput', 'additionalProperties': True}
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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'title': 'check_name_expiryArguments', 'required': ['names'], 'properties': {'names': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Names', 'maxItems': 25, 'minItems': 1, 'description': "Up to 25 full names, for example ['d/example', 'poe/<sha256>']"}, 'warn_days': {'type': 'integer', 'title': 'Warn Days', 'default': 30, 'maximum': 365, 'minimum': 1, 'description': 'Names expiring within this many days are flagged expiring_soon'}}}
出力スキーマ
{'type': 'object', 'title': 'check_name_expiryDictOutput', 'additionalProperties': True}
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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'title': 'check_proofArguments', 'required': ['sha256'], 'properties': {'sha256': {'type': 'string', 'title': 'Sha256', 'maxLength': 100, 'description': 'SHA-256 digest of the document, 64 hexadecimal characters (a sha256: or 0x prefix is accepted)'}}}
出力スキーマ
{'type': 'object', 'title': 'check_proofDictOutput', 'additionalProperties': True}
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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'title': 'get_addressArguments', 'required': ['address'], 'properties': {'address': {'type': 'string', 'title': 'Address', 'maxLength': 100, 'minLength': 20, 'description': 'Doichain address (M... or N..., 6..., or bech32 dc1q...)'}, 'history_limit': {'type': 'integer', 'title': 'History Limit', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'Number of recent transactions when include_history is true'}, 'include_history': {'type': 'boolean', 'title': 'Include History', 'default': False, 'description': 'Also return the most recent transactions'}}}
出力スキーマ
{'type': 'object', 'title': 'get_addressDictOutput', 'additionalProperties': True}
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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'title': 'get_anchoring_quotaArguments', 'properties': {}}
出力スキーマ
{'type': 'object', 'title': 'get_anchoring_quotaDictOutput', 'additionalProperties': True}
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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'title': 'get_blockArguments', 'required': ['block'], 'properties': {'block': {'anyOf': [{'type': 'integer'}, {'type': 'string'}], 'title': 'Block', 'description': 'Block height (number) or block hash (64 hexadecimal characters)'}}}
出力スキーマ
{'type': 'object', 'title': 'get_blockDictOutput', 'additionalProperties': True}
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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'title': 'get_chain_statusArguments', 'properties': {}}
出力スキーマ
{'type': 'object', 'title': 'get_chain_statusDictOutput', 'additionalProperties': True}
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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'title': 'get_name_historyArguments', 'required': ['name'], 'properties': {'name': {'type': 'string', 'title': 'Name', 'maxLength': 255, 'minLength': 1, 'description': 'Full name including namespace'}, 'limit': {'type': 'integer', 'title': 'Limit', 'default': 20, 'maximum': 100, 'minimum': 1, 'description': 'Maximum number of entries, newest first'}}}
出力スキーマ
{'type': 'object', 'title': 'get_name_historyDictOutput', 'additionalProperties': True}
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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'title': 'get_transactionArguments', 'required': ['txid'], 'properties': {'txid': {'type': 'string', 'title': 'Txid', 'maxLength': 100, 'description': 'Transaction ID, 64 hexadecimal characters'}}}
出力スキーマ
{'type': 'object', 'title': 'get_transactionDictOutput', 'additionalProperties': True}
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).
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'title': 'hash_textArguments', 'required': ['text'], 'properties': {'text': {'type': 'string', 'title': 'Text', 'maxLength': 40000, 'description': 'Text to hash, encoded as UTF-8 exactly as given (whitespace and line breaks count), at most 40,000 characters'}}}
出力スキーマ
{'type': 'object', 'title': 'hash_textDictOutput', 'additionalProperties': True}
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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'title': 'lookup_nameArguments', 'required': ['name'], 'properties': {'name': {'type': 'string', 'title': 'Name', 'maxLength': 255, 'minLength': 1, 'description': 'Full name including namespace, for example poe/<sha256>, d/example or id/alice'}}}
出力スキーマ
{'type': 'object', 'title': 'lookup_nameDictOutput', 'additionalProperties': True}
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).
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'title': 'search_namesArguments', 'required': ['prefix'], 'properties': {'after': {'anyOf': [{'type': 'string', 'maxLength': 255}, {'type': 'null'}], 'title': 'After', 'default': None, 'description': 'Paging cursor: pass next_after from the previous result unchanged'}, 'limit': {'type': 'integer', 'title': 'Limit', 'default': 20, 'maximum': 100, 'minimum': 1, 'description': 'Maximum number of names'}, 'prefix': {'type': 'string', 'title': 'Prefix', 'maxLength': 255, 'minLength': 1, 'description': 'Name prefix, for example poe/, d/ or id/'}, 'include_expired': {'type': 'boolean', 'title': 'Include Expired', 'default': False, 'description': 'Also list expired names, for example proofs whose poe/ name has expired. Default false: active names only'}}}
出力スキーマ
{'type': 'object', 'title': 'search_namesDictOutput', 'additionalProperties': True}
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.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'title': 'verify_messageArguments', 'required': ['address', 'message', 'signature'], 'properties': {'address': {'type': 'string', 'title': 'Address', 'maxLength': 100, 'minLength': 20, 'description': 'Legacy Doichain address (M... or N...) that supposedly signed the message'}, 'message': {'type': 'string', 'title': 'Message', 'maxLength': 10000, 'description': 'The exact signed text'}, 'signature': {'type': 'string', 'title': 'Signature', 'maxLength': 200, 'minLength': 20, 'description': 'Signature in Base64'}}}
出力スキーマ
{'type': 'object', 'title': 'verify_messageDictOutput', 'additionalProperties': True}
変更
search_names
2026年9月29日2:48
変更
anchor_proof
2026年9月29日2:48
変更
check_proof
2026年9月29日2:48
追加
verify_message
2026年9月27日2:40
追加
get_address
2026年9月27日2:40
追加
get_transaction
2026年9月27日2:40
追加
get_block
2026年9月27日2:40
追加
search_names
2026年9月27日2:40
追加
check_name_expiry
2026年9月27日2:40
追加
get_name_history
2026年9月27日2:40
追加
lookup_name
2026年9月27日2:40
追加
get_anchoring_quota
2026年9月27日2:40
追加
anchor_proof
2026年9月27日2:40
追加
check_proof
2026年9月27日2:40
追加
hash_text
2026年9月27日2:40
追加
get_chain_status
2026年9月27日2:40