Datoka API
Signed client-declared API receipts. Free preparation/verification; issuance 0.002 USDC via x402.
Should I use this
Quality & Safety
Findings (1)
- LOWin get_api_public_keys
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"api": {
"url": "https://datoka-api.bhazarstudio.workers.dev/mcp"
}
}
}Remote endpoints
https://datoka-api.bhazarstudio.workers.dev/mcpstreamable-httpWhat it can do
Tool inventory
Tools (4)
🟢prepare_api_exchange(event)
Validate a client-declared HTTP exchange and compute its commitment; no receipt is persisted.
Input Schema
{
"type": "object",
"properties": {
"event": {
"type": "object",
"properties": {
"version": {
"type": "string",
"const": "datoka.api.exchange.v1"
},
"attestation": {
"type": "string",
"const": "client_declared"
},
"apiId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"exchangeId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"method": {
"type": "string",
"enum": [
"GET",
"HEAD",
"POST",
"PUT",
"PATCH",
"DELETE",
"OPTIONS"
]
},
"status": {
"type": "integer",
"minimum": 200,
"maximum": 599
},
"startedAt": {
"type": "string",
"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))$"
},
"completedAt": {
"type": "string",
"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))$"
},
"targetHash": {
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
"requestBodyHash": {
"anyOf": [
{
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"responseBodyHash": {
"anyOf": [
{
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"requestHeadersHash": {
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
"responseHeadersHash": {
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
"bodyEncoding": {
"type": "string",
"const": "application_bytes"
},
"headerEncoding": {
"type": "string",
"const": "jcs-selected-headers-v1"
}
},
"required": [
"version",
"attestation",
"apiId",
"exchangeId",
"method",
"status",
"startedAt",
"completedAt",
"targetHash",
"requestBodyHash",
"responseBodyHash",
"requestHeadersHash",
"responseHeadersHash",
"bodyEncoding",
"headerEncoding"
],
"additionalProperties": false
}
},
"required": [
"event"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"event": {
"type": "object",
"properties": {
"version": {
"type": "string",
"const": "datoka.api.exchange.v1"
},
"attestation": {
"type": "string",
"const": "client_declared"
},
"apiId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"exchangeId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"method": {
"type": "string",
"enum": [
"GET",
"HEAD",
"POST",
"PUT",
"PATCH",
"DELETE",
"OPTIONS"
]
},
"status": {
"type": "integer",
"minimum": 200,
"maximum": 599
},
"startedAt": {
"type": "string",
"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))$"
},
"completedAt": {
"type": "string",
"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))$"
},
"targetHash": {
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
"requestBodyHash": {
"anyOf": [
{
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"responseBodyHash": {
"anyOf": [
{
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"requestHeadersHash": {
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
"responseHeadersHash": {
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
"bodyEncoding": {
"type": "string",
"const": "application_bytes"
},
"headerEncoding": {
"type": "string",
"const": "jcs-selected-headers-v1"
}
},
"required": [
"version",
"attestation",
"apiId",
"exchangeId",
"method",
"status",
"startedAt",
"completedAt",
"targetHash",
"requestBodyHash",
"responseBodyHash",
"requestHeadersHash",
"responseHeadersHash",
"bodyEncoding",
"headerEncoding"
],
"additionalProperties": false
},
"commitment": {
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"encoding": {
"type": "string",
"const": "jcs"
},
"digest": {
"type": "string"
}
},
"required": [
"algorithm",
"encoding",
"digest"
],
"additionalProperties": false
},
"chain": {
"type": "string"
}
},
"required": [
"event",
"commitment",
"chain"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}⚪issue_api_receipt(event, idempotencyKey)
Persist a signed commitment to a client-declared HTTP exchange. Public price: 0.002 USDC via x402 when enabled; otherwise requires pilot issuance permission. Preserve the event, idempotency key and original payment authorization on retries. This does not prove independent observation or the truth of the response.
Input Schema
{
"type": "object",
"properties": {
"event": {
"type": "object",
"properties": {
"version": {
"type": "string",
"const": "datoka.api.exchange.v1"
},
"attestation": {
"type": "string",
"const": "client_declared"
},
"apiId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"exchangeId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"method": {
"type": "string",
"enum": [
"GET",
"HEAD",
"POST",
"PUT",
"PATCH",
"DELETE",
"OPTIONS"
]
},
"status": {
"type": "integer",
"minimum": 200,
"maximum": 599
},
"startedAt": {
"type": "string",
"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))$"
},
"completedAt": {
"type": "string",
"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))$"
},
"targetHash": {
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
"requestBodyHash": {
"anyOf": [
{
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"responseBodyHash": {
"anyOf": [
{
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"requestHeadersHash": {
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
"responseHeadersHash": {
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
"bodyEncoding": {
"type": "string",
"const": "application_bytes"
},
"headerEncoding": {
"type": "string",
"const": "jcs-selected-headers-v1"
}
},
"required": [
"version",
"attestation",
"apiId",
"exchangeId",
"method",
"status",
"startedAt",
"completedAt",
"targetHash",
"requestBodyHash",
"responseBodyHash",
"requestHeadersHash",
"responseHeadersHash",
"bodyEncoding",
"headerEncoding"
],
"additionalProperties": false
},
"idempotencyKey": {
"type": "string",
"pattern": "^[\\x21-\\x7e]{16,200}$"
}
},
"required": [
"event",
"idempotencyKey"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢verify_api_receipt(event, receipt)
Verify signature, trusted issuer, tenant, event commitment and API protocol semantics.
Input Schema
{
"type": "object",
"properties": {
"event": {
"type": "object",
"properties": {
"version": {
"type": "string",
"const": "datoka.api.exchange.v1"
},
"attestation": {
"type": "string",
"const": "client_declared"
},
"apiId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"exchangeId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"method": {
"type": "string",
"enum": [
"GET",
"HEAD",
"POST",
"PUT",
"PATCH",
"DELETE",
"OPTIONS"
]
},
"status": {
"type": "integer",
"minimum": 200,
"maximum": 599
},
"startedAt": {
"type": "string",
"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))$"
},
"completedAt": {
"type": "string",
"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))$"
},
"targetHash": {
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
"requestBodyHash": {
"anyOf": [
{
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"responseBodyHash": {
"anyOf": [
{
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"requestHeadersHash": {
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
"responseHeadersHash": {
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"digest"
],
"additionalProperties": false
},
"bodyEncoding": {
"type": "string",
"const": "application_bytes"
},
"headerEncoding": {
"type": "string",
"const": "jcs-selected-headers-v1"
}
},
"required": [
"version",
"attestation",
"apiId",
"exchangeId",
"method",
"status",
"startedAt",
"completedAt",
"targetHash",
"requestBodyHash",
"responseBodyHash",
"requestHeadersHash",
"responseHeadersHash",
"bodyEncoding",
"headerEncoding"
],
"additionalProperties": false
},
"receipt": {
"type": "object",
"properties": {
"body": {
"type": "object",
"properties": {
"version": {
"type": "string",
"const": "datoka.receipt.v1"
},
"id": {
"type": "string",
"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)$"
},
"issuer": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"keyId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"issuedAt": {
"type": "string",
"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))$"
},
"request": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"chain": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"eventType": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"subject": {
"type": "object",
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"encoding": {
"type": "string",
"enum": [
"jcs",
"bytes"
]
},
"digest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"algorithm",
"encoding",
"digest"
],
"additionalProperties": false
}
},
"required": [
"scope",
"chain",
"eventType",
"subject"
],
"additionalProperties": false
},
"sequence": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"previous": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
{
"type": "null"
}
]
}
},
"required": [
"version",
"id",
"issuer",
"keyId",
"issuedAt",
"request",
"sequence",
"previous"
],
"additionalProperties": false
},
"algorithm": {
"type": "string",
"const": "Ed25519"
},
"signature": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{86}$"
}
},
"required": [
"body",
"algorithm",
"signature"
],
"additionalProperties": false
}
},
"required": [
"event",
"receipt"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"valid": {
"type": "boolean",
"const": true
},
"receiptId": {
"type": "string",
"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)$"
},
"scope": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"apiId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"exchangeId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"attestation": {
"type": "string",
"const": "client_declared"
}
},
"required": [
"valid",
"receiptId",
"scope",
"apiId",
"exchangeId",
"attestation"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢get_api_public_keys
Return issuer public keys. Establish issuer trust independently before offline verification.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"issuer": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"keys": {
"type": "array",
"items": {
"type": "object",
"properties": {
"keyId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
},
"jwk": {
"type": "object",
"properties": {
"kty": {
"type": "string",
"const": "OKP"
},
"crv": {
"type": "string",
"const": "Ed25519"
},
"x": {
"type": "string"
},
"key_ops": {
"type": "array",
"items": {
"type": "string"
}
},
"ext": {
"type": "boolean"
}
},
"required": [
"kty",
"crv",
"x"
],
"additionalProperties": false
}
},
"required": [
"keyId",
"jwk"
],
"additionalProperties": false
}
}
},
"required": [
"issuer",
"keys"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}Community
Evidence