Skip to main content
Glama

send_text_letter

Destructive

Mail a letter written as plain text, for letters composed in chat. mailbox.bot sets the text exactly as given on US Letter pages (Times 12 pt, 1-inch margins; no letterhead, logo or signature image) and submits it through send_outbound_mail, so the same scopes, approval, cost caps and proof apply and staff print and mail it. Run with dry_run: true first to see the exact cost; with a live key this spends the account owner's prepaid credits, and a key that requires approval holds the letter until the owner approves it in the dashboard. Requires mailbox_md_version from get_mailbox_md. Up to 15,000 characters of Latin text. For a PDF, letterhead or images, use send_outbound_mail.

Input Schema

NameRequiredDescriptionDefault
dry_runNotrue returns the exact cost and checks without creating, charging or mailing anything.
metadataNoYour own reference fields, echoed back in status and webhooks.
mail_classYesUSPS: first_class (no carrier tracking; mailbox.bot records photo proof), priority (USPS Tracking), certified (USPS tracking plus proof of mailing and delivery), certified_return_receipt (certified plus electronic return receipt). FedEx: fedex_ground, fedex_express (Express Saver, about 3 business days), fedex_2day, fedex_overnight.
return_zipNoReturn ZIP code.
agent_notesNoNotes for the owner and the facility.
letter_textYesThe full letter as plain text: date, greeting, body and sign-off as they should print. Line breaks are kept.
return_cityNoReturn city.
return_nameNoReturn name. Defaults to the account's saved return address.
return_line1NoReturn street address. Defaults to the account's saved return address.
return_line2NoReturn suite or unit.
return_stateNoReturn state, 2 letters.
recipient_zipYesRecipient ZIP code.
max_cost_centsNoRefuse the letter if it would cost more than this, in cents.
recipient_cityYesRecipient city.
recipient_nameNoRecipient name.
return_companyNoReturn company line.
recipient_line1YesRecipient street address.
recipient_line2NoSuite, unit or floor.
recipient_stateYesRecipient state, 2 letters.
recipient_companyNoRecipient company or organization line.
requires_approvalNotrue holds the letter until the owner approves it in the dashboard.
delivery_signatureNoOptional signature on delivery for a single letter (batch mail has none). FedEx classes: indirect (FedEx Indirect Signature Required, $8.00: someone at the address, a neighbor, or the recipient on a signed door tag); direct (FedEx Direct Signature Required, $8.50: someone at the address); adult (FedEx Adult Signature Required, $11.00: an adult 21 or older at the address, with ID). priority: direct (USPS Signature Confirmation, $5.00: someone at the address); adult (USPS Adult Signature Required, $11.00: an adult 21 or older at the address, with ID). certified and certified_return_receipt: restricted (USPS Restricted Delivery, $10.00: only the addressee, or an agent they authorized in writing). first_class has no signature service. Omit it or send none for no signature. The fee is added to the price and itemized as cost_breakdown.delivery_signature_cents.
mailbox_md_versionYesCurrent MAILBOX.md version from get_mailbox_md. Required.

Output Schema

NameRequiredDescriptionDefault
resultYesThe send_outbound_mail result: status, cost breakdown, human review and next step.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / delivery_signature
      Added value: +{
      +  "description": "Optional signature on delivery for a single letter (batch mail has none). FedEx classes: indirect (FedEx Indirect Signature Required, $8.00: someone at the address, a neighbor, or the recipient on a signed door tag); direct (FedEx Direct Signature Required, $8.50: someone at the address); adult (FedEx Adult Signature Required, $11.00: an adult 21 or older at the address, with ID). priority: direct (USPS Signature Confirmation, $5.00: someone at the address); adult (USPS Adult Signature Required, $11.00: an adult 21 or older at the address, with ID). certified and certified_return_receipt: restricted (USPS Restricted Delivery, $10.00: only the addressee, or an agent they authorized in writing). first_class has no signature service. Omit it or send none for no signature. The fee is added to the price and itemized as cost_breakdown.delivery_signature_cents.",
      +  "enum": [
      +    "none",
      +    "indirect",
      +    "direct",
      +    "adult",
      +    "restricted"
      +  ],
      +  "type": "string"
      +}
  2. Changed2 schema fields changed
    • changedInput schema / properties / mail_class / description
      Previous value: -"USPS: first_class (no carrier tracking; mailbox.bot records photo proof), priority (USPS Tracking), certified (USPS tracking plus proof of mailing and delivery), certified_return_receipt (certified plus electronic return receipt). FedEx: fedex_ground, fedex_express (Express Saver, about 3 business days), fedex_2day, fedex_overnight. UPS: ups_ground, ups_2day (2nd Day Air), ups_next_day (Next Day Air)."New value: +"USPS: first_class (no carrier tracking; mailbox.bot records photo proof), priority (USPS Tracking), certified (USPS tracking plus proof of mailing and delivery), certified_return_receipt (certified plus electronic return receipt). FedEx: fedex_ground, fedex_express (Express Saver, about 3 business days), fedex_2day, fedex_overnight."
    • changedInput schema / properties / mail_class / enum
      Previous value: -[
      -  "first_class",
      -  "priority",
      -  "certified",
      -  "certified_return_receipt",
      -  "fedex_ground",
      -  "fedex_express",
      -  "fedex_2day",
      -  "fedex_overnight",
      -  "ups_ground",
      -  "ups_2day",
      -  "ups_next_day"
      -]New value: +[
      +  "first_class",
      +  "priority",
      +  "certified",
      +  "certified_return_receipt",
      +  "fedex_ground",
      +  "fedex_express",
      +  "fedex_2day",
      +  "fedex_overnight"
      +]
  3. Changed2 schema fields changed
    • changedInput schema / properties / mail_class / description
      Previous value: -"USPS: first_class (no carrier tracking; mailbox.bot records photo proof), priority (USPS Tracking), certified (USPS tracking plus proof of mailing and delivery), certified_return_receipt (certified plus electronic return receipt). FedEx: fedex_ground, fedex_express (Express Saver, about 3 business days), fedex_2day, fedex_overnight."New value: +"USPS: first_class (no carrier tracking; mailbox.bot records photo proof), priority (USPS Tracking), certified (USPS tracking plus proof of mailing and delivery), certified_return_receipt (certified plus electronic return receipt). FedEx: fedex_ground, fedex_express (Express Saver, about 3 business days), fedex_2day, fedex_overnight. UPS: ups_ground, ups_2day (2nd Day Air), ups_next_day (Next Day Air)."
    • changedInput schema / properties / mail_class / enum
      Previous value: -[
      -  "first_class",
      -  "priority",
      -  "certified",
      -  "certified_return_receipt",
      -  "fedex_ground",
      -  "fedex_express",
      -  "fedex_2day",
      -  "fedex_overnight"
      -]New value: +[
      +  "first_class",
      +  "priority",
      +  "certified",
      +  "certified_return_receipt",
      +  "fedex_ground",
      +  "fedex_express",
      +  "fedex_2day",
      +  "fedex_overnight",
      +  "ups_ground",
      +  "ups_2day",
      +  "ups_next_day"
      +]
  4. Added

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the destructive/openWorld/non-idempotent annotations: it discloses that live calls spend the owner's prepaid credits, that approval-gated keys hold the letter until dashboard approval, that mail is physically printed by staff, that the same scopes/cost caps/proof as send_outbound_mail apply, and the exact typesetting used. This is precisely the context an agent needs before an irreversible spend.

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

Conciseness4/5

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

Front-loaded with the purpose and formatting rules before moving to cost/approval behavior and the sibling alternative. Dense but every clause carries operational information; the typesetting parenthetical is the only mildly expendable detail.

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 23-parameter, destructive, money-spending tool with an output schema, the description covers cost, approval, prerequisites, physical fulfillment and the sibling alternative. Minor gaps: nothing on what a successful submission returns beyond the existence of an output schema, and no mention of recipient address validation or what happens with invalid characters.

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 100%, so the baseline is 3; the description still adds meaning, notably the 'Latin text' script limitation and the 15,000-character ceiling phrased as an authoring constraint, plus a recommended dry_run workflow for pricing. It does not add anything about mail_class or the return-address defaults, which remain schema-only.

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 ('Mail a letter written as plain text') and immediately scopes who it is for ('letters composed in chat'). It distinguishes itself from send_outbound_mail by naming the alternative for PDFs/letterhead/images, so an agent can route without opening either 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?

Explicit when-to-use and when-not-to-use: 'For a PDF, letterhead or images, use send_outbound_mail', plus a mandatory prerequisite ('Requires mailbox_md_version from get_mailbox_md') and a recommended first step ('Run with dry_run: true first to see the exact cost').

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.