Skip to main content
Glama

mcp-server-insumer

npm Glama License: MIT

MCP server for InsumerAPI: condition-based access infrastructure. Send a wallet and conditions, get a signed boolean across 37 chains. No balances exposed, no identity required. Every result is signed and checkable offline against the published keys, and on EVM chains an optional Merkle proof lets the verifier check the balance against the block header without trusting the API.

Enables AI agents (Claude Desktop, Cursor, Windsurf, and any MCP-compatible client) to add condition-based access to any workflow: verify on-chain conditions, discover merchants, generate signed discount codes, and onboard new merchants.

In production: AsterPay, a regulated payments stack, uses InsumerAPI attestations in its live ERC-8183 agentic-commerce trust checks. Case study.

Also available as: LangChain (26 tools, PyPI) | ElizaOS (10 actions, npm) | OpenAI GPT (GPT Store) | insumer-verify (client-side verification, npm)

Full AI Agent Verification API guide: covers all 37 chains, trust profiles, commerce protocols, and signature verification.

Quick Start

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "insumer": {
      "command": "npx",
      "args": ["-y", "mcp-server-insumer"],
      "env": {
        "INSUMER_API_KEY": "insr_live_..."
      }
    }
  }
}

Cursor / Windsurf

Add to your MCP settings:

{
  "insumer": {
    "command": "npx",
    "args": ["-y", "mcp-server-insumer"],
    "env": {
      "INSUMER_API_KEY": "insr_live_..."
    }
  }
}

Get a key: no signup, no dashboard, no password

Three paths, all give you a working insr_live_... key in seconds with 100 reads/day and 10 verification credits. One free key per email.

Option A: let your agent do it. Start the server without a key. Your AI agent can call the insumer_setup tool with your email to generate a free key instantly. Add it to your config and restart.

Option B: terminal.

curl -s -X POST https://api.insumermodel.com/v1/keys/create \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com", "appName": "MCP Server", "tier": "free"}'

Option C: browser. Enter your email on insumermodel.com and the key appears inline.

Set it as INSUMER_API_KEY in your config.

Already have a key? Manage usage, top up, or upgrade at insumermodel.com/developers/account/.

Option D: pay per call with x402 (no key at all)

Instead of a key, set INSUMER_PAYMENT_KEY to a throwaway Base wallet funded with a few dollars of USDC. Metered calls (insumer_attest, insumer_wallet_trust, insumer_batch_wallet_trust) are then paid inline via x402: the server requests a price, signs an EIP-3009 USDC authorization on Base, and retries. No signup, no credits, no dashboard.

{
  "mcpServers": {
    "insumer": {
      "command": "npx",
      "args": ["-y", "mcp-server-insumer"],
      "env": { "INSUMER_PAYMENT_KEY": "0x<throwaway-wallet-private-key>" }
    }
  }
}
  • Base USDC only; the wallet needs USDC but no ETH (settlement is gasless).

  • Each call spends a few cents (attest $0.05, trust $0.15). Use a dedicated throwaway wallet funded with a small amount, never a wallet holding meaningful funds.

  • Every quote is checked before the wallet signs. The server pays only InsumerAPI's own receiving address (0xAd982CB19aCCa2923Df8F687C0614a7700255a23), only in USDC on Base, and never more than the cap: $3.00 per call by default, the price of the largest call today (a 10-wallet trust batch with Merkle proofs). Anything else is refused and nothing is signed. Set INSUMER_MAX_PAYMENT_USDC to change the cap, e.g. "0.25" if you only attest. The cheapest call is $0.05, so a cap below that refuses every paid call (the server warns at startup). A malformed value turns pay-per-call off rather than falling back to the default.

  • If both INSUMER_API_KEY and INSUMER_PAYMENT_KEY are set, the key (credits) is used.

Related MCP server: MolTrust

Hosted endpoint (no install)

The same server runs at https://api.insumermodel.com/mcp over MCP streamable HTTP, for clients that connect by URL: ChatGPT plugins and developer-mode connectors, claude.ai custom connectors, and hosted agent platforms that cannot run an npm package. Paste the URL; there is nothing to configure.

It is shared and anonymous, so it serves the ten tools that make sense without a caller identity (HOSTED_TOOLS: signing keys, attest, compliance templates, wallet trust and batch trust, the merchant and token directories, the free discount check, code validation), and the metered tools share one free daily allowance. Past it, a call is refused with a pointer here. For your own allowance, key and credit management, or the merchant tools, run the package locally with your key as above.

To host the server yourself, build it and run node build/http.js with INSUMER_API_KEY set (PORT, INSUMER_HOSTED_TOOLS and INSUMER_DAILY_CAP are optional), or embed it: createInsumerServer(options) from the package root returns a configured server for any transport.

What You Get Back

When your agent calls insumer_attest, you get an ECDSA-signed attestation:

{
  "ok": true,
  "data": {
    "attestation": {
      "id": "ATST-A7C3E1B2D4F56789",
      "pass": true,
      "results": [
        {
          "condition": 0,
          "met": true,
          "label": "USDC >= 1000 on Ethereum",
          "type": "token_balance",
          "chainId": 1,
          "evaluatedCondition": {
            "chainId": 1,
            "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
            "operator": "gte",
            "threshold": "1000",
            "type": "token_balance"
          },
          "conditionHash": "0x8a3b...",
          "blockNumber": "0x1799043",
          "blockTimestamp": "2026-03-26T20:04:23.000Z"
        }
      ],
      "passCount": 1,
      "failCount": 0,
      "attestedAt": "2026-02-28T12:34:57.000Z",
      "expiresAt": "2026-02-28T13:04:57.000Z"
    },
    "sig": "NgA7BO8SAildiTrgIQY2UyXsBrySZknkP85pT2Zqv8Hq0KsCsB8DRFVMkXgnXtCXrbb726Is6k4LyyBYU+f/Pw==",
    "kid": "insumer-attest-v2",
    "pqSig": "<base64 ML-DSA-65 signature>",
    "pqKid": "insumer-attest-pq1"
  },
  "meta": {
    "version": "1.0",
    "timestamp": "2026-02-28T12:34:57.000Z",
    "creditsRemaining": 99,
    "creditsCharged": 1
  }
}

The sig is an ECDSA P-256 signature (base64, P1363 r||s, 88 characters). The kid identifies the key and selects the signed bytes: insumer-attest-v2 signs "insumer.attestation.v2\n" + canonical_json({v: 2, id, pass, results, attestedAt}) (keys sorted at every level); insumer-attest-v1 signs the bare JSON.stringify of {id, pass, results, attestedAt} in insertion order. Since 2026-09-01 every attest and trust response also carries a post-quantum companion, pqSig and pqKid (ML-DSA-65 over the post-quantum domain tag plus the same classical preimage the kid selects), added beside sig and kid without changing them. The conditionHash is a SHA-256 of the exact condition logic that was evaluated.

No balances. No amounts. Just a cryptographically signed true/false.

For XRPL conditions, results include ledgerIndex, ledgerHash (validated ledger hash), and trustLineState: { frozen: boolean } instead of blockNumber/blockTimestamp. Native XRP conditions include ledgerIndex and ledgerHash but not trustLineState. Frozen trust lines cause met: false.

Wallet Auth (JWT)

Add format: "jwt" to the insumer_attest tool parameters to receive the attestation as a standard JWT bearer token:

{
  "wallet": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
  "conditions": [ ... ],
  "format": "jwt"
}

The response includes an additional jwt field containing an ES256-signed JWT, and beside it a pqJwt sibling (a compact JWS with alg ML-DSA-65 carrying the same claims, signed under insumer-attest-pq1). The jwt token is verifiable by any standard JWT library via the JWKS endpoint at GET /v1/jwks, which makes it compatible with Kong, Nginx, Cloudflare Access, AWS API Gateway, and other middleware that accepts JWT bearer tokens.

Verify the Response

Your agent gets the attestation. Your application should verify it. Install insumer-verify (also on PyPI for Python: pip install insumer-verify, same checks, same 27 published test vectors):

npm install insumer-verify
import { verifyAttestation } from "insumer-verify";

// attestationResponse = the full API envelope {ok, data: {attestation, sig, kid, pqSig, pqKid}, meta}
// Do NOT pass attestationResponse.data; the function expects the outer envelope
const result = await verifyAttestation(attestationResponse, {
  jwksUrl: "https://insumermodel.com/.well-known/jwks.json",
  maxAge: 120, // reject if block data is older than 2 minutes
});

if (result.valid) {
  // Signature verified, condition hashes match, not expired
  const pass = attestationResponse.data.attestation.pass;
  console.log(`Attestation ${pass ? "passed" : "failed"} all conditions`);
} else {
  console.log("Verification failed:", result.checks);
}

This reports five independent verdicts: ECDSA signature, condition hash integrity, block freshness, attestation expiry, and the post-quantum companion (insumer-verify 1.8.1+ reports it as verified, refuted, absent, or unverifiable). Zero runtime dependencies, uses Web Crypto API.

Tools (27)

Setup (free, no auth)

Tool

Description

insumer_setup

Generate a free API key instantly. Takes an email, returns an insr_live_... key with 10 credits. No credit card required.

Key Discovery (free)

Tool

Description

insumer_jwks

Get the JWKS: five entries over two keys. The ECDSA P-256 key under insumer-attest-v1, insumer-attest-v2, and insumer-trust-v2, followed by the ML-DSA-65 post-quantum key under two RFC 9964 AKP entries, insumer-attest-pq1 and insumer-trust-pq1. Match by the kid (or pqKid) on the response, never by position.

On-Chain Verification (cost credits)

token_balance thresholds are decimal strings. Pass threshold as "100", not 100. Keys created from 2026-06-10 sign with kid: insumer-attest-v2, which preserves full precision and rejects a JSON number with a 400. The insumer_attest tool accepts a number or string and coerces to the canonical string; older insumer-attest-v1 keys accept either.

Tool

Description

insumer_attest

Verify on-chain conditions (token balances, NFT ownership, EAS attestations, Farcaster identity, evm_view_call for arbitrary boolean view functions, ratio_to_amount for self-scaling agent-spend limits and ratio_to_supply for share-of-supply rules; all three RPC EVM only, plus erc8004_agent for ERC-8004 agent registration and erc7710_delegation for MetaMask-framework delegation validity, both on Base). Returns ECDSA-signed boolean with kid, evaluatedCondition, conditionHash (SHA-256), and blockNumber/blockTimestamp. 1 credit. Optional proof: "merkle" for EIP-1186 Merkle storage proofs (2 credits).

insumer_compliance_templates

List available EAS compliance templates (Coinbase Verifications on Base, Gitcoin Passport on Optimism). Free.

insumer_wallet_trust

Generate ECDSA-signed wallet trust fact profile. 145 base checks across 27 chains in 9 dimensions (stablecoins, governance, NFTs, staking, institutional stablecoins, tokenized treasuries, stablecoin deposits, wrapped bitcoin, names), up to 166 checks across 29 chains in 13 dimensions with optional Solana, XRPL, Bitcoin, and Tron wallets (Stellar and Sui wallets switch on rows inside the base dimensions). Every check is a presence check. The signed conditionSetVersion (currently 2026-10) names the check list; log it, never reject on it. 3 credits (6 with merkle; the premium is refunded for any row no storage proof can cover).

insumer_batch_wallet_trust

Batch trust profiles for up to 10 wallets. Each wallet object supports optional solanaWallet, xrplWallet, bitcoinWallet, tronWallet, stellarWallet, and suiWallet. Shared block fetches, 5-8x faster. Partial success supported. 3 credits/wallet (6 with merkle).

insumer_verify

Create signed discount code (INSR-XXXXX, 30-min expiry) for a wallet at a merchant. 1 merchant credit.

Discovery (free)

Tool

Description

insumer_list_merchants

Browse the merchant directory. Filter by token, verification status.

insumer_get_merchant

Get full public merchant profile.

insumer_list_tokens

List all registered tokens and NFTs. Filter by chain, symbol, type.

insumer_check_discount

Calculate discount for a wallet at a merchant.

Credits & Keys

Tool

Description

insumer_buy_key

Buy a new API key with USDC, USDT, BTC, or USDT-TRC20 (no auth required). Agent-friendly: no email needed, sender wallet becomes the key's identity. One key per wallet. Volume discounts: $0.04–$0.02/call. Supported chains: Ethereum, Base, Polygon, Arbitrum, Optimism, BNB Chain, Avalanche, Solana, Bitcoin, Tron. Non-refundable.

insumer_credits

Check credit balance and tier.

insumer_buy_credits

Buy verification credits with USDC, USDT, BTC, or USDT-TRC20. Volume discounts: $0.04–$0.02/call. Supported chains: Ethereum, Base, Polygon, Arbitrum, Optimism, BNB Chain, Avalanche, Solana, Bitcoin, Tron. Non-refundable. First purchase registers sender wallet; subsequent purchases must match or include updateWallet: true.

insumer_confirm_payment

Confirm USDC payment for a discount code.

Merchant Onboarding (owner-only)

Tool

Description

insumer_create_merchant

Create new merchant. Receives 100 free credits.

insumer_merchant_status

Get full private merchant details.

insumer_configure_tokens

Set token discount tiers.

insumer_configure_nfts

Set NFT collection discounts.

insumer_configure_settings

Set discount mode, cap, USDC payments.

insumer_publish_directory

Publish merchant to public directory.

insumer_buy_merchant_credits

Buy merchant verification credits with USDC, USDT, BTC, or USDT-TRC20. Volume discounts: $0.04–$0.02/call. Owner only. Non-refundable. First purchase registers sender wallet; subsequent purchases must match or include updateWallet: true.

Domain Verification (owner-only)

Tool

Description

insumer_request_domain_verification

Request a verification token for a merchant's domain. Returns token and 3 methods (DNS TXT, meta tag, file upload).

insumer_verify_domain

Complete domain verification after placing the token. Verified merchants get a trust badge.

Commerce Protocol Integration

Tool

Description

insumer_acp_discount

Check discount eligibility in OpenAI/Stripe ACP format. Returns coupon objects and per-item allocations. 1 merchant credit.

insumer_ucp_discount

Check discount eligibility in Google UCP format. Returns title, extension field, and applied array. 1 merchant credit.

insumer_validate_code

Validate an INSR-XXXXX discount code. Returns validity, discount percent, expiry. Free, no auth.

Pricing

Tiers: Free (100 reads/day, 10 credits) | Pro $29/mo (1,000 credits/mo, 10,000/day) | Enterprise $99/mo (5,000 credits/mo, 100,000/day)

Volume discounts: $5–$99 = $0.04/call (25 credits/$1) · $100–$499 = $0.03 (33/$1, 25% off) · $500+ = $0.02 (50/$1, 50% off)

Platform wallets:

  • EVM (USDC/USDT): 0xAd982CB19aCCa2923Df8F687C0614a7700255a23

  • Solana (USDC/USDT): 6a1mLjefhvSJX1sEX8PTnionbE9DqoYjU6F6bNkT4Ydr

  • Bitcoin: bc1qg7qnerdhlmdn899zemtez5tcx2a2snc0dt9dt0

  • Tron (USDT-TRC20): TC5yvwkAMakkXtUxYiu2Yn1xbBcwYuD6cn

Supported payment chains: Ethereum, Base, Polygon, Arbitrum, Optimism, BNB Chain, Avalanche, Solana, Bitcoin, Tron. Tokens sent on unsupported chains cannot be recovered. All purchases are final and non-refundable. Full pricing →

Handling rpc_failure Errors

If the API cannot reach one or more blockchain data sources after retries, insumer_attest, insumer_wallet_trust, insumer_verify, insumer_acp_discount, insumer_ucp_discount and insumer_check_discount return ok: false with error code rpc_failure. No signature, no JWT, no credits charged. insumer_batch_wallet_trust answers normally and carries an error entry for any wallet whose reads did not complete, beside the wallets that were signed. This is a retryable error: the MCP client should retry after a short delay (2-5 seconds).

Important: rpc_failure is NOT a verification failure. Do not treat it as pass: false. It means the data source was temporarily unavailable and the API refused to sign an unverified result.

Supported Chains (37)

31 EVM chains + Solana + XRP Ledger + Bitcoin + Tron + Stellar + Sui. Includes Ethereum, Base, Polygon, Arbitrum, Optimism, BNB Chain, Avalanche, XDC, Robinhood Chain, Arc, and 21 more EVM. Full list →

Also Available As

  • Claude Code Skill: smithery skill add douglasborthwick/insumer-skill (Smithery · GitHub), for writing wallet auth into your own projects from inside Claude Code. This MCP server gives an agent runtime access to the API; insumer-skill helps developers author integration code at build time. Different surfaces, same primitive.

  • ElizaOS Plugin: @insumermodel/plugin-eliza (npm)

  • LangChain (Python): pip install langchain-insumer (PyPI)

  • OpenAI GPT: InsumerAPI Wallet Auth (GPT Store)

  • Verifier (offline JWKS): npm install insumer-verify (npm, source)

Development

npm install
npm run build

# Test with MCP Inspector
npx @modelcontextprotocol/inspector node build/index.js

License

MIT


Available Tools

27 tools
insumer_acp_discountDiscount in ACP formatAInspect

Check token-holder discount eligibility in OpenAI/Stripe Agentic Commerce Protocol (ACP) format. Returns coupon objects, applied/rejected arrays, and per-item allocations compatible with ACP checkout flows. The on-chain check is the same one behind INSR discount codes, wrapped in ACP format. Consumes 1 merchant credit.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsNoOptional line items for per-item cent-amount allocations
walletNoEVM wallet address (0x...)
suiWalletNoSui wallet address (0x + 64 hex)
merchantIdYesMerchant ID
tronWalletNoTron wallet address (T-prefixed)
xrplWalletNoXRPL wallet address (r-address)
solanaWalletNoSolana wallet address (base58)
stellarWalletNoStellar wallet address (G-prefixed)

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, non-idempotent, open-world). The description adds genuinely useful context beyond them: the one-merchant-credit cost, which is a real constraint an agent must budget for. It does not cover wallet-format requirements or error behavior, keeping it short of 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.

Conciseness4/5

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

Three short sentences, front-loaded with the purpose and followed by return shape and cost. Mild redundancy: the return-value sentence partially duplicates what the output schema already declares, but nothing is padded.

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

Completeness4/5

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

With an output schema present, the description needn't explain return values (though it does), and it adds the credit-consumption cost plus the relationship to the non-ACP check. For an 8-parameter, 1-required tool this is adequately complete; only explicit sibling routing is missing.

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% and every parameter carries its own regex pattern and description, so the schema does the heavy lifting. The description adds nothing about the multi-chain wallet alternatives or the items array, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Check token-holder discount eligibility') and qualifies the output format (ACP). The sentence 'The on-chain check is the same one behind INSR discount codes, wrapped in ACP format' explicitly distinguishes it from the sibling insumer_check_discount and the format twin insumer_ucp_discount.

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?

Usage context is implied by the ACP-format framing and the credit-cost note, so an agent can infer this is for ACP checkout flows rather than direct discount-code checks. However, it never states when to pick this over insumer_check_discount or insumer_ucp_discount, nor any prerequisites for the wallet/merchant setup.

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

insumer_attestVerify wallet conditions (signed)AInspect

Verify 1-10 on-chain conditions for a wallet and return a signed yes or no for each, never the balance. Condition types: token_balance, nft_ownership, eas_attestation (raw schemaId or a compliance template such as Coinbase Verifications or Gitcoin Passport), farcaster_id (IdRegistry on Optimism), evm_view_call (a single-address-argument view function returning bool), ratio_to_amount (balance >= multiple * amount), ratio_to_supply (balance / totalSupply >= minFraction, ERC-20 only), erc8004_agent (registered ERC-8004 agent on Base), and erc7710_delegation (a signed MetaMask-framework delegation from principal to agent is currently valid on Base; spend, target and call limits are reported as declaredLimits, not simulated). Chains: EVM chains plus Solana, XRPL, Bitcoin, Tron, Stellar and Sui; Bitcoin, Tron, Stellar and Sui support token_balance only. Responses are ECDSA-signed with a kid identifying the key and carry a post-quantum companion signature; each result includes evaluatedCondition, a SHA-256 conditionHash, and the block (EVM), ledger (XRPL, Stellar) or checkpoint (Sui) it was read at. proof: 'merkle' adds EIP-1186 storage proofs on supported EVM chains. Attestations with a delegation condition expire in 5 minutes instead of 30; a failed delegation result carries failReason. Costs 1 credit (2 with proof). Current chain and check counts: https://insumermodel.com/llms.txt

ParametersJSON Schema
NameRequiredDescriptionDefault
proofNoSet to 'merkle' for EIP-1186 Merkle storage proofs (2 credits). For token_balance on supported EVM chains (not ZKsync Era, Sei, Viction or XDC Network, and not on non-EVM chains); for erc7710_delegation, a storage proof of the revocation slot (subject 'delegation_revocation') on managers with an on-chain-verified layout.
formatNoSet to 'jwt' to include a Wallet Auth by InsumerAPI token (ES256-signed JWT) in the response, with its ML-DSA-65 sibling pqJwt beside it. The jwt is verifiable by any standard JWT library using JWKS at /.well-known/jwks.json.
walletNoEVM wallet address (0x...)
suiWalletNoSui wallet address (0x + 64 hex chars). For verifying SUI or other Sui coins (e.g. USDC). Use chainId 'sui' with the Sui coin type as contractAddress: '0x2::sui::SUI' for native SUI, or the full coin type address::module::Name for other coins. The string 'native' is not accepted on Sui.
conditionsYes1-10 on-chain conditions to verify
tronWalletNoTron wallet address (T-prefixed, base58). For verifying TRX or TRC20 tokens (USDT-TRC20). Use chainId 'tron'.
xrplWalletNoXRPL wallet address (r-address). For verifying XRP, trust line tokens (RLUSD, USDC), or NFTs on XRP Ledger.
solanaWalletNoSolana wallet address (base58)
bitcoinWalletNoBitcoin address (P2PKH, P2SH, bech32, or Taproot). For verifying native BTC balance. Use chainId 'bitcoin' with contractAddress 'native'.
stellarWalletNoStellar wallet address (G-prefixed). For verifying XLM or trustline assets (USDC, BENJI, etc.). Use chainId 'stellar' with the asset issuer's G-address as contractAddress and pass assetCode (e.g. 'USDC'). Soroban contract balances not visible — classic trustlines only.
declaredLimitsNoSet to 'omit' to leave decoded caveat limits out of the signed results of erc7710_delegation conditions, so a forwarded attestation does not carry the principal's spending ceiling. met, delegationHash, and conditionHash are byte-identical either way.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: discloses ECDSA signing plus a post-quantum companion signature, cost (1 credit, 2 with proof), shorter 5-minute expiry for delegation conditions, failReason on failure, and that declaredLimits are reported rather than simulated. It also honestly frames erc8004_agent registration as permissionless with no vetting or reputation — substantial behavioral context the annotations cannot convey.

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

Conciseness4/5

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

Purpose is front-loaded and every sentence carries information (condition types, chains, signing, cost, expiry). It is a dense single paragraph, though, and the long inline enumeration of condition types is harder to scan than a structured list would be.

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

Completeness5/5

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

Given a 9-type condition tool with 11 parameters and an output schema present, the description covers capabilities, chain coverage, cost, signing, and expiry behavior. Nothing an agent needs to call it correctly is missing, and return-value detail is properly delegated to the output schema.

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 schema already documents all 11 parameters including condition sub-fields. The description largely restates condition types and semantics already present in the schema (ratio_to_amount, erc7710_delegation, proof, etc.), so it adds little beyond the structured fields — baseline 3.

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?

States a specific verb and resource — 'Verify 1-10 on-chain conditions for a wallet and return a signed yes or no for each, never the balance' — which is precise about what is and isn't returned. It does not, however, name or differentiate itself from sibling tools like insumer_wallet_trust or insumer_batch_wallet_trust, leaving the agent to infer the distinction from 'signed'.

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?

The description enumerates condition types and chain support, which implies when each variant applies (e.g. 'Bitcoin, Tron, Stellar and Sui support token_balance only'), but never states when to choose this tool over the unsigned wallet_trust or batch variants. Usage is implied rather than directed.

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

insumer_batch_wallet_trustBatch wallet trust profiles (signed)AInspect

Generate wallet trust fact profiles for up to 10 wallets in a single request. Shared block fetches make this faster than sequential calls. Each wallet gets an independently signed profile with its own TRST-XXXXX ID. Supports partial success: failed wallets get error entries while successful ones return full profiles. Costs 3 credits per successful wallet (6 with proof: 'merkle'); credits are charged only for successful profiles.

ParametersJSON Schema
NameRequiredDescriptionDefault
proofNoSet to 'merkle' for EIP-1186 Merkle storage proofs on all wallets (6 credits/wallet).
walletsYes1-10 wallet entries to profile

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, idempotentHint=false and openWorldHint=true but say nothing about cost or failure behavior. The description fills exactly that gap: credit pricing (3/wallet, 6 with merkle), the fact credits are charged only for successful profiles, and partial-success semantics with per-wallet error entries. This is behavioral context the structured fields cannot supply.

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

Conciseness5/5

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

Purpose and batch size are front-loaded, then speed rationale, then signing/partial success, then cost. Five sentences with no filler and no repetition of schema field names.

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

Completeness5/5

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 no explanation. Everything an agent needs to invoke this correctly is covered: input limit, cost model, the merkle upgrade, and what happens on partial failure.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by tying the 'merkle' enum value to a concrete price change and by framing the wallets array as a 1-10 size constraint with per-entry independence, which adds economic meaning the schema does not convey.

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

Purpose5/5

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

States a specific verb and resource ("Generate wallet trust fact profiles") with an explicit batch scope ("up to 10 wallets in a single request"). The batch framing plus the signing/ID detail makes it distinguishable from the single-wallet sibling insumer_wallet_trust.

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

Usage Guidelines4/5

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

Gives a clear rationale for choosing this over the sequential path ("Shared block fetches make this faster than sequential calls"), which tells the agent when a multi-wallet call is warranted. It never names the single-wallet sibling for the 1-wallet case, so the routing guidance is incomplete but present.

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

insumer_buy_creditsAdd credits from a paymentA
Destructive
Inspect

Add verification credits to the current API key against a USDC, USDT, BTC, or USDT-TRC20 payment the caller has already sent. This tool does not move funds: it submits the transaction hash. USDC/USDT on EVM and Solana (auto-detected), USDT-TRC20 on Tron, BTC on Bitcoin (converted at market rate, 1 confirmation required). Crypto sent on unsupported chains cannot be recovered. Non-refundable. The first purchase registers the sender wallet to the API key; later purchases must come from the same sender, and updateWallet: true replaces the registered wallet. Current prices and volume discounts: https://insumermodel.com/pricing/

ParametersJSON Schema
NameRequiredDescriptionDefault
amountNoStablecoin amount sent (minimum 5). Not required for BTC.
txHashYesTransaction hash proving payment
chainIdYesPayment chain: 1, 8453, 137, 42161, 10, 56, 43114, 'solana', 'bitcoin', or 'tron'. EVM/Solana accept USDC and USDT (auto-detected). Bitcoin accepts BTC (converted to USD at market rate). Tron accepts USDT-TRC20.
updateWalletNoSet true to replace the registered sender wallet with this transaction's sender

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety (destructiveHint, idempotentHint=false, openWorldHint), but the description adds substantial context beyond them: it does not move funds, unsupported chains are unrecoverable, purchases are non-refundable, the first purchase registers the sender wallet, later purchases must use the same sender, and updateWallet replaces it. These are material behaviors an agent cannot derive from 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.

Conciseness4/5

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

Dense but front-loaded, and every clause carries non-obvious information (chain support, conversion, wallet rules, irreversibility). It is on the longer side for a description, but no sentence is padding.

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

Completeness5/5

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 no explanation, and the description covers the mechanics, supported chains, irreversibility, wallet registration, and a pricing pointer. An agent has everything needed to invoke it correctly.

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

Parameters4/5

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

Schema coverage is already 100%, so the schema documents amount, txHash, chainId, and updateWallet. The description still adds useful meaning beyond it: EVM/Solana auto-detect USDC vs USDT, BTC is converted at market rate with 1 confirmation, and the wallet-registration/updateWallet semantics.

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

Purpose5/5

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

States a specific verb+resource ('Add verification credits to the current API key') and immediately narrows the input to a tx hash for a payment already sent. This clearly distinguishes it from siblings like insumer_buy_key, insumer_buy_merchant_credits, and insumer_confirm_payment.

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

Usage Guidelines4/5

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

The description establishes the precondition clearly ('a payment the caller has already sent', 'it submits the transaction hash'), which tells the agent this is a post-payment submission step. It does not, however, explicitly name the related sibling tool (e.g. insumer_confirm_payment or insumer_buy_key) as an alternative, so routing is inferred rather than stated.

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

insumer_buy_keyRegister a paid API keyAInspect

Register a new API key against a USDC, USDT, BTC, or USDT-TRC20 payment the caller has already sent (no auth required, no email). This tool does not move funds: it submits the transaction hash. Receiving addresses: EVM 0xAd982CB19aCCa2923Df8F687C0614a7700255a23, Solana 6a1mLjefhvSJX1sEX8PTnionbE9DqoYjU6F6bNkT4Ydr, Tron TC5yvwkAMakkXtUxYiu2Yn1xbBcwYuD6cn, Bitcoin bc1qg7qnerdhlmdn899zemtez5tcx2a2snc0dt9dt0 (1 confirmation required). USDC/USDT auto-detected from the transaction; BTC converted to USD at market rate. One key per wallet; existing keys are topped up with a credit purchase instead. Non-refundable. Current prices and volume discounts: https://insumermodel.com/pricing/

ParametersJSON Schema
NameRequiredDescriptionDefault
amountNoStablecoin amount sent (minimum 5). Not required for BTC — USD value derived from on-chain amount at market rate.
txHashYesTransaction hash proving payment
appNameYesName for the API key (e.g. your agent or app name)
chainIdYesPayment chain: 1, 8453, 137, 42161, 10, 56, 43114, 'solana', 'bitcoin', or 'tron'. EVM/Solana accept USDC and USDT (auto-detected). Bitcoin accepts BTC (converted to USD at market rate). Tron accepts USDT-TRC20.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: receiving addresses per chain, the 1-confirmation requirement for Bitcoin, automatic USDC/USDT detection, BTC-to-USD market conversion, one-key-per-wallet rule, and a non-refundable policy. These are exactly the operational constraints an agent needs and none are in the annotations, which only carry openWorldHint/idempotentHint/destructiveHint flags.

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

Conciseness4/5

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

Front-loaded with the core purpose, then layers prerequisites, addresses, and policies in a readable sequence. It is dense — the address list with confirmation note is packed into one mid-paragraph sentence — but nearly every clause carries actionable information.

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

Completeness5/5

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

For a payment-registration tool with an output schema already covering return values, the description supplies everything else an agent needs: prerequisites, per-chain payment addresses, confirmation rules, conversion behavior, and the non-refundable/one-key constraints. Nothing required to invoke it correctly is missing.

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

Parameters4/5

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 semantics: it maps chainId values to accepted assets, explains that amount is not required for BTC, and lists the exact addresses funds must be sent to. This meaningfully extends the parameter documentation rather than restating it.

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

Purpose5/5

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

States a specific verb and resource — registering an API key against an already-sent payment — and disambiguates from the credit path by noting top-ups go through a credit purchase instead. The clarification that the tool 'does not move funds: it submits the transaction hash' pins down exactly what the operation does versus what an agent might assume.

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

Usage Guidelines4/5

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

Gives clear pre-conditions (payment already sent, no auth, no email) and an explicit when-not case (existing keys are topped up via credit purchase instead), which routes the agent away from re-using this tool. It stops short of naming the sibling tool (insumer_buy_credits) explicitly, so it is clear context rather than full alternative routing.

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

insumer_buy_merchant_creditsAdd merchant credits from a paymentA
Destructive
Inspect

Add merchant verification credits against a USDC, USDT, BTC, or USDT-TRC20 payment the caller has already sent. This tool does not move funds: it submits the transaction hash. USDC/USDT on EVM and Solana (auto-detected), USDT-TRC20 on Tron, BTC on Bitcoin (converted at market rate, 1 confirmation required). Non-refundable. Owner only. The first purchase registers the sender wallet to the API key; updateWallet: true replaces it. Current prices and volume discounts: https://insumermodel.com/pricing/

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMerchant ID
amountNoStablecoin amount sent (minimum 5). Not required for BTC.
txHashYesTransaction hash proving payment
chainIdYesPayment chain: 1, 8453, 137, 42161, 10, 56, 43114, 'solana', 'bitcoin', or 'tron'. EVM/Solana accept USDC and USDT (auto-detected). Bitcoin accepts BTC (converted to USD at market rate). Tron accepts USDT-TRC20.
updateWalletNoSet true to replace the registered sender wallet

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare this is a non-read-only, destructive, non-idempotent, open-world operation. The description adds substantial behavioral context beyond that: it explicitly says funds are not moved, that it submits a txHash, that payment is non-refundable, that it is owner-only, that the first purchase registers the sender wallet, that updateWallet replaces it, and that BTC requires one confirmation. This is a rich and helpful disclosure for a state-changing tool.

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

Conciseness4/5

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

The description is a single dense paragraph that front-loads the core action and packs multiple operational caveats into minimal space. It is well-sized for a complex tool, though the long compound sentence structure and appended pricing URL slightly reduce readability.

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

Completeness5/5

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

Given the tool's complexity, full schema coverage, and the presence of an output schema, the description covers everything an agent needs: what it does, which chains and assets are accepted, the non-refundable and owner-only constraints, wallet registration semantics, and the fact that it does not move funds. No critical gap remains.

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

Parameters4/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 description adds value beyond the schema by noting that EVM/Solana stablecoins are auto-detected and that BTC is converted at market rate with one confirmation required. These operational details are not fully captured in the schema and clarify how chainId and amount behave in practice.

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 description states a specific verb and resource ('Add merchant verification credits') and the input condition ('against a ... payment the caller has already sent'), which distinguishes it from a generic credit purchase. It does not explicitly name or contrast with the sibling insumer_buy_credits, so the differentiation is implicit rather than spelled out.

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?

The description implies the usage context (after a payment has been sent, owner only, first purchase registers the wallet) but never names the alternative tools or states when-not to use this one versus insumer_buy_credits or insumer_confirm_payment. Adequate context is present, but routing guidance is left to inference.

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

insumer_check_discountCheck a discount (free)A
Read-onlyIdempotent
Inspect

Calculate discount for a wallet at a merchant. Checks on-chain balances and returns tier and discount percentage per token, never raw balance amounts. Free: does not consume credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
walletNoEVM wallet address (0x...)
merchantYesMerchant ID
suiWalletNoSui wallet address (0x + 64 hex)
tronWalletNoTron wallet address (T-prefixed)
xrplWalletNoXRPL wallet address (r-address)
solanaWalletNoSolana wallet address (base58)
stellarWalletNoStellar wallet address (G-prefixed)

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds real value beyond them: it discloses the privacy-relevant return behavior ('never raw balance amounts') and the billing behavior ('does not consume credits').

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

Conciseness4/5

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

Three short sentences, front-loaded with the core action followed by return behavior and cost. No filler, though the title's 'Free' repeats the final sentence's cost statement.

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

Completeness4/5

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 described, and the schema fully documents all 7 parameters. The description covers purpose, output privacy and cost, leaving only usage-alternative guidance unaddressed.

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%, with each wallet parameter carrying its own pattern and format note, so the baseline is 3. The description adds no per-parameter meaning beyond the schema; only 'per token' hints at the result shape.

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

Purpose5/5

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

States a specific verb and resource: 'Calculate discount for a wallet at a merchant.' It also names the scope (per-token discount percentage) so an agent can distinguish it from siblings like insumer_wallet_trust or insumer_validate_code.

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?

The description implies when to use it (to compute a discount for a wallet/merchant pair) and flags the cost model ('Free: does not consume credits'), which is a genuine selection signal. However, it names no alternative tool and gives no explicit when-not-to-use or prerequisite guidance.

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

insumer_compliance_templatesList compliance templatesA
Read-onlyIdempotent
Inspect

List the compliance templates available for EAS attestation conditions. Each template carries pre-configured schema IDs, attester addresses, and decoder contracts for a KYC or identity provider (Coinbase Verifications on Base, Gitcoin Passport on Optimism), so a condition can name the template instead of raw EAS parameters. No authentication or credits required.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description still adds real value beyond them by stating "No authentication or credits required," which affects whether the agent can call this freely as a discovery step.

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

Conciseness4/5

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

Two sentences, front-loaded with the action and then the payload contents; all clauses carry information (field list, provider examples, cost model). The second sentence is somewhat dense with parentheticals, which is a minor readability cost rather than waste.

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

Completeness4/5

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

An output schema exists, so return structure need not be explained, and the description still names the meaningful fields and concrete provider examples (Coinbase Verifications on Base, Gitcoin Passport on Optimism). Combined with the zero-parameter schema, this is complete enough for an agent to call correctly, with only the number/ordering of results left unspecified.

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

Parameters4/5

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

The tool takes zero parameters, so per the rubric the baseline is 4. The description correctly adds nothing about parameters because there are none to describe, keeping it consistent with the empty input schema.

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

Purpose5/5

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

The description uses a specific verb+resource ("List the compliance templates") and immediately scopes it to EAS attestation conditions, making it clearly distinct from siblings like insumer_attest or insumer_wallet_trust. It also enumerates what a template contains (schema IDs, attester addresses, decoder contracts), so the agent knows exactly what kind of object it gets back.

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

Usage Guidelines4/5

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

It states the purpose of the tool: fetching templates so a condition can "name the template instead of raw EAS parameters," which tells the agent when this lookup is warranted. It does not name an alternative tool or an explicit when-not condition, but the usage context is unambiguous for a zero-argument listing tool.

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

insumer_configure_nftsConfigure merchant NFTs (replaces)A
DestructiveIdempotent
Inspect

Configure NFT collections that grant discounts at the merchant. Replaces the existing NFT configuration. Max 4 collections. Owner only.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMerchant ID
nftCollectionsYesNFT collection configurations (0-4)

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so replacement semantics are partially covered. The description nonetheless adds two things annotations cannot express: the 4-collection ceiling and the owner-only authorization requirement, which materially affect how the agent invokes it.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core purpose, then constraints. No filler and nothing buried.

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

Completeness5/5

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

With an output schema present, full parameter coverage, and annotations covering safety, the description needs only to add the replacement behavior, cap, and auth requirement — all of which it does.

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 both parameters and every nested field (name, taxon, chainId, discount, contractAddress) are already documented in the schema. The description adds only the max-4 limit, which is also in the schema via maxItems, so baseline 3 is appropriate.

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?

States a specific verb (configure) and resource (NFT collections granting discounts), plus the key operational fact that it replaces the existing configuration. It is distinguishable from siblings like insumer_configure_tokens, though it never names that sibling explicitly.

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

Usage Guidelines4/5

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

Gives clear usage context: it is a full replacement operation, capped at 4 collections, and requires owner privileges. It lacks an explicit 'use X instead when...' pointer to the tokens/settings siblings, but the prerequisites are unambiguous.

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

insumer_configure_settingsUpdate merchant settingsA
DestructiveIdempotent
Inspect

Update merchant settings: discount stacking mode, cap, and stablecoin payment configuration. All fields optional; supplied fields replace their current values. Owner only.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMerchant ID
discountCapNoMaximum total discount percentage (1-100)
usdcPaymentNoUSDC payment settings, or null to disable
discountModeNo'highest' uses best single discount, 'stack' adds them together, 'capped' stacks up to discountCap

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds real value beyond them by stating that supplied fields replace current values (partial-update semantics) and that the operation is owner-only, which the annotations do not convey.

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

Conciseness5/5

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

Two dense sentences: scope first, then the update/auth semantics. Every clause earns its place with no redundancy or filler.

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

Completeness4/5

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

With an output schema present and full parameter documentation in the schema, the description only needs to supply what structured fields omit: partial-update behavior and the owner-only restriction, both of which it provides. Nothing critical is missing, though guidance on related configure_* siblings would round it out.

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%, with each parameter fully documented including the discountMode enum semantics and usdcPayment nesting. The description names the configurable areas but adds no syntax or format detail beyond the schema, so the baseline 3 for high coverage applies.

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?

States a specific verb (Update) and resource (merchant settings) and enumerates the exact scope: discount stacking mode, cap, and stablecoin payment configuration. This implicitly distinguishes it from sibling configure tools like insumer_configure_tokens and insumer_configure_nfts, though it never names them explicitly.

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?

Provides useful invocation constraints (all fields optional, partial-replace semantics, owner-only access), but offers no explicit when-to-use guidance or routing to alternatives such as configure_tokens/configure_nfts for other setting categories. Usage is implied rather than directed.

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

insumer_configure_tokensConfigure merchant tokens (replaces)A
DestructiveIdempotent
Inspect

Configure merchant token discount tiers. Set own token and/or partner tokens. Replaces the existing token configuration. Max 8 tokens total. Owner only.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMerchant ID
ownTokenNoMerchant's own token configuration, or null to remove
partnerTokensNoPartner token configurations

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint, so the safety profile is present. The description still adds non-redundant context: the replace (not merge) semantics of the write, the 8-token cap, and the owner-only authorization requirement. Return/error behavior is left to the output schema.

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

Conciseness5/5

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

Four compact sentences, front-loaded with the purpose, then the replace semantics, the limit, and the permission. Nothing is wasted and no sentence is redundant with another.

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

Completeness4/5

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

For a destructive, owner-scoped write with a rich schema, annotations and an output schema, the description covers purpose, replace semantics, cap and authorization. It omits how invalid chain/token combinations fail and how ownToken interacts with the partner cap, but those are secondary given the structured data.

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 schema already documents id, ownToken, partnerTokens and all nested fields in detail. The description adds only the 'max 8 tokens total' cap, which loosely maps to the partnerTokens maxItems=8; it does not explain the ownToken vs partnerTokens distinction or null-to-remove. Baseline 3 is appropriate.

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?

States a specific verb and resource: 'Configure merchant token discount tiers. Set own token and/or partner tokens.' This clearly distinguishes it from sibling reads like insumer_list_tokens or insumer_check_discount. It stops short of naming any sibling explicitly, so it does not reach the 5 bar.

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

Usage Guidelines4/5

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

Gives real usage context: this replaces the existing configuration rather than appending, is capped at 8 total tokens, and is owner-only. That tells the agent when the call is appropriate and who can make it, though no alternative tool is offered for the non-owner or non-replacing case.

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

insumer_confirm_paymentConfirm a discount paymentA
Idempotent
Inspect

Confirm the stablecoin payment for an INSR discount code. The server verifies the on-chain transaction receipt.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesDiscount code (e.g. INSR-A7K3M)
amountYesStablecoin amount sent
txHashYesOn-chain transaction hash or Solana signature
chainIdYesPayment chain: EVM chain ID (1, 8453, 137, 42161, 10, 56, 43114), 'solana', or 'tron'

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation profile (readOnlyHint=false), idempotency, and open-world behavior, so the safety bar is lower. The description usefully adds that the server verifies the on-chain transaction receipt, but says nothing about what happens on verification failure, required payment timing, or confirmation latency.

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

Conciseness5/5

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

Two short sentences, zero waste, with the action front-loaded and the server-side verification detail following. Nothing is repeated from the schema or title.

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

Completeness4/5

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 the annotations plus 100%-covered schema leave little else required. The description covers purpose and the receipt-verification behavior; only edge-case behavior (failure handling, whether a prior validation is required) is missing.

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% with all four parameters documented (code format, txHash patterns, chainId options, amount), so the burden is already met by structured data. The description adds no additional parameter meaning beyond what the schema provides, making the baseline 3 appropriate.

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?

States a specific verb (confirm) and resource (stablecoin payment for an INSR discount code), so the agent knows this finalizes a payment against a discount code. It is distinct from validate_code/check_discount by focusing on payment confirmation, but it never names those siblings explicitly.

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?

Usage is only implied: the word 'confirm' suggests this is called after a stablecoin transfer has been sent, ideally following a code validation step. There is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives such as insumer_validate_code or insumer_check_discount.

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

insumer_create_merchantCreate a merchantAInspect

Create a new merchant, owned by the API key that creates it, with an initial allowance of free verification credits. Limited number of merchants per API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationNoCity or region
companyIdYesUnique merchant ID (alphanumeric, dashes, underscores)
companyNameYesCompany display name

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (which only declare non-read-only, non-idempotent, non-destructive, open-world), the description discloses ownership semantics, the free-credit grant on creation, and a per-API-key quota. That quota detail is valuable for avoiding failed calls. It does not clarify what happens on duplicate companyId or what the response contains.

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

Conciseness5/5

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

Two tightly written sentences with zero filler; the core action and constraints are front-loaded. Every clause carries information an agent can act on.

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

Completeness4/5

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

With an output schema present, return values need not be described, and annotations cover the safety profile. The description covers ownership, credits, and quota, leaving only edge cases (duplicate ID handling, quota exhaustion behavior) unaddressed.

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?

All three parameters are fully documented in the schema, including patterns, lengths, and meanings, so the baseline is 3. The description adds no parameter-level syntax or format guidance beyond what the schema already provides.

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?

Specific verb ('Create') plus resource ('merchant'), with extra scope detail: ownership by the creating API key and an initial allowance of free verification credits. It implicitly distinguishes itself from siblings like insumer_list_merchants and insumer_get_merchant, though it does not name them.

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?

The quota note ('Limited number of merchants per API key') hints at a precondition an agent should weigh, but there is no explicit when-to-use guidance and no routing to alternatives for inspecting or managing existing merchants. 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.

insumer_creditsCheck credit balanceA
Read-onlyIdempotent
Inspect

Check verification credit balance, tier, and daily rate limit for the current API key.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by enumerating what is returned (balance, tier, daily rate limit) and that it is key-scoped, but it says nothing about rate limiting on the check itself or how the daily limit is reset.

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

Conciseness5/5

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

One front-loaded sentence that identifies the action, the subject, and the key scoping with no filler or redundancy.

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

Completeness4/5

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

For a zero-parameter read tool with an output schema and full annotation coverage, the description supplies everything needed to invoke it correctly. The only shortfall is the missing tie-in to the credit-purchasing siblings, which is a usage rather than completeness gap.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. Schema description coverage is also 100%.

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 description gives a specific verb ('Check') plus the exact resource ('verification credit balance, tier, and daily rate limit') and scopes it to the current API key. It is clearly distinguishable from siblings like insumer_buy_credits or insumer_buy_key, though it never names them.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, and the natural alternatives (insumer_buy_credits, insumer_buy_merchant_credits) are never referenced. The agent must infer that this is a pre-purchase check rather than being told so.

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

insumer_get_merchantGet a merchant profileB
Read-onlyIdempotent
Inspect

Get full public merchant profile including token tiers, NFT collections, discount mode, and verification status.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMerchant ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is fully covered elsewhere. The description adds only that the profile is 'public' and which field groups are returned, which is useful scoping context but not deep behavioral disclosure.

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

Conciseness4/5

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

One front-loaded sentence with no filler; the verb and resource come first and the enumerated contents follow. It is tight, though the trailing field list is somewhat inventory-like rather than decision-relevant.

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

Completeness4/5

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

An output schema exists, so return-value detail is not the description's burden, and annotations fully cover the safety profile. For a single-parameter, non-destructive read, the definition is essentially complete; only usage routing to siblings is missing.

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?

There is a single parameter with 100% schema description coverage ('Merchant ID'), so the schema already carries the semantics. The description adds no format, lookup, or fallback detail about the id, making the baseline 3 appropriate.

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?

States a specific verb (Get) and resource (merchant profile) and enumerates the payload contents (token tiers, NFT collections, discount mode, verification status). It does not explicitly distinguish itself from the sibling insumer_list_merchants, but the singular 'a merchant profile' plus the required id makes the single-record scope inferable.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no prerequisites, and never names an alternative such as insumer_list_merchants for discovery or insumer_check_discount for discount evaluation. The only usage signal is the implied 'you have a merchant id'.

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

insumer_jwksGet public signing keysA
Read-onlyIdempotent
Inspect

Get InsumerAPI's public signing keys as a JWKS (JSON Web Key Set): an ECDSA P-256 key under its kids, followed by the ML-DSA-65 post-quantum key as RFC 9964 AKP entries. Signatures on attestation and trust responses verify against these keys. Match an entry by the kid (or pqKid) on the response, never by position; an unknown kid is unverifiable, not refuted. No authentication required.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent, openWorld, and non-destructive, so the bar is lower; the description still adds real behavioral context beyond them — 'No authentication required' and the rule that matching must be by kid/pqKid, with an unknown kid being 'unverifiable, not refuted.' It does not describe caching or rotation behavior.

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

Conciseness4/5

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

Front-loaded with the core action and appropriately short for a zero-parameter tool. The single dense sentence packs several distinct facts (key types, verification use, matching rule, no auth), which is efficient though slightly overloaded.

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

Completeness4/5

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

With an output schema present, return structure needn't be explained, yet the description still adds the key-identity semantics that the schema alone wouldn't convey. Nothing needed to invoke the tool correctly is missing; only optional context like key rotation cadence is absent.

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

Parameters4/5

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

Zero parameters, so baseline is 4. The description's mention of kid/pqKid is about the response payload, not inputs, and the empty schema needs no compensation.

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

Purpose5/5

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

States a specific verb and resource ('Get InsumerAPI's public signing keys as a JWKS') and enumerates the key types returned (ECDSA P-256, ML-DSA-65 AKP). It is unmistakably distinct from the attest/trust/compliance siblings, which all consume these keys rather than fetch them.

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

Usage Guidelines4/5

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

Gives clear context for use: 'Signatures on attestation and trust responses verify against these keys,' implying this is the verification prerequisite. However, it never explicitly names alternatives or states when-not to call it, so it stops short of the explicit routing a 5 requires.

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

insumer_list_merchantsList merchantsA
Read-onlyIdempotent
Inspect

Browse merchants in the public directory. Filter by accepted token, verification status. Returns company name, website, tokens accepted, and discount info.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoResults per page (default 50, max 200)
tokenNoFilter by accepted token symbol, e.g. 'UNI'
offsetNoPagination offset (default 0)
verifiedNoFilter by domain verification status

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and non-destructive, so safety is covered. The description adds that the directory is public (no auth implied) and enumerates return fields, but the field list largely duplicates the output schema and no pagination or rate-limit behavior is disclosed.

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

Conciseness4/5

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

Three short, front-loaded sentences with no filler. The final sentence enumerating return fields is mildly redundant given the output schema, but the structure remains tight and easy to scan.

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

Completeness4/5

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

With a full output schema, rich annotations, and 100% parameter coverage, the description only needs to frame purpose and filters, which it does. It is nearly complete; the only gap is any guidance on result-set size or when to prefer the singular get_merchant tool.

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 schema fully documents limit, offset, token, and verified. The description restates the token and verification filters without adding format or syntax beyond the schema, which is the baseline when the schema does the heavy lifting.

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?

States a specific verb (browse/list) and resource (merchants in the public directory), which cleanly separates it from the singular insumer_get_merchant. However, it never explicitly names the sibling or the listing-vs-single distinction, so differentiation is left to inference.

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?

Usage is only implied: 'Browse merchants in the public directory' suggests a directory-scan use case, and the filters hint at narrowing results. There is no explicit statement of when to choose this over insumer_get_merchant or insumer_list_tokens, and no exclusions.

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

insumer_list_tokensList registered tokensB
Read-onlyIdempotent
Inspect

List all registered tokens and NFT collections in the Insumer registry. Filter by chain, symbol, or asset type.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by asset type
chainNoFilter by chain ID
symbolNoFilter by token symbol

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds the registry scope (tokens + NFT collections) but says nothing about pagination, result limits, or ordering for a potentially large registry listing.

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

Conciseness5/5

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

Two sentences, zero filler, with the core purpose front-loaded and the filtering capability trailing. Every clause earns its place.

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

Completeness4/5

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

An output schema exists, so the description needn't explain return values, and annotations cover the safety profile. For a simple zero-required-parameter list tool the description is nearly sufficient, with only pagination/result-size behavior left unstated.

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 all three filters (type, chain, symbol) are already documented in the schema including the enum values and chain IDs. The description's mention of the same three filters adds no syntax, defaults, or combination semantics beyond the structured fields.

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?

States a specific verb and resource — 'List all registered tokens and NFT collections in the Insumer registry' — which is unambiguous and matches the title. It doesn't need to differentiate against siblings since none of the other Insumer tools list tokens, but it also makes no explicit contrast, so it stops short of a 5.

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

Usage Guidelines2/5

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

The only usage-shaped text is 'Filter by chain, symbol, or asset type,' which describes the parameters rather than when to reach for this tool. There is no statement of prerequisites, when-not-to-use, or alternatives among the nine sibling tools.

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

insumer_merchant_statusGet merchant status (owner)A
Read-onlyIdempotent
Inspect

Get full private merchant details: credits, token configs, NFT collections, directory status, verification status, payment settings. Owner only.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMerchant ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description adds two things annotations cannot convey: that the returned data is the private/full view and that an owner-level authorization check applies. No error or rate-limit behavior is described, but the auth disclosure is genuinely useful.

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

Conciseness4/5

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

A single front-loaded sentence; the verb and access constraint are positioned clearly. The enumerated field list is a bit dense, but it earns its place by telling the agent what the private payload exposes.

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

Completeness4/5

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

An output schema exists, so return-value documentation is not needed, and annotations cover the safety profile. The description supplies the missing scope and ownership context; only failure/unauthorized behavior is left unstated, which is a minor gap.

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?

Only one parameter (id), and the schema describes it at 100% coverage with pattern and length constraints. The description adds no syntax or format detail beyond the schema, so the baseline of 3 for high schema coverage applies.

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

Purpose5/5

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

States a specific verb (Get) and resource (private merchant details) and enumerates exactly what the payload contains: credits, token configs, NFT collections, directory/verification status, payment settings. The 'private' qualifier plus 'Owner only' implicitly separates it from the public-facing merchant reads in the sibling list.

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?

'Owner only' is a real access precondition, but the description never says when to prefer this over insumer_get_merchant or insumer_list_merchants, nor what to do when the caller is not the owner. Usage is only implied by the ownership constraint.

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

insumer_publish_directoryPublish directory listingA
Idempotent
Inspect

Publish or refresh the merchant's listing in the public directory from its current tokens and settings. Owner only.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMerchant ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare write (readOnlyHint=false), idempotent, non-destructive, and open-world. The description adds the meaningful extra context that the caller must be the owner and that publication is public-facing and republished from existing state rather than ad-hoc input. It stops short of noting failure modes (e.g., what blocks publication).

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

Conciseness5/5

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

Two sentences, zero filler; the action and scope come first and the authorization constraint is appended compactly at the end.

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

Completeness4/5

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

With only one parameter, full schema coverage, an existing output schema, and annotations covering the safety/idempotency profile, the description covers what an agent needs. Minor gaps remain around prerequisites and what a failed publish looks like.

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 coverage is 100% and the single `id` parameter is fully documented as the merchant ID with a pattern and length bound. The description adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb pair (publish/refresh), the exact resource (merchant's listing in the public directory), and the data source (current tokens and settings). No sibling tool touches directory publication, so the agent can immediately distinguish it from configure_tokens, configure_settings, or verify_domain.

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?

"Owner only" gives a clear permission gate, and "refresh ... from its current tokens and settings" implies the tool should follow configuration steps. However, it never explicitly says when to call it versus alternatives such as re-running configure_tokens, nor states prerequisites (e.g., verified domain) as an exclusion condition.

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

insumer_request_domain_verificationRequest domain verificationAInspect

Request a domain verification token for a merchant. Returns the token and three ways to place it: DNS TXT record, HTML meta tag, or file upload. Verified merchants get a trust badge in the public directory. Owner only.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMerchant ID
domainYesDomain to verify (e.g. 'example.com')

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=false, destructive=false, and openWorld=true, so the safety profile is covered. The description adds useful context beyond that: what the call returns (token + three placement mechanisms), the auth constraint ('Owner only'), and the downstream benefit (trust badge in the public directory). It does not mention rate limits or token expiry.

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

Conciseness5/5

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

Three tight sentences: what is requested, what comes back, and the permission gate. Front-loaded with the core action and no redundant filler.

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

Completeness5/5

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 restated (though the description helpfully summarizes them). With annotations covering the mutation/safety profile and the description adding the owner-only constraint and outcome, 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.

Parameters3/5

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

Schema coverage is 100% for both parameters (id and domain), so the schema carries the semantics. The description adds no syntax, format, or constraint detail beyond what the schema already provides, which is the baseline 3 case.

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?

Specific verb+resource ('Request a domain verification token for a merchant') with concrete output detail (token plus DNS TXT, HTML meta tag, or file upload). It does not explicitly contrast with the closely related sibling insumer_verify_domain, so sibling differentiation rests largely on the tool name.

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?

The 'Owner only' note gives a prerequisite/permission gate, and the description implies the tool is a first step before verification. However, it never states when to call this versus insumer_verify_domain or what to do after placing the token, leaving workflow routing to inference.

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

insumer_setupCreate a free API keyAInspect

Generate a free-tier InsumerAPI key (insr_live_...). No credit card required. The user adds the key to their MCP config as INSUMER_API_KEY and restarts. One free key per email, with a per-IP daily limit. Free-tier allowance: https://insumermodel.com/pricing/

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesEmail address for the API key
appNameNoName of your app or project (default: 'MCP Agent')

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations covering only the safety profile (readOnlyHint false, idempotentHint false, openWorldHint true), the description supplies the substantive behavior: it is a non-idempotent one-per-email issuance, subject to a per-IP daily quota, requires no payment, and requires a config edit plus restart. Rate limits and quota constraints are disclosed, which is exactly what the annotations cannot convey.

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

Conciseness5/5

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

Five short sentences, front-loaded with what is generated and the cost, then the post-call action, constraints, and a reference link. Every sentence carries distinct information with no repetition of the title.

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

Completeness5/5

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 no explanation in prose. The description covers the remaining gaps an agent needs: cost, key format, quota limits, and the required follow-up (inject as INSUMER_API_KEY and restart). Nothing material is missing for a two-parameter setup tool.

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 email and appName are already documented in the schema. The description reinforces that email drives the one-key-per-email rule but says nothing about appName or its default, so it adds only marginal meaning. Baseline 3 applies when the schema carries the parameter load.

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?

States a specific verb and resource ('Generate a free-tier InsumerAPI key') plus the artifact format (insr_live_...), so the agent knows exactly what is produced. It implicitly separates itself from the paid sibling insumer_buy_key via 'free-tier' and 'No credit card required', but never names an alternative, so sibling differentiation is inferential rather than explicit.

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

Usage Guidelines4/5

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

Gives clear context for when this is used (agent needs a key for MCP config, then restarts) and states real constraints: one free key per email and a per-IP daily limit. It stops short of naming alternatives such as insumer_buy_key for higher allowances, so there is no explicit when-not guidance.

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

insumer_ucp_discountDiscount in UCP formatAInspect

Check token-holder discount eligibility in Google Universal Commerce Protocol (UCP) format. Returns title, extension field, and applied array compatible with UCP checkout flows. The on-chain check is the same one behind INSR discount codes, wrapped in UCP format. Consumes 1 merchant credit.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsNoOptional line items for per-item cent-amount allocations
walletNoEVM wallet address (0x...)
suiWalletNoSui wallet address (0x + 64 hex)
merchantIdYesMerchant ID
tronWalletNoTron wallet address (T-prefixed)
xrplWalletNoXRPL wallet address (r-address)
solanaWalletNoSolana wallet address (base58)
stellarWalletNoStellar wallet address (G-prefixed)

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, idempotentHint=false, openWorldHint=true, and the description adds the crucial billing fact that it 'consumes 1 merchant credit,' explaining why the call is non-read-only. It also sketches the return shape (title, extension field, applied array). It stops short of stating auth requirements or whether the credit is spent on failure.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the action and format before the return shape and billing note. Every sentence adds distinct information; no repetition of the name or title.

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

Completeness4/5

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

With an output schema present, the return-value detail is bonus rather than required, and the billing note covers the main non-obvious cost of calling a non-read-only tool. A brief mention of when UCP applies vs ACP would close the remaining gap.

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% across all 8 parameters (wallet variants, items, merchantId), so the schema carries the parameter burden. The description adds nothing param-specific, so the baseline 3 applies.

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?

States a specific verb+resource ('check token-holder discount eligibility') and pins the format ('Google Universal Commerce Protocol (UCP) format'), which is the key axis distinguishing it from the sibling insumer_acp_discount. It never names that sibling directly, so an agent must infer the ACP/UCP split rather than being routed.

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?

Usage is implied by the UCP format framing, and 'the on-chain check is the same one behind INSR discount codes' hints at its relationship to the discount family. But there is no explicit when-to-use vs insumer_acp_discount, insumer_check_discount, or insumer_validate_code, and no statement of prerequisites for the checkout flow.

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

insumer_validate_codeValidate a discount codeA
Read-onlyIdempotent
Inspect

Validate an INSR-XXXXX discount code. For merchant backends during ACP/UCP checkout to confirm code validity, discount percent, and expiry. Returns valid/invalid status with reason. No authentication required, no credits consumed. Does not expose wallet or token data.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesDiscount code in INSR-XXXXX format

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the bar is lower. The description adds genuinely non-annotated context: no authentication required, no credits consumed, and an explicit data-scope guarantee ('Does not expose wallet or token data'), plus the return shape (valid/invalid with reason). This is solid added value 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.

Conciseness4/5

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

Three short sentences, front-loaded with the verb+resource and the format, followed by audience, return shape, and constraints. Slight redundancy between 'Validate an INSR-XXXXX discount code' and 'confirm code validity', but no padding overall.

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

Completeness4/5

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

For a one-parameter tool with full schema coverage, complete annotations, and an output schema, the description covers audience, cost, auth, data scope, and return shape — everything needed to call it correctly. The one unresolved item is sibling differentiation against insumer_check_discount, which is a routing concern rather than a completeness gap.

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% and the pattern '^INSR-[A-Z0-9]{5}$' fully documents the single parameter, so the baseline is 3. The description restates the INSR-XXXXX format but adds no semantics beyond what the schema already encodes (no case handling, no normalization notes).

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?

States a specific verb and resource ('Validate an INSR-XXXXX discount code') and specifies the format constraint up front. However, it never distinguishes itself from the sibling tool insumer_check_discount, which sounds functionally identical, so an agent cannot disambiguate the pair from the description alone.

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?

Provides a usage context ('For merchant backends during ACP/UCP checkout'), which implies when the tool applies. But it gives no explicit when-not guidance and, critically, no routing between this tool and the near-identical sibling insumer_check_discount, leaving the primary selection decision to inference.

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

insumer_verifyCreate a discount codeAInspect

Create a signed discount code (INSR-XXXXX, 30-minute expiry) for a wallet at a merchant. Returns tier and discount percentage, never raw balance amounts. Consumes 1 merchant credit. If the merchant has Stripe Connect, a coupon is auto-created.

ParametersJSON Schema
NameRequiredDescriptionDefault
walletNoEVM wallet address (0x...)
suiWalletNoSui wallet address (0x + 64 hex)
merchantIdYesMerchant ID
tronWalletNoTron wallet address (T-prefixed)
xrplWalletNoXRPL wallet address (r-address)
solanaWalletNoSolana wallet address (base58)
stellarWalletNoStellar wallet address (G-prefixed)

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the generic profile (not read-only, open-world, non-idempotent, non-destructive). The description adds genuinely non-obvious traits: the returned code is signed and expires in 30 minutes, the result exposes tier and discount percentage but never raw balance amounts, the call consumes one merchant credit, and a Stripe Connect merchant triggers an auto-created coupon.

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

Conciseness5/5

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

Two dense sentences, front-loaded with what is created and its format, then cost and side effect. No filler, no restating of the title, and every clause carries information an agent would otherwise have to discover empirically.

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

Completeness4/5

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

An output schema exists so return structure need not be described, and the description still covers cost, expiry, privacy of the payload and the Stripe side effect. The remaining gap is that it never clarifies the multi-chain wallet parameter choice or whether additional credits/merchant setup are prerequisites for a mutation with no idempotency guarantee.

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 each of the seven wallet parameters and merchantId is already documented in the schema, making 3 the baseline. The description adds no per-parameter meaning: it does not say that only one chain wallet is expected, nor how the wallet family is chosen, so it does not compensate for anything the schema lacks.

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?

States a specific verb and resource ('Create a signed discount code') plus the shape and lifetime of the artifact (INSR-XXXXX, 30-minute expiry), which is far more than the title alone. It does not, however, distinguish itself from closely related siblings such as insumer_check_discount, insumer_validate_code, insumer_acp_discount or insumer_ucp_discount, so the agent must infer the boundaries.

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?

It gives the operating context ('for a wallet at a merchant') and a cost signal ('consumes 1 merchant credit'), which implies usage. But there is no explicit when-to-use vs. when-not, no mention of the ACP/UCP discount alternatives, and no stated prerequisites such as having merchant credits or a configured merchant.

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

insumer_verify_domainVerify domain ownershipA
Idempotent
Inspect

Check a merchant's previously requested domain verification token. The server looks for it as a DNS TXT record, HTML meta tag, or uploaded file, and marks the domain verified when found. Rate limited to 5 attempts per hour. Owner only.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMerchant ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavioral context beyond annotations: it explains the three verification mechanisms (DNS TXT, HTML meta tag, uploaded file), the state change of marking the domain verified when found, the rate limit of 5 attempts per hour, and the owner-only access requirement.

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

Conciseness5/5

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

The description is three tightly packed sentences with no wasted words. It front-loads the core action before moving to mechanism, rate limit, and access constraints.

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

Completeness5/5

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

Given that an output schema exists, return values need not be described. The description covers the action, mechanism, side effect, rate limit, and access control, leaving no significant gaps for an agent to call this 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 coverage is 100%, and the single parameter is already documented as 'Merchant ID' in the schema. The description adds little parameter-level detail beyond implying the merchant token belongs to that ID, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb (check/verify) and resource (merchant's previously requested domain verification token), clearly distinguishing it from the sibling insumer_request_domain_verification. An agent can immediately tell this is the verification step, not the request step.

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

Usage Guidelines4/5

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

It implies usage context by referring to a 'previously requested domain verification token' and specifies 'Owner only' and a rate limit. It does not explicitly name alternatives or state when not to use it, but the workflow relationship to the request tool is clear.

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

insumer_wallet_trustWallet trust profile (signed)AInspect

Generate a signed wallet trust fact profile for an EVM wallet: a curated set of presence checks organized into dimensions (stablecoins, governance, NFTs, staking, institutional stablecoins, tokenized treasuries, stablecoin deposits, wrapped bitcoin, names). Optional Solana, XRPL, Bitcoin and Tron wallets add their own dimensions; optional Stellar and Sui wallets let rows inside existing dimensions evaluate. Rows on a chain whose wallet is not supplied stay in the signed profile with evaluated: false. Every check is held or not held, never a balance. The signed conditionSetVersion names the check list that was run; log it, never reject on it. Returns per-dimension pass/fail counts and an overall summary: no score, no opinion. Designed for AI agent-to-agent trust decisions. Costs 3 credits (6 with proof: 'merkle'). Current chain and check counts: https://insumermodel.com/llms.txt

ParametersJSON Schema
NameRequiredDescriptionDefault
proofNoSet to 'merkle' for EIP-1186 Merkle storage proofs on EVM token checks (6 credits). Rows whose balance is computed rather than stored (Aave aTokens, BUIDL) and NFT/non-EVM rows are declined with a reason; the premium is refunded whenever no proof is delivered.
walletYesEVM wallet address (0x...) to profile
suiWalletNoSui wallet address (0x + 64 hex). If provided, lets the rows on Sui evaluate. Adds no dimension.
tronWalletNoTron wallet address (T-prefixed). If provided, adds the Tron dimension.
xrplWalletNoXRPL wallet address (r-address). If provided, adds the XRPL dimension and lets the institutional row on XRPL evaluate.
solanaWalletNoSolana wallet address (base58). If provided, adds the Solana dimension and lets the institutional rows on Solana evaluate.
bitcoinWalletNoBitcoin address. If provided, adds the Bitcoin dimension (native BTC presence).
stellarWalletNoStellar wallet address (G-prefixed). If provided, lets the institutional rows on Stellar evaluate (classic trustlines). Adds no dimension.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNotrue when the API call succeeded
dataNoThe endpoint's payload: a signed attestation, trust profile, discount, merchant or token records
keysNoJWKS entries (insumer_jwks)
metaNoResponse metadata such as version and timestamp
errorNoError details when ok is false
itemsNoThe result when the endpoint returns a JSON array
messageNoA plain-text result (insumer_setup), or a message from the API

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: credit cost (3/6), that rows for absent chains persist with evaluated=false, that every check is held/not-held and never a balance, that conditionSetVersion must be logged and never used to reject, and that the response carries no score or opinion. This is exactly the kind of operational context annotations cannot express.

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

Conciseness4/5

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

Dense but front-loaded: the core purpose leads, optional-wallet semantics follow, then cost and versioning caveats. Nearly every sentence carries unique information, though the block is long enough that a reader must parse carefully.

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

Completeness5/5

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

Even though an output schema exists, the description covers signing, cost, proof degradation/refund behavior, row evaluation states, and version-logging discipline. For a multi-chain, credit-metered, signed-artifact tool there is no obvious gap an agent would need filled before calling.

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

Parameters4/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 description goes further by explaining the semantic effect of each optional wallet class (adds a dimension vs. merely lets rows evaluate) and the evaluated=false fallback for unsupplied chains, giving the agent meaning beyond the per-field schema text.

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

Purpose5/5

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

States a specific verb and resource ('Generate a signed wallet trust fact profile for an EVM wallet') with a precise scope: curated presence checks organized into named dimensions. It is clearly distinguishable from siblings like insumer_batch_wallet_trust (singular vs batch) and insumer_attest 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.

Usage Guidelines4/5

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

Gives strong context on when optional wallets matter (Solana/XRPL/Bitcoin/Tron add dimensions; Stellar/Sui only let existing rows evaluate) and notes the audience ('AI agent-to-agent trust decisions'). It does not explicitly name sibling alternatives or state when NOT to use this tool, so it stops short of a 5.

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. 27 tool updatesv1.16.0
    • Changedinsumer_acp_discount12 fields changed
      • addedInput schema / properties / items / items / properties / path / maxLength
        Added value: +200
      • addedInput schema / properties / items / maxItems
        Added value: +100
      • addedInput schema / properties / merchantId / maxLength
        Added value: +100
      • addedInput schema / properties / merchantId / minLength
        Added value: +1
      • addedInput schema / properties / merchantId / pattern
        Added value: +"^[a-zA-Z0-9_-]+$"
      • addedInput schema / properties / solanaWallet / pattern
        Added value: +"^[1-9A-HJ-NP-Za-km-z]{32,44}$"
      • addedInput schema / properties / stellarWallet
        Added value: +{
        +  "description": "Stellar wallet address (G-prefixed)",
        +  "pattern": "^G[A-Z2-7]{55}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / suiWallet
        Added value: +{
        +  "description": "Sui wallet address (0x + 64 hex)",
        +  "pattern": "^0x[0-9a-fA-F]{64}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / tronWallet
        Added value: +{
        +  "description": "Tron wallet address (T-prefixed)",
        +  "pattern": "^T[1-9A-HJ-NP-Za-km-z]{33}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / wallet / pattern
        Added value: +"^0x[0-9a-fA-F]{40}$"
      • addedInput schema / properties / xrplWallet / pattern
        Added value: +"^r[1-9A-HJ-NP-Za-km-z]{24,34}$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_attest39 fields changed
      • addedInput schema / properties / bitcoinWallet / pattern
        Added value: +"^(?:[13][1-9A-HJ-NP-Za-km-z]{25,34}|(?:bc1|BC1)[02-9ac-hj-np-zAC-HJ-NP-Z]{11,87})$"
      • addedInput schema / properties / conditions / items / properties / agentId
        Added value: +{
        +  "description": "Required for erc8004_agent. The ERC-8004 agent ID as a uint256 decimal string — the caller must supply it (the deployed Identity Registry has no wallet-to-agentId reverse lookup). Met iff the attested wallet owns the agent NFT (ownerOf) or is the registry's signature-verified agentWallet binding. Registry 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 on Base; chainId 8453 only. Honest semantics: registration is permissionless minting — the signed statement implies no vetting, no reputation, no endorsement.",
        +  "pattern": "^\\d{1,78}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / conditions / items / properties / amount
        Added value: +{
        +  "$ref": "#/properties/conditions/items/properties/threshold",
        +  "description": "For ratio_to_amount: per-request reference amount in token/display units as a decimal string (e.g. \"100\" for 100 USDC, not base units/wei). Numbers are accepted and coerced. Must be > 0."
        +}
      • addedInput schema / properties / conditions / items / properties / assetCode
        Added value: +{
        +  "description": "Stellar trustline asset code (e.g. 'USDC', 'BENJI'). Required for Stellar non-native (trustline) tokens. Use contractAddress 'native' for XLM. Ignored for other chains. Flows into conditionHash so different assets on the same issuer produce different hashes.",
        +  "pattern": "^[A-Za-z0-9]{1,12}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / conditions / items / properties / attester / $ref
        Added value: +"#/properties/wallet"
      • removedInput schema / properties / conditions / items / properties / attester / type
        Removed value: -"string"
      • changedInput schema / properties / conditions / items / properties / chainId / anyOf
        Previous value: -[
        -  {
        -    "description": "EVM chain ID",
        -    "type": "integer"
        -  },
        -  {
        -    "const": "solana",
        -    "type": "string"
        -  },
        -  {
        -    "const": "xrpl",
        -    "type": "string"
        -  },
        -  {
        -    "const": "bitcoin",
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "description": "EVM chain ID",
        +    "type": "integer"
        +  },
        +  {
        +    "const": "solana",
        +    "type": "string"
        +  },
        +  {
        +    "const": "xrpl",
        +    "type": "string"
        +  },
        +  {
        +    "const": "bitcoin",
        +    "type": "string"
        +  },
        +  {
        +    "const": "tron",
        +    "type": "string"
        +  },
        +  {
        +    "const": "stellar",
        +    "type": "string"
        +  },
        +  {
        +    "const": "sui",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / conditions / items / properties / chainId / description
        Previous value: -"Chain identifier: EVM chain ID (integer), 'solana', 'xrpl', or 'bitcoin'"New value: +"Chain identifier: EVM chain ID (integer, includes 50 for XDC), 'solana', 'xrpl', 'bitcoin', 'tron', 'stellar', or 'sui'"
      • changedInput schema / properties / conditions / items / properties / contractAddress / description
        Previous value: -"Token or NFT contract address (required for token_balance and nft_ownership)"New value: +"Token or NFT contract address (required for token_balance, nft_ownership, ratio_to_amount, and ratio_to_supply; ratio_to_supply requires an ERC-20 contract, no native). 'native' means the chain's native coin and is for token_balance and ratio_to_amount only. nft_ownership needs the NFT contract address (0x + 40 hex on EVM); 'native' with nft_ownership is rejected with a 400, so use token_balance for the native coin. On Sui, pass a coin type address::module::Name: native SUI is '0x2::sui::SUI', and 'native' is not accepted there."
      • addedInput schema / properties / conditions / items / properties / contractAddress / maxLength
        Added value: +200
      • addedInput schema / properties / conditions / items / properties / contractAddress / minLength
        Added value: +1
      • addedInput schema / properties / conditions / items / properties / contractAddress / pattern
        Added value: +"^[A-Za-z0-9:_]+$"
      • addedInput schema / properties / conditions / items / properties / currency / maxLength
        Added value: +40
      • addedInput schema / properties / conditions / items / properties / currency / pattern
        Added value: +"^[A-Za-z0-9]+$"
      • changedInput schema / properties / conditions / items / properties / decimals / description
        Previous value: -"Token decimals (default 18)"New value: +"Optional. Leave it out: the token's own decimals are always read from the chain. If sent it is only a cross-check, and a value that differs from the token's own decimals is rejected with a 400."
      • addedInput schema / properties / conditions / items / properties / delegation
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Required for erc7710_delegation. The signed ERC-7710 delegation to evaluate. Met iff ALL of: attested wallet is the delegate; declared delegator is expectedDelegator; EIP-712 signature verifies (EOA or ERC-1271); unrevoked at the anchored block; every caveat enforcer recognized; any time-window caveat currently satisfied. Recognized enforcers: timestamp (evaluated), erc20_transfer_amount, native_transfer_amount, allowed_targets, limited_calls (the last four are REPORTED as declaredLimits — redemption enforces them, the attestation does not simulate enforcement).",
        +  "properties": {
        +    "authority": {
        +      "description": "Root authority only (0xffff…ffff, 32 bytes of 0xff). Delegation chains are unsupported.",
        +      "pattern": "^0x[0-9a-fA-F]{64}$",
        +      "type": "string"
        +    },
        +    "caveats": {
        +      "description": "Caveats the principal signed (max 16). Every enforcer must be recognized or the condition fails — no override.",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "enforcer": {
        +            "description": "Caveat enforcer contract address",
        +            "pattern": "^0x[0-9a-fA-F]{40}$",
        +            "type": "string"
        +          },
        +          "terms": {
        +            "description": "ABI-encoded caveat terms (hex)",
        +            "maxLength": 20000,
        +            "pattern": "^0x[0-9a-fA-F]*$",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "enforcer",
        +          "terms"
        +        ],
        +        "type": "object"
        +      },
        +      "maxItems": 16,
        +      "type": "array"
        +    },
        +    "delegate": {
        +      "description": "Agent wallet the delegation authorizes. Must equal the attested wallet.",
        +      "pattern": "^0x[0-9a-fA-F]{40}$",
        +      "type": "string"
        +    },
        +    "delegator": {
        +      "description": "Principal address that signed the delegation. Must equal expectedDelegator.",
        +      "pattern": "^0x[0-9a-fA-F]{40}$",
        +      "type": "string"
        +    },
        +    "salt": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/properties/conditions/items/properties/agentId"
        +        },
        +        {
        +          "minimum": 0,
        +          "type": "integer"
        +        }
        +      ],
        +      "description": "Delegation salt (decimal string; numbers coerced)"
        +    },
        +    "signature": {
        +      "description": "EIP-712 signature over the delegation (hex). EOA recovery, or ERC-1271 for smart-contract principals.",
        +      "maxLength": 20000,
        +      "pattern": "^0x[0-9a-fA-F]*$",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "delegator",
        +    "delegate",
        +    "authority",
        +    "caveats",
        +    "salt",
        +    "signature"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / conditions / items / properties / delegationManager
        Added value: +{
        +  "$ref": "#/properties/wallet",
        +  "description": "Required for erc7710_delegation. DelegationManager contract the delegation was signed against — one of the recognized MetaMask Delegation Framework managers on Base (current default 0xdb9B1e94B5b69Df7e401DDbedE43491141047dB3). chainId 8453 only."
        +}
      • addedInput schema / properties / conditions / items / properties / expectedDelegator
        Added value: +{
        +  "$ref": "#/properties/wallet",
        +  "description": "Required for erc7710_delegation. The principal address the caller asserts authorized this agent. The condition fails unless the delegation's declared delegator matches — without it a self-delegation would read as authority, so there is no structural-only mode."
        +}
      • addedInput schema / properties / conditions / items / properties / indexer / $ref
        Added value: +"#/properties/wallet"
      • removedInput schema / properties / conditions / items / properties / indexer / type
        Removed value: -"string"
      • addedInput schema / properties / conditions / items / properties / minFraction
        Added value: +{
        +  "$ref": "#/properties/conditions/items/properties/threshold",
        +  "description": "For ratio_to_supply: required share of total supply, a decimal string in (0,1] (e.g. \"0.005\" for 0.5%). Met iff balance / totalSupply() >= minFraction. Numbers are accepted and coerced. For project/governance tokens, not stablecoins."
        +}
      • addedInput schema / properties / conditions / items / properties / multiple
        Added value: +{
        +  "$ref": "#/properties/conditions/items/properties/threshold",
        +  "description": "For ratio_to_amount: collateralization multiple as a decimal string (e.g. \"10\" for 'hold >= 10x the amount'). Met iff balance >= multiple * amount. Numbers are accepted and coerced. Must be > 0."
        +}
      • addedInput schema / properties / conditions / items / properties / schemaId / pattern
        Added value: +"^0x[0-9a-fA-F]{64}$"
      • addedInput schema / properties / conditions / items / properties / selector
        Added value: +{
        +  "description": "Required for evm_view_call. Canonical signature of a view function returning bool, in the form 'functionName(address)' (e.g. 'hasAccess(address)'). Single-address-argument view functions only; the 4-byte selector is derived from this signature.",
        +  "maxLength": 100,
        +  "pattern": "^[A-Za-z_][A-Za-z0-9_]*\\(address\\)$",
        +  "type": "string"
        +}
      • addedInput schema / properties / conditions / items / properties / threshold / anyOf
        Added value: +[
        +  {
        +    "maxLength": 80,
        +    "pattern": "^\\d+(\\.\\d+)?$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • changedInput schema / properties / conditions / items / properties / threshold / description
        Previous value: -"Minimum balance required (for token_balance). Must be > 0 when proof is merkle."New value: +"Minimum balance for token_balance, as a decimal string in token/display units (e.g. \"100\", not base units). Numbers are accepted and coerced to a string. Must be > 0 when proof is merkle."
      • removedInput schema / properties / conditions / items / properties / threshold / type
        Removed value: -"number"
      • changedInput schema / properties / conditions / items / properties / type / description
        Previous value: -"Condition type: token_balance, nft_ownership, eas_attestation, or farcaster_id (Farcaster IdRegistry on Optimism)"New value: +"Condition type: token_balance, nft_ownership (EVM, Solana and XRPL), eas_attestation, farcaster_id (Farcaster IdRegistry on Optimism), evm_view_call (single-address-argument view function returning bool; RPC EVM chains only), ratio_to_amount (balance >= multiple * amount; RPC EVM chains only), ratio_to_supply (balance / totalSupply >= minFraction; RPC EVM chains, ERC-20 only), erc8004_agent (registered ERC-8004 agent on Base; agentId required), or erc7710_delegation (signed MetaMask-framework delegation validity on Base; delegationManager, expectedDelegator, and delegation required; max 3 per request)"
      • changedInput schema / properties / conditions / items / properties / type / enum
        Previous value: -[
        -  "token_balance",
        -  "nft_ownership",
        -  "eas_attestation",
        -  "farcaster_id"
        -]New value: +[
        +  "token_balance",
        +  "nft_ownership",
        +  "eas_attestation",
        +  "farcaster_id",
        +  "evm_view_call",
        +  "ratio_to_amount",
        +  "ratio_to_supply",
        +  "erc8004_agent",
        +  "erc7710_delegation"
        +]
      • addedInput schema / properties / declaredLimits
        Added value: +{
        +  "description": "Set to 'omit' to leave decoded caveat limits out of the signed results of erc7710_delegation conditions, so a forwarded attestation does not carry the principal's spending ceiling. met, delegationHash, and conditionHash are byte-identical either way.",
        +  "enum": [
        +    "omit"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / format / description
        Previous value: -"Set to 'jwt' to include a Wallet Auth by InsumerAPI token (ES256-signed JWT) in the response. Verifiable by any standard JWT library using JWKS at /.well-known/jwks.json."New value: +"Set to 'jwt' to include a Wallet Auth by InsumerAPI token (ES256-signed JWT) in the response, with its ML-DSA-65 sibling pqJwt beside it. The jwt is verifiable by any standard JWT library using JWKS at /.well-known/jwks.json."
      • changedInput schema / properties / proof / description
        Previous value: -"Set to 'merkle' for EIP-1186 Merkle storage proofs (2 credits). Proofs available for token_balance on RPC chains only."New value: +"Set to 'merkle' for EIP-1186 Merkle storage proofs (2 credits). For token_balance on supported EVM chains (not ZKsync Era, Sei, Viction or XDC Network, and not on non-EVM chains); for erc7710_delegation, a storage proof of the revocation slot (subject 'delegation_revocation') on managers with an on-chain-verified layout."
      • addedInput schema / properties / solanaWallet / pattern
        Added value: +"^[1-9A-HJ-NP-Za-km-z]{32,44}$"
      • addedInput schema / properties / stellarWallet
        Added value: +{
        +  "description": "Stellar wallet address (G-prefixed). For verifying XLM or trustline assets (USDC, BENJI, etc.). Use chainId 'stellar' with the asset issuer's G-address as contractAddress and pass assetCode (e.g. 'USDC'). Soroban contract balances not visible — classic trustlines only.",
        +  "pattern": "^G[A-Z2-7]{55}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / suiWallet
        Added value: +{
        +  "description": "Sui wallet address (0x + 64 hex chars). For verifying SUI or other Sui coins (e.g. USDC). Use chainId 'sui' with the Sui coin type as contractAddress: '0x2::sui::SUI' for native SUI, or the full coin type address::module::Name for other coins. The string 'native' is not accepted on Sui.",
        +  "pattern": "^0x[0-9a-fA-F]{64}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / tronWallet
        Added value: +{
        +  "description": "Tron wallet address (T-prefixed, base58). For verifying TRX or TRC20 tokens (USDT-TRC20). Use chainId 'tron'.",
        +  "pattern": "^T[1-9A-HJ-NP-Za-km-z]{33}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / wallet / pattern
        Added value: +"^0x[0-9a-fA-F]{40}$"
      • addedInput schema / properties / xrplWallet / pattern
        Added value: +"^r[1-9A-HJ-NP-Za-km-z]{24,34}$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_batch_wallet_trust11 fields changed
      • changedInput schema / properties / wallets / items / properties / bitcoinWallet / description
        Previous value: -"Bitcoin address. Adds Bitcoin Holdings dimension."New value: +"Bitcoin address. Adds the Bitcoin dimension."
      • addedInput schema / properties / wallets / items / properties / bitcoinWallet / pattern
        Added value: +"^(?:[13][1-9A-HJ-NP-Za-km-z]{25,34}|(?:bc1|BC1)[02-9ac-hj-np-zAC-HJ-NP-Z]{11,87})$"
      • changedInput schema / properties / wallets / items / properties / solanaWallet / description
        Previous value: -"Solana wallet address (base58). Adds USDC on Solana check."New value: +"Solana wallet address (base58). Adds the Solana dimension."
      • addedInput schema / properties / wallets / items / properties / solanaWallet / pattern
        Added value: +"^[1-9A-HJ-NP-Za-km-z]{32,44}$"
      • addedInput schema / properties / wallets / items / properties / stellarWallet
        Added value: +{
        +  "description": "Stellar wallet address (G-prefixed). Lets the rows on Stellar evaluate; adds no dimension.",
        +  "pattern": "^G[A-Z2-7]{55}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / wallets / items / properties / suiWallet
        Added value: +{
        +  "description": "Sui wallet address (0x + 64 hex). Lets the rows on Sui evaluate; adds no dimension.",
        +  "pattern": "^0x[0-9a-fA-F]{64}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / wallets / items / properties / tronWallet
        Added value: +{
        +  "description": "Tron wallet address (T-prefixed). Adds the Tron dimension.",
        +  "pattern": "^T[1-9A-HJ-NP-Za-km-z]{33}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / wallets / items / properties / wallet / pattern
        Added value: +"^0x[0-9a-fA-F]{40}$"
      • changedInput schema / properties / wallets / items / properties / xrplWallet / description
        Previous value: -"XRPL wallet address (r-address). Adds RLUSD and USDC on XRPL checks."New value: +"XRPL wallet address (r-address). Adds the XRPL dimension."
      • addedInput schema / properties / wallets / items / properties / xrplWallet / pattern
        Added value: +"^r[1-9A-HJ-NP-Za-km-z]{24,34}$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_buy_credits6 fields changed
      • changedInput schema / properties / chainId / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "1",
        -      "8453",
        -      "137",
        -      "42161",
        -      "10",
        -      "56",
        -      "43114"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "const": "solana",
        -    "type": "string"
        -  },
        -  {
        -    "const": "bitcoin",
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "1",
        +      "8453",
        +      "137",
        +      "42161",
        +      "10",
        +      "56",
        +      "43114"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "const": "solana",
        +    "type": "string"
        +  },
        +  {
        +    "const": "bitcoin",
        +    "type": "string"
        +  },
        +  {
        +    "const": "tron",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / chainId / description
        Previous value: -"Payment chain: 1, 8453, 137, 42161, 10, 56, 43114, 'solana', or 'bitcoin'. EVM/Solana accept USDC and USDT (auto-detected). Bitcoin accepts BTC (converted to USD at market rate)."New value: +"Payment chain: 1, 8453, 137, 42161, 10, 56, 43114, 'solana', 'bitcoin', or 'tron'. EVM/Solana accept USDC and USDT (auto-detected). Bitcoin accepts BTC (converted to USD at market rate). Tron accepts USDT-TRC20."
      • addedInput schema / properties / txHash / maxLength
        Added value: +100
      • addedInput schema / properties / txHash / pattern
        Added value: +"^(?:0x[0-9a-fA-F]{64}|[0-9a-fA-F]{64}|[1-9A-HJ-NP-Za-km-z]{43,90})$"
      • changedInput schema / properties / updateWallet / description
        Previous value: -"Set true to update the registered sender wallet to this transaction's sender"New value: +"Set true to replace the registered sender wallet with this transaction's sender"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_buy_key5 fields changed
      • changedInput schema / properties / chainId / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "1",
        -      "8453",
        -      "137",
        -      "42161",
        -      "10",
        -      "56",
        -      "43114"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "const": "solana",
        -    "type": "string"
        -  },
        -  {
        -    "const": "bitcoin",
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "1",
        +      "8453",
        +      "137",
        +      "42161",
        +      "10",
        +      "56",
        +      "43114"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "const": "solana",
        +    "type": "string"
        +  },
        +  {
        +    "const": "bitcoin",
        +    "type": "string"
        +  },
        +  {
        +    "const": "tron",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / chainId / description
        Previous value: -"Payment chain: 1, 8453, 137, 42161, 10, 56, 43114, 'solana', or 'bitcoin'. EVM/Solana accept USDC and USDT (auto-detected). Bitcoin accepts BTC (converted to USD at market rate)."New value: +"Payment chain: 1, 8453, 137, 42161, 10, 56, 43114, 'solana', 'bitcoin', or 'tron'. EVM/Solana accept USDC and USDT (auto-detected). Bitcoin accepts BTC (converted to USD at market rate). Tron accepts USDT-TRC20."
      • addedInput schema / properties / txHash / maxLength
        Added value: +100
      • addedInput schema / properties / txHash / pattern
        Added value: +"^(?:0x[0-9a-fA-F]{64}|[0-9a-fA-F]{64}|[1-9A-HJ-NP-Za-km-z]{43,90})$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_buy_merchant_credits9 fields changed
      • changedInput schema / properties / chainId / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "1",
        -      "8453",
        -      "137",
        -      "42161",
        -      "10",
        -      "56",
        -      "43114"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "const": "solana",
        -    "type": "string"
        -  },
        -  {
        -    "const": "bitcoin",
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "1",
        +      "8453",
        +      "137",
        +      "42161",
        +      "10",
        +      "56",
        +      "43114"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "const": "solana",
        +    "type": "string"
        +  },
        +  {
        +    "const": "bitcoin",
        +    "type": "string"
        +  },
        +  {
        +    "const": "tron",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / chainId / description
        Previous value: -"Payment chain: 1, 8453, 137, 42161, 10, 56, 43114, 'solana', or 'bitcoin'. EVM/Solana accept USDC and USDT (auto-detected). Bitcoin accepts BTC (converted to USD at market rate)."New value: +"Payment chain: 1, 8453, 137, 42161, 10, 56, 43114, 'solana', 'bitcoin', or 'tron'. EVM/Solana accept USDC and USDT (auto-detected). Bitcoin accepts BTC (converted to USD at market rate). Tron accepts USDT-TRC20."
      • addedInput schema / properties / id / maxLength
        Added value: +100
      • addedInput schema / properties / id / minLength
        Added value: +1
      • addedInput schema / properties / id / pattern
        Added value: +"^[a-zA-Z0-9_-]+$"
      • addedInput schema / properties / txHash / maxLength
        Added value: +100
      • addedInput schema / properties / txHash / pattern
        Added value: +"^(?:0x[0-9a-fA-F]{64}|[0-9a-fA-F]{64}|[1-9A-HJ-NP-Za-km-z]{43,90})$"
      • changedInput schema / properties / updateWallet / description
        Previous value: -"Set true to update the registered sender wallet"New value: +"Set true to replace the registered sender wallet"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_check_discount10 fields changed
      • addedInput schema / properties / merchant / maxLength
        Added value: +100
      • addedInput schema / properties / merchant / minLength
        Added value: +1
      • addedInput schema / properties / merchant / pattern
        Added value: +"^[a-zA-Z0-9_-]+$"
      • addedInput schema / properties / solanaWallet / pattern
        Added value: +"^[1-9A-HJ-NP-Za-km-z]{32,44}$"
      • addedInput schema / properties / stellarWallet
        Added value: +{
        +  "description": "Stellar wallet address (G-prefixed)",
        +  "pattern": "^G[A-Z2-7]{55}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / suiWallet
        Added value: +{
        +  "description": "Sui wallet address (0x + 64 hex)",
        +  "pattern": "^0x[0-9a-fA-F]{64}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / tronWallet
        Added value: +{
        +  "description": "Tron wallet address (T-prefixed)",
        +  "pattern": "^T[1-9A-HJ-NP-Za-km-z]{33}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / wallet / pattern
        Added value: +"^0x[0-9a-fA-F]{40}$"
      • addedInput schema / properties / xrplWallet / pattern
        Added value: +"^r[1-9A-HJ-NP-Za-km-z]{24,34}$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_compliance_templates1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_configure_nfts9 fields changed
      • addedInput schema / properties / id / maxLength
        Added value: +100
      • addedInput schema / properties / id / minLength
        Added value: +1
      • addedInput schema / properties / id / pattern
        Added value: +"^[a-zA-Z0-9_-]+$"
      • changedInput schema / properties / nftCollections / items / properties / chainId / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "1",
        -      "56",
        -      "8453",
        -      "43114",
        -      "137",
        -      "42161",
        -      "10",
        -      "88888",
        -      "1868",
        -      "98866",
        -      "480",
        -      "146",
        -      "100",
        -      "5000",
        -      "534352",
        -      "59144",
        -      "324",
        -      "81457",
        -      "42220",
        -      "1284",
        -      "204",
        -      "130",
        -      "57073",
        -      "1329",
        -      "80094",
        -      "33139",
        -      "167000",
        -      "2020",
        -      "1285",
        -      "88"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "const": "solana",
        -    "type": "string"
        -  },
        -  {
        -    "const": "xrpl",
        -    "type": "string"
        -  },
        -  {
        -    "const": "bitcoin",
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "1",
        +      "50",
        +      "56",
        +      "8453",
        +      "43114",
        +      "137",
        +      "42161",
        +      "10",
        +      "88888",
        +      "1868",
        +      "98866",
        +      "480",
        +      "146",
        +      "100",
        +      "5000",
        +      "534352",
        +      "59144",
        +      "324",
        +      "81457",
        +      "42220",
        +      "204",
        +      "130",
        +      "57073",
        +      "1329",
        +      "80094",
        +      "33139",
        +      "4663",
        +      "167000",
        +      "2020",
        +      "88",
        +      "5042"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "const": "solana",
        +    "type": "string"
        +  },
        +  {
        +    "const": "xrpl",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / nftCollections / items / properties / chainId / description
        Previous value: -"Onboarding chain: any supported EVM chain ID (1, 56, 8453, 43114, 137, 42161, 10, 146, 100, 5000, 534352, 59144, 324, 81457, 42220, 1284, 204, 130, 57073, 1329, 80094, 33139, 88888, 1868, 98866, 480, 167000, 2020, 1285, 88), 'solana', 'xrpl', or 'bitcoin'"New value: +"Merchant onboarding chain: one of the EVM chain IDs listed in this schema, 'solana', or 'xrpl'. Merchant token and NFT configs are not available on Bitcoin, Tron, Stellar or Sui."
      • addedInput schema / properties / nftCollections / items / properties / contractAddress / maxLength
        Added value: +200
      • addedInput schema / properties / nftCollections / items / properties / contractAddress / minLength
        Added value: +1
      • addedInput schema / properties / nftCollections / items / properties / contractAddress / pattern
        Added value: +"^[A-Za-z0-9:_]+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_configure_settings5 fields changed
      • addedInput schema / properties / id / maxLength
        Added value: +100
      • addedInput schema / properties / id / minLength
        Added value: +1
      • addedInput schema / properties / id / pattern
        Added value: +"^[a-zA-Z0-9_-]+$"
      • changedInput schema / properties / usdcPayment / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "enabled": {
        -        "description": "Enable or disable USDC payments",
        -        "type": "boolean"
        -      },
        -      "evmAddress": {
        -        "description": "EVM wallet for USDC (0x...)",
        -        "type": "string"
        -      },
        -      "preferredChainId": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "1",
        -              "8453",
        -              "137",
        -              "42161",
        -              "10",
        -              "56",
        -              "43114"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "const": "solana",
        -            "type": "string"
        -          }
        -        ],
        -        "description": "Preferred USDC chain"
        -      },
        -      "solanaAddress": {
        -        "description": "Solana wallet for USDC",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "enabled"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "enabled": {
        +        "description": "Enable or disable USDC payments",
        +        "type": "boolean"
        +      },
        +      "evmAddress": {
        +        "description": "EVM wallet for USDC (0x...)",
        +        "pattern": "^0x[0-9a-fA-F]{40}$",
        +        "type": "string"
        +      },
        +      "preferredChainId": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "1",
        +              "8453",
        +              "137",
        +              "42161",
        +              "10",
        +              "56",
        +              "43114"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "const": "solana",
        +            "type": "string"
        +          },
        +          {
        +            "const": "tron",
        +            "type": "string"
        +          }
        +        ],
        +        "description": "Preferred USDC chain"
        +      },
        +      "solanaAddress": {
        +        "description": "Solana wallet for USDC",
        +        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "enabled"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_configure_tokens6 fields changed
      • addedInput schema / properties / id / maxLength
        Added value: +100
      • addedInput schema / properties / id / minLength
        Added value: +1
      • addedInput schema / properties / id / pattern
        Added value: +"^[a-zA-Z0-9_-]+$"
      • changedInput schema / properties / ownToken / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "chainId": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "1",
        -              "56",
        -              "8453",
        -              "43114",
        -              "137",
        -              "42161",
        -              "10",
        -              "88888",
        -              "1868",
        -              "98866",
        -              "480",
        -              "146",
        -              "100",
        -              "5000",
        -              "534352",
        -              "59144",
        -              "324",
        -              "81457",
        -              "42220",
        -              "1284",
        -              "204",
        -              "130",
        -              "57073",
        -              "1329",
        -              "80094",
        -              "33139",
        -              "167000",
        -              "2020",
        -              "1285",
        -              "88"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "const": "solana",
        -            "type": "string"
        -          },
        -          {
        -            "const": "xrpl",
        -            "type": "string"
        -          },
        -          {
        -            "const": "bitcoin",
        -            "type": "string"
        -          }
        -        ],
        -        "description": "Onboarding chain: any supported EVM chain ID (1, 56, 8453, 43114, 137, 42161, 10, 146, 100, 5000, 534352, 59144, 324, 81457, 42220, 1284, 204, 130, 57073, 1329, 80094, 33139, 88888, 1868, 98866, 480, 167000, 2020, 1285, 88), 'solana', 'xrpl', or 'bitcoin'"
        -      },
        -      "contractAddress": {
        -        "description": "Token contract address. For XRPL: use r-address issuer for trust line tokens, or 'native' for XRP.",
        -        "type": "string"
        -      },
        -      "currency": {
        -        "description": "XRPL trust line currency code (e.g. 'RLUSD', 'USDC', or 'USD'). Required for XRPL trust line tokens. Standard codes ≤ 3 chars; longer names like 'RLUSD' are auto hex-encoded by the API.",
        -        "type": "string"
        -      },
        -      "decimals": {
        -        "description": "Token decimals (0-18, default 18)",
        -        "maximum": 18,
        -        "minimum": 0,
        -        "type": "integer"
        -      },
        -      "symbol": {
        -        "description": "Token symbol, e.g. 'UNI'",
        -        "maxLength": 10,
        -        "type": "string"
        -      },
        -      "tiers": {
        -        "description": "1-4 discount tiers",
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "discount": {
        -              "description": "Discount percentage (1-50)",
        -              "maximum": 50,
        -              "minimum": 1,
        -              "type": "integer"
        -            },
        -            "name": {
        -              "description": "Tier name, e.g. 'Gold', 'Silver'",
        -              "maxLength": 30,
        -              "type": "string"
        -            },
        -            "threshold": {
        -              "description": "Minimum token balance for this tier",
        -              "exclusiveMinimum": 0,
        -              "type": "number"
        -            }
        -          },
        -          "required": [
        -            "name",
        -            "threshold",
        -            "discount"
        -          ],
        -          "type": "object"
        -        },
        -        "maxItems": 4,
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "symbol",
        -      "chainId",
        -      "contractAddress",
        -      "tiers"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "chainId": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "1",
        +              "50",
        +              "56",
        +              "8453",
        +              "43114",
        +              "137",
        +              "42161",
        +              "10",
        +              "88888",
        +              "1868",
        +              "98866",
        +              "480",
        +              "146",
        +              "100",
        +              "5000",
        +              "534352",
        +              "59144",
        +              "324",
        +              "81457",
        +              "42220",
        +              "204",
        +              "130",
        +              "57073",
        +              "1329",
        +              "80094",
        +              "33139",
        +              "4663",
        +              "167000",
        +              "2020",
        +              "88",
        +              "5042"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "const": "solana",
        +            "type": "string"
        +          },
        +          {
        +            "const": "xrpl",
        +            "type": "string"
        +          }
        +        ],
        +        "description": "Merchant onboarding chain: one of the EVM chain IDs listed in this schema, 'solana', or 'xrpl'. Merchant token and NFT configs are not available on Bitcoin, Tron, Stellar or Sui."
        +      },
        +      "contractAddress": {
        +        "description": "Token contract address. For XRPL: use r-address issuer for trust line tokens, or 'native' for XRP.",
        +        "maxLength": 200,
        +        "minLength": 1,
        +        "pattern": "^[A-Za-z0-9:_]+$",
        +        "type": "string"
        +      },
        +      "currency": {
        +        "description": "XRPL trust line currency code (e.g. 'RLUSD', 'USDC', or 'USD'). Required for XRPL trust line tokens. Standard codes ≤ 3 chars; longer names like 'RLUSD' are auto hex-encoded by the API.",
        +        "maxLength": 40,
        +        "pattern": "^[A-Za-z0-9]+$",
        +        "type": "string"
        +      },
        +      "decimals": {
        +        "description": "Token decimals (0-18). Required: the merchant registry stores it with each token and rejects a config without it. 6 for USDC, 18 for most ERC-20s.",
        +        "maximum": 18,
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      "symbol": {
        +        "description": "Token symbol, e.g. 'UNI'",
        +        "maxLength": 10,
        +        "type": "string"
        +      },
        +      "tiers": {
        +        "description": "1-4 discount tiers",
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "discount": {
        +              "description": "Discount percentage (1-50)",
        +              "maximum": 50,
        +              "minimum": 1,
        +              "type": "integer"
        +            },
        +            "name": {
        +              "description": "Tier name, e.g. 'Gold', 'Silver'",
        +              "maxLength": 30,
        +              "type": "string"
        +            },
        +            "threshold": {
        +              "description": "Minimum token balance for this tier",
        +              "exclusiveMinimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "name",
        +            "threshold",
        +            "discount"
        +          ],
        +          "type": "object"
        +        },
        +        "maxItems": 4,
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "symbol",
        +      "chainId",
        +      "contractAddress",
        +      "decimals",
        +      "tiers"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / partnerTokens / maxItems
        Added value: +8
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_confirm_payment9 fields changed
      • addedInput schema / properties / amount / anyOf
        Added value: +[
        +  {
        +    "maxLength": 80,
        +    "pattern": "^\\d+(\\.\\d+)?$",
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / amount / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • changedInput schema / properties / chainId / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "1",
        -      "8453",
        -      "137",
        -      "42161",
        -      "10",
        -      "56",
        -      "43114"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "const": "solana",
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "1",
        +      "8453",
        +      "137",
        +      "42161",
        +      "10",
        +      "56",
        +      "43114"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "const": "solana",
        +    "type": "string"
        +  },
        +  {
        +    "const": "tron",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / chainId / description
        Previous value: -"Payment chain: EVM chain ID (1, 8453, 137, 42161, 10, 56, 43114) or 'solana'"New value: +"Payment chain: EVM chain ID (1, 8453, 137, 42161, 10, 56, 43114), 'solana', or 'tron'"
      • changedInput schema / properties / code / description
        Previous value: -"Verification code from insumer_verify (e.g. INSR-A7K3M)"New value: +"Discount code (e.g. INSR-A7K3M)"
      • addedInput schema / properties / code / pattern
        Added value: +"^INSR-[A-Z0-9]{5}$"
      • addedInput schema / properties / txHash / maxLength
        Added value: +100
      • addedInput schema / properties / txHash / pattern
        Added value: +"^(?:0x[0-9a-fA-F]{64}|[0-9a-fA-F]{64}|[1-9A-HJ-NP-Za-km-z]{43,90})$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_create_merchant1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_credits1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_get_merchant4 fields changed
      • addedInput schema / properties / id / maxLength
        Added value: +100
      • addedInput schema / properties / id / minLength
        Added value: +1
      • addedInput schema / properties / id / pattern
        Added value: +"^[a-zA-Z0-9_-]+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_jwks1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_list_merchants2 fields changed
      • addedInput schema / properties / token / maxLength
        Added value: +32
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_list_tokens2 fields changed
      • addedInput schema / properties / symbol / maxLength
        Added value: +32
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_merchant_status4 fields changed
      • addedInput schema / properties / id / maxLength
        Added value: +100
      • addedInput schema / properties / id / minLength
        Added value: +1
      • addedInput schema / properties / id / pattern
        Added value: +"^[a-zA-Z0-9_-]+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_publish_directory4 fields changed
      • addedInput schema / properties / id / maxLength
        Added value: +100
      • addedInput schema / properties / id / minLength
        Added value: +1
      • addedInput schema / properties / id / pattern
        Added value: +"^[a-zA-Z0-9_-]+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_request_domain_verification6 fields changed
      • addedInput schema / properties / domain / maxLength
        Added value: +253
      • addedInput schema / properties / domain / pattern
        Added value: +"^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+(?:[A-Za-z]{2,63}|xn--[A-Za-z0-9-]{1,59})$"
      • addedInput schema / properties / id / maxLength
        Added value: +100
      • addedInput schema / properties / id / minLength
        Added value: +1
      • addedInput schema / properties / id / pattern
        Added value: +"^[a-zA-Z0-9_-]+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_setup2 fields changed
      • addedInput schema / properties / email / maxLength
        Added value: +254
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_ucp_discount12 fields changed
      • addedInput schema / properties / items / items / properties / path / maxLength
        Added value: +200
      • addedInput schema / properties / items / maxItems
        Added value: +100
      • addedInput schema / properties / merchantId / maxLength
        Added value: +100
      • addedInput schema / properties / merchantId / minLength
        Added value: +1
      • addedInput schema / properties / merchantId / pattern
        Added value: +"^[a-zA-Z0-9_-]+$"
      • addedInput schema / properties / solanaWallet / pattern
        Added value: +"^[1-9A-HJ-NP-Za-km-z]{32,44}$"
      • addedInput schema / properties / stellarWallet
        Added value: +{
        +  "description": "Stellar wallet address (G-prefixed)",
        +  "pattern": "^G[A-Z2-7]{55}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / suiWallet
        Added value: +{
        +  "description": "Sui wallet address (0x + 64 hex)",
        +  "pattern": "^0x[0-9a-fA-F]{64}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / tronWallet
        Added value: +{
        +  "description": "Tron wallet address (T-prefixed)",
        +  "pattern": "^T[1-9A-HJ-NP-Za-km-z]{33}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / wallet / pattern
        Added value: +"^0x[0-9a-fA-F]{40}$"
      • addedInput schema / properties / xrplWallet / pattern
        Added value: +"^r[1-9A-HJ-NP-Za-km-z]{24,34}$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_validate_code1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_verify10 fields changed
      • addedInput schema / properties / merchantId / maxLength
        Added value: +100
      • addedInput schema / properties / merchantId / minLength
        Added value: +1
      • addedInput schema / properties / merchantId / pattern
        Added value: +"^[a-zA-Z0-9_-]+$"
      • addedInput schema / properties / solanaWallet / pattern
        Added value: +"^[1-9A-HJ-NP-Za-km-z]{32,44}$"
      • addedInput schema / properties / stellarWallet
        Added value: +{
        +  "description": "Stellar wallet address (G-prefixed)",
        +  "pattern": "^G[A-Z2-7]{55}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / suiWallet
        Added value: +{
        +  "description": "Sui wallet address (0x + 64 hex)",
        +  "pattern": "^0x[0-9a-fA-F]{64}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / tronWallet
        Added value: +{
        +  "description": "Tron wallet address (T-prefixed)",
        +  "pattern": "^T[1-9A-HJ-NP-Za-km-z]{33}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / wallet / pattern
        Added value: +"^0x[0-9a-fA-F]{40}$"
      • addedInput schema / properties / xrplWallet / pattern
        Added value: +"^r[1-9A-HJ-NP-Za-km-z]{24,34}$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_verify_domain4 fields changed
      • addedInput schema / properties / id / maxLength
        Added value: +100
      • addedInput schema / properties / id / minLength
        Added value: +1
      • addedInput schema / properties / id / pattern
        Added value: +"^[a-zA-Z0-9_-]+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedinsumer_wallet_trust12 fields changed
      • changedInput schema / properties / bitcoinWallet / description
        Previous value: -"Bitcoin address. If provided, adds Bitcoin Holdings dimension (native BTC balance check)."New value: +"Bitcoin address. If provided, adds the Bitcoin dimension (native BTC presence)."
      • addedInput schema / properties / bitcoinWallet / pattern
        Added value: +"^(?:[13][1-9A-HJ-NP-Za-km-z]{25,34}|(?:bc1|BC1)[02-9ac-hj-np-zAC-HJ-NP-Z]{11,87})$"
      • changedInput schema / properties / proof / description
        Previous value: -"Set to 'merkle' for EIP-1186 Merkle storage proofs on stablecoin/governance checks (6 credits)."New value: +"Set to 'merkle' for EIP-1186 Merkle storage proofs on EVM token checks (6 credits). Rows whose balance is computed rather than stored (Aave aTokens, BUIDL) and NFT/non-EVM rows are declined with a reason; the premium is refunded whenever no proof is delivered."
      • changedInput schema / properties / solanaWallet / description
        Previous value: -"Solana wallet address (base58). If provided, adds USDC on Solana check."New value: +"Solana wallet address (base58). If provided, adds the Solana dimension and lets the institutional rows on Solana evaluate."
      • addedInput schema / properties / solanaWallet / pattern
        Added value: +"^[1-9A-HJ-NP-Za-km-z]{32,44}$"
      • addedInput schema / properties / stellarWallet
        Added value: +{
        +  "description": "Stellar wallet address (G-prefixed). If provided, lets the institutional rows on Stellar evaluate (classic trustlines). Adds no dimension.",
        +  "pattern": "^G[A-Z2-7]{55}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / suiWallet
        Added value: +{
        +  "description": "Sui wallet address (0x + 64 hex). If provided, lets the rows on Sui evaluate. Adds no dimension.",
        +  "pattern": "^0x[0-9a-fA-F]{64}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / tronWallet
        Added value: +{
        +  "description": "Tron wallet address (T-prefixed). If provided, adds the Tron dimension.",
        +  "pattern": "^T[1-9A-HJ-NP-Za-km-z]{33}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / wallet / pattern
        Added value: +"^0x[0-9a-fA-F]{40}$"
      • changedInput schema / properties / xrplWallet / description
        Previous value: -"XRPL wallet address (r-address). If provided, adds RLUSD and USDC on XRPL checks."New value: +"XRPL wallet address (r-address). If provided, adds the XRPL dimension and lets the institutional row on XRPL evaluate."
      • addedInput schema / properties / xrplWallet / pattern
        Added value: +"^r[1-9A-HJ-NP-Za-km-z]{24,34}$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "data": {
        +      "description": "The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records"
        +    },
        +    "error": {
        +      "description": "Error details when ok is false"
        +    },
        +    "items": {
        +      "description": "The result when the endpoint returns a JSON array",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "keys": {
        +      "description": "JWKS entries (insumer_jwks)",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "message": {
        +      "description": "A plain-text result (insumer_setup), or a message from the API"
        +    },
        +    "meta": {
        +      "description": "Response metadata such as version and timestamp"
        +    },
        +    "ok": {
        +      "description": "true when the API call succeeded",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
  2. 27 tool updatesv0.1.0
    • Addedinsumer_acp_discount
    • Addedinsumer_attest
    • Addedinsumer_batch_wallet_trust
    • Addedinsumer_buy_credits
    • Addedinsumer_buy_key
    • Addedinsumer_buy_merchant_credits
    • Addedinsumer_check_discount
    • Addedinsumer_compliance_templates
    • Addedinsumer_configure_nfts
    • Addedinsumer_configure_settings
    • Addedinsumer_configure_tokens
    • Addedinsumer_confirm_payment
    • Addedinsumer_create_merchant
    • Addedinsumer_credits
    • Addedinsumer_get_merchant
    • Addedinsumer_jwks
    • Addedinsumer_list_merchants
    • Addedinsumer_list_tokens
    • Addedinsumer_merchant_status
    • Addedinsumer_publish_directory
    • Addedinsumer_request_domain_verification
    • Addedinsumer_setup
    • Addedinsumer_ucp_discount
    • Addedinsumer_validate_code
    • Addedinsumer_verify
    • Addedinsumer_verify_domain
    • Addedinsumer_wallet_trust

TDQS

A3.6/5.0

Scored across 27 tools

Disambiguation4/5

Most tools target clearly distinct workflows (attestation, wallet trust, merchant setup, discount validation, payments), and the detailed descriptions help distinguish them. Confusion points remain around insumer_verify (which creates a discount code) versus insumer_validate_code/insumer_check_discount, and around the several insumer_buy_* tools, but these are limited rather than pervasive.

Naming Consistency4/5

All names use the insumer_ prefix and snake_case, which is highly predictable. However, the vocabulary pattern mixes verb-noun forms (list_merchants, buy_credits) with noun-only forms (credits, jwks, wallet_trust, merchant_status), so it is not a uniform verb_noun convention throughout.

Tool Count2/5

27 tools is heavy for a single MCP server; even though many tools serve distinct platform features, the surface is well beyond the ideal 3-15 range and sits in the too-many category. The count increases navigation and selection cost for agents.

Completeness4/5

Coverage spans API key/payment setup, attestations, wallet trust, merchant configuration, domain verification, directory listing, and discount checkout flows, giving broad lifecycle coverage. Minor gaps include no explicit API key revocation, merchant deletion, or transaction/payment history, but these are not severe dead ends.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    MolTrust MCP Server provides AI agents with identity verification, reputation scoring, and verifiable credentials through W3C DID-based trust infrastructure. Includes ERC-8004 on-chain agent registration and Base blockchain anchoring for tamper-proof credential verification.
    48
    531 PyPI
    4
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for AI agent trust verification, enabling agents to verify identities, check trust scores, and build reputation across multiple blockchain and web platforms.
    12
    16 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A DeFi MCP server enabling AI agents to query lending rates, execute swaps/bridges, monitor positions, and access prediction markets across 30+ chains with a trust layer for calldata verification.
    -