Billify payments
Server Details
Let agents verify the seller and pay Billify invoices with x402 (USDC on Base).
- Status
- Healthy
- Uptime
- 100.0% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 4 tools
Each tool targets a clearly distinct step in the payer workflow: invoice lookup, seller verification, payment, and delivery/dispute confirmation. The descriptions reinforce the boundaries, especially between get_invoice and verify_seller.
All four tools follow a consistent snake_case verb_noun pattern: confirm_delivery, get_invoice, pay_invoice, verify_seller. There is no mixing of conventions or vague one-word names.
Four tools is a well-scoped size for this server’s payer-side invoice payment purpose. Each tool corresponds to an essential stage of the workflow and none feels redundant.
The core lifecycle is covered: verify seller, inspect invoice, pay, and confirm delivery or dispute. Minor gaps remain around listing invoices, retrieving signed Invoice Passport history, or handling refund/cancellation flows.
Available Tools
4 toolsconfirm_deliveryConfirm deliveryAIdempotentInspect
After paying: record whether the work was delivered, as accepted or disputed (a dispute needs a note). The decision is tied to the seller's latest delivery record (see delivered in get_invoice), by its record_hash. Add reference for your own note of what you received (a URL or a content hash). With signature, an EIP-191 signature by the wallet that paid over the text this tool returns as sign_message when called without decision, the decision is recorded as proven by the payer; without it, only as made by someone holding the invoice link. An acceptance is final. It appears in the signed Invoice Passport history.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | The agent's or person's name | |
| note | No | ||
| invoice | Yes | The invoice's public token (UUID) or its Billify link (billify.org/pay/…, /invoice/…) | |
| decision | No | ||
| reference | No | ||
| signature | No | 0x-prefixed EIP-191 signature by the paying wallet |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover read/write and idempotency; the description adds substantial context beyond them — that acceptance is final and irreversible, that the signature determines whether the decision is proven by the payer versus merely made by a link holder, and that the result lands in the signed Invoice Passport history. That is exactly the consequence-level detail an agent needs before a non-destructive but permanent write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The write precondition is front-loaded, but the signature sentence is a convoluted run-on ('an EIP-191 signature by the wallet that paid over the text this tool returns as sign_message when called without decision') and references a sign_message affordance that isn't a listed sibling, forcing re-reads.
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 6-param mutation with no output schema and half its parameters undocumented in the schema, the description covers the decision model, the proof model, and the side effect on passport history. It still omits what a successful call returns and whether a disputed decision can be revised.
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 only 50%, so the description must compensate, and it does for most fields: note is tied to disputes, reference is explained as a URL or content hash, signature is defined as an EIP-191 signature by the paying wallet, and decision is described via accepted/disputed. The 'name' parameter remains unexplained in both schema and description, keeping it from a 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?
States a specific verb and resource: record whether work was delivered as accepted or disputed, with the precondition 'after paying'. An agent can distinguish this from pay_invoice and get_invoice 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?
Gives clear ordering context ('after paying') and routes the agent to get_invoice to obtain the seller's delivery record. It explains the signed vs unsigned path but doesn't state explicit exclusions such as what to do if no delivery record exists yet.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_invoiceGet invoiceARead-onlyInspect
Look up a Billify invoice from its public link: seller, amount, status, and whether and how it can be paid with x402 (USDC on Base).
| Name | Required | Description | Default |
|---|---|---|---|
| invoice | Yes | The invoice's public token (UUID) or its Billify link (billify.org/pay/…, /invoice/…) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint=true annotation already covers the safety profile, so the description's added value is the disclosure that the lookup reports whether and how the invoice can be paid via x402 (USDC on Base) — non-obvious behavioral context. It does not mention auth requirements or rate limiting, but the annotation carries the safety burden.
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?
One sentence, front-loaded with the verb and resource, ending with the most distinctive detail (x402 payability). No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description compensates by enumerating the returned fields (seller, amount, status, payment capability), and the read-only annotation covers the safety dimension. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the single parameter (public token UUID or Billify link) is already fully documented. The description's phrase 'from its public link' restates rather than extends that, so 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?
Specific verb ('look up') plus resource ('Billify invoice') and scope ('from its public link'), with the returned fields enumerated (seller, amount, status, x402 payability). It is clearly a read/lookup operation distinct from the mutating pay_invoice, but the description never names or contrasts the siblings, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the read-only lookup of an invoice naturally precedes pay_invoice, and the x402 payability detail hints at that flow, but there is no explicit when-to-use, when-not-to-use, or named alternative. An agent must infer the ordering itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pay_invoicePay invoice (x402)AIdempotentInspect
Pay a Billify invoice with x402 v2 over MCP. Call it once without payment to receive the PaymentRequired (exact USDC on Base); sign it and call again with _meta["x402/payment"]. The invoice is marked paid when the facilitator settles.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice | Yes | The invoice's public token (UUID) or its Billify link (billify.org/pay/…, /invoice/…) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the safety profile (not read-only, idempotent, not destructive); the description adds the payment lifecycle that annotations cannot convey — the initial unpaid call, the PaymentRequired response, the required payment meta field, and the fact that the invoice is only marked paid once the facilitator settles. It stops short of describing failure/retry behavior for a rejected or expired payment.
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 tight sentences, front-loaded with purpose before the mechanics of the payment handshake. No filler; every clause carries operational meaning.
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 one-parameter tool with no output schema, the description covers the full invocation cycle and the settlement outcome. Remaining gaps (amount/currency selection beyond 'exact USDC on Base', error handling) are minor and partly implied by the protocol reference.
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% for the single invoice parameter, so baseline is 3, but the description adds semantics the schema omits: the settlement meta field (_meta["x402/payment"]) the agent must supply on the second call. That extra invocation parameter is real added value.
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 ('Pay a Billify invoice') plus the protocol used, which cleanly separates it from get_invoice (read) and verify_seller. An agent can identify the tool's role without inspecting 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?
Gives an explicit two-step invocation procedure: call once to obtain PaymentRequired, sign it, then call again with _meta["x402/payment"]. That is strong operational guidance, though it never contrasts this tool with its siblings or says 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.
verify_sellerVerify sellerARead-onlyInspect
Before paying: check the seller of an invoice in the public registers (ANAF for Romanian CUIs, VIES for EU VAT numbers): registered name, whether it matches the invoice, VAT registration, whether the company is active and (ANAF) whether it is in the RO e-Factura register. Also checks the IBAN on the invoice page and shows the wallet an x402 payment goes to. Returns warnings to act on.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice | Yes | The invoice's public token (UUID) or its Billify link (billify.org/pay/…, /invoice/…) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and openWorldHint, and the description is consistent with both while adding real context: which external registers are queried, what is checked (name match, VAT registration, active status, RO e-Factura), and that the IBAN and x402 payout wallet are surfaced. It also discloses that the tool returns actionable warnings, which the annotations do not convey. It does not state rate limits, failure modes, or how warnings are structured.
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 trigger ('Before paying'), followed by a dense but purposeful enumeration of what is verified. The long parenthetical and clause list make the first sentence run-on, but essentially every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so at a summary level ('Returns warnings to act on') while enumerating the checks performed. A caller knows what it will learn, though the shape of the warnings and behavior on lookup failure are 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?
Schema coverage is 100% for the single 'invoice' parameter, so the schema already documents that it accepts a public token UUID or Billify link. The description adds no format or usage detail about the parameter beyond what the schema provides, 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 (check/verify) against a specific resource (the seller of an invoice) and names the exact registers consulted (ANAF for Romanian CUIs, VIES for EU VAT). An agent can tell this apart from get_invoice and pay_invoice without opening either schema, since it is explicitly a pre-payment verification step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening 'Before paying:' gives an explicit trigger condition that clearly separates it from the pay_invoice sibling. It does not name the siblings as alternatives or state when not to use it, so it stops short of a full when/when-not statement.
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
- Added
confirm_delivery
3 tool updates
- First observed
get_invoice - First observed
pay_invoice - First observed
verify_seller
Related MCP Connectors
USDC/x402 agent marketplace. Verified Base mainnet pilot, testnet and public enrollment.
Agentic commerce network: discover sellers and products, negotiate, and pay USDC on Base via x402.
x402 payment firewall + Agent Credit Bureau. Invoice/verify/score via RLUSD on XRPL.
Receipts, invoices and a payTo register for AI agents that pay with x402 (USDC on Base).
Related MCP Servers
- AlicenseNot gradedqualityBmaintenancex402 utilities for AI agents on Base: USDC payment verification, wallet risk scores and signed receipts. $0.01 USDC per call via x402.MIT
- FlicenseNot gradedqualityBmaintenanceEnables agents to vet merchants, create and verify USDC charges and invoices, assess trust and tokenized-asset authenticity, and manage provable books on Base, all non-custodially.62 npm-
- AlicenseNot gradedqualityCmaintenanceUSDC payments for AI agents on Base. Direct transfers, pre-funded tabs, x402 paywall handling, and service discovery.155 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to make pay-per-call USDC payments on Base via x402 for headless page rendering, temporary file hosting, scheduled callbacks, and pump.fun launch and trend feeds.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.