Datoka Agent
Server Details
Signed declarations of agent execution steps for verifiable handoffs. Free preparation and verification; receipt issuance costs 0.002 USDC via x402 on Base. MCP, REST and A2A. Connect: https://datoka.dev/agent. Signatures do not independently verify execution.
- Status
- Healthy
- Uptime
- 100.0% over 23 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 5 tools
The two verify tools (verify_agent_receipt vs verify_proof_receipt) are the closest pair, but descriptions explicitly distinguish the issuer-native receipt from the common proof-envelope format. prepare_agent_event vs issue_agent_receipt is also clearly delineated as free validation versus paid issuance.
All five tools follow a strict snake_case verb_noun pattern (get_, issue_, prepare_, verify_). The convention is applied uniformly with no deviations.
Five tools cleanly map to a receipt lifecycle: key retrieval, preparation, issuance, and two verification paths. Each earns its place with no redundancy.
The surface covers key discovery, pre-flight validation, issuance, and verification of both receipt formats, forming a coherent lifecycle. Minor gaps exist around revocation or listing of issued receipts, but core workflows are covered.
Available Tools
5 toolsget_agent_public_keysGet Agent Public KeysARead-onlyIdempotentInspect
Return public keys of this issuer. The operator must establish trust in this issuer independently.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| keys | Yes | |
| issuer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so safety is covered. The description adds genuinely useful behavioral context beyond that: the keys identify 'this issuer' and the operator must independently establish trust in that issuer, a security-relevant caveat not derivable from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste; the purpose is front-loaded and the trust caveat follows immediately. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and there are no parameters to document. The description is complete enough to call the tool correctly; it could go slightly further on key freshness/rotation or the expected trust-verification workflow, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so per the rubric the baseline is 4. There is nothing parameter-wise for the description to clarify, and it correctly adds no spurious parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Return') and resource ('public keys of this issuer'), so the agent can tell it apart from the receipt-issuing/verifying siblings, which operate on different artifacts. It does not explicitly name a sibling, but none is confusable with this one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The trust caveat implies the usage context (obtaining issuer keys to establish trust out-of-band), but there is no explicit when-to-use statement, no prerequisites, and no alternatives — there simply is no sibling alternative. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_agent_receiptIssue Agent ReceiptAIdempotentInspect
Persist a signed execution declaration receipt. Public price: 0.002 USDC via x402 on the advertised network. Preserve event, idempotencyKey and payment authorization on retries. Signed declarations do not independently prove execution.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | Commitment-only declaration of one execution step. | |
| idempotencyKey | Yes | Persist this unique key before purchase. Reuse unchanged with the same input and payment authorization after interruption. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety and idempotency (readOnly=false, idempotent=true, openWorld=true), and the description adds traits those annotations cannot express: a mandatory per-call price (0.002 USDC via x402), the need to carry payment authorization across retries, and the epistemic caveat that signed declarations do not prove execution. These are materially useful behavioral disclosures beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, correctly front-loaded with the purpose before cost, retry, and caveat details. Nearly every clause earns its place, with only slight repetition of the payment point that the schema cannot cover.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with a deep nested schema, no output schema, and full parameter coverage, the description supplies the pieces the schema cannot: price/network, retry persistence rules, and the trust limitation of the receipt. An agent has enough to decide whether to call and how to retry safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both top-level parameters and the nested event fields in depth. The description reiterates event/idempotencyKey and adds retry/payment semantics, but does not clarify the nested commitment-only structure beyond what the schema already states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Persist a signed execution declaration receipt'), which is clear on its own. However it does not distinguish itself from siblings like issue_proof_receipt or prepare_agent_event, so an agent must infer the boundary between an 'agent receipt' and a 'proof receipt'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives operational guidance on retries ('Preserve event, idempotencyKey and payment authorization on retries'), which is a genuine when-doing-X instruction. But it never says when to choose this over issue_proof_receipt or what precondition ('payment authorization') gates a call, so routing is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_agent_eventPrepare Agent EventARead-onlyIdempotentInspect
Free validation of a locally built execution declaration before issuance. Hash exact input and output bytes locally; supply identifiers and UTC timestamps with milliseconds. Returns the validated event, commitment and logical chain without creating or purchasing a receipt. Use issue_agent_receipt only if a portable signed declaration is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | Commitment-only declaration of one execution step. |
Output Schema
| Name | Required | Description |
|---|---|---|
| chain | Yes | |
| event | Yes | Commitment-only declaration of one execution step. |
| commitment | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds real value beyond them: this is free, it does not create or purchase a receipt, and it operates on locally computed hashes rather than raw input. It stops short of describing what the returned commitment/chain look like or any limits, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the purpose then the operational constraint, then the alternative tool. Nothing is wasted, though the hashing/timestamp sentence partly restates schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, yet the description still names them (validated event, commitment, logical chain). Combined with annotations and full schema coverage, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single nested event object is thoroughly documented field-by-field. The description reiterates the key constraints (local hashing, identifiers, UTC timestamps with milliseconds) but adds no format detail the schema does not already carry, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: free validation of a locally built execution declaration before issuance. It also names the sibling it is not (issue_agent_receipt) and the condition that selects it, so an agent can distinguish it from the receipt-issuing tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use issue_agent_receipt only when a portable signed declaration is needed, implying this tool is the earlier/cheaper validation step. It also states the precondition that hashes must be computed locally, which is guidance the agent needs before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_agent_receiptVerify Agent ReceiptARead-onlyIdempotentInspect
Free verification of an execution event and its unchanged receipt returned by issue_agent_receipt. Checks signature, scope and event commitment against this issuer. No wallet or new issuance required. Use verify_proof_receipt for the distinct common proof-envelope format. A valid signature does not independently prove execution; compare original bytes locally.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | Commitment-only declaration of one execution step. | |
| receipt | Yes | Signed Datoka receipt; verify against independently trusted keys. |
Output Schema
| Name | Required | Description |
|---|---|---|
| runId | Yes | Stable identifier for this execution run. |
| scope | Yes | |
| valid | Yes | |
| stepId | Yes | Stable identifier of the step within the run. |
| agentId | Yes | Identifier of the declaring agent, not an independently verified identity. |
| receiptId | Yes | |
| attestation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (read-only, idempotent, non-destructive), and the description adds genuinely new behavior: what is actually checked (signature, scope, event commitment), that it is free, and the critical caveat that a valid signature does not independently prove execution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five tight sentences, front-loaded with purpose and scope, then prerequisites, then the alternative-tool routing, then the trust caveat. Every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need not be described; the description instead supplies the routing, prerequisite, and trust-model context the structured fields cannot. Complete for a two-parameter verification tool with rich schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across both parameters, with detailed nested field docs, so the schema carries the parameter burden. The description references the receipt and the checks performed but adds no field-level syntax or format detail beyond it, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (verify) and resource (an execution event plus its unchanged receipt) and pins the origin to issue_agent_receipt. It also distinguishes itself from the sibling verify_proof_receipt, which handles the proof-envelope format.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use verify_proof_receipt for the distinct proof-envelope format, and notes no wallet or new issuance is required, making the cost/prerequisite model clear. It even signals the trusted-key dependency ('against this issuer').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_proof_receiptVerify Proof ReceiptARead-onlyIdempotentInspect
Free verification of a common Datoka proof against an independently obtained caller-supplied public trust registry and explicit issuer/scope/chain. Send only the proof, never raw documents. receiptVerified concerns signature, context and dates; status remains incomplete because the artifact is checked locally. No payment, factual accuracy or parent signatures are verified.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Optional expected logical chain identifier. Omit only when no chain restriction is required. | |
| proof | Yes | Unmodified common Datoka proof envelope; do not send its raw artifact. | |
| scope | Yes | Expected scope authorized by the caller-supplied trust registry. | |
| trust | Yes | Public trust registry obtained independently from a trusted source, not accepted merely because it accompanies this proof. | |
| issuer | Yes | Expected trusted issuer identifier; must match the trust registry and proof. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| checks | Yes | |
| status | Yes | |
| receiptId | No | |
| trustSource | Yes | |
| receiptVerified | Yes | |
| artifactHandling | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, and the description goes well beyond them: it is free, it verifies signature/context/dates only, returns an incomplete status because verification is local, and requires an independently obtained registry rather than one accompanying the proof. These are meaningful behavioral traits an agent cannot get from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the core action and scope, then the input rule, then output semantics, then explicit exclusions. No filler; every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return structure needn't be restated, yet the description still explains the key result fields (receiptVerified vs incomplete status). Combined with the trust-independence rule and exclusion list, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantic meaning: 'trust' must be independently sourced and not trusted merely because it accompanies the proof, and issuer/scope/chain are the explicit expected bindings. It clarifies intent behind the structured params rather than merely restating them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('verification of a common Datoka proof') and the exact basis of verification (caller-supplied public trust registry plus explicit issuer/scope/chain). This clearly distinguishes it from sibling verify_agent_receipt and issue_proof_receipt without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete input constraint ('Send only the proof, never raw documents') and explicitly bounds the operation ('No payment, factual accuracy or parent signatures are verified'), which tells the agent when this tool is not sufficient. It stops short of naming the alternative sibling tool to use in those cases, so it is slightly below the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Removed
issue_proof_receipt
5 tool updates
- Changed
issue_agent_receipt1 field changed- added
Input schema / properties / event / properties / version / descriptionAdded value: +"Declaration format version; preserve this literal."
- Changed
issue_proof_receipt2 fields changed- added
Input schema / properties / chain / descriptionAdded value: +"Logical proof-chain identifier within the authenticated pilot scope; not a blockchain network." - added
Input schema / properties / statement / descriptionAdded value: +"Commitment-only proof statement; compute artifact and source hashes locally. Preserve dates and unique parent receipt identifiers."
- Changed
prepare_agent_event2 fields changed- added
Input schema / properties / event / properties / version / descriptionAdded value: +"Declaration format version; preserve this literal." - added
Output schema / properties / event / properties / version / descriptionAdded value: +"Declaration format version; preserve this literal."
- Changed
verify_agent_receipt1 field changed- added
Input schema / properties / event / properties / version / descriptionAdded value: +"Declaration format version; preserve this literal."
- Changed
verify_proof_receipt5 fields changed- added
Input schema / properties / chain / descriptionAdded value: +"Optional expected logical chain identifier. Omit only when no chain restriction is required." - added
Input schema / properties / issuer / descriptionAdded value: +"Expected trusted issuer identifier; must match the trust registry and proof." - added
Input schema / properties / proof / descriptionAdded value: +"Unmodified common Datoka proof envelope; do not send its raw artifact." - added
Input schema / properties / scope / descriptionAdded value: +"Expected scope authorized by the caller-supplied trust registry." - added
Input schema / properties / trust / descriptionAdded value: +"Public trust registry obtained independently from a trusted source, not accepted merely because it accompanies this proof."
6 tool updates
- Changed
get_agent_public_keys2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
issue_agent_receipt16 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / event / descriptionAdded value: +"Commitment-only declaration of one execution step." - added
Input schema / properties / event / properties / agentId / descriptionAdded value: +"Identifier of the declaring agent, not an independently verified identity." - added
Input schema / properties / event / properties / completedAt / descriptionAdded value: +"Declared completion in UTC with milliseconds, at or after start." - added
Input schema / properties / event / properties / inputHash / descriptionAdded value: +"SHA-256 of the exact input bytes, computed locally. Never send raw input." - added
Input schema / properties / event / properties / inputHash / properties / algorithm / descriptionAdded value: +"Hash algorithm." - added
Input schema / properties / event / properties / inputHash / properties / digest / descriptionAdded value: +"64 lowercase hexadecimal characters; SHA-256 of exact bytes." - added
Input schema / properties / event / properties / outcome / descriptionAdded value: +"Outcome declared by the caller; Datoka does not observe execution." - added
Input schema / properties / event / properties / outputHash / descriptionAdded value: +"SHA-256 of exact output bytes, computed locally. Never send raw output." - added
Input schema / properties / event / properties / outputHash / properties / algorithm / descriptionAdded value: +"Hash algorithm." - added
Input schema / properties / event / properties / outputHash / properties / digest / descriptionAdded value: +"64 lowercase hexadecimal characters; SHA-256 of exact bytes." - added
Input schema / properties / event / properties / runId / descriptionAdded value: +"Stable identifier for this execution run." - added
Input schema / properties / event / properties / startedAt / descriptionAdded value: +"Declared start time in UTC, with milliseconds." - added
Input schema / properties / event / properties / stepId / descriptionAdded value: +"Stable identifier of the step within the run." - added
Input schema / properties / event / properties / tool / descriptionAdded value: +"Tool or operation identifier declared by the caller." - added
Input schema / properties / idempotencyKey / descriptionAdded value: +"Persist this unique key before purchase. Reuse unchanged with the same input and payment authorization after interruption."
- Changed
issue_proof_receipt2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / idempotencyKey / descriptionAdded value: +"Persist this unique key before purchase. Reuse unchanged with the same input and payment authorization after interruption."
- Changed
prepare_agent_event30 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / event / descriptionAdded value: +"Commitment-only declaration of one execution step." - added
Input schema / properties / event / properties / agentId / descriptionAdded value: +"Identifier of the declaring agent, not an independently verified identity." - added
Input schema / properties / event / properties / completedAt / descriptionAdded value: +"Declared completion in UTC with milliseconds, at or after start." - added
Input schema / properties / event / properties / inputHash / descriptionAdded value: +"SHA-256 of the exact input bytes, computed locally. Never send raw input." - added
Input schema / properties / event / properties / inputHash / properties / algorithm / descriptionAdded value: +"Hash algorithm." - added
Input schema / properties / event / properties / inputHash / properties / digest / descriptionAdded value: +"64 lowercase hexadecimal characters; SHA-256 of exact bytes." - added
Input schema / properties / event / properties / outcome / descriptionAdded value: +"Outcome declared by the caller; Datoka does not observe execution." - added
Input schema / properties / event / properties / outputHash / descriptionAdded value: +"SHA-256 of exact output bytes, computed locally. Never send raw output." - added
Input schema / properties / event / properties / outputHash / properties / algorithm / descriptionAdded value: +"Hash algorithm." - added
Input schema / properties / event / properties / outputHash / properties / digest / descriptionAdded value: +"64 lowercase hexadecimal characters; SHA-256 of exact bytes." - added
Input schema / properties / event / properties / runId / descriptionAdded value: +"Stable identifier for this execution run." - added
Input schema / properties / event / properties / startedAt / descriptionAdded value: +"Declared start time in UTC, with milliseconds." - added
Input schema / properties / event / properties / stepId / descriptionAdded value: +"Stable identifier of the step within the run." - added
Input schema / properties / event / properties / tool / descriptionAdded value: +"Tool or operation identifier declared by the caller." - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / event / descriptionAdded value: +"Commitment-only declaration of one execution step." - added
Output schema / properties / event / properties / agentId / descriptionAdded value: +"Identifier of the declaring agent, not an independently verified identity." - added
Output schema / properties / event / properties / completedAt / descriptionAdded value: +"Declared completion in UTC with milliseconds, at or after start." - added
Output schema / properties / event / properties / inputHash / descriptionAdded value: +"SHA-256 of the exact input bytes, computed locally. Never send raw input." - added
Output schema / properties / event / properties / inputHash / properties / algorithm / descriptionAdded value: +"Hash algorithm." - added
Output schema / properties / event / properties / inputHash / properties / digest / descriptionAdded value: +"64 lowercase hexadecimal characters; SHA-256 of exact bytes." - added
Output schema / properties / event / properties / outcome / descriptionAdded value: +"Outcome declared by the caller; Datoka does not observe execution." - added
Output schema / properties / event / properties / outputHash / descriptionAdded value: +"SHA-256 of exact output bytes, computed locally. Never send raw output." - added
Output schema / properties / event / properties / outputHash / properties / algorithm / descriptionAdded value: +"Hash algorithm." - added
Output schema / properties / event / properties / outputHash / properties / digest / descriptionAdded value: +"64 lowercase hexadecimal characters; SHA-256 of exact bytes." - added
Output schema / properties / event / properties / runId / descriptionAdded value: +"Stable identifier for this execution run." - added
Output schema / properties / event / properties / startedAt / descriptionAdded value: +"Declared start time in UTC, with milliseconds." - added
Output schema / properties / event / properties / stepId / descriptionAdded value: +"Stable identifier of the step within the run." - added
Output schema / properties / event / properties / tool / descriptionAdded value: +"Tool or operation identifier declared by the caller."
- Changed
verify_agent_receipt20 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / event / descriptionAdded value: +"Commitment-only declaration of one execution step." - added
Input schema / properties / event / properties / agentId / descriptionAdded value: +"Identifier of the declaring agent, not an independently verified identity." - added
Input schema / properties / event / properties / completedAt / descriptionAdded value: +"Declared completion in UTC with milliseconds, at or after start." - added
Input schema / properties / event / properties / inputHash / descriptionAdded value: +"SHA-256 of the exact input bytes, computed locally. Never send raw input." - added
Input schema / properties / event / properties / inputHash / properties / algorithm / descriptionAdded value: +"Hash algorithm." - added
Input schema / properties / event / properties / inputHash / properties / digest / descriptionAdded value: +"64 lowercase hexadecimal characters; SHA-256 of exact bytes." - added
Input schema / properties / event / properties / outcome / descriptionAdded value: +"Outcome declared by the caller; Datoka does not observe execution." - added
Input schema / properties / event / properties / outputHash / descriptionAdded value: +"SHA-256 of exact output bytes, computed locally. Never send raw output." - added
Input schema / properties / event / properties / outputHash / properties / algorithm / descriptionAdded value: +"Hash algorithm." - added
Input schema / properties / event / properties / outputHash / properties / digest / descriptionAdded value: +"64 lowercase hexadecimal characters; SHA-256 of exact bytes." - added
Input schema / properties / event / properties / runId / descriptionAdded value: +"Stable identifier for this execution run." - added
Input schema / properties / event / properties / startedAt / descriptionAdded value: +"Declared start time in UTC, with milliseconds." - added
Input schema / properties / event / properties / stepId / descriptionAdded value: +"Stable identifier of the step within the run." - added
Input schema / properties / event / properties / tool / descriptionAdded value: +"Tool or operation identifier declared by the caller." - added
Input schema / properties / receipt / descriptionAdded value: +"Signed Datoka receipt; verify against independently trusted keys." - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / agentId / descriptionAdded value: +"Identifier of the declaring agent, not an independently verified identity." - added
Output schema / properties / runId / descriptionAdded value: +"Stable identifier for this execution run." - added
Output schema / properties / stepId / descriptionAdded value: +"Stable identifier of the step within the run."
- Changed
verify_proof_receipt2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
2 tool updates
- Changed
issue_agent_receipt1 field changed- changed
Output schema / (root)Previous value: -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "additionalProperties": false, - "properties": { - "event": { - "additionalProperties": false, - "properties": { - "agentId": { - "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", - "type": "string" - }, - "completedAt": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$", - "type": "string" - }, - "inputHash": { - "additionalProperties": false, - "properties": { - "algorithm": { - "const": "sha256", - "type": "string" - }, - "digest": { - "pattern": "^[a-f0-9]{64}$", - "type": "string" - } - }, - "required": [ - "algorithm", - "digest" - ], - "type": "object" - }, - "outcome": { - "enum": [ - "success", - "error" - ], - "type": "string" - }, - "outputHash": { - "additionalProperties": false, - "properties": { - "algorithm": { - "const": "sha256", - "type": "string" - }, - "digest": { - "pattern": "^[a-f0-9]{64}$", - "type": "string" - } - }, - "required": [ - "algorithm", - "digest" - ], - "type": "object" - }, - "runId": { - "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", - "type": "string" - }, - "startedAt": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$", - "type": "string" - }, - "stepId": { - "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", - "type": "string" - }, - "tool": { - "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", - "type": "string" - }, - "version": { - "const": "datoka.agent.execution.v1", - "type": "string" - } - }, - "required": [ - "version", - "agentId", - "runId", - "stepId", - "tool", - "outcome", - "startedAt", - "completedAt", - "inputHash", - "outputHash" - ], - "type": "object" - }, - "receipt": { - "additionalProperties": false, - "properties": { - "algorithm": { - "const": "Ed25519", - "type": "string" - }, - "body": { - "additionalProperties": false, - "properties": { - "id": { - "format": "uuid", - "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", - "type": "string" - }, - "issuedAt": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$", - "type": "string" - }, - "issuer": { - "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", - "type": "string" - }, - "keyId": { - "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", - "type": "string" - }, - "previous": { - "anyOf": [ - { - "pattern": "^[a-f0-9]{64}$", - "type": "string" - }, - { - "type": "null" - } - ] - }, - "request": { - "additionalProperties": false, - "properties": { - "chain": { - "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", - "type": "string" - }, - "eventType": { - "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", - "type": "string" - }, - "scope": { - "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", - "type": "string" - }, - "subject": { - "additionalProperties": false, - "properties": { - "algorithm": { - "const": "sha256", - "type": "string" - }, - "digest": { - "pattern": "^[a-f0-9]{64}$", - "type": "string" - }, - "encoding": { - "enum": [ - "jcs", - "bytes" - ], - "type": "string" - } - }, - "required": [ - "algorithm", - "encoding", - "digest" - ], - "type": "object" - } - }, - "required": [ - "scope", - "chain", - "eventType", - "subject" - ], - "type": "object" - }, - "sequence": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "version": { - "const": "datoka.receipt.v1", - "type": "string" - } - }, - "required": [ - "version", - "id", - "issuer", - "keyId", - "issuedAt", - "request", - "sequence", - "previous" - ], - "type": "object" - }, - "signature": { - "pattern": "^[A-Za-z0-9_-]{86}$", - "type": "string" - } - }, - "required": [ - "body", - "algorithm", - "signature" - ], - "type": "object" - } - }, - "required": [ - "event", - "receipt" - ], - "type": "object" -}New value: +null
- Changed
issue_proof_receipt1 field changed- changed
Output schema / (root)Previous value: -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "additionalProperties": false, - "properties": { - "receipt": { - "additionalProperties": false, - "properties": { - "algorithm": { - "const": "Ed25519", - "type": "string" - }, - "body": { - "additionalProperties": false, - "properties": { - "id": { - "format": "uuid", - "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", - "type": "string" - }, - "issuedAt": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$", - "type": "string" - }, - "issuer": { - "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", - "type": "string" - }, - "keyId": { - "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", - "type": "string" - }, - "previous": { - "anyOf": [ - { - "pattern": "^[a-f0-9]{64}$", - "type": "string" - }, - { - "type": "null" - } - ] - }, - "request": { - "additionalProperties": false, - "properties": { - "chain": { - "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", - "type": "string" - }, - "eventType": { - "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", - "type": "string" - }, - "scope": { - "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", - "type": "string" - }, - "subject": { - "additionalProperties": false, - "properties": { - "algorithm": { - "const": "sha256", - "type": "string" - }, - "digest": { - "pattern": "^[a-f0-9]{64}$", - "type": "string" - }, - "encoding": { - "enum": [ - "jcs", - "bytes" - ], - "type": "string" - } - }, - "required": [ - "algorithm", - "encoding", - "digest" - ], - "type": "object" - } - }, - "required": [ - "scope", - "chain", - "eventType", - "subject" - ], - "type": "object" - }, - "sequence": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "version": { - "const": "datoka.receipt.v1", - "type": "string" - } - }, - "required": [ - "version", - "id", - "issuer", - "keyId", - "issuedAt", - "request", - "sequence", - "previous" - ], - "type": "object" - }, - "signature": { - "pattern": "^[A-Za-z0-9_-]{86}$", - "type": "string" - } - }, - "required": [ - "body", - "algorithm", - "signature" - ], - "type": "object" - }, - "statement": { - "additionalProperties": false, - "properties": { - "artifact": { - "additionalProperties": false, - "properties": { - "algorithm": { - "const": "sha256", - "type": "string" - }, - "digest": { - "pattern": "^[a-f0-9]{64}$", - "type": "string" - }, - "encoding": { - "enum": [ - "bytes", - "jcs" - ], - "type": "string" - }, - "mediaType": { - "maxLength": 512, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "algorithm", - "encoding", - "digest", - "mediaType" - ], - "type": "object" - }, - "attestation": { - "const": "signed_declaration", - "type": "string" - }, - "createdAt": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$", - "type": "string" - }, - "independentlyVerified": { - "const": false, - "type": "boolean" - }, - "parentReceipts": { - "items": { - "pattern": "^[a-f0-9]{64}$", - "type": "string" - }, - "maxItems": 64, - "type": "array" - }, - "references": { - "items": { - "additionalProperties": false, - "properties": { - "kind": { - "enum": [ - "payment", - "authorization", - "anchor" - ], - "type": "string" - }, - "protocol": { - "maxLength": 512, - "minLength": 1, - "type": "string" - }, - "reference": { - "maxLength": 512, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "protocol", - "reference" - ], - "type": "object" - }, - "maxItems": 16, - "type": "array" - }, - "sources": { - "items": { - "additionalProperties": false, - "properties": { - "description": { - "maxLength": 512, - "minLength": 1, - "type": "string" - }, - "retrievedAt": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$", - "type": "string" - }, - "snapshot": { - "additionalProperties": false, - "properties": { - "algorithm": { - "const": "sha256", - "type": "string" - }, - "digest": { - "pattern": "^[a-f0-9]{64}$", - "type": "string" - }, - "encoding": { - "enum": [ - "bytes", - "jcs" - ], - "type": "string" - } - }, - "required": [ - "algorithm", - "encoding", - "digest" - ], - "type": "object" - }, - "uri": { - "format": "uri", - "maxLength": 2048, - "type": "string" - } - }, - "required": [ - "uri", - "retrievedAt" - ], - "type": "object" - }, - "maxItems": 64, - "type": "array" - }, - "transformations": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "maxLength": 512, - "minLength": 1, - "type": "string" - }, - "version": { - "maxLength": 512, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "id" - ], - "type": "object" - }, - "maxItems": 32, - "type": "array" - }, - "validUntil": { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$", - "type": "string" - }, - "version": { - "const": "datoka.proof.v0.1", - "type": "string" - } - }, - "required": [ - "version", - "createdAt", - "artifact", - "sources", - "transformations", - "parentReceipts", - "attestation", - "independentlyVerified", - "references" - ], - "type": "object" - } - }, - "required": [ - "statement", - "receipt" - ], - "type": "object" -}New value: +null
1 tool update
- Added
verify_proof_receipt
1 tool update
- Added
issue_proof_receipt
4 tool updates
- First observed
get_agent_public_keys - First observed
issue_agent_receipt - First observed
prepare_agent_event - First observed
verify_agent_receipt
Related MCP Connectors
Signed declarations of HTTP API exchanges for agent handoffs. Free preparation and verification; receipt issuance costs 0.002 USDC via x402 on Base. Start and connect: https://datoka.dev/api. Signatures attest declared data, not independent truth.
Webhook delivery for agents and workflows, with encrypted queues, retries and signed relay observations. 100 free admissions per hook/day; extra pack: 0.10 USDC for 100. Setup and n8n guide: https://datoka.dev/hooks. Recipients must deduplicate events.
Translation, data quality, execution verification and agent utilities over MCP + x402 USDC on Base.
Signed attestations for agents, $0.01/call via x402: URL witness, AI permission, tx finality, JWKS.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI agents to create cryptographically verifiable receipts of their delegated work, with capabilities for multi-party approval and offline verification.1160 npmApache 2.0

garlofficial
AlicenseNot gradedqualityFmaintenanceCryptographic verification for AI agent actions — ECDSA-secp256k1 signed Action Receipts anchored on Base, multi-dimensional trust vectors, capability tokens, and offline-verifiable on-chain proof. 29 tools.2Apache 2.0- AlicenseNot gradedqualityDmaintenanceProvides cryptographic governance receipts for AI agents, enabling pre-execution evaluation and signed verdicts (EXECUTE/BLOCK/REVIEW/SHADOW) with offline-verifiable audit trails.MIT
- AlicenseAqualityDmaintenanceCryptographic accountability for AI agents. Ed25519-signed receipts for every MCP tool call. Constraints, chains, AI judgment, invoicing, and local dashboard included.248 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.