Skip to main content
Glama

PaperAgent — Send Physical Mail

Update a Letter Draft

update_draft

Change the recipient, body, tier or colour of a draft that has not been sent, and re-price it. Returns a new page count and a new quote, so the previous total is void — state the new total to the user before sending. The 6-printed-page maximum applies to the new body as well: a replacement that renders to 7 or more pages is refused and the draft is left as it was. This creates nothing and mails nothing.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
toNoA complete US postal address. US domestic addresses only.
tierNoWhich product to buy. Call get_pricing first and pass a tier it lists: standard is a plain First-Class letter. certified, certified_err, proof_of_mailing and registered are other products the current price card may not sell, and a tier it does not sell is refused rather than substituted — so do not describe one to the user until get_pricing has listed it.
colourNoOmit this. The current price card prints black & white only; true is refused.
draft_idYesThe draft_id returned by create_draft.
body_markdownNoReplaces the whole letter text. It must render to 6 printed pages or fewer — roughly 2,400 words of body text.
from_address_idNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
noteYesThe next call to make. Read it before answering the user.
tierYesThe product this draft is priced as, as passed to create_draft or update_draft.
quoteYesA priced letter. State total.display to the user before sending, and pass total.amount_cents as confirm_total_cents.
draft_idYesPass this to preview_draft, update_draft and send_letter.
expires_atYesISO 8601 instant the draft is deleted. Nothing is charged if it expires.
page_countYesPrinted pages, as counted by the renderer. Never more than 6 — a longer body is refused.
tier_titleYesWhat the price card in force calls that product, such as Standard. Use this name when you tell the user what they are buying.
sheet_countYesSheets of paper this letter is printed on: one page per sheet, one side each, up to 3 pages; a letter of 4 to 6 pages is printed on both sides, so it is never more than 3 sheets.
included_pagesYesPrinted pages the headline price covers. This draft is priced at that total up to this many pages.

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?

Beyond the annotations (which only assert destructiveHint=false and readOnlyHint=false), the description discloses the re-pricing consequence ('previous total is void'), the 6-page constraint and its enforcement ('a replacement that renders to 7 or more pages is refused and the draft is left as it was'), and that partial failure leaves state intact. That is exactly the kind of behavioral detail annotations cannot carry.

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?

Three sentences, front-loaded with the action and followed by consequence, constraint, and scope boundary. Nothing is redundant and each sentence earns its place.

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?

With an output schema present the return values need no explanation, yet the description still flags the new page count and quote. Combined with annotations and complete nested schema coverage, an agent has everything needed to call this correctly.

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 high (83%), so the baseline is 3, but the description goes past the schema by tying the body param to the 6-printed-page refusal rule and its state-preservation behavior, and by reinforcing that the new quote must be surfaced to the user before sending.

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?

The description states a specific verb and resource ('Change the recipient, body, tier or colour of a draft') and scopes it to one 'that has not been sent'. It also names the editable fields, so an agent can distinguish it from create_draft, send_letter and preview_draft without opening a 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?

It gives clear context — a draft that has not been sent — and closes the 'creates/mails' door ('This creates nothing and mails nothing'), which implicitly routes send_letter and create_draft to their own tools. It does not, however, explicitly name those alternatives or state when-not to use it in those words.

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