Agent Verification Utility
Server Details
Deterministic JSON checks with signed evidence and x402-paid execution
- Status
- Healthy
- Uptime
- 100.0% over 55 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 5 tools
The tools have distinct purposes: describe provides information, get_revenue_goal_status reads a goal, prepare and quote both involve precheck after payment, and verify_evidence runs checks. However, quote_verify_evidence and prepare_verify_evidence_purchase are nearly identical in steps and outputs, differing only in final artifact (quote vs HTTP request), which could confuse agents. Descriptions help clarify the difference but overlap remains.
Names follow a verb_noun pattern (describe_verify_evidence, get_revenue_goal_status, prepare_verify_evidence_purchase, quote_verify_evidence). One slight deviation is get_revenue_goal_status which uses get_ + noun phrase, but it's still consistent with snake_case. Overall, naming is predictable and consistent.
Five tools are well-scoped for an agent verification utility: one describes the service, one reads revenue status, two prepare for a paid verification (quote and prep), and one executes verification. This covers the lifecycle without redundancy or bloat.
The tool surface covers the full lifecycle: information (describe), free precheck (implied via quote/prepare), quoting, purchase preparation, and final paid verification. There is no obvious missing operation for the stated purpose of deterministic evidence verification with payment.
Available Tools
5 toolsdescribe_verify_evidenceDescribe Agent Verification UtilityARead-onlyIdempotentInspect
Describe when deterministic verification is useful, when it is not, free request validation, recipes, limits, and the explicit paid MCP path.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description adds topical context (free request validation, recipes, limits, paid MCP path) that clarifies what the tool exposes. It does not contradict annotations, though it does not detail additional behavior like return format or whether any computation occurs.
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?
The description is a single sentence, front-loaded with the verb 'Describe' and efficiently lists all covered topics in a comma-separated list. There is no wasted verbiage or repetition.
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 zero-parameter, read-only informational tool with no output schema, the description adequately covers the essential context: when verification is or isn't useful, validation, recipes, limits, and the premium paid path. The sibling tools provide operational context, and this description stands alone as complete.
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?
The input schema has zero parameters, so a baseline of 4 applies. The description does not need to explain parameters since none exist, and no additional semantics are missing.
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?
The description uses the specific verb 'describe' and clearly identifies the resource: the Agent Verification Utility. It enumerates distinct facets (usefulness, non-usefulness, validation, recipes, limits, paid MCP path), distinguishing it from operational siblings like verify_evidence and commercial ones like quote_verify_evidence.
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 description implies its use for learning about deterministic verification, but it does not explicitly state when to choose it over the sibling tools (e.g., 'use verify_evidence to verify, use this tool for guidance'). No exclusions or alternative tool recommendations are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_revenue_goal_statusGet Revenue Goal StatusARead-onlyIdempotentInspect
Read the active revenue goal, measured funnel, contribution margin, and the next bounded improvement recommendation. This tool never changes price, spends funds, or sends messages.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds specific context about what it reads (active revenue goal, funnel, margin, recommendation) and reassures about no side effects, exceeding annotation basics.
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?
The description is concise and front-loaded: the first sentence states the core purpose and key outputs, the second sentence adds a safety clarification. No redundancy.
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 zero-parameter, read-only tool with rich annotations, the description is complete—it specifies exactly what data is read and what side effects are absent, making it fully understandable in context.
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?
The tool has zero parameters, so the schema is fully covered by default. The description adds value by describing the data and output focus, which is appropriate for a no-parameter tool.
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?
The description clearly identifies the tool as a read operation ('Read the active revenue goal') with specific resources and outputs, and it is distinct from the sibling tools focused on verify_evidence.
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 description provides clear context that this is a safe, read-only operation and explicitly lists side effects it avoids ('never changes price, spends funds, or sends messages'), though it does not name alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_verify_evidence_purchasePrepare HTTP PurchaseAIdempotentInspect
Prepare an HTTP purchase request for deterministic JSON verification after a successful free precheck; a prior quote tool call is optional. After a successful free precheck at POST /validate-request, supply the unchanged intent and its precheck_receipt.receipt_digest. Creates or reuses a persisted quote and records observability events; no payment, signing or paid verification is performed. The bound quote ties request/evidence digests, precheck digest, spend policy, quoted amount, network, asset, recipient and expiry together. Server availability, fresh cost basis and conservative contribution-margin thresholds must pass. Returns JSON text and structuredContent containing quote, request (POST /verify-evidence, content-type and X-Quote-ID headers, unchanged intent body), expected_first_status=402 and expected_payment_header=PAYMENT-REQUIRED. It does not send this request. Application failures return isError=true with JSON error.code, message, retryable and optional details (for example PRECHECK_STALE, PRICE_CAP_EXCEEDED, IDEMPOTENCY_KEY_CONFLICT, IDEMPOTENCY_KEY_EXPIRED or UNPROFITABLE_TRANSACTION); invalid argument shapes are rejected by MCP schema validation. Re-run precheck after request/policy changes; do not pay on refusal. Next send the returned request to obtain a challenge, check binding, amount, network, asset, payTo and expiry against local policy, then authorize payment separately. Use quote_verify_evidence when only quote terms are needed.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | Required prechecked purchase intent: request, spend_policy and precheck_receipt_digest are all required, with no defaults or optional fields. Preserve the request and policy used in the successful free POST /validate-request. | |
| idempotency_key | Yes | Required 16-128 characters from A-Z, a-z, 0-9, underscore or hyphen. Reuse with the unchanged intent to reuse an unexpired quote; changed bindings return IDEMPOTENCY_KEY_CONFLICT. An expired key returns IDEMPOTENCY_KEY_EXPIRED; use a new key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover readOnlyHint=false, idempotentHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is clear. The description adds crucial context beyond annotations: no payment/signing occurs, creates or reuses a persisted quote, records observability events, server availability and margin thresholds must pass, application failures return isError=true with specific error codes, and it explains the next steps.
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?
The description is dense and front-loads the key purpose. While long, every sentence earns its place by conveying necessary behavioral and procedural details. However, it could be slightly more structured with bullet points or shorter sentences for readability.
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?
Given the complexity (nested objects, 2 required params, no output schema), the description covers all essential aspects: inputs needed, what the tool does, what it returns (including expected_first_status and expected_payment_header), error behaviors, and next steps. It's complete for an agent to call it 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 description coverage is 100%, so the schema already documents parameters thoroughly. The description adds meaning by explaining that the precheck_receipt_digest ties to the successful precheck, that the intent must be unchanged, and that idempotency_key reuse with unchanged intent reuses an unexpired quote, which goes beyond the schema's parameter descriptions.
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: prepares an HTTP purchase request for deterministic JSON verification. Clearly distinguishes from siblings by explicitly naming quote_verify_evidence as the alternative when only quote terms are needed, and distinguishes from verify_evidence by stating it does not send the request.
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 describes when to use: after a successful free precheck, with a prior quote tool call being optional. Names the alternative (quote_verify_evidence) and the condition that selects it. Instructs to re-run precheck after changes and not to pay on refusal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_verify_evidenceQuote VerificationAIdempotentInspect
Obtain a free bound quote for deterministic checks on supplied JSON before deciding to purchase. After a successful free precheck at POST /validate-request, supply the unchanged intent and its precheck_receipt.receipt_digest. Creates or reuses a persisted quote and records observability events; no payment, signing or paid verification is performed. The bound quote ties request/evidence digests, precheck digest, spend policy, quoted amount, network, asset, recipient and expiry together. Server availability, fresh cost basis and conservative contribution-margin thresholds must pass. Returns the quote as JSON text and structuredContent: quote_id, request_hash, price (atomic USDC, 6 decimals), expires_at, economic_guard, purchase instructions and paid_verification_binding in state quoted, not a paid receipt. Application failures return isError=true with JSON error.code, message, retryable and optional details (for example PRECHECK_STALE, PRICE_CAP_EXCEEDED, IDEMPOTENCY_KEY_CONFLICT, IDEMPOTENCY_KEY_EXPIRED or UNPROFITABLE_TRANSACTION); invalid argument shapes are rejected by MCP schema validation. Re-run precheck after request/policy changes; do not pay on refusal. Next use prepare_verify_evidence_purchase with the same key and intent for the HTTP purchase request, or explicitly authorize the separate paid verify_evidence flow.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | Required prechecked purchase intent: request, spend_policy and precheck_receipt_digest are all required, with no defaults or optional fields. Preserve the request and policy used in the successful free POST /validate-request. | |
| idempotency_key | Yes | Required 16-128 characters from A-Z, a-z, 0-9, underscore or hyphen. Reuse with the unchanged intent to reuse an unexpired quote; changed bindings return IDEMPOTENCY_KEY_CONFLICT. An expired key returns IDEMPOTENCY_KEY_EXPIRED; use a new key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: it creates or reuses a persisted quote, records observability events, performs no payment/signing/paid verification, and specifies the failure contract (isError=true with error.code, message, retryable, and named codes like PRECHECK_STALE and IDEMPOTENCY_KEY_CONFLICT). It also enumerates the quote binding and its state ('quoted', not a paid receipt).
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?
Front-loaded with the core action and scope, and every sentence carries real information. It is dense and lengthy, folding return-value detail and error codes into one paragraph, but with no output schema that content largely 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?
With no output schema, the description fully covers the return contract (quote_id, request_hash, price, expires_at, economic_guard, purchase instructions, binding) and the failure contract. For a quote-creating tool whose annotations already declare non-destructive/idempotent behavior, nothing needed to call it correctly 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?
Schema coverage is 100%, so the schema already documents intent, spend_policy, precheck_receipt_digest and idempotency_key semantics, including the conflict/expiry codes. The description corroborates the precheck flow and the unchanged-intent requirement but adds little syntax or meaning beyond what the schema descriptions already provide; baseline 3 is appropriate.
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 (obtain a free bound quote), establishes scope (deterministic checks on supplied JSON, no payment or paid verification), and implicitly separates itself from verify_evidence and prepare_verify_evidence_purchase by naming both later. An agent can tell this is the quote step, not the verification step.
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 gates the call on a prior successful free precheck, requires supplying the unchanged intent and its receipt_digest, states when to re-run precheck (after request/policy changes), warns 'do not pay on refusal', and names the next tool (prepare_verify_evidence_purchase) versus the separate paid flow. When/when-not/alternatives are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_evidenceVerify Evidence (paid)AIdempotentInspect
Run deterministic checks and return Ed25519-signed evidence after one explicitly authorized x402 payment. A free precheck receipt and a matching bound payment requirement are required before signing.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | ||
| idempotency_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: it requires an explicitly authorized x402 payment, is deterministic, and needs a precheck receipt and bound payment requirement. With annotations already covering idempotency and read-only/destructive hints, this extra context is meaningful and non-contradictory.
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 sentences, front-loaded with the primary action, and no filler. Every sentence adds critical context: what the tool does, payment authorization, and prerequisites.
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?
The description provides essential workflow context (payment, precheck receipt, bound payment) and mentions the signed evidence return, but lacks details about the complex nested parameters and the output structure. Given the rich schema and no output schema, the description is minimally adequate but leaves the agent to infer much from schema alone.
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 0%, and the description does not explain any parameters directly. It only indirectly hints at precheck_receipt_digest and spend_policy via 'free precheck receipt' and 'bound payment requirement', but the complex nested intent structure (evidence, assertions, idempotency_key) remains unexplained. The description fails to compensate for the 0% schema coverage.
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?
The description clearly states a specific verb ('Run deterministic checks') and resource ('return Ed25519-signed evidence'), and distinguishes itself from siblings by emphasizing the paid x402 payment requirement and prerequisites. It is unambiguous about what the tool does and differs from quote/prepare/describe siblings.
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 description explicitly states prerequisites ('A free precheck receipt and a matching bound payment requirement are required before signing'), making it clear when this tool should be invoked. It does not name alternatives or exclusions, but the workflow context is strong enough for an agent to understand ordering relative to prepare/quote siblings.
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.
2 tool updates
- Changed
prepare_verify_evidence_purchase16 fields changed- added
Input schema / properties / idempotency_key / descriptionAdded value: +"Required 16-128 characters from A-Z, a-z, 0-9, underscore or hyphen. Reuse with the unchanged intent to reuse an unexpired quote; changed bindings return IDEMPOTENCY_KEY_CONFLICT. An expired key returns IDEMPOTENCY_KEY_EXPIRED; use a new key." - added
Input schema / properties / intent / descriptionAdded value: +"Required prechecked purchase intent: request, spend_policy and precheck_receipt_digest are all required, with no defaults or optional fields. Preserve the request and policy used in the successful free POST /validate-request." - added
Input schema / properties / intent / properties / precheck_receipt_digest / descriptionAdded value: +"Required sha256: followed by 64 lowercase hex characters, copied from precheck_receipt.receipt_digest of the successful free precheck. Recomputed against request, policy and current discovery contract; mismatches return PRECHECK_STALE." - added
Input schema / properties / intent / properties / request / descriptionAdded value: +"Required complete bounded verification request, unchanged from precheck; no optional fields or defaults." - added
Input schema / properties / intent / properties / request / properties / assertions / descriptionAdded value: +"Required 1-16 deterministic assertions. Each operation accepts only its documented fields. Precheck validates input, not assertion truth." - changed
Input schema / properties / intent / properties / request / properties / assertions / items / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "expected_hex": { - "pattern": "^[a-f0-9]{64}$", - "type": "string" - }, - "op": { - "const": "sha256_equals", - "type": "string" - } - }, - "required": [ - "op", - "expected_hex" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "op": { - "const": "json_pointer_exists", - "type": "string" - }, - "path": { - "maxLength": 512, - "type": "string" - } - }, - "required": [ - "op", - "path" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "expected": {}, - "op": { - "const": "json_pointer_equals", - "type": "string" - }, - "path": { - "maxLength": 512, - "type": "string" - } - }, - "required": [ - "op", - "path", - "expected" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "expected_type": { - "enum": [ - "null", - "boolean", - "number", - "string", - "array", - "object" - ], - "type": "string" - }, - "op": { - "const": "json_type_is", - "type": "string" - }, - "path": { - "maxLength": 512, - "type": "string" - } - }, - "required": [ - "op", - "path", - "expected_type" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "expected_hex": { + "description": "Required expected digest as exactly 64 lowercase hex characters, without sha256: prefix.", + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + "op": { + "const": "sha256_equals", + "description": "Compare SHA-256 of the raw decoded evidence bytes.", + "type": "string" + } + }, + "required": [ + "op", + "expected_hex" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "op": { + "const": "json_pointer_exists", + "description": "Check whether the JSON Pointer resolves.", + "type": "string" + }, + "path": { + "description": "Required RFC 6901 JSON Pointer, at most 512 characters; empty string selects the document root. Escape tilde as ~0 and slash as ~1.", + "maxLength": 512, + "type": "string" + } + }, + "required": [ + "op", + "path" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "expected": { + "description": "Required expected JSON value, including null; JSON depth/key/value and safe-integer limits apply." + }, + "op": { + "const": "json_pointer_equals", + "description": "Compare the selected JSON value with expected.", + "type": "string" + }, + "path": { + "description": "Required RFC 6901 JSON Pointer, at most 512 characters; empty string selects the document root. Escape tilde as ~0 and slash as ~1.", + "maxLength": 512, + "type": "string" + } + }, + "required": [ + "op", + "path", + "expected" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "expected_type": { + "description": "Required JSON type: null, boolean, number, string, array or object.", + "enum": [ + "null", + "boolean", + "number", + "string", + "array", + "object" + ], + "type": "string" + }, + "op": { + "const": "json_type_is", + "description": "Check the selected JSON value type.", + "type": "string" + }, + "path": { + "description": "Required RFC 6901 JSON Pointer, at most 512 characters; empty string selects the document root. Escape tilde as ~0 and slash as ~1.", + "maxLength": 512, + "type": "string" + } + }, + "required": [ + "op", + "path", + "expected_type" + ], + "type": "object" + } +] - added
Input schema / properties / intent / properties / request / properties / client_request_id / descriptionAdded value: +"Required caller request identifier, 1-64 characters from A-Z, a-z, 0-9, dot, underscore, colon or hyphen; included in the request hash." - added
Input schema / properties / intent / properties / request / properties / evidence / descriptionAdded value: +"Required caller-supplied JSON bytes; no remote evidence is fetched." - added
Input schema / properties / intent / properties / request / properties / evidence / properties / content_base64 / descriptionAdded value: +"Required strict standard Base64 of UTF-8 JSON; 4-87384 encoded characters and at most 65536 decoded bytes. JSON limits: depth 32, object keys 2048, values 8192; integers must be JavaScript safe integers." - added
Input schema / properties / intent / properties / request / properties / evidence / properties / media_type / descriptionAdded value: +"Required literal application/json." - added
Input schema / properties / intent / properties / spend_policy / descriptionAdded value: +"Required caller spending limits and allowed terms; preserve from precheck. All five fields required; no defaults." - added
Input schema / properties / intent / properties / spend_policy / properties / asset / descriptionAdded value: +"Required USDC contract address, 0x plus 40 hex characters; must match current advertised asset." - added
Input schema / properties / intent / properties / spend_policy / properties / max_amount_atomic / descriptionAdded value: +"Required positive decimal integer string in atomic USDC units (1000000 = 1 USDC), at most 16 digits and within JavaScript safe-integer range. No leading zero; must cover the current quoted price." - added
Input schema / properties / intent / properties / spend_policy / properties / network / descriptionAdded value: +"Required eip155:8453 (Base) or eip155:84532 (Base Sepolia); must match current advertised terms." - added
Input schema / properties / intent / properties / spend_policy / properties / pay_to / descriptionAdded value: +"Required allowed payment recipient, 0x plus 40 hex characters; must match current advertised payTo." - added
Input schema / properties / intent / properties / spend_policy / properties / policy_version / descriptionAdded value: +"Required literal agent-economy/precheck-policy/2.0."
- Changed
quote_verify_evidence16 fields changed- added
Input schema / properties / idempotency_key / descriptionAdded value: +"Required 16-128 characters from A-Z, a-z, 0-9, underscore or hyphen. Reuse with the unchanged intent to reuse an unexpired quote; changed bindings return IDEMPOTENCY_KEY_CONFLICT. An expired key returns IDEMPOTENCY_KEY_EXPIRED; use a new key." - added
Input schema / properties / intent / descriptionAdded value: +"Required prechecked purchase intent: request, spend_policy and precheck_receipt_digest are all required, with no defaults or optional fields. Preserve the request and policy used in the successful free POST /validate-request." - added
Input schema / properties / intent / properties / precheck_receipt_digest / descriptionAdded value: +"Required sha256: followed by 64 lowercase hex characters, copied from precheck_receipt.receipt_digest of the successful free precheck. Recomputed against request, policy and current discovery contract; mismatches return PRECHECK_STALE." - added
Input schema / properties / intent / properties / request / descriptionAdded value: +"Required complete bounded verification request, unchanged from precheck; no optional fields or defaults." - added
Input schema / properties / intent / properties / request / properties / assertions / descriptionAdded value: +"Required 1-16 deterministic assertions. Each operation accepts only its documented fields. Precheck validates input, not assertion truth." - changed
Input schema / properties / intent / properties / request / properties / assertions / items / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "expected_hex": { - "pattern": "^[a-f0-9]{64}$", - "type": "string" - }, - "op": { - "const": "sha256_equals", - "type": "string" - } - }, - "required": [ - "op", - "expected_hex" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "op": { - "const": "json_pointer_exists", - "type": "string" - }, - "path": { - "maxLength": 512, - "type": "string" - } - }, - "required": [ - "op", - "path" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "expected": {}, - "op": { - "const": "json_pointer_equals", - "type": "string" - }, - "path": { - "maxLength": 512, - "type": "string" - } - }, - "required": [ - "op", - "path", - "expected" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "expected_type": { - "enum": [ - "null", - "boolean", - "number", - "string", - "array", - "object" - ], - "type": "string" - }, - "op": { - "const": "json_type_is", - "type": "string" - }, - "path": { - "maxLength": 512, - "type": "string" - } - }, - "required": [ - "op", - "path", - "expected_type" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "expected_hex": { + "description": "Required expected digest as exactly 64 lowercase hex characters, without sha256: prefix.", + "pattern": "^[a-f0-9]{64}$", + "type": "string" + }, + "op": { + "const": "sha256_equals", + "description": "Compare SHA-256 of the raw decoded evidence bytes.", + "type": "string" + } + }, + "required": [ + "op", + "expected_hex" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "op": { + "const": "json_pointer_exists", + "description": "Check whether the JSON Pointer resolves.", + "type": "string" + }, + "path": { + "description": "Required RFC 6901 JSON Pointer, at most 512 characters; empty string selects the document root. Escape tilde as ~0 and slash as ~1.", + "maxLength": 512, + "type": "string" + } + }, + "required": [ + "op", + "path" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "expected": { + "description": "Required expected JSON value, including null; JSON depth/key/value and safe-integer limits apply." + }, + "op": { + "const": "json_pointer_equals", + "description": "Compare the selected JSON value with expected.", + "type": "string" + }, + "path": { + "description": "Required RFC 6901 JSON Pointer, at most 512 characters; empty string selects the document root. Escape tilde as ~0 and slash as ~1.", + "maxLength": 512, + "type": "string" + } + }, + "required": [ + "op", + "path", + "expected" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "expected_type": { + "description": "Required JSON type: null, boolean, number, string, array or object.", + "enum": [ + "null", + "boolean", + "number", + "string", + "array", + "object" + ], + "type": "string" + }, + "op": { + "const": "json_type_is", + "description": "Check the selected JSON value type.", + "type": "string" + }, + "path": { + "description": "Required RFC 6901 JSON Pointer, at most 512 characters; empty string selects the document root. Escape tilde as ~0 and slash as ~1.", + "maxLength": 512, + "type": "string" + } + }, + "required": [ + "op", + "path", + "expected_type" + ], + "type": "object" + } +] - added
Input schema / properties / intent / properties / request / properties / client_request_id / descriptionAdded value: +"Required caller request identifier, 1-64 characters from A-Z, a-z, 0-9, dot, underscore, colon or hyphen; included in the request hash." - added
Input schema / properties / intent / properties / request / properties / evidence / descriptionAdded value: +"Required caller-supplied JSON bytes; no remote evidence is fetched." - added
Input schema / properties / intent / properties / request / properties / evidence / properties / content_base64 / descriptionAdded value: +"Required strict standard Base64 of UTF-8 JSON; 4-87384 encoded characters and at most 65536 decoded bytes. JSON limits: depth 32, object keys 2048, values 8192; integers must be JavaScript safe integers." - added
Input schema / properties / intent / properties / request / properties / evidence / properties / media_type / descriptionAdded value: +"Required literal application/json." - added
Input schema / properties / intent / properties / spend_policy / descriptionAdded value: +"Required caller spending limits and allowed terms; preserve from precheck. All five fields required; no defaults." - added
Input schema / properties / intent / properties / spend_policy / properties / asset / descriptionAdded value: +"Required USDC contract address, 0x plus 40 hex characters; must match current advertised asset." - added
Input schema / properties / intent / properties / spend_policy / properties / max_amount_atomic / descriptionAdded value: +"Required positive decimal integer string in atomic USDC units (1000000 = 1 USDC), at most 16 digits and within JavaScript safe-integer range. No leading zero; must cover the current quoted price." - added
Input schema / properties / intent / properties / spend_policy / properties / network / descriptionAdded value: +"Required eip155:8453 (Base) or eip155:84532 (Base Sepolia); must match current advertised terms." - added
Input schema / properties / intent / properties / spend_policy / properties / pay_to / descriptionAdded value: +"Required allowed payment recipient, 0x plus 40 hex characters; must match current advertised payTo." - added
Input schema / properties / intent / properties / spend_policy / properties / policy_version / descriptionAdded value: +"Required literal agent-economy/precheck-policy/2.0."
5 tool updates
- First observed
describe_verify_evidence - First observed
get_revenue_goal_status - First observed
prepare_verify_evidence_purchase - First observed
quote_verify_evidence - First observed
verify_evidence
Related MCP Connectors
Verify before your agent acts on data it paid for. Signed verdicts, checkable offline, via x402.
Deterministic MCP utilities, validation, evidence verification, and x402 commerce on Base.
Pay-per-call government data over x402: provenance chains, Ed25519 attestations, no API keys.
Machine-payable deterministic identifier checks + signed XDR-1 receipts for agents.
Related MCP Servers
AlicenseNot gradedqualityBmaintenanceCryptographic receipt layer for AI inferences. Enables notarization and verification of AI outputs with on-chain proofs via x402 payment.1MIT- AlicenseAqualityBmaintenanceEnables AI agents to fetch and independently verify on-chain data such as account balances and contract code hashes using Merkle proofs and ECDSA signatures, with x402 payment integration.3MIT
- FlicenseNot gradedqualityBmaintenanceMCP server for creating cryptographically signed and timestamped evidence of public web/API responses, with offline verification of attestations and paid access via x402.-
- AlicenseNot gradedqualityCmaintenanceEd25519-signed market-state receipts for 28 exchanges: is the venue open right now, as a receipt any agent can verify without trusting the operator, fail-closed (unknown is reported as closed). MCP tools: get_market_status, get_market_schedule, list_exchanges, get_payment_options. Free tier 500 calls a day with an instant key; x402 pay-per-call at 0.001 USDC on Base; Builder 99 USDC a monthMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.