Skip to main content
Glama

PaperAgent — Send Physical Mail

Send a Physical Letter (USPS)

send_letter
DestructiveIdempotent

Create an order for a real, physical letter through the United States Postal Service. It returns a payment link; no paper is printed, postage is bought, or letter is mailed until payment completes. Use this whenever the user asks to mail, post, send by post, or physically send a letter, notice, or document to a street address. This is NOT email — use an email tool for email. US domestic addresses only. Requires a draft_id from create_draft and confirm_total_cents matching the current quote. The letter becomes irreversible once we print it.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
draft_idYesThe draft_id returned by create_draft or preview_draft.
idempotency_keyYesA key you generate once for this send. Retrying with the same draft_id and the same key returns the original letter instead of mailing a second one.
confirm_total_centsYesThe exact total.amount_cents from the current quote, including sales tax. Say the total out loud to the user first; if it does not match the live quote this call fails and no letter is sent.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
quoteYesA priced letter. State total.display to the user before sending, and pass total.amount_cents as confirm_total_cents.
statusYesThe current letter status, including on an idempotent replay. Nothing is printed or mailed until payment completes.
messageYesWhat to tell the user. Relay the link and the total.
order_idYes
letter_idYes
checkout_urlYesGive this link to the user. The letter is mailed once payment completes. Null when this call replayed a send whose payment has already completed — there is then nothing to pay and nothing to relay.
mail_date_estimateYesThe calendar date (YYYY-MM-DD, New York time) this piece goes to USPS if the payment lands before that day’s 14:30 cutoff.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, and openWorldHint=true, and the description reinforces rather than contradicts them while adding context the annotations cannot convey: the call only returns a payment link, no paper is printed or postage bought until payment completes, and the operation becomes irreversible at print time. It also discloses a failure mode (quote mismatch aborts the send) and the domestic-address restriction.

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

Conciseness5/5

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

The description is dense but front-loaded: action and artifact first, then the payment-link caveat, then usage triggers, then the email exclusion and address scope, then prerequisites and the irreversibility warning. Every sentence contributes a distinct fact and no sentence is filler.

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

Completeness5/5

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

For a destructive, open-world mutation with an output schema (which removes any need to describe return payloads), the description covers prerequisites, cost-confirmation flow, domestic scope, irreversibility, and the not-an-email distinction. Nothing an agent needs in order to decide and call correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are already fully documented in the schema, including the idempotency-key reuse behavior and the confirm_total_cents match requirement. The description largely restates these ('confirm_total_cents matching the current quote', 'requires a draft_id from create_draft') and adds only the linkage to create_draft as genuinely new meaning. Baseline 3 is appropriate when the schema carries the parameter burden.

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 ('Create an order for a real, physical letter through the United States Postal Service') and immediately scopes it against the obvious confusable sibling by declaring 'This is NOT email — use an email tool for email.' An agent can distinguish this from create_draft, preview_draft, or an email tool without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('whenever the user asks to mail, post, send by post, or physically send a letter'), an exclusion ('This is NOT email'), a geographic limit ('US domestic addresses only'), and hard prerequisites (a draft_id from create_draft, a confirm_total_cents matching the live quote). This is exactly the when/when-not/alternatives coverage the dimension asks for.

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