Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "get_api_public_keys", "issue_api_receipt", "prepare_api_exchange" and 1 more
before
—after
Get API Public Keysbefore
—after
Issue API Receipt⟨5 unchanged words⟩ properties":{"event":{"additionalProperties":false,"description":"Commitment-only HTTP exchange declaration built locally with the SDK. No raw URLs, headers or bodies.","properties":{"apiId":{"description":"Caller-chosen ⟨17 unchanged words⟩ },"attestation":{"const":"client_declared","description":"The caller declares the exchange; Datoka does not independently observe it.","type":"string"},"bodyEncoding":{"const":"application_bytes","description":"Hash application bytes after HTTP decoding, without JSON reserialization.","type":"string"},"completedAt":{"description":"Declared UTC completion with milliseconds; must be at or after startedAt.","format":"date-time","pattern":"^(?: ⟨89 unchanged words⟩ },"headerEncoding":{"const":"jcs-selected-headers-v1","description":"Use the SDK header selection and JCS canonicalization before hashing.","type":"string"},"method":{"description":"Actual HTTP method of the locally captured exchange, for example GET.","enum":["GET","HEAD","POST", ⟨11 unchanged words⟩ :{"algorithm":{"const":"sha256","description":"Digest algorithm; always sha256.","type":"string"},"digest":{"description":"SHA-256 of exact locally captured bytes, encoded as 64 lowercase hexadecimal characters.","pattern":"^[a-f0-9]{64}$","type ⟨39 unchanged words⟩ :{"algorithm":{"const":"sha256","description":"Digest algorithm; always sha256.","type":"string"},"digest":{"description":"SHA-256 of exact locally captured bytes, encoded as 64 lowercase hexadecimal characters.","pattern":"^[a-f0-9]{64}$","type
before
—after
Prepare API Exchange⟨5 unchanged words⟩ properties":{"event":{"additionalProperties":false,"description":"Commitment-only HTTP exchange declaration built locally with the SDK. No raw URLs, headers or bodies.","properties":{"apiId":{"description":"Caller-chosen ⟨17 unchanged words⟩ },"attestation":{"const":"client_declared","description":"The caller declares the exchange; Datoka does not independently observe it.","type":"string"},"bodyEncoding":{"const":"application_bytes","description":"Hash application bytes after HTTP decoding, without JSON reserialization.","type":"string"},"completedAt":{"description":"Declared UTC completion with milliseconds; must be at or after startedAt.","format":"date-time","pattern":"^(?: ⟨89 unchanged words⟩ },"headerEncoding":{"const":"jcs-selected-headers-v1","description":"Use the SDK header selection and JCS canonicalization before hashing.","type":"string"},"method":{"description":"Actual HTTP method of the locally captured exchange, for example GET.","enum":["GET","HEAD","POST", ⟨11 unchanged words⟩
before
—after
Verify API Receipt⟨5 unchanged words⟩ properties":{"event":{"additionalProperties":false,"description":"Commitment-only HTTP exchange declaration built locally with the SDK. No raw URLs, headers or bodies.","properties":{"apiId":{"description":"Caller-chosen ⟨17 unchanged words⟩ },"attestation":{"const":"client_declared","description":"The caller declares the exchange; Datoka does not independently observe it.","type":"string"},"bodyEncoding":{"const":"application_bytes","description":"Hash application bytes after HTTP decoding, without JSON reserialization.","type":"string"},"completedAt":{"description":"Declared UTC completion with milliseconds; must be at or after startedAt.","format":"date-time","pattern":"^(?: ⟨89 unchanged words⟩ },"headerEncoding":{"const":"jcs-selected-headers-v1","description":"Use the SDK header selection and JCS canonicalization before hashing.","type":"string"},"method":{"description":"Actual HTTP method of the locally captured exchange, for example GET.","enum":["GET","HEAD","POST", ⟨11 unchanged words⟩
Changed the definition of "get_api_public_keys", "issue_api_receipt", "prepare_api_exchange" and 1 more
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{},"type":"object"}
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"issuer" ⟨70 unchanged words⟩
Changed the definition of "verify_api_receipt"
VerifyFree signature and declaration verification. To try before buying,trustedread datoka-api://demo-receipt or /demo/receipt.json and pass the returned JSON here. No wallet needed for public verification. Verifies issuer,tenant,scope and eventcommitmentcommitment;andcompareAPIoriginalprotocolresponsesemantics.
Changed the definition of "issue_api_receipt", "prepare_api_exchange" and "verify_api_receipt"
PersistBuy a portable signed commitment to aclient-declareddeclaredHTTPAPIexchange.exchangePublicwhenpricea recipient needs independently verifiable receipt integrity: response handoff, archived decision input, or change investigation. Costs 0.002 USDC per receipt via x402 when enabled;otherwiseverification
Certificate recorded, valid to 2026-12-02
Authorization not required
Unknown → Live
First tool surface recorded: 4 tools (server version 0.3.3)
https://datoka-api.bhazarstudio.workers.dev/mcp (mcp_streamable_http) — from mcp_registry, with the record
Showing the latest 9 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨31 unchanged words⟩ object"},"event":{"additionalProperties":false,"description":"Commitment-only HTTP exchange declaration built locally with the SDK. No raw URLs, headers or bodies.","properties":{"apiId":{"description":"Caller-chosen ⟨17 unchanged words⟩ },"attestation":{"const":"client_declared","description":"The caller declares the exchange; Datoka does not independently observe it.","type":"string"},"bodyEncoding":{"const":"application_bytes","description":"Hash application bytes after HTTP decoding, without JSON reserialization.","type":"string"},"completedAt":{"description":"Declared UTC completion with milliseconds; must be at or after startedAt.","format":"date-time","pattern":"^(?: ⟨89 unchanged words⟩ },"headerEncoding":{"const":"jcs-selected-headers-v1","description":"Use the SDK header selection and JCS canonicalization before hashing.","type":"string"},"method":{"description":"Actual HTTP method of the locally captured exchange, for example GET.","enum":["GET","HEAD","POST", ⟨11 unchanged words⟩ :{"algorithm":{"const":"sha256","description":"Digest algorithm; always sha256.","type":"string"},"digest":{"description":"SHA-256 of exact locally captured bytes, encoded as 64 lowercase hexadecimal characters.","pattern":"^[a-f0-9]{64}$","type ⟨39 unchanged words⟩ :{"algorithm":{"const":"sha256","description":"Digest algorithm; always sha256.","type":"string"},"digest":{"description":"SHA-256 of exact locally captured bytes, encoded as 64 lowercase hexadecimal characters.","pattern":"^[a-f0-9]{64}$","type ⟨11 unchanged words⟩ :{"algorithm":{"const":"sha256","description":"Digest algorithm; always sha256.","type":"string"},"digest":{"description":"SHA-256 of exact locally captured bytes, encoded as 64 lowercase hexadecimal characters.","pattern":"^[a-f0-9]{64}$","type ⟨37 unchanged words⟩ :{"algorithm":{"const":"sha256","description":"Digest algorithm; always sha256.","type":"string"},"digest":{"description":"SHA-256 of exact locally captured bytes, encoded as 64 lowercase hexadecimal characters.","pattern":"^[a-f0-9]{64}$","type ⟨4 unchanged words⟩ ,"type":"object"},"startedAt":{"description":"Declared UTC start with milliseconds, for example 2026-10-07T08:00:00.000Z.","format":"date-time","pattern":"^(?: ⟨68 unchanged words⟩ ,"type":"string"},"status":{"description":"Actual HTTP response status, including error responses; for example 200 or 404.","maximum":599,"minimum":200,"type":" ⟨24 unchanged words⟩ :{"algorithm":{"const":"sha256","description":"Digest algorithm; always sha256.","type":"string"},"digest":{"description":"SHA-256 of exact locally captured bytes, encoded as 64 lowercase hexadecimal characters.","pattern":"^[a-f0-9]{64}$","type ⟨5 unchanged words⟩ "object"},"version":{"const":"datoka.api.exchange.v1","description":"Declaration format version; preserve this literal.","type":"string"}},"required": ⟨23 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"event":{"additionalProperties":false,"properties":{"apiId":{"description":"Caller-chosen API identifier; not a certified provider identity.","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0, ⟨88 unchanged words⟩ ,"type":"string"},"exchangeId":{"description":"Stable identifier for one declared HTTP exchange.","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0, ⟨59 unchanged words⟩ body."},"requestHeadersHash":{"additionalProperties":false,"description":"SHA-256 of locally canonicalized selected request headers. Never send raw headers.","properties":{"algorithm":{"const":"sha256" ⟨55 unchanged words⟩ reserialize JSON."},"responseHeadersHash":{"additionalProperties":false,"description":"SHA-256 of locally canonicalized selected response headers.","properties":{"algorithm":{"const":" ⟨197 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"event":{"additionalProperties":false,"properties":{"apiId":{"description":"Caller-chosen API identifier; not a certified provider identity.","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0, ⟨88 unchanged words⟩ ,"type":"string"},"exchangeId":{"description":"Stable identifier for one declared HTTP exchange.","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0, ⟨59 unchanged words⟩ body."},"requestHeadersHash":{"additionalProperties":false,"description":"SHA-256 of locally canonicalized selected request headers. Never send raw headers.","properties":{"algorithm":{"const":"sha256" ⟨55 unchanged words⟩ reserialize JSON."},"responseHeadersHash":{"additionalProperties":false,"description":"SHA-256 of locally canonicalized selected response headers.","properties":{"algorithm":{"const":" ⟨167 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"chain" ⟨26 unchanged words⟩ additionalProperties":false,"properties":{"apiId":{"description":"Caller-chosen API identifier; not a certified provider identity.","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0, ⟨88 unchanged words⟩ ,"type":"string"},"exchangeId":{"description":"Stable identifier for one declared HTTP exchange.","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0, ⟨59 unchanged words⟩ body."},"requestHeadersHash":{"additionalProperties":false,"description":"SHA-256 of locally canonicalized selected request headers. Never send raw headers.","properties":{"algorithm":{"const":"sha256" ⟨55 unchanged words⟩ reserialize JSON."},"responseHeadersHash":{"additionalProperties":false,"description":"SHA-256 of locally canonicalized selected response headers.","properties":{"algorithm":{"const":" ⟨169 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"event":{"additionalProperties":false,"properties":{"apiId":{"description":"Caller-chosen API identifier; not a certified provider identity.","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0, ⟨88 unchanged words⟩ ,"type":"string"},"exchangeId":{"description":"Stable identifier for one declared HTTP exchange.","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0, ⟨59 unchanged words⟩ body."},"requestHeadersHash":{"additionalProperties":false,"description":"SHA-256 of locally canonicalized selected request headers. Never send raw headers.","properties":{"algorithm":{"const":"sha256" ⟨55 unchanged words⟩ reserialize JSON."},"responseHeadersHash":{"additionalProperties":false,"description":"SHA-256 of locally canonicalized selected response headers.","properties":{"algorithm":{"const":" ⟨425 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"apiId":{"description":"Caller-chosen API identifier; not a certified provider identity.","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0, ⟨7 unchanged words⟩ ","type":"string"},"exchangeId":{"description":"Stable identifier for one declared HTTP exchange.","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0 ⟨54 unchanged words⟩
⟨156 unchanged words⟩ :"object"},{"type":"null"}],"description":"SHA-256 of exact application request bytes; null means no body, not an empty body."},"requestHeadersHash":{"additionalProperties":false,"properties" ⟨40 unchanged words⟩ :"object"},{"type":"null"}],"description":"SHA-256 of exact application response bytes after HTTP decoding. Preserve those bytes; do not reserialize JSON."},"responseHeadersHash":{"additionalProperties":false,"properties" ⟨100 unchanged words⟩ integer"},"targetHash":{"additionalProperties":false,"description":"SHA-256 of the exact UTF-8 target URL, computed locally. Never invent a digest or send the URL itself.","properties":{"algorithm":{"const":"sha256" ⟨36 unchanged words⟩ ],"type":"object"},"idempotencyKey":{"description":"One stable key per purchase, saved before payment. Keep it, the event and original payment authorization unchanged on retries.","pattern":"^[\\x21-\\x7e]{16,200}$" ⟨7 unchanged words⟩
ValidateFree validation before buying aclient-declaredreceipt.HTTPSupplyexchangeanandeventcomputebuiltitslocallycommitment;withnothe SDK from real captured bytes; never fabricate hashes. Returns the commitment without issuing a receiptisorpersisted.paying. Use when retaining verifiable evidence of an API response for a handoff or archive.
⟨156 unchanged words⟩ :"object"},{"type":"null"}],"description":"SHA-256 of exact application request bytes; null means no body, not an empty body."},"requestHeadersHash":{"additionalProperties":false,"properties" ⟨40 unchanged words⟩ :"object"},{"type":"null"}],"description":"SHA-256 of exact application response bytes after HTTP decoding. Preserve those bytes; do not reserialize JSON."},"responseHeadersHash":{"additionalProperties":false,"properties" ⟨100 unchanged words⟩ :"integer"},"targetHash":{"additionalProperties":false,"description":"SHA-256 of the exact UTF-8 target URL, computed locally. Never invent a digest or send the URL itself.","properties":{"algorithm":{"const":" ⟨43 unchanged words⟩
⟨182 unchanged words⟩ :"object"},{"type":"null"}],"description":"SHA-256 of exact application request bytes; null means no body, not an empty body."},"requestHeadersHash":{"additionalProperties":false,"properties" ⟨40 unchanged words⟩ :"object"},{"type":"null"}],"description":"SHA-256 of exact application response bytes after HTTP decoding. Preserve those bytes; do not reserialize JSON."},"responseHeadersHash":{"additionalProperties":false,"properties" ⟨100 unchanged words⟩ :"integer"},"targetHash":{"additionalProperties":false,"description":"SHA-256 of the exact UTF-8 target URL, computed locally. Never invent a digest or send the URL itself.","properties":{"algorithm":{"const":" ⟨45 unchanged words⟩
⟨156 unchanged words⟩ :"object"},{"type":"null"}],"description":"SHA-256 of exact application request bytes; null means no body, not an empty body."},"requestHeadersHash":{"additionalProperties":false,"properties" ⟨40 unchanged words⟩ :"object"},{"type":"null"}],"description":"SHA-256 of exact application response bytes after HTTP decoding. Preserve those bytes; do not reserialize JSON."},"responseHeadersHash":{"additionalProperties":false,"properties" ⟨100 unchanged words⟩ :"integer"},"targetHash":{"additionalProperties":false,"description":"SHA-256 of the exact UTF-8 target URL, computed locally. Never invent a digest or send the URL itself.","properties":{"algorithm":{"const":" ⟨301 unchanged words⟩