Sendpaper
Server Details
Your agent sends real postcards and letters. You approve; we print and mail.
- Status
- Healthy
- Uptime
- 100.0% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- ryan-tish/sendpaper-plugin
- GitHub Stars
- 0
- Server Listing
- sendpaper
TDQS
Scored across 6 tools
Each tool targets a distinct action-object pair: create_letter and create_postcard are separate products, while cancel_order, get_order, get_pricing, and pay_order have clearly different purposes. There is no meaningful overlap that would cause an agent to misselect.
All six tools follow a consistent snake_case verb_noun pattern (cancel_order, create_letter, create_postcard, get_order, get_pricing, pay_order). The convention is predictable throughout.
Six tools is well-scoped for a printed-mail ordering service. Each tool earns its place, covering creation, pricing, payment, status, and cancellation without redundancy.
The core lifecycle is covered: create letter/postcard, pay, retrieve status, cancel, and check pricing. Minor gaps exist, such as no list_orders to retrieve a user's order history or edit a draft before payment, but agents can work around these if the user provides an order id.
Available Tools
6 toolscancel_orderCancel an unpaid orderADestructiveIdempotentInspect
Cancel an order that has not been paid yet. Paid orders can be cancelled by emailing support before they are printed.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | Order id, ord_… |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Order id, ord_… |
| batch | No | Present when the order was created with recipients: the whole group. The top-level fields describe the first recipient's order; use batch.price and batch.checkout_url for the total and payment. |
| price | Yes | |
| object | Yes | |
| orders | No | Every order in the group, when created with recipients |
| status | Yes | awaiting_payment, paid, printing, mailed, cancelled or refunded |
| product | Yes | Product id, e.g. postcard_4x6 or letter_certified |
| discount | Yes | First-order discount, already taken off price; null when none applies |
| tracking | Yes | USPS tracking, for Certified Mail once printed |
| certified | Yes | none, certified or certified_return_receipt |
| order_url | Yes | Order status page |
| preview_url | Yes | Exact print preview |
| checkout_url | Yes | Where the user pays; null once paid or cancelled |
| product_name | Yes | |
| status_detail | Yes | Plain-English status to show the user |
| preview_image_url | No | PNG picture of the piece (postcard front and back, or the letter's first page) to show the user |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description adds real behavioral context beyond that: the eligibility boundary (unpaid only) and the escalation route for paid orders. It does not spell out what state the order lands in after cancellation, which keeps it short of a 5.
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?
Two tight sentences with the primary constraint front-loaded and the fallback path second. No filler, no repetition of the title.
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?
An output schema exists, so return values need not be described. Between the annotations, the schema and these two sentences, an agent has what it needs to decide and invoke correctly; only the post-cancellation order state is unstated, which is minor.
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?
One parameter with 100% schema description coverage ('Order id, ord_…'), so the schema fully documents the input. The description adds no format, prefix or validation detail beyond that, making the baseline 3 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?
Names a specific verb and resource ('Cancel an order') and adds a scope constraint ('that has not been paid yet'), which is more than a restatement of the title. It does not explicitly differentiate itself from the siblings, but none of them (create_letter, create_postcard, get_order, get_pricing, pay_order) overlap with cancellation, so ambiguity is low.
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?
States the condition for use (order must be unpaid) and gives an explicit alternative path for the excluded case (paid orders must go through support email before printing). It stops short of naming a sibling tool, but there is no sibling that performs this action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_letterCreate a letterAInspect
Create a printed letter order (8.5x11, mailed in a #10 envelope) and get a payment link. Either write it (content.body, up to ~3 pages, optional photo) or mail the user's own PDF (content.pdf_url, a public https link, up to 6 pages). Set certified to "certified" for USPS Certified Mail with tracking and proof of delivery, or "certified_return_receipt" to add the recipient's signature; use these when the user needs proof (tax notice replies, lease notices, disputes, demand letters). Or set express for USPS Priority Mail (not with certified). Prices: get_pricing. Mails only after the user pays.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Recipient's US mailing address (or use recipients for several people) | |
| from | Yes | Return address; printed on the mail piece | |
| content | Yes | The letter: body text (optionally with a photo) or your own PDF | |
| express | No | Send by express (USPS Priority Mail, usually 2–3 days, with tracking) for an extra charge; see get_pricing. Not available with certified. | |
| certified | No | USPS Certified Mail. "certified": tracking number and proof of mailing and delivery. "certified_return_receipt": adds the recipient's signature as proof of delivery, which landlords, courts and agencies often require. "none": regular First-Class. Prices: get_pricing. | none |
| recipients | No | Send the same piece to several people: 2-25 US addresses, used INSTEAD of to. Each gets their own order and tracking; one payment covers all. | |
| customer_email | No | Where to send the receipt and status updates | |
| idempotency_key | No | Any unique string; retrying with the same key returns the original order instead of creating a duplicate |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Order id, ord_… |
| batch | No | Present when the order was created with recipients: the whole group. The top-level fields describe the first recipient's order; use batch.price and batch.checkout_url for the total and payment. |
| price | Yes | |
| object | Yes | |
| orders | No | Every order in the group, when created with recipients |
| status | Yes | awaiting_payment, paid, printing, mailed, cancelled or refunded |
| product | Yes | Product id, e.g. postcard_4x6 or letter_certified |
| discount | Yes | First-order discount, already taken off price; null when none applies |
| tracking | Yes | USPS tracking, for Certified Mail once printed |
| certified | Yes | none, certified or certified_return_receipt |
| order_url | Yes | Order status page |
| preview_url | Yes | Exact print preview |
| checkout_url | Yes | Where the user pays; null once paid or cancelled |
| product_name | Yes | |
| status_detail | Yes | Plain-English status to show the user |
| preview_image_url | No | PNG picture of the piece (postcard front and back, or the letter's first page) to show the user |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare it is a write operation (readOnlyHint=false) that is non-destructive and open-world; the description adds the crucial behavioral fact that nothing mails until the user pays, plus the payment-link flow. It does not describe rate limits or cancellation, but a sibling cancel_order exists so that is inferable.
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-loads what the tool produces, then the content choice, then the mailing options. Dense but every sentence carries a decision-relevant constraint; only slight compression cost from packing pricing and enum guidance together.
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 an 8-parameter, multi-mode, payment-gated tool with an output schema, the description covers the key decision paths (body vs PDF, certified levels, express) and the pay-before-mail rule. It omits the multi-recipient 'recipients' path, which the schema documents but the description never mentions.
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 baseline is 3, but the description adds real decision semantics: body vs pdf_url mutually exclusive alternatives with page limits, certified enum value meanings, and the express/certified incompatibility. This meaningfully exceeds the schema text.
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+resource ('Create a printed letter order') and immediately scopes it (8.5x11, #10 envelope, returns a payment link). It is clearly distinguishable from the sibling create_postcard by naming the letter format and envelope.
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 concrete when-to-use guidance for certified vs certified_return_receipt (tax notice replies, lease notices, disputes) and notes express is 'not with certified'. It does not explicitly contrast against create_postcard, but the routing to get_pricing and the payment-gated flow are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_postcardCreate a postcardAInspect
Create a postcard order (4x6, 6x9 or 6x11) and get a payment link. Front layouts: a big headline on a color, one photo, a photo with a caption, or a collage of 2-4 photos; the back carries the message (handwriting, serif or sans) and addresses. Set express for USPS Priority Mail (2-3 days, tracked). Mails only after the user pays.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Recipient's US mailing address (or use recipients for several people) | |
| from | Yes | Return address; printed on the mail piece | |
| size | No | Postcard size: 4x6, 6x9 or 6x11 (see get_pricing for prices) | 4x6 |
| content | Yes | Front (an image URL or a headline) and the message on the back | |
| express | No | Send by express (USPS Priority Mail, usually 2–3 days, with tracking) for an extra charge; see get_pricing. Not available with certified. | |
| recipients | No | Send the same piece to several people: 2-25 US addresses, used INSTEAD of to. Each gets their own order and tracking; one payment covers all. | |
| customer_email | No | Where to send the receipt and status updates | |
| idempotency_key | No | Any unique string; retrying with the same key returns the original order instead of creating a duplicate |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Order id, ord_… |
| batch | No | Present when the order was created with recipients: the whole group. The top-level fields describe the first recipient's order; use batch.price and batch.checkout_url for the total and payment. |
| price | Yes | |
| object | Yes | |
| orders | No | Every order in the group, when created with recipients |
| status | Yes | awaiting_payment, paid, printing, mailed, cancelled or refunded |
| product | Yes | Product id, e.g. postcard_4x6 or letter_certified |
| discount | Yes | First-order discount, already taken off price; null when none applies |
| tracking | Yes | USPS tracking, for Certified Mail once printed |
| certified | Yes | none, certified or certified_return_receipt |
| order_url | Yes | Order status page |
| preview_url | Yes | Exact print preview |
| checkout_url | Yes | Where the user pays; null once paid or cancelled |
| product_name | Yes | |
| status_detail | Yes | Plain-English status to show the user |
| preview_image_url | No | PNG picture of the piece (postcard front and back, or the letter's first page) to show the user |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, destructiveHint=false and openWorldHint=true. The description adds real behavioral value the annotations cannot: the order is created but nothing mails until the user pays, a payment link is returned, and express triggers USPS Priority Mail (2-3 days, tracked). It stops short of covering idempotency behavior or any auth/permission requirements.
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 dense sentences, with the core action and payment-link outcome front-loaded before the layout/size and shipping details. Every sentence carries information, though the layout enumeration is somewhat schema-duplicative.
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?
An output schema exists so return values needn't be explained, and the description covers the create-then-pay lifecycle, sizing, front/back content and express shipping. It omits the multi-recipient path and idempotency nuance, but those are fully described in the schema, so nothing critical 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?
With schema description coverage at 100%, the schema already documents every parameter and enum, so the baseline is 3. The description restates sizes, layouts and the express trade-off but adds no format or constraint detail (e.g. recipients-vs-to exclusivity, idempotency_key) beyond what the schema already carries.
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?
The description opens with a specific verb and resource ('Create a postcard order') plus the returned artifact ('get a payment link'), and enumerates sizes and layouts. It is clearly distinguishable from siblings in intent, but it never contrasts itself with the very similar create_letter, leaving the agent to infer which to pick.
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 implied through the workflow ('Mails only after the user pays', 'get a payment link'), which hints this runs before pay_order, and it cross-references get_pricing for prices. It never states when to choose this over create_letter or what prerequisites/preconditions apply, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_orderCheck an orderARead-onlyInspect
Get the status of a postcard or letter order by id (ord_...).
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | Order id, ord_… |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Order id, ord_… |
| batch | No | Present when the order was created with recipients: the whole group. The top-level fields describe the first recipient's order; use batch.price and batch.checkout_url for the total and payment. |
| price | Yes | |
| object | Yes | |
| orders | No | Every order in the group, when created with recipients |
| status | Yes | awaiting_payment, paid, printing, mailed, cancelled or refunded |
| product | Yes | Product id, e.g. postcard_4x6 or letter_certified |
| discount | Yes | First-order discount, already taken off price; null when none applies |
| tracking | Yes | USPS tracking, for Certified Mail once printed |
| certified | Yes | none, certified or certified_return_receipt |
| order_url | Yes | Order status page |
| preview_url | Yes | Exact print preview |
| checkout_url | Yes | Where the user pays; null once paid or cancelled |
| product_name | Yes | |
| status_detail | Yes | Plain-English status to show the user |
| preview_image_url | No | PNG picture of the piece (postcard front and back, or the letter's first page) to show the user |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered without the description. The description adds the id prefix format hint, which is minor, and says nothing about ordering of results, caching, or error behavior for unknown ids.
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, with zero filler. Nothing could be removed without losing information.
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 read tool with full schema coverage, complete annotations, and an output schema that carries the return shape, the description is nearly sufficient. It only misses any note on error cases or what 'status' values may appear.
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 description coverage is 100% and the single parameter already documents 'Order id, ord_…'. The description's '(ord_...)' repeats what the schema provides rather than adding new meaning, so the baseline of 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 and resource ('Get the status of a postcard or letter order') and scopes it by id, so the agent can distinguish it from cancel_order or pay_order in practice. It never names a sibling explicitly, so it stops short of a 5.
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 read-only 'get the status' framing implies the usage context (lookup rather than mutation), but there is no explicit when-to-use, no prerequisites, and no mention of the alternative order-management tools. Implied usage only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricingGet pricesARead-onlyInspect
List mail products and prices (USD, printing + USPS First-Class postage included, US addresses only).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| express | Yes | Surcharge for express delivery |
| payment | Yes | |
| products | Yes | |
| pdf_letters | Yes | Mailing your own PDF as a letter |
| letter_photo | Yes | Surcharge for a letter printed in color (a photo, or a PDF with color on) |
| first_order_discount | Yes | Current first-order discount (0 when none) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered structurally. The description adds meaningful business context beyond that: prices are in USD, include printing plus USPS First-Class postage, and apply to US addresses only — constraints an agent cannot derive from annotations or schema.
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?
A single front-loaded sentence that conveys the resource and three scoping constraints with no filler. Every clause earns its place.
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 parameters, full annotation coverage, and an output schema handling return values, the description only needs to convey scope — which it does (USD, postage included, US-only). Nothing an agent needs to call this 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?
The tool takes zero parameters, so the baseline is 4. Schema coverage is 100% and there is nothing for the description to disambiguate about inputs.
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 (List) and resource (mail products and prices) with currency and scope qualifiers, so the agent immediately knows this is a catalog lookup rather than an ordering action. It does not name sibling tools, but the contrast with create_letter/create_postcard/pay_order is obvious from the verb.
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?
Use is implied (fetch price list, presumably before creating or paying for an order) but never stated. There are no explicit when/when-not cues or references to alternatives, so the agent must infer the trigger from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pay_orderPay for an orderADestructiveIdempotentInspect
Pay for an unpaid order with a Stripe shared payment token (spt_…) the user approved, scoped to at least the order amount in USD. For an order created with recipients, this pays for the whole group at once (scope the token to batch.price). On success the order is paid and goes to print. Use only after the user approved the purchase.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | Order id from create_postcard or create_letter, ord_… | |
| shared_payment_token | Yes | Stripe shared payment token, spt_… |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Order id, ord_… |
| batch | No | Present when the order was created with recipients: the whole group. The top-level fields describe the first recipient's order; use batch.price and batch.checkout_url for the total and payment. |
| price | Yes | |
| object | Yes | |
| orders | No | Every order in the group, when created with recipients |
| status | Yes | awaiting_payment, paid, printing, mailed, cancelled or refunded |
| product | Yes | Product id, e.g. postcard_4x6 or letter_certified |
| discount | Yes | First-order discount, already taken off price; null when none applies |
| tracking | Yes | USPS tracking, for Certified Mail once printed |
| certified | Yes | none, certified or certified_return_receipt |
| order_url | Yes | Order status page |
| preview_url | Yes | Exact print preview |
| checkout_url | Yes | Where the user pays; null once paid or cancelled |
| product_name | Yes | |
| status_detail | Yes | Plain-English status to show the user |
| preview_image_url | No | PNG picture of the piece (postcard front and back, or the letter's first page) to show the user |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds genuine context beyond them: the token must be scoped to at least the order amount in USD (batch.price for groups), and on success the order is paid and 'goes to print' – a side effect the annotations do not convey.
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 the core action and its required credential, followed by the group-payment edge case and the approval precondition. No filler.
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?
An output schema exists, so return values need not be described. The description covers the mutation's precondition, the credential scoping rules, the batch case, and the success side effect (order goes to print) – everything an agent needs to invoke it correctly.
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?
With 100% schema coverage, both parameters are already documented, so the baseline is 3. The description adds real meaning beyond the schema: the token must be scoped to at least the order amount in USD and, for recipient orders, to batch.price – constraints that matter for correct invocation.
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 for an unpaid order') and immediately identifies the required payment artifact (Stripe shared payment token). An agent can distinguish this from create_postcard/create_letter (creates orders) and cancel_order 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition ('Use only after the user approved the purchase') and clarifies behavior for a specific case (orders created with recipients pay the whole group at once). It does not explicitly name sibling alternatives or when-not to use, but the context is unambiguous.
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.
5 tool updates
- Changed
cancel_order1 field changed- added
Output schema / properties / preview_image_urlAdded value: +{ + "description": "PNG picture of the piece (postcard front and back, or the letter's first page) to show the user", + "type": "string" +}
- Changed
create_letter1 field changed- added
Output schema / properties / preview_image_urlAdded value: +{ + "description": "PNG picture of the piece (postcard front and back, or the letter's first page) to show the user", + "type": "string" +}
- Changed
create_postcard1 field changed- added
Output schema / properties / preview_image_urlAdded value: +{ + "description": "PNG picture of the piece (postcard front and back, or the letter's first page) to show the user", + "type": "string" +}
- Changed
get_order1 field changed- added
Output schema / properties / preview_image_urlAdded value: +{ + "description": "PNG picture of the piece (postcard front and back, or the letter's first page) to show the user", + "type": "string" +}
- Changed
pay_order1 field changed- added
Output schema / properties / preview_image_urlAdded value: +{ + "description": "PNG picture of the piece (postcard front and back, or the letter's first page) to show the user", + "type": "string" +}
6 tool updates
- Changed
cancel_order2 fields changed- added
Output schema / properties / batchAdded value: +{ + "additionalProperties": false, + "description": "Present when the order was created with recipients: the whole group. The top-level fields describe the first recipient's order; use batch.price and batch.checkout_url for the total and payment.", + "properties": { + "checkout_url": { + "description": "One payment link for every unpaid order in the group", + "type": [ + "string", + "null" + ] + }, + "count": { + "description": "How many recipients (one order each)", + "type": "number" + }, + "discount": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "amount_cents": { + "type": "number" + }, + "display": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "display", + "reason" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "price": { + "additionalProperties": false, + "description": "Total for the whole group", + "properties": { + "amount_cents": { + "type": "number" + }, + "currency": { + "type": "string" + }, + "display": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "currency", + "display" + ], + "type": "object" + }, + "url": { + "description": "Group page listing every recipient", + "type": "string" + } + }, + "required": [ + "id", + "count", + "url", + "checkout_url", + "price", + "discount" + ], + "type": "object" +} - added
Output schema / properties / ordersAdded value: +{ + "description": "Every order in the group, when created with recipients", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "order_url": { + "type": "string" + }, + "preview_url": { + "type": "string" + }, + "to": { + "type": "string" + } + }, + "required": [ + "id", + "to", + "order_url", + "preview_url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
create_letter15 fields changed- changed
Input schema / properties / certified / descriptionPrevious value: -"USPS Certified Mail. \"certified\" ($14.99): tracking number and proof of mailing and delivery. \"certified_return_receipt\" ($19.99): adds the recipient's signature as proof of delivery, which landlords, courts and agencies often require. \"none\" ($4.99): regular First-Class."New value: +"USPS Certified Mail. \"certified\": tracking number and proof of mailing and delivery. \"certified_return_receipt\": adds the recipient's signature as proof of delivery, which landlords, courts and agencies often require. \"none\": regular First-Class. Prices: get_pricing." - changed
Input schema / properties / content / descriptionPrevious value: -"The letter text and font"New value: +"The letter: body text (optionally with a photo) or your own PDF" - changed
Input schema / properties / content / properties / body / descriptionPrevious value: -"Full letter text. Plain text; blank lines separate paragraphs."New value: +"Full letter text. Plain text; blank lines separate paragraphs. Use this OR pdf_url." - added
Input schema / properties / content / properties / colorAdded value: +{ + "description": "PDF letters only: print in color (costs a little more; see get_pricing). Text letters print in color automatically when they include image_url.", + "type": "boolean" +} - changed
Input schema / properties / content / properties / font / descriptionPrevious value: -"Typeface for the letter body"New value: +"Typeface for the letter body (text letters)" - changed
Input schema / properties / content / properties / image_url / descriptionPrevious value: -"Optional photo printed at the top of the letter (https JPG or PNG). A letter with a photo prints in color, for a small surcharge (see get_pricing)."New value: +"Text letters only: optional photo printed at the top (https JPG or PNG). A letter with a photo prints in color, for a small surcharge (see get_pricing)." - added
Input schema / properties / content / properties / pdf_pagesAdded value: +{ + "description": "Set by Sendpaper: page count of the PDF", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +} - added
Input schema / properties / content / properties / pdf_urlAdded value: +{ + "description": "Mail your own document instead of body text: a public https link to a PDF (up to 6 pages). Pages are fitted to 8.5×11 and a blank address page is added in front.", + "maxLength": 2000, + "type": "string" +} - removed
Input schema / properties / content / requiredRemoved value: -[ - "body" -] - added
Input schema / properties / expressAdded value: +{ + "default": false, + "description": "Send by express (USPS Priority Mail, usually 2–3 days, with tracking) for an extra charge; see get_pricing. Not available with certified.", + "type": "boolean" +} - added
Input schema / properties / recipientsAdded value: +{ + "description": "Send the same piece to several people: 2-25 US addresses, used INSTEAD of to. Each gets their own order and tracking; one payment covers all.", + "items": { + "properties": { + "city": { + "description": "City", + "maxLength": 40, + "minLength": 2, + "type": "string" + }, + "company": { + "description": "Company name, printed under the person's name", + "maxLength": 60, + "type": "string" + }, + "line1": { + "description": "Street address", + "maxLength": 64, + "minLength": 3, + "type": "string" + }, + "line2": { + "description": "Apartment, suite, unit", + "maxLength": 64, + "type": "string" + }, + "name": { + "description": "Recipient or sender full name", + "maxLength": 60, + "minLength": 1, + "type": "string" + }, + "state": { + "description": "Two-letter US state code, e.g. NY", + "type": "string" + }, + "zip": { + "description": "5-digit US ZIP code, or ZIP+4", + "pattern": "^\\d{5}(-\\d{4})?$", + "type": "string" + } + }, + "required": [ + "name", + "line1", + "city", + "state", + "zip" + ], + "type": "object" + }, + "maxItems": 25, + "minItems": 2, + "type": "array" +} - changed
Input schema / properties / to / descriptionPrevious value: -"Recipient's US mailing address"New value: +"Recipient's US mailing address (or use recipients for several people)" - changed
Input schema / requiredPrevious value: -[ - "to", - "from", - "content" -]New value: +[ + "from", + "content" +] - added
Output schema / properties / batchAdded value: +{ + "additionalProperties": false, + "description": "Present when the order was created with recipients: the whole group. The top-level fields describe the first recipient's order; use batch.price and batch.checkout_url for the total and payment.", + "properties": { + "checkout_url": { + "description": "One payment link for every unpaid order in the group", + "type": [ + "string", + "null" + ] + }, + "count": { + "description": "How many recipients (one order each)", + "type": "number" + }, + "discount": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "amount_cents": { + "type": "number" + }, + "display": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "display", + "reason" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "price": { + "additionalProperties": false, + "description": "Total for the whole group", + "properties": { + "amount_cents": { + "type": "number" + }, + "currency": { + "type": "string" + }, + "display": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "currency", + "display" + ], + "type": "object" + }, + "url": { + "description": "Group page listing every recipient", + "type": "string" + } + }, + "required": [ + "id", + "count", + "url", + "checkout_url", + "price", + "discount" + ], + "type": "object" +} - added
Output schema / properties / ordersAdded value: +{ + "description": "Every order in the group, when created with recipients", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "order_url": { + "type": "string" + }, + "preview_url": { + "type": "string" + }, + "to": { + "type": "string" + } + }, + "required": [ + "id", + "to", + "order_url", + "preview_url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
create_postcard16 fields changed- added
Input schema / properties / content / properties / captionAdded value: +{ + "description": "photo_caption: short text over a band at the bottom of the photo", + "maxLength": 80, + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / content / properties / front_headline / descriptionPrevious value: -"Big text for the front if there is no image, e.g. 'Happy birthday, Sam!'"New value: +"headline layout: big text for the front, e.g. 'Happy birthday, Sam!'" - changed
Input schema / properties / content / properties / front_image_url / descriptionPrevious value: -"https URL of a photo or design for the front (JPG or PNG)"New value: +"https URL of a photo or design for the front (JPG or PNG); for photo and photo_caption" - added
Input schema / properties / content / properties / front_imagesAdded value: +{ + "description": "Collage: 2 to 4 https photo URLs, laid out in a grid", + "items": { + "maxLength": 2000, + "type": "string" + }, + "maxItems": 4, + "minItems": 2, + "type": "array" +} - changed
Input schema / properties / content / properties / front_theme / descriptionPrevious value: -"Color theme for a text-only front"New value: +"headline layout: color theme (ink, sky, sunset, forest, rose, sand, night, mint)" - changed
Input schema / properties / content / properties / front_theme / enumPrevious value: -[ - "ink", - "sky", - "sunset", - "forest" -]New value: +[ + "ink", + "sky", + "sunset", + "forest", + "rose", + "sand", + "night", + "mint" +] - added
Input schema / properties / content / properties / headline_fontAdded value: +{ + "default": "serif", + "description": "Font for the headline or caption: serif, sans or script (handwritten)", + "enum": [ + "serif", + "sans", + "script" + ], + "type": "string" +} - added
Input schema / properties / content / properties / layoutAdded value: +{ + "description": "Front layout: headline (big text on a color), photo (one full-bleed photo), photo_caption (photo with a caption band), collage (2-4 photos). Inferred from the fields when omitted.", + "enum": [ + "headline", + "photo", + "photo_caption", + "collage" + ], + "type": "string" +} - changed
Input schema / properties / content / properties / message / descriptionPrevious value: -"Handwritten-style message on the back"New value: +"The message on the back" - added
Input schema / properties / content / properties / message_fontAdded value: +{ + "default": "handwriting", + "description": "Font for the message on the back", + "enum": [ + "handwriting", + "serif", + "sans" + ], + "type": "string" +} - added
Input schema / properties / expressAdded value: +{ + "default": false, + "description": "Send by express (USPS Priority Mail, usually 2–3 days, with tracking) for an extra charge; see get_pricing. Not available with certified.", + "type": "boolean" +} - added
Input schema / properties / recipientsAdded value: +{ + "description": "Send the same piece to several people: 2-25 US addresses, used INSTEAD of to. Each gets their own order and tracking; one payment covers all.", + "items": { + "properties": { + "city": { + "description": "City", + "maxLength": 40, + "minLength": 2, + "type": "string" + }, + "company": { + "description": "Company name, printed under the person's name", + "maxLength": 60, + "type": "string" + }, + "line1": { + "description": "Street address", + "maxLength": 64, + "minLength": 3, + "type": "string" + }, + "line2": { + "description": "Apartment, suite, unit", + "maxLength": 64, + "type": "string" + }, + "name": { + "description": "Recipient or sender full name", + "maxLength": 60, + "minLength": 1, + "type": "string" + }, + "state": { + "description": "Two-letter US state code, e.g. NY", + "type": "string" + }, + "zip": { + "description": "5-digit US ZIP code, or ZIP+4", + "pattern": "^\\d{5}(-\\d{4})?$", + "type": "string" + } + }, + "required": [ + "name", + "line1", + "city", + "state", + "zip" + ], + "type": "object" + }, + "maxItems": 25, + "minItems": 2, + "type": "array" +} - changed
Input schema / properties / to / descriptionPrevious value: -"Recipient's US mailing address"New value: +"Recipient's US mailing address (or use recipients for several people)" - changed
Input schema / requiredPrevious value: -[ - "to", - "from", - "content" -]New value: +[ + "from", + "content" +] - added
Output schema / properties / batchAdded value: +{ + "additionalProperties": false, + "description": "Present when the order was created with recipients: the whole group. The top-level fields describe the first recipient's order; use batch.price and batch.checkout_url for the total and payment.", + "properties": { + "checkout_url": { + "description": "One payment link for every unpaid order in the group", + "type": [ + "string", + "null" + ] + }, + "count": { + "description": "How many recipients (one order each)", + "type": "number" + }, + "discount": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "amount_cents": { + "type": "number" + }, + "display": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "display", + "reason" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "price": { + "additionalProperties": false, + "description": "Total for the whole group", + "properties": { + "amount_cents": { + "type": "number" + }, + "currency": { + "type": "string" + }, + "display": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "currency", + "display" + ], + "type": "object" + }, + "url": { + "description": "Group page listing every recipient", + "type": "string" + } + }, + "required": [ + "id", + "count", + "url", + "checkout_url", + "price", + "discount" + ], + "type": "object" +} - added
Output schema / properties / ordersAdded value: +{ + "description": "Every order in the group, when created with recipients", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "order_url": { + "type": "string" + }, + "preview_url": { + "type": "string" + }, + "to": { + "type": "string" + } + }, + "required": [ + "id", + "to", + "order_url", + "preview_url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
get_order2 fields changed- added
Output schema / properties / batchAdded value: +{ + "additionalProperties": false, + "description": "Present when the order was created with recipients: the whole group. The top-level fields describe the first recipient's order; use batch.price and batch.checkout_url for the total and payment.", + "properties": { + "checkout_url": { + "description": "One payment link for every unpaid order in the group", + "type": [ + "string", + "null" + ] + }, + "count": { + "description": "How many recipients (one order each)", + "type": "number" + }, + "discount": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "amount_cents": { + "type": "number" + }, + "display": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "display", + "reason" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "price": { + "additionalProperties": false, + "description": "Total for the whole group", + "properties": { + "amount_cents": { + "type": "number" + }, + "currency": { + "type": "string" + }, + "display": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "currency", + "display" + ], + "type": "object" + }, + "url": { + "description": "Group page listing every recipient", + "type": "string" + } + }, + "required": [ + "id", + "count", + "url", + "checkout_url", + "price", + "discount" + ], + "type": "object" +} - added
Output schema / properties / ordersAdded value: +{ + "description": "Every order in the group, when created with recipients", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "order_url": { + "type": "string" + }, + "preview_url": { + "type": "string" + }, + "to": { + "type": "string" + } + }, + "required": [ + "id", + "to", + "order_url", + "preview_url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
get_pricing8 fields changed- added
Output schema / properties / expressAdded value: +{ + "additionalProperties": false, + "description": "Surcharge for express delivery", + "properties": { + "amount_cents": { + "type": "number" + }, + "description": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "description" + ], + "type": "object" +} - added
Output schema / properties / first_order_discount / descriptionAdded value: +"Current first-order discount (0 when none)" - removed
Output schema / properties / first_order_discount / properties / amount_centsRemoved value: -{ - "type": "number" -} - added
Output schema / properties / first_order_discount / properties / percentAdded value: +{ + "type": "number" +} - changed
Output schema / properties / first_order_discount / requiredPrevious value: -[ - "amount_cents", - "description" -]New value: +[ + "percent", + "description" +] - changed
Output schema / properties / letter_photo / descriptionPrevious value: -"Surcharge for a letter with a photo (prints in color)"New value: +"Surcharge for a letter printed in color (a photo, or a PDF with color on)" - added
Output schema / properties / pdf_lettersAdded value: +{ + "additionalProperties": false, + "description": "Mailing your own PDF as a letter", + "properties": { + "description": { + "type": "string" + }, + "max_pages": { + "type": "number" + } + }, + "required": [ + "max_pages", + "description" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "products", - "payment", - "first_order_discount", - "letter_photo" -]New value: +[ + "products", + "payment", + "first_order_discount", + "letter_photo", + "express", + "pdf_letters" +]
- Changed
pay_order2 fields changed- added
Output schema / properties / batchAdded value: +{ + "additionalProperties": false, + "description": "Present when the order was created with recipients: the whole group. The top-level fields describe the first recipient's order; use batch.price and batch.checkout_url for the total and payment.", + "properties": { + "checkout_url": { + "description": "One payment link for every unpaid order in the group", + "type": [ + "string", + "null" + ] + }, + "count": { + "description": "How many recipients (one order each)", + "type": "number" + }, + "discount": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "amount_cents": { + "type": "number" + }, + "display": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "display", + "reason" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "price": { + "additionalProperties": false, + "description": "Total for the whole group", + "properties": { + "amount_cents": { + "type": "number" + }, + "currency": { + "type": "string" + }, + "display": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "currency", + "display" + ], + "type": "object" + }, + "url": { + "description": "Group page listing every recipient", + "type": "string" + } + }, + "required": [ + "id", + "count", + "url", + "checkout_url", + "price", + "discount" + ], + "type": "object" +} - added
Output schema / properties / ordersAdded value: +{ + "description": "Every order in the group, when created with recipients", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "order_url": { + "type": "string" + }, + "preview_url": { + "type": "string" + }, + "to": { + "type": "string" + } + }, + "required": [ + "id", + "to", + "order_url", + "preview_url" + ], + "type": "object" + }, + "type": "array" +}
6 tool updates
- Changed
cancel_order3 fields changed- added
Output schema / properties / discountAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "amount_cents": { + "type": "number" + }, + "display": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "display", + "reason" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "First-order discount, already taken off price; null when none applies" +} - removed
Output schema / properties / first_postcard_freeRemoved value: -{ - "additionalProperties": false, - "description": "Present when the first-postcard-free offer applies", - "properties": { - "applied": { - "type": "boolean" - }, - "eligible": { - "type": "boolean" - }, - "how": { - "type": "string" - } - }, - "type": "object" -} - changed
Output schema / requiredPrevious value: -[ - "id", - "object", - "product", - "product_name", - "certified", - "status", - "status_detail", - "price", - "checkout_url", - "order_url", - "preview_url", - "tracking" -]New value: +[ + "id", + "object", + "product", + "product_name", + "certified", + "status", + "status_detail", + "price", + "checkout_url", + "order_url", + "preview_url", + "tracking", + "discount" +]
- Changed
create_letter4 fields changed- added
Input schema / properties / content / properties / image_urlAdded value: +{ + "description": "Optional photo printed at the top of the letter (https JPG or PNG). A letter with a photo prints in color, for a small surcharge (see get_pricing).", + "maxLength": 2000, + "type": "string" +} - added
Output schema / properties / discountAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "amount_cents": { + "type": "number" + }, + "display": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "display", + "reason" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "First-order discount, already taken off price; null when none applies" +} - removed
Output schema / properties / first_postcard_freeRemoved value: -{ - "additionalProperties": false, - "description": "Present when the first-postcard-free offer applies", - "properties": { - "applied": { - "type": "boolean" - }, - "eligible": { - "type": "boolean" - }, - "how": { - "type": "string" - } - }, - "type": "object" -} - changed
Output schema / requiredPrevious value: -[ - "id", - "object", - "product", - "product_name", - "certified", - "status", - "status_detail", - "price", - "checkout_url", - "order_url", - "preview_url", - "tracking" -]New value: +[ + "id", + "object", + "product", + "product_name", + "certified", + "status", + "status_detail", + "price", + "checkout_url", + "order_url", + "preview_url", + "tracking", + "discount" +]
- Changed
create_postcard5 fields changed- changed
Input schema / properties / size / descriptionPrevious value: -"Postcard size: 4x6 ($2.99) or 6x9 ($3.99)"New value: +"Postcard size: 4x6, 6x9 or 6x11 (see get_pricing for prices)" - changed
Input schema / properties / size / enumPrevious value: -[ - "4x6", - "6x9" -]New value: +[ + "4x6", + "6x9", + "6x11" +] - added
Output schema / properties / discountAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "amount_cents": { + "type": "number" + }, + "display": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "display", + "reason" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "First-order discount, already taken off price; null when none applies" +} - removed
Output schema / properties / first_postcard_freeRemoved value: -{ - "additionalProperties": false, - "description": "Present when the first-postcard-free offer applies", - "properties": { - "applied": { - "type": "boolean" - }, - "eligible": { - "type": "boolean" - }, - "how": { - "type": "string" - } - }, - "type": "object" -} - changed
Output schema / requiredPrevious value: -[ - "id", - "object", - "product", - "product_name", - "certified", - "status", - "status_detail", - "price", - "checkout_url", - "order_url", - "preview_url", - "tracking" -]New value: +[ + "id", + "object", + "product", + "product_name", + "certified", + "status", + "status_detail", + "price", + "checkout_url", + "order_url", + "preview_url", + "tracking", + "discount" +]
- Changed
get_order3 fields changed- added
Output schema / properties / discountAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "amount_cents": { + "type": "number" + }, + "display": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "display", + "reason" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "First-order discount, already taken off price; null when none applies" +} - removed
Output schema / properties / first_postcard_freeRemoved value: -{ - "additionalProperties": false, - "description": "Present when the first-postcard-free offer applies", - "properties": { - "applied": { - "type": "boolean" - }, - "eligible": { - "type": "boolean" - }, - "how": { - "type": "string" - } - }, - "type": "object" -} - changed
Output schema / requiredPrevious value: -[ - "id", - "object", - "product", - "product_name", - "certified", - "status", - "status_detail", - "price", - "checkout_url", - "order_url", - "preview_url", - "tracking" -]New value: +[ + "id", + "object", + "product", + "product_name", + "certified", + "status", + "status_detail", + "price", + "checkout_url", + "order_url", + "preview_url", + "tracking", + "discount" +]
- Changed
get_pricing4 fields changed- added
Output schema / properties / first_order_discountAdded value: +{ + "additionalProperties": false, + "properties": { + "amount_cents": { + "type": "number" + }, + "description": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "description" + ], + "type": "object" +} - removed
Output schema / properties / first_postcard_freeRemoved value: -{ - "additionalProperties": false, - "properties": { - "available": { - "type": "boolean" - }, - "description": { - "type": "string" - } - }, - "required": [ - "description", - "available" - ], - "type": "object" -} - added
Output schema / properties / letter_photoAdded value: +{ + "additionalProperties": false, + "description": "Surcharge for a letter with a photo (prints in color)", + "properties": { + "amount_cents": { + "type": "number" + }, + "description": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "description" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "products", - "payment", - "first_postcard_free" -]New value: +[ + "products", + "payment", + "first_order_discount", + "letter_photo" +]
- Changed
pay_order3 fields changed- added
Output schema / properties / discountAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "amount_cents": { + "type": "number" + }, + "display": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "display", + "reason" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "First-order discount, already taken off price; null when none applies" +} - removed
Output schema / properties / first_postcard_freeRemoved value: -{ - "additionalProperties": false, - "description": "Present when the first-postcard-free offer applies", - "properties": { - "applied": { - "type": "boolean" - }, - "eligible": { - "type": "boolean" - }, - "how": { - "type": "string" - } - }, - "type": "object" -} - changed
Output schema / requiredPrevious value: -[ - "id", - "object", - "product", - "product_name", - "certified", - "status", - "status_detail", - "price", - "checkout_url", - "order_url", - "preview_url", - "tracking" -]New value: +[ + "id", + "object", + "product", + "product_name", + "certified", + "status", + "status_detail", + "price", + "checkout_url", + "order_url", + "preview_url", + "tracking", + "discount" +]
6 tool updates
- Changed
cancel_order2 fields changed- added
Input schema / properties / order_id / descriptionAdded value: +"Order id, ord_…" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "certified": { + "description": "none, certified or certified_return_receipt", + "type": "string" + }, + "checkout_url": { + "description": "Where the user pays; null once paid or cancelled", + "type": [ + "string", + "null" + ] + }, + "first_postcard_free": { + "additionalProperties": false, + "description": "Present when the first-postcard-free offer applies", + "properties": { + "applied": { + "type": "boolean" + }, + "eligible": { + "type": "boolean" + }, + "how": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "description": "Order id, ord_…", + "type": "string" + }, + "object": { + "enum": [ + "postcard", + "letter" + ], + "type": "string" + }, + "order_url": { + "description": "Order status page", + "type": "string" + }, + "preview_url": { + "description": "Exact print preview", + "type": "string" + }, + "price": { + "additionalProperties": false, + "properties": { + "amount_cents": { + "type": "number" + }, + "currency": { + "type": "string" + }, + "display": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "currency", + "display" + ], + "type": "object" + }, + "product": { + "description": "Product id, e.g. postcard_4x6 or letter_certified", + "type": "string" + }, + "product_name": { + "type": "string" + }, + "status": { + "description": "awaiting_payment, paid, printing, mailed, cancelled or refunded", + "type": "string" + }, + "status_detail": { + "description": "Plain-English status to show the user", + "type": "string" + }, + "tracking": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "number": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "number", + "url" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "USPS tracking, for Certified Mail once printed" + } + }, + "required": [ + "id", + "object", + "product", + "product_name", + "certified", + "status", + "status_detail", + "price", + "checkout_url", + "order_url", + "preview_url", + "tracking" + ], + "type": "object" +}
- Changed
create_letter13 fields changed- added
Input schema / properties / content / descriptionAdded value: +"The letter text and font" - added
Input schema / properties / content / properties / font / descriptionAdded value: +"Typeface for the letter body" - added
Input schema / properties / from / properties / city / descriptionAdded value: +"City" - added
Input schema / properties / from / properties / company / descriptionAdded value: +"Company name, printed under the person's name" - added
Input schema / properties / from / properties / state / descriptionAdded value: +"Two-letter US state code, e.g. NY" - added
Input schema / properties / from / properties / zip / descriptionAdded value: +"5-digit US ZIP code, or ZIP+4" - added
Input schema / properties / idempotency_key / descriptionAdded value: +"Any unique string; retrying with the same key returns the original order instead of creating a duplicate" - added
Input schema / properties / to / descriptionAdded value: +"Recipient's US mailing address" - added
Input schema / properties / to / properties / city / descriptionAdded value: +"City" - added
Input schema / properties / to / properties / company / descriptionAdded value: +"Company name, printed under the person's name" - added
Input schema / properties / to / properties / state / descriptionAdded value: +"Two-letter US state code, e.g. NY" - added
Input schema / properties / to / properties / zip / descriptionAdded value: +"5-digit US ZIP code, or ZIP+4" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "certified": { + "description": "none, certified or certified_return_receipt", + "type": "string" + }, + "checkout_url": { + "description": "Where the user pays; null once paid or cancelled", + "type": [ + "string", + "null" + ] + }, + "first_postcard_free": { + "additionalProperties": false, + "description": "Present when the first-postcard-free offer applies", + "properties": { + "applied": { + "type": "boolean" + }, + "eligible": { + "type": "boolean" + }, + "how": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "description": "Order id, ord_…", + "type": "string" + }, + "object": { + "enum": [ + "postcard", + "letter" + ], + "type": "string" + }, + "order_url": { + "description": "Order status page", + "type": "string" + }, + "preview_url": { + "description": "Exact print preview", + "type": "string" + }, + "price": { + "additionalProperties": false, + "properties": { + "amount_cents": { + "type": "number" + }, + "currency": { + "type": "string" + }, + "display": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "currency", + "display" + ], + "type": "object" + }, + "product": { + "description": "Product id, e.g. postcard_4x6 or letter_certified", + "type": "string" + }, + "product_name": { + "type": "string" + }, + "status": { + "description": "awaiting_payment, paid, printing, mailed, cancelled or refunded", + "type": "string" + }, + "status_detail": { + "description": "Plain-English status to show the user", + "type": "string" + }, + "tracking": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "number": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "number", + "url" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "USPS tracking, for Certified Mail once printed" + } + }, + "required": [ + "id", + "object", + "product", + "product_name", + "certified", + "status", + "status_detail", + "price", + "checkout_url", + "order_url", + "preview_url", + "tracking" + ], + "type": "object" +}
- Changed
create_postcard13 fields changed- added
Input schema / properties / content / descriptionAdded value: +"Front (an image URL or a headline) and the message on the back" - added
Input schema / properties / from / properties / city / descriptionAdded value: +"City" - added
Input schema / properties / from / properties / company / descriptionAdded value: +"Company name, printed under the person's name" - added
Input schema / properties / from / properties / state / descriptionAdded value: +"Two-letter US state code, e.g. NY" - added
Input schema / properties / from / properties / zip / descriptionAdded value: +"5-digit US ZIP code, or ZIP+4" - added
Input schema / properties / idempotency_key / descriptionAdded value: +"Any unique string; retrying with the same key returns the original order instead of creating a duplicate" - added
Input schema / properties / size / descriptionAdded value: +"Postcard size: 4x6 ($2.99) or 6x9 ($3.99)" - added
Input schema / properties / to / descriptionAdded value: +"Recipient's US mailing address" - added
Input schema / properties / to / properties / city / descriptionAdded value: +"City" - added
Input schema / properties / to / properties / company / descriptionAdded value: +"Company name, printed under the person's name" - added
Input schema / properties / to / properties / state / descriptionAdded value: +"Two-letter US state code, e.g. NY" - added
Input schema / properties / to / properties / zip / descriptionAdded value: +"5-digit US ZIP code, or ZIP+4" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "certified": { + "description": "none, certified or certified_return_receipt", + "type": "string" + }, + "checkout_url": { + "description": "Where the user pays; null once paid or cancelled", + "type": [ + "string", + "null" + ] + }, + "first_postcard_free": { + "additionalProperties": false, + "description": "Present when the first-postcard-free offer applies", + "properties": { + "applied": { + "type": "boolean" + }, + "eligible": { + "type": "boolean" + }, + "how": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "description": "Order id, ord_…", + "type": "string" + }, + "object": { + "enum": [ + "postcard", + "letter" + ], + "type": "string" + }, + "order_url": { + "description": "Order status page", + "type": "string" + }, + "preview_url": { + "description": "Exact print preview", + "type": "string" + }, + "price": { + "additionalProperties": false, + "properties": { + "amount_cents": { + "type": "number" + }, + "currency": { + "type": "string" + }, + "display": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "currency", + "display" + ], + "type": "object" + }, + "product": { + "description": "Product id, e.g. postcard_4x6 or letter_certified", + "type": "string" + }, + "product_name": { + "type": "string" + }, + "status": { + "description": "awaiting_payment, paid, printing, mailed, cancelled or refunded", + "type": "string" + }, + "status_detail": { + "description": "Plain-English status to show the user", + "type": "string" + }, + "tracking": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "number": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "number", + "url" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "USPS tracking, for Certified Mail once printed" + } + }, + "required": [ + "id", + "object", + "product", + "product_name", + "certified", + "status", + "status_detail", + "price", + "checkout_url", + "order_url", + "preview_url", + "tracking" + ], + "type": "object" +}
- Changed
get_order2 fields changed- added
Input schema / properties / order_id / descriptionAdded value: +"Order id, ord_…" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "certified": { + "description": "none, certified or certified_return_receipt", + "type": "string" + }, + "checkout_url": { + "description": "Where the user pays; null once paid or cancelled", + "type": [ + "string", + "null" + ] + }, + "first_postcard_free": { + "additionalProperties": false, + "description": "Present when the first-postcard-free offer applies", + "properties": { + "applied": { + "type": "boolean" + }, + "eligible": { + "type": "boolean" + }, + "how": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "description": "Order id, ord_…", + "type": "string" + }, + "object": { + "enum": [ + "postcard", + "letter" + ], + "type": "string" + }, + "order_url": { + "description": "Order status page", + "type": "string" + }, + "preview_url": { + "description": "Exact print preview", + "type": "string" + }, + "price": { + "additionalProperties": false, + "properties": { + "amount_cents": { + "type": "number" + }, + "currency": { + "type": "string" + }, + "display": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "currency", + "display" + ], + "type": "object" + }, + "product": { + "description": "Product id, e.g. postcard_4x6 or letter_certified", + "type": "string" + }, + "product_name": { + "type": "string" + }, + "status": { + "description": "awaiting_payment, paid, printing, mailed, cancelled or refunded", + "type": "string" + }, + "status_detail": { + "description": "Plain-English status to show the user", + "type": "string" + }, + "tracking": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "number": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "number", + "url" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "USPS tracking, for Certified Mail once printed" + } + }, + "required": [ + "id", + "object", + "product", + "product_name", + "certified", + "status", + "status_detail", + "price", + "checkout_url", + "order_url", + "preview_url", + "tracking" + ], + "type": "object" +}
- Changed
get_pricing1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "first_postcard_free": { + "additionalProperties": false, + "properties": { + "available": { + "type": "boolean" + }, + "description": { + "type": "string" + } + }, + "required": [ + "description", + "available" + ], + "type": "object" + }, + "payment": { + "additionalProperties": {}, + "properties": { + "currency": { + "type": "string" + }, + "options": { + "items": { + "type": "string" + }, + "type": "array" + }, + "stripe_network_id": { + "description": "Scope Stripe shared payment tokens to this network id", + "type": "string" + } + }, + "required": [ + "options", + "currency" + ], + "type": "object" + }, + "products": { + "items": { + "additionalProperties": {}, + "properties": { + "cents": { + "type": "number" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "price": { + "description": "Display price, e.g. $2.99", + "type": "string" + } + }, + "required": [ + "id", + "name", + "cents", + "price" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "products", + "payment", + "first_postcard_free" + ], + "type": "object" +}
- Changed
pay_order2 fields changed- added
Input schema / properties / order_id / descriptionAdded value: +"Order id from create_postcard or create_letter, ord_…" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "certified": { + "description": "none, certified or certified_return_receipt", + "type": "string" + }, + "checkout_url": { + "description": "Where the user pays; null once paid or cancelled", + "type": [ + "string", + "null" + ] + }, + "first_postcard_free": { + "additionalProperties": false, + "description": "Present when the first-postcard-free offer applies", + "properties": { + "applied": { + "type": "boolean" + }, + "eligible": { + "type": "boolean" + }, + "how": { + "type": "string" + } + }, + "type": "object" + }, + "id": { + "description": "Order id, ord_…", + "type": "string" + }, + "object": { + "enum": [ + "postcard", + "letter" + ], + "type": "string" + }, + "order_url": { + "description": "Order status page", + "type": "string" + }, + "preview_url": { + "description": "Exact print preview", + "type": "string" + }, + "price": { + "additionalProperties": false, + "properties": { + "amount_cents": { + "type": "number" + }, + "currency": { + "type": "string" + }, + "display": { + "type": "string" + } + }, + "required": [ + "amount_cents", + "currency", + "display" + ], + "type": "object" + }, + "product": { + "description": "Product id, e.g. postcard_4x6 or letter_certified", + "type": "string" + }, + "product_name": { + "type": "string" + }, + "status": { + "description": "awaiting_payment, paid, printing, mailed, cancelled or refunded", + "type": "string" + }, + "status_detail": { + "description": "Plain-English status to show the user", + "type": "string" + }, + "tracking": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "number": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "number", + "url" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "USPS tracking, for Certified Mail once printed" + } + }, + "required": [ + "id", + "object", + "product", + "product_name", + "certified", + "status", + "status_detail", + "price", + "checkout_url", + "order_url", + "preview_url", + "tracking" + ], + "type": "object" +}
1 tool update
- Changed
create_letter1 field changed- added
Input schema / properties / certifiedAdded value: +{ + "default": "none", + "description": "USPS Certified Mail. \"certified\" ($14.99): tracking number and proof of mailing and delivery. \"certified_return_receipt\" ($19.99): adds the recipient's signature as proof of delivery, which landlords, courts and agencies often require. \"none\" ($4.99): regular First-Class.", + "enum": [ + "none", + "certified", + "certified_return_receipt" + ], + "type": "string" +}
6 tool updates
- First observed
cancel_order - First observed
create_letter - First observed
create_postcard - First observed
get_order - First observed
get_pricing - First observed
pay_order
Related MCP Connectors
Let AI agents prepare, review, pay for, and send real letters and postcards.
Let AI agents prepare, review, pay for, and send real letters and postcards.
Mail real US letters, postcards and certified mail from an agent, quoted before sending.
The agentic layer of letters. Agents send real printed mail worldwide, German compliance built in.
Related MCP Servers
- AlicenseAqualityDmaintenanceSend real physical postcards worldwide via AI agents. Supports single and bulk send (up to 500 recipients), balance checking, delivery tracking, and volume pricing from $0.72/card.53 npm5MIT
- FlicenseNot gradedqualityAmaintenanceBYO email for your agents. A full-featured email (gmail, outlook, imap, icloud) mailroom for you and your agents with "oops" protections built in.6-
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to prepare, price, review, pay for, and send real physical letters and postcards via a hosted MCP server.-
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to create, design, and send physical postcards directly through the PostcardAI platform. It provides comprehensive tools for managing contacts, generating postcard designs from prompts, and tracking mailing delivery metrics.-
Glama MCP Gateway
Add one secure layer between your agents and this server.