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

A
Description quality
100%
Schema completeness
74%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,116Tokens (tool definitions)
~683 BTypical response size
Moderate attention impact (0.87% of 128k context)

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-http

What it can do

Tool inventory

Tools (10)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded10 tools
verifiedversion not recorded10 tools