Print and mail physical documents in the US via USPS, with quotes, agent payment and tracking.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Add a letter or document whose text you wrote with the person. Have It Printed typesets it on US Letter paper in a clean serif font, in black and white, and counts its pages. Plain text only: separate paragraphs with a blank line; no images, tables or formatting. Call once per document.
the full text to print, exactly as it should read
a short name for the document; it names the file and is not printed
copies (default 1)
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Add a letter or document whose text you wrote with the person. Have It Printed typesets it on US Letter paper in a clean serif font, in black and white, and counts its pages. Plain text only: separate paragraphs with a blank line; no images, tables or formatting. Call once per document.
| Argument | Type | Description |
|---|---|---|
| text* | string | the full text to print, exactly as it should read |
| title* | string | a short name for the document; it names the file and is not printed |
| copies | integer | copies (default 1) |
| job_handle* | string |
{
"type": "object",
"required": [
"job_handle",
"title",
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 60000,
"description": "the full text to print, exactly as it should read"
},
"title": {
"type": "string",
"maxLength": 100,
"description": "a short name for the document; it names the file and is not printed"
},
"copies": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "copies (default 1)"
},
"job_handle": {
"type": "string"
}
},
"additionalProperties": false
}Pay for the job with a delegated payment authorization, with no browser and no human step. payment_authorization must be a Stripe shared payment token (spt_...) granted to Have It Printed whose maximum is at least the total from hip_prepare_payment; HIP charges exactly that total and never more. NEVER send a card number, expiry, CVV or any reusable credential to this tool. If the cardholder's bank requires authentication, this returns payment_status=requires_user_action rather than bypassing it.
| Argument | Type | Description |
|---|---|---|
| job_handle* | string | |
| payment_authorization* | string | opaque delegated payment token (spt_...) |
{
"type": "object",
"required": [
"job_handle",
"payment_authorization"
],
"properties": {
"job_handle": {
"type": "string"
},
"payment_authorization": {
"type": "string",
"description": "opaque delegated payment token (spt_...)"
}
},
"additionalProperties": false
}Create a Stripe Checkout session for the job and return its URL. This does NOT take payment: the customer completes payment at that URL. Show them the quote first.
| Argument | Type | Description |
|---|---|---|
| job_handle* | string | |
| customer_email | string | for the receipt and tracking email |
{
"type": "object",
"required": [
"job_handle"
],
"properties": {
"job_handle": {
"type": "string"
},
"customer_email": {
"type": "string",
"description": "for the receipt and tracking email"
}
},
"additionalProperties": false
}Start a print-and-mail job. Returns an opaque job_handle used by every later call. Creates nothing chargeable.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Whether the customer has paid yet. Payment truth comes from the order record Stripe's webhook creates, never from a browser redirect.
| Argument | Type | Description |
|---|---|---|
| job_handle* | string |
{
"type": "object",
"required": [
"job_handle"
],
"properties": {
"job_handle": {
"type": "string"
}
},
"additionalProperties": false
}Status and tracking number for the paid order belonging to this job.
| Argument | Type | Description |
|---|---|---|
| job_handle* | string |
{
"type": "object",
"required": [
"job_handle"
],
"properties": {
"job_handle": {
"type": "string"
}
},
"additionalProperties": false
}What Have It Printed does, what it costs, what file types and sizes are accepted, and how mailing works. Needs a Bearer API key, like every tools/call (POST /v1/onboard to get one).
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Get a short-lived upload URL for the customer's document. PUT the bytes to it. File type and size limits are the same as the website.
| Argument | Type | Description |
|---|---|---|
| filename* | string | |
| job_handle* | string | |
| content_type | string |
{
"type": "object",
"required": [
"job_handle",
"filename"
],
"properties": {
"filename": {
"type": "string"
},
"job_handle": {
"type": "string"
},
"content_type": {
"type": "string"
}
},
"additionalProperties": false
}Resolve the EXACT amount HIP will charge, before any payment authorization is obtained or spent. This does NOT charge anything. Returns subtotal_cents, tax_cents, total_cents, currency, a pricing fingerprint and the authorization types HIP accepts. Tax is calculated by Stripe from the destination, so hip_quote alone is not the payable amount. The returned total is bound to this job's documents, options and recipient: change any of them and payment is refused with QUOTE_STALE until you prepare again. Use this when paying autonomously with a delegated payment authorization; a human paying in a browser does not need it. Commits the job to the autonomous payment rail.
| Argument | Type | Description |
|---|---|---|
| job_handle* | string | |
| buyer_email | string | optional: the buyer's email address. Have It Printed sends its order confirmation there once the payment succeeds. |
| address_confirmed | boolean | optional, no longer needed: accepted for compatibility and ignored. |
{
"type": "object",
"required": [
"job_handle"
],
"properties": {
"job_handle": {
"type": "string"
},
"buyer_email": {
"type": "string",
"description": "optional: the buyer's email address. Have It Printed sends its order confirmation there once the payment succeeds."
},
"address_confirmed": {
"type": "boolean",
"description": "optional, no longer needed: accepted for compatibility and ignored."
}
},
"additionalProperties": false
}Exact price for the job, computed by the same pricing the website checkout uses. Tax, if any, is added by Stripe at payment.
| Argument | Type | Description |
|---|---|---|
| job_handle* | string |
{
"type": "object",
"required": [
"job_handle"
],
"properties": {
"job_handle": {
"type": "string"
}
},
"additionalProperties": false
}Set the documents, print options and US mailing recipient on a job. Price fields are rejected: the server computes all amounts.
| Argument | Type | Description |
|---|---|---|
| files | array | |
| options | object | |
| product | string | how the job is mailed. tracked_document (the default): printed and mailed flat in a rigid mailer with a free tracking number. basic_letter: up to 5 pages, one copy of each document, folded into a standard envelope and mailed First-Class, with no tracking. certified_letter: the same letter sent by Certified Mail, with a tracking number. hip_get_service_info has the prices. |
| recipient | object | US mailing address |
| job_handle* | string |
{
"type": "object",
"required": [
"job_handle"
],
"properties": {
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"filename",
"pages"
],
"properties": {
"size": {
"enum": [
"8.5x11"
],
"type": "string"
},
"color": {
"enum": [
"bw",
"color"
],
"type": "string"
},
"pages": {
"type": "integer",
"minimum": 1
},
"filename": {
"type": "string"
},
"quantity": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false
}
},
"options": {
"type": "object",
"additionalProperties": true
},
"product": {
"enum": [
"tracked_document",
"basic_letter",
"certified_letter"
],
"type": "string",
"description": "how the job is mailed. tracked_document (the default): printed and mailed flat in a rigid mailer with a free tracking number. basic_letter: up to 5 pages, one copy of each document, folded into a standard envelope and mailed First-Class, with no tracking. certified_letter: the same letter sent by Certified Mail, with a tracking number. hip_get_service_info has the prices."
},
"recipient": {
"type": "object",
"required": [
"name",
"line1",
"city",
"state",
"zip"
],
"properties": {
"zip": {
"type": "string"
},
"city": {
"type": "string"
},
"name": {
"type": "string"
},
"line1": {
"type": "string"
},
"line2": {
"type": "string"
},
"state": {
"type": "string",
"description": "2-letter US state code"
},
"country": {
"type": "string",
"default": "US"
}
},
"description": "US mailing address"
},
"job_handle": {
"type": "string"
}
},
"additionalProperties": false
}