Have It Printed
Print and mail physical documents in the US via USPS, with quotes, agent payment and tracking.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"print-and-mail": {
"url": "https://agents.haveitprinted.com/mcp"
}
}
}Remote endpoints
https://agents.haveitprinted.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (10)
🟢hip_get_service_info
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).
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟡hip_create_job
Start a print-and-mail job. Returns an opaque job_handle used by every later call. Creates nothing chargeable.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟡hip_get_upload_target(job_handle, filename, content_type)
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.
Input Schema
{
"type": "object",
"properties": {
"job_handle": {
"type": "string"
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
}
},
"required": [
"job_handle",
"filename"
],
"additionalProperties": false
}🟡hip_update_job(job_handle, files, options, recipient)
Set the documents, print options and US mailing recipient on a job. Price fields are rejected: the server computes all amounts.
Input Schema
{
"type": "object",
"properties": {
"job_handle": {
"type": "string"
},
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"filename": {
"type": "string"
},
"pages": {
"type": "integer",
"minimum": 1
},
"quantity": {
"type": "integer",
"minimum": 1
},
"color": {
"type": "string",
"enum": [
"bw",
"color"
]
},
"size": {
"type": "string",
"enum": [
"8.5x11",
"8x10",
"11x17"
]
}
},
"required": [
"filename",
"pages"
],
"additionalProperties": false
}
},
"options": {
"type": "object",
"additionalProperties": true
},
"recipient": {
"type": "object",
"description": "US mailing address",
"properties": {
"name": {
"type": "string"
},
"line1": {
"type": "string"
},
"line2": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"type": "string",
"description": "2-letter US state code"
},
"zip": {
"type": "string"
},
"country": {
"type": "string",
"default": "US"
}
},
"required": [
"name",
"line1",
"city",
"state",
"zip"
]
}
},
"required": [
"job_handle"
],
"additionalProperties": false
}⚪hip_quote(job_handle)
Exact price for the job, computed by the same pricing the website checkout uses. Tax, if any, is added by Stripe at payment.
Input Schema
{
"type": "object",
"properties": {
"job_handle": {
"type": "string"
}
},
"required": [
"job_handle"
],
"additionalProperties": false
}🟡hip_create_checkout(job_handle, customer_email)
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.
Input Schema
{
"type": "object",
"properties": {
"job_handle": {
"type": "string"
},
"customer_email": {
"type": "string",
"description": "for the receipt and tracking email"
}
},
"required": [
"job_handle"
],
"additionalProperties": false
}🟢hip_get_checkout_status(job_handle)
Whether the customer has paid yet. Payment truth comes from the order record Stripe's webhook creates, never from a browser redirect.
Input Schema
{
"type": "object",
"properties": {
"job_handle": {
"type": "string"
}
},
"required": [
"job_handle"
],
"additionalProperties": false
}🟡hip_prepare_payment(job_handle, buyer_email)
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.
Input Schema
{
"type": "object",
"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."
}
},
"required": [
"job_handle"
],
"additionalProperties": false
}🟡hip_complete_payment(job_handle, payment_authorization)
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.
Input Schema
{
"type": "object",
"properties": {
"job_handle": {
"type": "string"
},
"payment_authorization": {
"type": "string",
"description": "opaque delegated payment token (spt_...)"
}
},
"required": [
"job_handle",
"payment_authorization"
],
"additionalProperties": false
}🟢hip_get_order(job_handle)
Status and USPS tracking for the paid order belonging to this job.
Input Schema
{
"type": "object",
"properties": {
"job_handle": {
"type": "string"
}
},
"required": [
"job_handle"
],
"additionalProperties": false
}Community
Evidence