Skip to main content
Glama

AINumbers Fintech Intelligence Suite

x402 V2 Batch-Settlement Reconciler

reconcile_x402_batch_settlement
Read-onlyIdempotent

x402 V2 Batch-Settlement Reconciler: OpenChainGraph compute node (settlement_mandate). Deterministic OpenChainGraph compute node. By default (compute:"auto") inputs are computed server-side on Cloudflare Workers for gpu:false nodes with a registered kernel; compute:"browser" forces client-side execution and returns a browser delegation URL instead. gpu:true nodes always delegate to the browser. Inputs are processed transiently to compute the response and are not stored, logged, or retained. Use synthetic or anonymised inputs only. Exports an AP2 artifact with execution_hash for chain provenance. Consumes upstream artifacts from: art-03-x402-settlement-modeler, art-60-agent-economy-runtime-fit-diagnostic. Output feeds: art-62-ap2-payment-receipt-verifier, cry-04-merkle-batch-verifier, cry-05-agent-action-audit-trail-aggregator. Open at: https://ainumbers.co/chaingraph/art-61-x402-batch-settlement-reconciler.html FV-status (published/proven/still-trusted for this spec): /fv-status/ca4e1dca8343f788a296161f0e19712f7afb7e5eaec0431081e715a4cc34b784.json — a snapshot, not a subscription; this receipt verifies offline regardless of whether that file is ever fetched. Summary: Reconciles an x402 V2 batch settlement (off-chain payment vouchers vs onchain batch total), verifying recon verdict, per-voucher amounts, settlement-risk window (unredeemed voucher exposure), and computing an educational Merkle root over the voucher set. Outputs: batch_delta_minor_units, batch_id, escrow_address, merkle_root_preimage, note, recon_verdict, redeemed_count, redeemed_total, settlement_asset, settlement_risk_window, status_asof, unredeemed_value, voucher_count, voucher_findings, within_tolerance. Output schema: call describe_tool("reconcile_x402_batch_settlement").

Input Schema

NameRequiredDescriptionDefault
computeNoCompute mode (v0.4 Compute Binding). "auto" (default) = server for gpu:false nodes with registered kernels; "server" = force server-side; "browser" = always return browser delegation URL. gpu:true nodes always delegate.
parent_hashesNoexecution_hash values from upstream ChainGraph AP2 artifacts to chain from (sets chain.parent_hashes in the export).
parent_tool_idsNotool_id values matching parent_hashes, in the same order.
policy_parametersNoInput parameters for this tool's decision function. For gpu:false nodes with a registered kernel, these are computed server-side when compute is "auto" or "server". Unknown keys are refused.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  2. Changed3 schema fields changed
    • changedInput schema / properties / policy_parameters / description
      Previous value: -"Input parameters for this tool's decision function. For gpu:false nodes with a registered kernel, these are computed server-side when compute is \"auto\" or \"server\". See the tool's manifest for field names."New value: +"Input parameters for this tool's decision function. For gpu:false nodes with a registered kernel, these are computed server-side when compute is \"auto\" or \"server\". Unknown keys are refused."
    • addedInput schema / properties / policy_parameters / properties
      Added value: +{
      +  "batch": {},
      +  "finality_threshold": {},
      +  "tolerance_minor_units": {},
      +  "vouchers": {}
      +}
    • removedInput schema / properties / policy_parameters / propertyNames
      Removed value: -{
      -  "type": "string"
      -}
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "batch_delta_minor_units": {
      -      "type": "integer"
      -    },
      -    "batch_id": {
      -      "type": "string"
      -    },
      -    "escrow_address": {
      -      "type": "string"
      -    },
      -    "merkle_root_preimage": {
      -      "type": "string"
      -    },
      -    "note": {
      -      "type": "string"
      -    },
      -    "recon_verdict": {
      -      "type": "string"
      -    },
      -    "redeemed_count": {
      -      "type": "integer"
      -    },
      -    "redeemed_total": {
      -      "type": "integer"
      -    },
      -    "settlement_asset": {
      -      "type": "string"
      -    },
      -    "settlement_risk_window": {
      -      "type": "integer"
      -    },
      -    "status_asof": {
      -      "type": "string"
      -    },
      -    "unredeemed_value": {
      -      "type": "integer"
      -    },
      -    "voucher_count": {
      -      "type": "integer"
      -    },
      -    "voucher_findings": {
      -      "type": "array"
      -    },
      -    "within_tolerance": {
      -      "type": "boolean"
      -    }
      -  },
      -  "type": "object"
      -}New value: +null
  4. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "batch_delta_minor_units": {
      +      "type": "integer"
      +    },
      +    "batch_id": {
      +      "type": "string"
      +    },
      +    "escrow_address": {
      +      "type": "string"
      +    },
      +    "merkle_root_preimage": {
      +      "type": "string"
      +    },
      +    "note": {
      +      "type": "string"
      +    },
      +    "recon_verdict": {
      +      "type": "string"
      +    },
      +    "redeemed_count": {
      +      "type": "integer"
      +    },
      +    "redeemed_total": {
      +      "type": "integer"
      +    },
      +    "settlement_asset": {
      +      "type": "string"
      +    },
      +    "settlement_risk_window": {
      +      "type": "integer"
      +    },
      +    "status_asof": {
      +      "type": "string"
      +    },
      +    "unredeemed_value": {
      +      "type": "integer"
      +    },
      +    "voucher_count": {
      +      "type": "integer"
      +    },
      +    "voucher_findings": {
      +      "type": "array"
      +    },
      +    "within_tolerance": {
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
  5. Added

TDQS

A3.6/5.0
Behavior5/5

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), and the description adds real behavioral context beyond them: deterministic computation, compute-mode routing (auto/server/browser, gpu:true always delegates), transient input processing with no storage or logging, and that it exports an AP2 artifact carrying execution_hash for chain provenance. It also discloses the FV-status receipt verifies offline, which is a meaningful caveat for how to treat the status claim.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is not front-loaded: the first sentences are near-duplicate boilerplate ('OpenChainGraph compute node... Deterministic OpenChainGraph compute node') that would apply to any node in this family, and a raw FV-status hash plus a URL occupy space that should have gone to the purpose. The one genuinely useful sentence is buried in the middle of the block.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because there is no output schema, the description's output-field listing (batch_delta_minor_units, merkle_root_preimage, within_tolerance, etc.) is genuinely necessary and is present. However, the nested policy_parameters object is untyped in the schema and the description does not say what a batch or voucher entry must look like, which is the main gap for calling the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the schema already explains compute modes and parent_hashes/parent_tool_ids. The description adds little parameter-level meaning beyond the reconciliation concepts (tolerance, finality) implied by the outputs, and never explains the untyped keys inside policy_parameters (batch, vouchers).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The 'Summary' sentence states a precise verb and resource: 'Reconciles an x402 V2 batch settlement (off-chain payment vouchers vs onchain batch total)', including the specific checks (recon verdict, per-voucher amounts, settlement-risk window, Merkle root). This is specific enough that confusion with neighbours like model_x402_settlement or simulate_x402_flow is unlikely, but no sibling is named and the actual purpose is buried after several lines of generic compute-node boilerplate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use / when-not-to-use guidance or named alternative. Usage is only implied via the artifact chain ('Consumes upstream artifacts from... Output feeds: art-62..., cry-04..., cry-05...'), which tells an agent where this sits in a pipeline, plus the constraint 'Use synthetic or anonymised inputs only.' That is useful positioning but not a decision rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.