MCP-Server

Sendpaper

io.github.ryan-tish/sendpaper
Commerce & Retail Öffentlich und erreichbar MCP 2025-11-25

Was dieses MCP kann

Creates, prices, pays for, cancels, and tracks printed postcard and letter orders mailed within the United States.

cancel_order
Cancel an unpaid order
Cancel an order that has not been paid yet. Paid orders can be cancelled by emailing support before they are printed.
Destruktiv Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['order_id'], 'properties': {'order_id': {'type': 'string'}}}
create_letter
Create a letter
Create a printed letter order (up to 3 pages, 8.5x11, mailed in a #10 envelope) and get a payment link. Mails only after the user pays.
Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['to', 'from', 'content'], 'properties': {'to': {'type': 'object', 'required': ['name', 'line1', 'city', 'state', 'zip'], 'properties': {'zip': {'type': 'string', 'pattern': '^\\d{5}(-\\d{4})?$'}, 'city': {'type': 'string', 'maxLength': 40, 'minLength': 2}, 'name': {'type': 'string', 'maxLength': 60, 'minLength': 1, 'description': 'Recipient or sender full name'}, 'line1': {'type': 'string', 'maxLength': 64, 'minLength': 3, 'description': 'Street address'}, 'line2': {'type': 'string', 'maxLength': 64, 'description': 'Apartment, suite, unit'}, 'state': {'type': 'string'}, 'company': {'type': 'string', 'maxLength': 60}}}, 'from': {'type': 'object', 'required': ['name', 'line1', 'city', 'state', 'zip'], 'properties': {'zip': {'type': 'string', 'pattern': '^\\d{5}(-\\d{4})?$'}, 'city': {'type': 'string', 'maxLength': 40, 'minLength': 2}, 'name': {'type': 'string', 'maxLength': 60, 'minLength': 1, 'description': 'Recipient or sender full name'}, 'line1': {'type': 'string', 'maxLength': 64, 'minLength': 3, 'description': 'Street address'}, 'line2': {'type': 'string', 'maxLength': 64, 'description': 'Apartment, suite, unit'}, 'state': {'type': 'string'}, 'company': {'type': 'string', 'maxLength': 60}}, 'description': 'Return address; printed on the mail piece'}, 'content': {'type': 'object', 'required': ['body'], 'properties': {'body': {'type': 'string', 'maxLength': 9000, 'minLength': 1, 'description': 'Full letter text. Plain text; blank lines separate paragraphs.'}, 'font': {'enum': ['serif', 'sans'], 'type': 'string', 'default': 'serif'}}}, 'customer_email': {'type': 'string', 'format': 'email', 'pattern': "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'Where to send the receipt and status updates'}, 'idempotency_key': {'type': 'string', 'maxLength': 120}}}
create_postcard
Create a postcard
Create a postcard order (4x6 or 6x9) and get a payment link. The front is an image URL or a big headline; the back carries the message and addresses. Mails only after the user pays.
Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['to', 'from', 'content'], 'properties': {'to': {'type': 'object', 'required': ['name', 'line1', 'city', 'state', 'zip'], 'properties': {'zip': {'type': 'string', 'pattern': '^\\d{5}(-\\d{4})?$'}, 'city': {'type': 'string', 'maxLength': 40, 'minLength': 2}, 'name': {'type': 'string', 'maxLength': 60, 'minLength': 1, 'description': 'Recipient or sender full name'}, 'line1': {'type': 'string', 'maxLength': 64, 'minLength': 3, 'description': 'Street address'}, 'line2': {'type': 'string', 'maxLength': 64, 'description': 'Apartment, suite, unit'}, 'state': {'type': 'string'}, 'company': {'type': 'string', 'maxLength': 60}}}, 'from': {'type': 'object', 'required': ['name', 'line1', 'city', 'state', 'zip'], 'properties': {'zip': {'type': 'string', 'pattern': '^\\d{5}(-\\d{4})?$'}, 'city': {'type': 'string', 'maxLength': 40, 'minLength': 2}, 'name': {'type': 'string', 'maxLength': 60, 'minLength': 1, 'description': 'Recipient or sender full name'}, 'line1': {'type': 'string', 'maxLength': 64, 'minLength': 3, 'description': 'Street address'}, 'line2': {'type': 'string', 'maxLength': 64, 'description': 'Apartment, suite, unit'}, 'state': {'type': 'string'}, 'company': {'type': 'string', 'maxLength': 60}}, 'description': 'Return address; printed on the mail piece'}, 'size': {'enum': ['4x6', '6x9'], 'type': 'string', 'default': '4x6'}, 'content': {'type': 'object', 'required': ['message'], 'properties': {'message': {'type': 'string', 'maxLength': 600, 'minLength': 1, 'description': 'Handwritten-style message on the back'}, 'front_theme': {'enum': ['ink', 'sky', 'sunset', 'forest'], 'type': 'string', 'default': 'ink', 'description': 'Color theme for a text-only front'}, 'front_headline': {'type': 'string', 'maxLength': 60, 'description': "Big text for the front if there is no image, e.g. 'Happy birthday, Sam!'"}, 'front_image_url': {'type': 'string', 'maxLength': 2000, 'description': 'https URL of a photo or design for the front (JPG or PNG)'}}}, 'customer_email': {'type': 'string', 'format': 'email', 'pattern': "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'Where to send the receipt and status updates'}, 'idempotency_key': {'type': 'string', 'maxLength': 120}}}
get_order
Check an order
Get the status of a postcard or letter order by id (ord_...).
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['order_id'], 'properties': {'order_id': {'type': 'string'}}}
get_pricing
Get prices
List mail products and prices (USD, printing + USPS First-Class postage included, US addresses only).
Nur Lesen
Eingabeschema
{'type': 'object', 'properties': {}}
pay_order
Pay for an order
Pay for an unpaid order with a Stripe shared payment token (spt_…) the user approved, scoped to at least the order amount in USD. On success the order is paid and goes to print. Use only after the user approved the purchase.
Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['order_id', 'shared_payment_token'], 'properties': {'order_id': {'type': 'string'}, 'shared_payment_token': {'type': 'string', 'description': 'Stripe shared payment token, spt_…'}}}
Hinzugefügt
cancel_order
4. October 2026 02:40
Hinzugefügt
get_order
4. October 2026 02:40
Hinzugefügt
pay_order
4. October 2026 02:40
Hinzugefügt
create_letter
4. October 2026 02:40
Hinzugefügt
create_postcard
4. October 2026 02:40
Hinzugefügt
get_pricing
4. October 2026 02:40