insumer
Server Details
Wallet auth: send a wallet and conditions, get a signed boolean across 37 chains.
- Status
- Healthy
- Uptime
- 100.0% over 24 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- insumerapi/mcp-server-insumer
- GitHub Stars
- 2
- Server Listing
- InsumerAPI
TDQS
Scored across 10 tools
Most tools are clearly distinct: list_merchants vs get_merchant, check_discount vs validate_code, and wallet_trust vs batch_wallet_trust (single vs up to 10) are well-separated. The main overlap is between insumer_attest (arbitrary conditions) and insumer_wallet_trust (curated fixed condition set), which both evaluate wallet on-chain state, though the descriptions do differentiate the fixed-profile vs custom-condition use cases.
All names are snake_case with a consistent insumer_ prefix and mostly verb_noun form (attest, check_discount, get_merchant, list_merchants, list_tokens, validate_code, wallet_trust). A few are noun phrases (jwks, compliance_templates) rather than verb-led, which is a minor deviation but still readable and predictable.
Ten tools is well within the ideal range and each appears to earn its place: attestation, single/batch trust profiles, discount checks, code validation, merchant directory, token registry, compliance templates, and signing keys. No redundant or filler tools.
Covers the verification/read lifecycle well: evaluate (attest, wallet_trust, batch_wallet_trust), discount (check_discount, validate_code), discovery (list_merchants, get_merchant, list_tokens, compliance_templates), and key retrieval (jwks). A notable gap is the absence of a tool to create issue an INSR discount code, which get_merchant explicitly hints at ("before creating a code"), so the write side of the discount flow is only half-covered.
Available Tools
10 toolsinsumer_attestVerify wallet conditions (signed)AInspect
Evaluate a list of 1 to 10 conditions against a wallet's on-chain state and return one signed attestation: a yes or no for each condition, never the balance. One call reads the chain for every condition in the list and returns a single attestation covering all of them, so conditions of different kinds and on different chains are combined in one signed result. A condition states what must be true of the wallet, such as a minimum token balance, ownership of an NFT, an attestation held or a registered agent ID; the type field on each condition lists the kinds available and the fields each one takes. Chains: EVM chains plus Solana, XRPL, Bitcoin, Tron, Stellar and Sui; Bitcoin, Tron, Stellar and Sui support token_balance only. The attestation is signed twice: ES256, with a kid identifying the key, and a post-quantum ML-DSA-65 signature (pqSig, pqKid). Each result includes evaluatedCondition, a SHA-256 conditionHash, and the block (EVM), ledger (XRPL, Stellar) or checkpoint (Sui) it was read at. An attestation expires 30 minutes after it is signed, or 5 minutes when it includes a delegation condition. Costs 1 credit (2 with proof: 'merkle'). An rpc_failure error (503) means a read did not complete and nothing was signed: retry, and never treat it as a no. Current chain and check counts: https://insumermodel.com/llms.txt On this hosted endpoint the call is paid from a shared daily allowance, so the caller is not charged; the credit cost above applies on the caller's own API key, and each result states the price on a key and by x402 pay-per-call.
| Name | Required | Description | Default |
|---|---|---|---|
| proof | No | Set to 'merkle' for EIP-1186 Merkle proofs (2 credits, refunded to 1 when no proof is delivered). For token_balance or ratio_to_amount against an ERC-20, a storage proof of the balance slot (no subject field); for the same conditions with contractAddress 'native', an account proof whose balance field is the value evaluated (subject 'account_balance'); for account_code, an account proof whose codeHash is the value evaluated (subject 'account_code'); for erc7710_delegation, a storage proof of the revocation slot (subject 'delegation_revocation') on managers with an on-chain-verified layout. Supported EVM chains only (not ZKsync Era, Sei, Viction or XDC Network, and not on non-EVM chains). | |
| format | No | 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. | |
| wallet | No | EVM wallet address (0x...) | |
| suiWallet | No | 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. | |
| conditions | Yes | The list of 1 to 10 conditions to evaluate. All of them are read in this one call and covered by the one signed attestation. | |
| tronWallet | No | Tron wallet address (T-prefixed, base58). For verifying TRX or TRC20 tokens (USDT-TRC20). Use chainId 'tron'. | |
| xrplWallet | No | XRPL wallet address (r-address). For verifying XRP, trust line tokens (RLUSD, USDC), or NFTs on XRP Ledger. | |
| solanaWallet | No | Solana wallet address (base58) | |
| bitcoinWallet | No | Bitcoin address (P2PKH, P2SH, bech32, or Taproot). For verifying native BTC balance. Use chainId 'bitcoin' with contractAddress 'native'. | |
| stellarWallet | No | 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. | |
| declaredLimits | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | true when the API call succeeded |
| data | No | The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records |
| keys | No | JWKS entries (insumer_jwks) |
| meta | No | Response metadata such as version and timestamp |
| error | No | Error details when ok is false |
| items | No | The result when the endpoint returns a JSON array |
| message | No | A plain-text result (insumer_setup), or a message from the API |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, idempotentHint=false, openWorldHint=true) only signal that this is a non-idempotent, outbound operation; the description goes well beyond that by disclosing dual signing (ES256 + ML-DSA-65), the 30-minute expiry and the 5-minute expiry when a delegation condition is present, the credit cost and x402 pricing, and that no balance is ever returned. This is exactly the behavioral context an agent cannot get 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, and most sentences earn their place (signing, expiry, cost, error semantics). It is a single dense block with mild redundancy — 'One call reads the chain for every condition... single attestation covering all of them' restates the opening claim, and the met/not-met rule is repeated later — but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, annotations set, and full schema coverage, the description need not re-explain return values; it still covers everything else an agent needs: cost model, expiry, failure handling, signature scheme and JWKS verification path. Nothing material is missing for a correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so the baseline is 3. The description adds cross-parameter meaning not derivable from individual field docs — notably that Bitcoin, Tron, Stellar and Sui support token_balance only, and that different condition kinds and chains are combined into a single attestation, which shapes how the conditions array is composed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a precise verb and resource: evaluate 1-10 conditions against a wallet's on-chain state and return one signed attestation, with an explicit output shape (yes/no per condition, never the balance). The chain coverage and condition-type list make it distinguishable from the sibling trust/merchant tools without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is concrete: which condition types exist, which chains support which, the credit price, and operational guidance for rpc_failure (503) — retry, never treat as a no. It never explicitly contrasts itself with the sibling insumer_wallet_trust / insumer_batch_wallet_trust, so the when-to-prefer-this-over-that decision is left partly to inference.
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. Faster than sequential calls. Each wallet gets an independently signed profile with its own TRST-XXXXX ID: 155 base checks across 27 chains in 10 dimensions (stablecoins, governance, nfts, staking, institutional_stablecoins, tokenized_treasuries, stablecoin_deposits, wrapped_bitcoin, names, account), up to 176 checks across 29 chains in 14 dimensions with the optional Solana, XRPL, Bitcoin and Tron wallets; the signed conditionSetVersion (currently 2026-10-08) names the check list. Dimensions arrive in a fixed order, identical for every wallet in the batch: the base dimensions as listed, then any of solana, xrpl, bitcoin and tron that were switched on, in that order. 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, while a pay-per-call (x402) payment covers every wallet in the request. A wallet whose reads did not complete gets an error entry and no signed profile: retry that wallet, and never treat the entry as a no. Each profile lists every check, so the response is large; by default the text is a summary per wallet (profile ID, held / not held / not evaluated counts, and the checks held in each dimension, in the fixed dimension order; the account dimension's checks are present rather than held), and the complete signed profiles are returned unchanged as structuredContent. Set detail to 'full' on the call to get the complete signed profiles as text too. Profiles cannot be fetched again, so a later call signs fresh profiles and is charged again. On this hosted endpoint the call is paid from a shared daily allowance, so the caller is not charged; the credit cost above applies on the caller's own API key, and each result states the price on a key and by x402 pay-per-call.
| Name | Required | Description | Default |
|---|---|---|---|
| proof | No | Set to 'merkle' for EIP-1186 Merkle storage proofs on all wallets (6 credits/wallet). | |
| detail | No | 'summary' (default): the text is a short summary per wallet and the complete signed profiles are in structuredContent. 'full': the complete signed profiles as text too, tens of thousands of characters per wallet (more with optional wallets or merkle proofs). Choose it on the call that needs it: profiles cannot be fetched again, so a second call signs fresh profiles and is charged again. Not sent to the API; it does not change the price of the call. | |
| wallets | Yes | 1-10 wallet entries to profile |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | true when the API call succeeded |
| data | No | The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records |
| keys | No | JWKS entries (insumer_jwks) |
| meta | No | Response metadata such as version and timestamp |
| error | No | Error details when ok is false |
| items | No | The result when the endpoint returns a JSON array |
| message | No | A plain-text result (insumer_setup), or a message from the API |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations present the bar is lower, yet the description still discloses cost (3 credits per successful wallet, 6 with merkle, x402 covers all wallets), partial-success semantics, the fact that failed wallets yield no signed profile and must not be read as 'no', that profiles cannot be re-fetched (consistent with idempotentHint=false), the response size, and the summary-vs-structuredContent split. This is unusually rich 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded correctly with purpose and speed benefit, but the body is a dense block that restates the detail parameter and the credit/x402 pricing twice, and mixes pricing, dimension ordering, retry policy, and response format without structure. Every fact is useful, but a scanner cannot easily locate a specific concern.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with full schema coverage, an output schema, and annotations, the description covers everything an agent needs to call it correctly: cost model, partial-failure handling, dimension ordering, response size, and the non-repeatability of signed profiles.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description goes beyond the schema by explaining that Solana/XRPL/Bitcoin/Tron wallets each switch on an extra dimension and that dimensions arrive in a fixed, identical order for every wallet in the batch. The credit implication of proof='merkle' (6 vs 3) is also stated, which the schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a precise verb, resource, and scope: 'Generate wallet trust fact profiles for up to 10 wallets in a single request.' The batch framing ('Faster than sequential calls') cleanly separates it from the single-wallet sibling insumer_wallet_trust without the agent needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional guidance: set detail='full' only on the call that needs it, add proof='merkle' when Merkle storage proofs are required, and retry only the wallets that came back as error entries. It does not explicitly name insumer_wallet_trust as the single-wallet alternative, so the 'when not to use this' side 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)ARead-onlyIdempotentInspect
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. Takes an EVM, Solana or XRPL wallet. An rpc_failure error (503) means a read did not complete: retry, and never treat it as not eligible. The check carries no proof of wallet control, so totalDiscount is what an unproven wallet gets; walletTerms gives the store's terms, and discountIfProven (when present) is what signing would get.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet | No | EVM wallet address (0x...) | |
| merchant | Yes | Merchant ID | |
| xrplWallet | No | XRPL wallet address (r-address) | |
| solanaWallet | No | Solana wallet address (base58) |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | true when the API call succeeded |
| data | No | The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records |
| keys | No | JWKS entries (insumer_jwks) |
| meta | No | Response metadata such as version and timestamp |
| error | No | Error details when ok is false |
| items | No | The result when the endpoint returns a JSON array |
| message | No | A plain-text result (insumer_setup), or a message from the API |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, and the description adds substantial context beyond them: it never returns raw balances, consumes no credits, exposes totalDiscount vs discountIfProven, and clarifies that no proof of wallet control is carried. The 503 retry semantics are a genuinely useful 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and cost, then error semantics, then the discount-field caveats. Dense but each sentence carries information; the discountIfProven/walletTerms sentence is somewhat packed but still earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full annotation coverage, the description supplies the remaining interpretive context an agent needs — cost model, error retry rule, unproven-wallet caveat — so nothing material is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning by stating the wallet input may be EVM, Solana, or XRPL — clarifying that the three wallet-typed properties are mutually exclusive chain alternatives rather than additive inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource+scope: 'Calculate discount for a wallet at a merchant,' with the chain coverage and the free/no-credit trait stated. It is clearly distinguishable from siblings like insumer_wallet_trust or insumer_attest, which do not compute merchant discounts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating context: it is free, accepts EVM/Solana/XRPL wallets, and that a 503 rpc_failure means retry rather than treat as ineligible. It does not, however, state when to prefer this over a sibling such as insumer_wallet_trust or insumer_attest.
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 templatesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | true when the API call succeeded |
| data | No | The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records |
| keys | No | JWKS entries (insumer_jwks) |
| meta | No | Response metadata such as version and timestamp |
| error | No | Error details when ok is false |
| items | No | The result when the endpoint returns a JSON array |
| message | No | A plain-text result (insumer_setup), or a message from the API |
TDQS
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.
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.
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.
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.
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.
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_get_merchantGet a merchant profileARead-onlyIdempotentInspect
Get full public merchant profile including token tiers, NFT collections, discount mode, verification status, and walletTerms: what the store gives a wallet with and without proof of control, so you can decide whether to sign before creating a code.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Merchant ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | true when the API call succeeded |
| data | No | The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records |
| keys | No | JWKS entries (insumer_jwks) |
| meta | No | Response metadata such as version and timestamp |
| error | No | Error details when ok is false |
| items | No | The result when the endpoint returns a JSON array |
| message | No | A plain-text result (insumer_setup), or a message from the API |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so safety and idempotency are fully covered structurally. The description adds context about what the profile contains (walletTerms, verification status) but does not disclose behavioral traits beyond the field enumeration — no auth requirements, rate limits, or caching behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the verb+resource and then enumerates the payload and the decision context. It is information-dense without waste, though the clause after 'so you can decide' is slightly run-on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one required parameter, full schema coverage, annotations covering safety/idempotency, and an output schema that presumably documents the return shape, the description does not need to explain return values. It covers purpose, payload contents, and the decision context. Slight gaps remain around alternatives and when-not-to-use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter (id) with 100% schema description coverage and a pattern constraint. The description adds no parameter-level detail, but with a single well-documented parameter and full schema coverage, this is adequate — baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Get full public merchant profile') and enumerates the payload fields (token tiers, NFT collections, discount mode, verification status, walletTerms). It does not name any sibling tool for differentiation, so it falls 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is an implied usage context — 'so you can decide whether to sign before creating a code' — which tells the agent when this data is relevant (pre-signing decisions). But there is no explicit when-to-use statement, no mention of alternatives like insumer_list_merchants for browsing, and no exclusion criteria.
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 keysARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | true when the API call succeeded |
| data | No | The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records |
| keys | No | JWKS entries (insumer_jwks) |
| meta | No | Response metadata such as version and timestamp |
| error | No | Error details when ok is false |
| items | No | The result when the endpoint returns a JSON array |
| message | No | A plain-text result (insumer_setup), or a message from the API |
TDQS
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.
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.
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.
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.
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.
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 merchantsARead-onlyIdempotentInspect
Browse merchants in the public directory. Filter by accepted token, verification status. Returns company name, website, tokens accepted, discount info, and walletTerms (the store's terms with and without proof of wallet control).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page (default 50, max 200) | |
| token | No | Filter by accepted token symbol, e.g. 'UNI' | |
| offset | No | Pagination offset (default 0) | |
| verified | No | Filter by domain verification status |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | true when the API call succeeded |
| data | No | The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records |
| keys | No | JWKS entries (insumer_jwks) |
| meta | No | Response metadata such as version and timestamp |
| error | No | Error details when ok is false |
| items | No | The result when the endpoint returns a JSON array |
| message | No | A plain-text result (insumer_setup), or a message from the API |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so safety profile is covered. Description adds useful return-field context (walletTerms explanation) beyond annotations, but doesn't mention pagination behavior or default result size, which are relevant for a list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, then filters, then return values. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return-field details needn't be repeated, but the description does a good job summarizing key fields anyway. Missing pagination behavior for a list tool is a minor gap given params cover limit/offset.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already fully documents all four parameters including defaults, ranges, and enum. The description adds no syntax or format details beyond what the schema provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Browse merchants in the public directory.' Clearly distinguishes from sibling insumer_get_merchant (singular fetch) by scoping to listing/browsing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions filtering by token and verification status but gives no when-to-use guidance or alternatives. An agent would need to infer that insumer_get_merchant should be used for a single merchant rather than listing.
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 tokensARead-onlyIdempotentInspect
List the tokens and NFT collections listed in the Insumer registry. Filter by chain, symbol, or asset type. The registry is a directory, not the list of what can be checked: an attestation can check any token on a supported chain, and NFTs on EVM chains, Solana and XRPL, whether listed or not. An empty result means nothing is listed under that filter, not that the token is unsupported.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by asset type | |
| chain | No | Filter by chain ID | |
| symbol | No | Filter by token symbol |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | true when the API call succeeded |
| data | No | The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records |
| keys | No | JWKS entries (insumer_jwks) |
| meta | No | Response metadata such as version and timestamp |
| error | No | Error details when ok is false |
| items | No | The result when the endpoint returns a JSON array |
| message | No | A plain-text result (insumer_setup), or a message from the API |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, idempotentHint, destructiveHint and openWorldHint, so the safety bar is lower. The description adds real value beyond them by disclosing empty-result semantics and the non-exhaustive nature of the registry, which prevents a common misinterpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core action before the interpretive caveats. Each sentence earns its place, though the 'not the list of what can be checked' point is restated in slightly different phrasing in the following sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and rich annotations, the description needn't cover return values. Combined with the safety annotations and full schema coverage, the definition gives the agent everything needed to call and interpret the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the three filter parameters (type, chain, symbol) are already documented in the schema. The description restates the filter axes without adding format or edge-case detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (tokens and NFT collections in the Insumer registry) with clear scope. It distinguishes itself from the check/attest siblings by framing the registry as a directory rather than the set of checkable assets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Strong guidance on interpretation: 'The registry is a directory, not the list of what can be checked' and 'An empty result means nothing is listed under that filter, not that the token is unsupported.' This tells the agent when not to conclude lack of support, but it does not explicitly name sibling tools as alternatives.
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 codeARead-onlyIdempotentInspect
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, and walletProven (whether the code went to a caller that proved control of the wallet). No authentication required, no credits consumed. Does not expose wallet or token data.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Discount code in INSR-XXXXX format |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | true when the API call succeeded |
| data | No | The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records |
| keys | No | JWKS entries (insumer_jwks) |
| meta | No | Response metadata such as version and timestamp |
| error | No | Error details when ok is false |
| items | No | The result when the endpoint returns a JSON array |
| message | No | A plain-text result (insumer_setup), or a message from the API |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, but the description adds significant context beyond them: no authentication required, no credits consumed, return shape (valid/invalid with reason, walletProven), and a data privacy guarantee ('Does not expose wallet or token data'). This is a rich behavioral disclosure that goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and followed by context, return info, and constraints. Every sentence adds value with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description still summarizes the return values (valid/invalid status, reason, walletProven), which helps the agent understand the outcome. It covers authentication, cost, side effects, and privacy. Complete for a validation tool with one parameter and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema documents the single parameter with a pattern and description. The description mentions the INSR-XXXXX format, which is redundant with the schema, and adds no extra semantic detail about the parameter beyond what is already provided. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Validate) and resource (INSR-XXXXX discount code), and explicitly scopes it to merchant backends during ACP/UCP checkout. This distinguishes it from siblings like insumer_check_discount or insumer_attest by naming the exact format and use context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states the context ('For merchant backends during ACP/UCP checkout') and the purpose ('confirm code validity, discount percent, and expiry'). This tells when to use it, though it does not explicitly name an alternative tool (e.g., insumer_check_discount) or state when NOT to use it.
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, account): 155 base checks across 27 chains in 10 dimensions. Optional Solana, XRPL, Bitcoin and Tron wallets add their own dimensions, up to 176 checks across 29 chains in 14 dimensions; optional Stellar and Sui wallets let rows inside existing dimensions evaluate. Dimensions arrive in a fixed order: the base dimensions as listed, then any of solana, xrpl, bitcoin and tron that were switched on, in that order. The account dimension holds two rows per chain on Ethereum, Base, Arbitrum, Optimism and Polygon: contract code at the wallet address, and an EIP-7702 delegation there; a plain key reads false on both, and which contract is never named. Rows on a chain whose wallet is not supplied stay in the signed profile with evaluated: false. Every check is held or not held (present or not present in the account dimension), never a balance. The signed conditionSetVersion (currently 2026-10-08) 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'). An rpc_failure error (503) means a read did not complete and nothing was signed: retry, and never treat it as a no. Current chain and check counts: https://insumermodel.com/llms.txt On this hosted endpoint the call is paid from a shared daily allowance, so the caller is not charged; the credit cost above applies on the caller's own API key, and each result states the price on a key and by x402 pay-per-call.
| Name | Required | Description | Default |
|---|---|---|---|
| proof | No | 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), NFT/non-EVM rows and the account rows are declined with a reason (an account proof is available from the attest tool's account_code condition); the premium is refunded whenever no proof is delivered. | |
| wallet | Yes | EVM wallet address (0x...) to profile | |
| suiWallet | No | Sui wallet address (0x + 64 hex). If provided, lets the rows on Sui evaluate. Adds no dimension. | |
| tronWallet | No | Tron wallet address (T-prefixed). If provided, adds the Tron dimension. | |
| xrplWallet | No | XRPL wallet address (r-address). If provided, adds the XRPL dimension and lets the institutional row on XRPL evaluate. | |
| solanaWallet | No | Solana wallet address (base58). If provided, adds the Solana dimension and lets the institutional rows on Solana evaluate. | |
| bitcoinWallet | No | Bitcoin address. If provided, adds the Bitcoin dimension (native BTC presence). | |
| stellarWallet | No | Stellar wallet address (G-prefixed). If provided, lets the institutional rows on Stellar evaluate (classic trustlines). Adds no dimension. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | true when the API call succeeded |
| data | No | The endpoint's payload: a signed attestation, trust profile, discount, merchant or token records |
| keys | No | JWKS entries (insumer_jwks) |
| meta | No | Response metadata such as version and timestamp |
| error | No | Error details when ok is false |
| items | No | The result when the endpoint returns a JSON array |
| message | No | A plain-text result (insumer_setup), or a message from the API |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false): it discloses signing semantics (conditionSetVersion must be logged, never rejected on), error semantics (503 rpc_failure means nothing was signed), refund behavior for undelivered Merkle proofs, credit pricing (3, or 6 with proof), and that the hosted endpoint draws from a shared allowance rather than charging the caller.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, but the body is a single dense run-on of nested parentheticals (dimension list, counts, ordering, account-row behavior, pricing, x402, llms.txt URL) that would benefit from structure. Every fact is relevant, yet the packing reduces scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the description still appropriately summarizes per-dimension pass/fail counts and the overall summary. Combined with error/retry semantics, cost model, and a live URL for current chain/check counts, an agent has everything needed to call and interpret this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with rich per-parameter descriptions, so the baseline is 3. The description adds real semantic detail: each optional wallet's effect (Solana/XRPL/Bitcoin/Tron add dimensions; Stellar/Sui only let existing rows evaluate) and the fixed dimension ordering, plus the two-row structure of the account dimension. It largely reinforces what the schema already says, which caps it below 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a precise verb+resource: 'Generate a signed wallet trust fact profile for an EVM wallet', then enumerates what a profile contains (presence checks across named dimensions, 155 base checks / 27 chains). This distinguishes it cleanly from the sibling insumer_batch_wallet_trust (singular vs. batch) and from insumer_attest (which is referenced for account_code proofs).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the intended use case explicitly ('Designed for AI agent-to-agent trust decisions') and gives the alternative for account proofs (the attest tool's account_code condition). It also gives operational guidance (retry on rpc_failure 503, never treat as a 'no'). It does not, however, say when to prefer this over insumer_batch_wallet_trust or the non-trust attest path for a single wallet.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
insumer_attest2 fields changed- changed
Input schema / properties / conditions / descriptionPrevious value: -"1-10 on-chain conditions to verify"New value: +"The list of 1 to 10 conditions to evaluate. All of them are read in this one call and covered by the one signed attestation." - changed
Input schema / properties / conditions / items / properties / delegation / descriptionPrevious value: -"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)."New value: +"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). A delegation result that is not met carries failReason, and an attestation that includes a delegation condition expires in 5 minutes instead of 30."
1 tool update
- Changed
insumer_attest6 fields changed- changed
Input schema / properties / conditions / items / properties / agentId / descriptionPrevious value: -"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."New value: +"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, so the signed statement implies no vetting, no reputation, no endorsement." - changed
Input schema / properties / conditions / items / properties / delegation / descriptionPrevious value: -"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)."New value: +"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)." - changed
Input schema / properties / conditions / items / properties / delegation / properties / caveats / descriptionPrevious value: -"Caveats the principal signed (max 16). Every enforcer must be recognized or the condition fails — no override."New value: +"Caveats the principal signed (max 16). Every enforcer must be recognized or the condition fails, with no override." - changed
Input schema / properties / conditions / items / properties / delegationManager / descriptionPrevious value: -"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."New value: +"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." - changed
Input schema / properties / conditions / items / properties / expectedDelegator / descriptionPrevious value: -"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."New value: +"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." - changed
Input schema / properties / stellarWallet / descriptionPrevious value: -"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."New value: +"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."
1 tool update
- Changed
insumer_attest1 field changed- changed
Input schema / properties / conditions / items / properties / type / descriptionPrevious 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), erc7710_delegation (signed MetaMask-framework delegation validity on Base; delegationManager, expectedDelegator, and delegation required; max 3 per request), or account_code (the code state of the wallet address itself on an EVM chain; expect required, delegate optional with expect 'eip7702'; no contractAddress)"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; EVM chains only), ratio_to_amount (balance >= multiple * amount; EVM chains only), ratio_to_supply (balance / totalSupply >= minFraction; EVM chains, ERC-20 only), erc8004_agent (registered ERC-8004 agent on Base; agentId required), erc7710_delegation (signed MetaMask-framework delegation validity on Base; delegationManager, expectedDelegator, and delegation required; max 3 per request), or account_code (the code state of the wallet address itself on an EVM chain; expect required, delegate optional with expect 'eip7702'; no contractAddress)"
2 tool updates
- Changed
insumer_attest5 fields changed- added
Input schema / properties / conditions / items / properties / delegateAdded value: +{ + "$ref": "#/properties/wallet", + "description": "For account_code with expect 'eip7702' only (a 400 with any other expect): an EVM address; met iff the wallet's EIP-7702 designator points at it. Echoed in lowercase inside the signed evaluatedCondition as the caller's input; the actual delegation target is never returned." +} - added
Input schema / properties / conditions / items / properties / expectAdded value: +{ + "description": "Required for account_code: the code state the wallet address itself must be in at the anchored block. 'none' is no code (a plain key account); 'eip7702' is the EIP-7702 delegation designator (a key that has delegated execution to a contract); 'contract' is any other code (a smart-contract wallet, a protocol, a token). The three states are exclusive on a chain. EVM chains only; a non-EVM chainId is rejected with a 400. The result is met or not met, like every type: the code and the delegation target are never returned, in any format or mode. The signed evaluatedCondition is {type, chainId, expect, operator: 'code_state'}. With proof 'merkle', the proof is an EIP-1186 account proof (subject 'account_code') whose codeHash is the proven value.", + "enum": [ + "none", + "eip7702", + "contract" + ], + "type": "string" +} - changed
Input schema / properties / conditions / items / properties / type / descriptionPrevious 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)"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), erc7710_delegation (signed MetaMask-framework delegation validity on Base; delegationManager, expectedDelegator, and delegation required; max 3 per request), or account_code (the code state of the wallet address itself on an EVM chain; expect required, delegate optional with expect 'eip7702'; no contractAddress)" - changed
Input schema / properties / conditions / items / properties / type / enumPrevious value: -[ - "token_balance", - "nft_ownership", - "eas_attestation", - "farcaster_id", - "evm_view_call", - "ratio_to_amount", - "ratio_to_supply", - "erc8004_agent", - "erc7710_delegation" -]New value: +[ + "token_balance", + "nft_ownership", + "eas_attestation", + "farcaster_id", + "evm_view_call", + "ratio_to_amount", + "ratio_to_supply", + "erc8004_agent", + "erc7710_delegation", + "account_code" +] - changed
Input schema / properties / proof / descriptionPrevious 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."New value: +"Set to 'merkle' for EIP-1186 Merkle proofs (2 credits, refunded to 1 when no proof is delivered). For token_balance or ratio_to_amount against an ERC-20, a storage proof of the balance slot (no subject field); for the same conditions with contractAddress 'native', an account proof whose balance field is the value evaluated (subject 'account_balance'); for account_code, an account proof whose codeHash is the value evaluated (subject 'account_code'); for erc7710_delegation, a storage proof of the revocation slot (subject 'delegation_revocation') on managers with an on-chain-verified layout. Supported EVM chains only (not ZKsync Era, Sei, Viction or XDC Network, and not on non-EVM chains)."
- Changed
insumer_wallet_trust1 field changed- changed
Input schema / properties / proof / descriptionPrevious 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."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), NFT/non-EVM rows and the account rows are declined with a reason (an account proof is available from the attest tool's account_code condition); the premium is refunded whenever no proof is delivered."
1 tool update
- Changed
insumer_batch_wallet_trust1 field changed- added
Input schema / properties / detailAdded value: +{ + "description": "'summary' (default): the text is a short summary per wallet and the complete signed profiles are in structuredContent. 'full': the complete signed profiles as text too, tens of thousands of characters per wallet (more with optional wallets or merkle proofs). Choose it on the call that needs it: profiles cannot be fetched again, so a second call signs fresh profiles and is charged again. Not sent to the API; it does not change the price of the call.", + "enum": [ + "summary", + "full" + ], + "type": "string" +}
2 tool updates
- Changed
insumer_attest9 fields changed- added
Input schema / properties / conditions / items / properties / contractAddress / anyOfAdded value: +[ + { + "maxLength": 200, + "minLength": 1, + "pattern": "^[A-Za-z0-9:_]+$", + "type": "string" + }, + { + "maxLength": 600, + "pattern": "^0x[0-9a-fA-F]{1,64}::[A-Za-z_][A-Za-z0-9_]*::[A-Za-z_][A-Za-z0-9_]*<[A-Za-z0-9:_<>, ]+>$", + "type": "string" + } +] - changed
Input schema / properties / conditions / items / properties / contractAddress / descriptionPrevious 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."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. A coin type may carry type parameters in angle brackets." - removed
Input schema / properties / conditions / items / properties / contractAddress / maxLengthRemoved value: -200 - removed
Input schema / properties / conditions / items / properties / contractAddress / minLengthRemoved value: -1 - removed
Input schema / properties / conditions / items / properties / contractAddress / patternRemoved value: -"^[A-Za-z0-9:_]+$" - removed
Input schema / properties / conditions / items / properties / contractAddress / typeRemoved value: -"string" - changed
Input schema / properties / conditions / items / properties / taxon / descriptionPrevious value: -"XRPL NFToken taxon filter (optional, for nft_ownership on XRPL only). Filters NFTs by issuer + taxon."New value: +"XRPL NFToken taxon filter: an integer from 0 to 4294967295 (optional, for nft_ownership on XRPL only). Filters NFTs by issuer + taxon." - added
Input schema / properties / conditions / items / properties / taxon / maximumAdded value: +4294967295 - added
Input schema / properties / conditions / items / properties / taxon / minimumAdded value: +0
- Changed
insumer_check_discount3 fields changed- removed
Input schema / properties / stellarWalletRemoved value: -{ - "description": "Stellar wallet address (G-prefixed)", - "pattern": "^G[A-Z2-7]{55}$", - "type": "string" -} - removed
Input schema / properties / suiWalletRemoved value: -{ - "description": "Sui wallet address (0x + 64 hex)", - "pattern": "^0x[0-9a-fA-F]{64}$", - "type": "string" -} - removed
Input schema / properties / tronWalletRemoved value: -{ - "description": "Tron wallet address (T-prefixed)", - "pattern": "^T[1-9A-HJ-NP-Za-km-z]{33}$", - "type": "string" -}
1 tool update
- Changed
insumer_attest3 fields changed- changed
Input schema / properties / conditions / items / properties / currency / descriptionPrevious value: -"XRPL trust line currency code (e.g. 'RLUSD', 'USDC'). Required for XRPL trust line tokens, ignored for other chains."New value: +"XRPL trust line currency code (e.g. 'RLUSD'). Case-sensitive: enter it exactly as the issuer created it. Required for XRPL trust line tokens, ignored for other chains." - added
Input schema / properties / conditions / items / properties / currency / minLengthAdded value: +1 - changed
Input schema / properties / conditions / items / properties / currency / patternPrevious value: -"^[A-Za-z0-9]+$"New value: +"^[\\x20-\\x7E]+$"
10 tool updates
- Changed
insumer_attest1 field changed- changed
Output 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" +}
- Changed
insumer_batch_wallet_trust1 field changed- changed
Output 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" +}
- Changed
insumer_check_discount1 field changed- changed
Output 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" +}
- Changed
insumer_compliance_templates1 field changed- changed
Output 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" +}
- Changed
insumer_get_merchant1 field changed- changed
Output 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" +}
- Changed
insumer_jwks1 field changed- changed
Output 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" +}
- Changed
insumer_list_merchants1 field changed- changed
Output 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" +}
- Changed
insumer_list_tokens1 field changed- changed
Output 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" +}
- Changed
insumer_validate_code1 field changed- changed
Output 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" +}
- Changed
insumer_wallet_trust1 field changed- changed
Output 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" +}
10 tool updates
- First observed
insumer_attest - First observed
insumer_batch_wallet_trust - First observed
insumer_check_discount - First observed
insumer_compliance_templates - First observed
insumer_get_merchant - First observed
insumer_jwks - First observed
insumer_list_merchants - First observed
insumer_list_tokens - First observed
insumer_validate_code - First observed
insumer_wallet_trust
Related MCP Connectors
Cryptographic proof of wallet ownership in two steps, with no keys and no custody.
Multi-chain wallet intelligence: balances, transactions, ENS, OFAC screening across 7 chains.
Free reports, EVM/Solana token payment links and capped zero-fee EVM USDC escrow. Wallet signatures.
Preflight for AI agents, signed: one call; wallet, domain, IP abuse, package checks and CVEs.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables MCP clients to use an ERC-4337 smart account with session keys to check wallet status, send ETH or ERC-20 tokens, call allowed contracts, and manage approval requests within on-chain spending limits.2 npm1MIT

WalletChan MCPofficial
AlicenseCqualityDmaintenanceEnables AI assistants to prepare and execute onchain wallet actions, including balance checks, name resolution, swaps, bridges, transactions, and DeFi skills, with popup approval by default or scoped ERC-7710 delegated execution when opted in.6516 npmMIT- AlicenseAqualityBmaintenanceEnables AI agents to generate or import multi-chain keys, sign messages and unsigned transactions, broadcast them, and query native balances across Ambient, Solana, BSC, and Arbitrum. Private keys stay encrypted on the local machine, so agents can complete the sign-and-send half of a swap, liquidity, or bridge workflow handed over by a remote market server.10MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to perform pay-per-call security verification of wallets, tokens, contracts, dApps, agents, and more via a remote endpoint with no installation.2MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.