Skip to main content
Glama

Confirm delivery

confirm_delivery
Idempotent

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.

Input Schema

NameRequiredDescriptionDefault
nameNoThe agent's or person's name
noteNo
invoiceYesThe invoice's public token (UUID) or its Billify link (billify.org/pay/…, /invoice/…)
decisionNo
referenceNo
signatureNo0x-prefixed EIP-191 signature by the paying wallet

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources