Skip to main content
Glama

ERC-8004 payee verification (free)

x402_payee_check
Read-only

Free: is every payTo of this x402 endpoint really its seller's? Per payment option, one outcome of the draft ERC "x402 Payee Verification for ERC-8004 Agents": verified-wallet (the payTo is the agent wallet registered in the ERC-8004 Identity Registry), verified-delegation (the agent wallet signed an EIP-712 payee delegation for it), mismatch, invalid-delegation, endpoint-unlisted, owner-only (payTo is the identity's owner: never counted as verified), no-agent-wallet or not-read. The identity comes from the 402's extra.erc8004 or the seller's /.well-known/agent-registration.json. When the seller's /.well-known/agent-card.json carries a Concordium badge, the result also has concordium: the agent in Concordium's Agent Registry (CIS-8004; its owner is an identity-verified account) and per payTo verified-wallet, verified-external-key (a CIS-8 bound key), owner-only, mismatch, not-bound, revoked, card-mismatch, endpoint-unlisted or not-read. Never pays. Shares the free limit of 10 calls per hour.

Input Schema

NameRequiredDescriptionDefault
urlYesThe x402 endpoint (public http(s) URL), e.g. https://api.example.com/paid
bodyNoExample JSON request body, for a POST route that checks its input before the 402 (implies POST). Without it, {} is sent and the requestBody example in the endpoint's /openapi.json is tried.
methodNoHTTP method of the paid route (default: GET, then POST)

Output Schema

NameRequiredDescriptionDefault
fixNo
urlNo
agentNoThe identity checked: registry, agentId, block read, agent wallet
payeesYesPer payment option: network, payTo, asset, outcome (verified-wallet, verified-delegation, mismatch, invalid-delegation, endpoint-unlisted, owner-only, no-agent-wallet, not-read) and reason
statusYespass: every payTo is bound to the seller's agent; warn: some are not; info: could not confirm; none: no ERC-8004 identity found
summaryYes
concordiumNoVerified by Concordium, when the seller's Agent Card carries a Concordium badge: status, summary, agent (badge, network, owner, agent wallet) and payees (outcome per payment option: verified-wallet, verified-external-key, owner-only, no-agent-wallet, mismatch, not-bound, revoked, card-mismatch, endpoint-unlisted, not-read)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / concordium
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": {},
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Verified by Concordium, when the seller's Agent Card carries a Concordium badge: status, summary, agent (badge, network, owner, agent wallet) and payees (outcome per payment option: verified-wallet, verified-external-key, owner-only, no-agent-wallet, mismatch, not-bound, revoked, card-mismatch, endpoint-unlisted, not-read)"
      +}
  2. Changed1 schema field changed
    • changedOutput schema / properties / payees / description
      Previous value: -"Per payment option: network, payTo, asset, outcome (verified-wallet, verified-delegation, mismatch, invalid-delegation, endpoint-unlisted, no-agent-wallet, not-read) and reason"New value: +"Per payment option: network, payTo, asset, outcome (verified-wallet, verified-delegation, mismatch, invalid-delegation, endpoint-unlisted, owner-only, no-agent-wallet, not-read) and reason"
  3. Added

TDQS

A3.6/5.0
Behavior4/5

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

Goes well beyond the readOnlyHint/openWorldHint annotations: it discloses the free quota ('10 calls per hour' shared), that it never triggers payment, and exactly where identity data is sourced from (402's extra.erc8004 or the seller's /.well-known/agent-registration.json, plus agent-card Concordium badge). It does not mention caching, latency, or behavior when the endpoint is unreachable beyond the 'not-read' verdict.

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

Conciseness3/5

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

The core question and the 'free/never pays' constraint are front-loaded, which is good. But the body is one long paragraph that dumps two full verdict enumerations inline, making it heavy to scan and burying the quota note at the very 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?

An output schema exists, yet the description still enumerates the verdict space and the optional concordium block, and covers identity sources, rate limits, and the no-payment guarantee. For a moderately complex read-only verification tool this is close to complete; only error/failure behavior for unreachable endpoints is 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%, so url/body/method are already fully documented, including the POST implication of body and the GET-then-POST default of method. The description adds no parameter-level meaning 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.

Purpose4/5

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

Opens with a concrete question the tool answers ('is every payTo of this x402 endpoint really its seller's?') plus a named standard and the scope of one outcome per payment option. The 'Free' and 'Never pays' framing implicitly separates it from paid/delivery siblings, but no sibling is named, so differentiation is inferred rather than stated.

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 'Free:' and 'Never pays.', which tells the agent this is the non-paying verification step, and the rate limit is disclosed. However, it never says when to choose this over x402_preflight_deep, x402_diagnose or x402_delivery_check, and no prerequisites or exclusions are given.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.