Skip to content

PostalForm

by postalform.com · remote · no sign-in to list tools · v0.1.0 · published by com.postalform

Create mail drafts, upload PDFs, browse forms, track orders, and pay via MPP or x402.

Final · 2Changes · 5

13 tools: 2 do something that can't be undone, 5 change things and 6 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http postalform https://postalform.com/mcp

Findings

Matches of fixed checks, with the text they matched.

1 info

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

13 tools

Can't be undone 2Claude Code: ask
  • postalform.create_machine_orderCreate a single PDF, letter, workflow-form order, or bulk letter campaign and pay through MPP or x402 after buyer approval.No findings

    Why it is in this group

    • The name "postalform.create_machine_order" says "create": a word for a change.
    • The input addresses people (input.bulk.recipients): what it sends cannot be taken back.
    Description, as the server wrote it
    Create a single PDF, letter, workflow-form order, or bulk letter campaign and pay through MPP or x402 after buyer approval. For bulk, provide exactly one of bulk.csv_content or bulk.recipients (JSON address objects with optional merge_fields), plus a shared PDF or text/HTML template. Omit top-level recipient fields and review campaign_url, recipient count and total. Bulk MPP orders can also use postalform.pay_order after fetching its challenge. The unpaid response also includes checkout_url and status_url for this same order. Without an available compatible wallet, give the buyer checkout_url and poll status_url; never recreate the order to change payment paths. Single-recipient clients with a Stripe shared payment token can instead use a draft tool followed by complete_checkout; other clients should present the hosted checkout URL.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: true
    • destructiveHint: false
  • postalform.pay_orderGet an MPP challenge or pay an existing MPP PDF, letter, workflow-form order, or bulk letter campaign after buyer approval.1 finding

    Why it is in this group

    • The name "postalform.pay_order" says "pay": a word that usually means money moves, which cannot be taken back.

    Findings

    • Info

      The description mentions "credential".

      Matched text

      description: "...ing from create_machine_order, omit the credential first to get this payment endpoint’s ch..."

      What this check looks for
    Description, as the server wrote it
    Get an MPP challenge or pay an existing MPP PDF, letter, workflow-form order, or bulk letter campaign after buyer approval. Use the order_id returned by any draft tool with payment_protocol=mpp or by create_machine_order. When switching from create_machine_order, omit the credential first to get this payment endpoint’s challenge. Review the preview or campaign_url, recipient count and total. No document or addresses are resubmitted. Without payment_authorization this only returns a challenge; with it, this can pay and send real mail. Reuse the same order_id on retries and follow the returned payment status.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: true
    • destructiveHint: false
Changes things 5Claude Code: ask
  • complete_checkoutAfter the buyer approves the prepared order and total, pay its existing checkout session using a compatible Stripe payment token, including a shared payment token (spt_...).No findings

    Why it is in this group

    • The name "complete_checkout" says "checkout": a word for a change.
    Description, as the server wrote it
    After the buyer approves the prepared order and total, pay its existing checkout session using a compatible Stripe payment token, including a shared payment token (spt_...). Pass the order ID as checkout_session_id; do not resend the document or addresses. On an interrupted request, retry the same checkout and token. Existing authorized, processing, or paid payments are reused; follow the returned status and messages.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: true
    • destructiveHint: false
  • postalform.create_form_order_draftPrepare a supported workflow form for mailing and return the order ID, total, hosted checkout URL, and checkout session.No findings

    Why it is in this group

    • The name "postalform.create_form_order_draft" says "create": a word for a change.
    Description, as the server wrote it
    Prepare a supported workflow form for mailing and return the order ID, total, hosted checkout URL, and checkout session. After buyer approval, a compatible client can use complete_checkout with a Stripe shared payment token; otherwise present the hosted checkout URL. To prepare for MPP, set payment_protocol=mpp and buyer_email; receive a PDF preview, hosted checkout_url fallback and MPP challenge, then use postalform.pay_order with the order_id after buyer approval. Draft creation never pays. For x402, use postalform.create_machine_order.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: true
    • destructiveHint: false
  • postalform.create_letter_order_draftPrepare letter text for mailing and return the order ID, total, hosted checkout URL, and checkout session.No findings

    Why it is in this group

    • The name "postalform.create_letter_order_draft" says "create": a word for a change.
    Description, as the server wrote it
    Prepare letter text for mailing and return the order ID, total, hosted checkout URL, and checkout session. Accepts text directly; no PDF upload or browser is needed. Letter drafts may include typed or drawn signatures. After buyer approval, a compatible client can use complete_checkout with a Stripe shared payment token; otherwise present the hosted checkout URL. To prepare for MPP, set payment_protocol=mpp and buyer_email; receive a PDF preview, hosted checkout_url fallback and MPP challenge, then use postalform.pay_order with the order_id after buyer approval. Draft creation never pays. For x402, use postalform.create_machine_order.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: true
    • destructiveHint: false
  • postalform.create_order_draftPrepare an existing PDF for mailing and return the order ID, total, hosted checkout URL, and checkout session.No findings

    Why it is in this group

    • The name "postalform.create_order_draft" says "create": a word for a change.
    Description, as the server wrote it
    Prepare an existing PDF for mailing and return the order ID, total, hosted checkout URL, and checkout session. After buyer approval, a compatible client can pass a Stripe shared payment token to complete_checkout; otherwise present the hosted checkout URL. To prepare for MPP, set payment_protocol=mpp and buyer_email; receive a PDF preview, hosted checkout_url fallback and MPP challenge, then use postalform.pay_order with the order_id after buyer approval. Draft creation never pays. For x402, use postalform.create_machine_order.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: true
    • destructiveHint: false
  • postalform.create_pdf_uploadUse this when the host cannot provide a PDF file param directly.No findings

    Why it is in this group

    • The name "postalform.create_pdf_upload" says "create": a word for a change.
    Description, as the server wrote it
    Use this when the host cannot provide a PDF file param directly. It creates a short-lived PDF upload URL and upload token (multipart/form-data, file field). Let the HTTP client generate Content-Type with its multipart boundary.

    Annotations the server declares

    • readOnlyHint: false
    • openWorldHint: true
    • destructiveHint: false
Only reads 6Claude Code: allow
  • postalform.get_form_schemaUse this when you need a machine-usable schema for one supported single-mailpiece PostalForm workflow (fields, groups, attachments, and dependencies).No findings

    Why it is in this group

    • The name "postalform.get_form_schema" says "get": a word for reading.
    Description, as the server wrote it
    Use this when you need a machine-usable schema for one supported single-mailpiece PostalForm workflow (fields, groups, attachments, and dependencies).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • destructiveHint: false
    • idempotentHint: true
  • postalform.get_order_statusRead payment, processing, stored mailing/carrier status, the latest 50 public tracking events, and electronic return receipt availability.No findings

    Why it is in this group

    • The name "postalform.get_order_status" says "get": a word for reading.
    Description, as the server wrote it
    Read payment, processing, stored mailing/carrier status, the latest 50 public tracking events, and electronic return receipt availability. Bulk orders also return campaign_url, recipient count and per-status counts; use the campaign dashboard for individual recipients. Missing carrier evidence is null; processing or a tracking number alone does not prove mailing or delivery. This read does not pay, mail, or acquire receipts.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • destructiveHint: false
    • idempotentHint: true
  • postalform.list_formsUse this when you need the published single-mailpiece PostalForm workflow catalog available to agents.No findings

    Why it is in this group

    • The name "postalform.list_forms" says "list": a word for reading.
    Description, as the server wrote it
    Use this when you need the published single-mailpiece PostalForm workflow catalog available to agents. Coordinated statutory multi-recipient workflows are excluded.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • destructiveHint: false
    • idempotentHint: true
  • postalform.pingUse this when you want a quick health check that the PostalForm MCP server is reachable.No findings

    Why it is in this group

    • The name "postalform.ping" says "ping": a word for reading.
    Description, as the server wrote it
    Use this when you want a quick health check that the PostalForm MCP server is reachable.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • destructiveHint: false
    • idempotentHint: true
  • postalform.preview_letter_order_draftUse this to prepare a non-writing preview for a mailed letter before creating checkout.No findings

    Why it is in this group

    • The name "postalform.preview_letter_order_draft" says "preview": a word for reading.
    Description, as the server wrote it
    Use this to prepare a non-writing preview for a mailed letter before creating checkout. It renders the letter, validates the addresses, and returns a widget with a create-draft action.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • destructiveHint: false
  • postalform.search_addressesUse this to search for a mailing address and return Loqate suggestions with IDs.No findings

    Why it is in this group

    • The name "postalform.search_addresses" says "search": a word for reading.
    Description, as the server wrote it
    Use this to search for a mailing address and return Loqate suggestions with IDs. Pass country_code to filter by country; it defaults to US. If a suggestion has type "Container" (building/complex), call this tool again with container=<id> and a refined query to drill down to type "Address". Only type "Address" is valid for order creation.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • destructiveHint: false
    • idempotentHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.1.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http postalform https://postalform.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__postalform__postalform_list_forms",
      "mcp__postalform__postalform_get_form_schema",
      "mcp__postalform__postalform_search_addresses",
      "mcp__postalform__postalform_preview_letter_order_draft",
      "mcp__postalform__postalform_get_order_status",
      "mcp__postalform__postalform_ping"
    ],
    "ask": [
      "mcp__postalform__postalform_create_pdf_upload",
      "mcp__postalform__postalform_create_order_draft",
      "mcp__postalform__postalform_create_letter_order_draft",
      "mcp__postalform__postalform_create_form_order_draft",
      "mcp__postalform__postalform_create_machine_order",
      "mcp__postalform__postalform_pay_order",
      "mcp__postalform__complete_checkout"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as postalform. Review it before you use it.