
Postals Mcp
io.github.coopergwrenn由 GitHub 账号 coopergwrenn 发布v1.0.0更新于 Oct 24, 2026
Send physical handwritten postcards from any AI agent. Real pen & ink, USPS, $4.99/card.
概览
让 AI 助手通过 Postals 服务寄出真实的手写明信片,并支持文案生成与支出控制。
- 可以做什么
- 提供 send_postcard 工具,接收收件人地址、最多 400 字符的留言以及可选的公开 HTTPS 图片链接,然后由真实钢笔和墨水书写并经由 USPS 寄出明信片。generate_message 工具可起草个性化文案:配置 Cloudflare Workers AI 时由其生成,否则返回结构化提示词供调用方模型自行生成。compose_postcard_message 是一个不依赖外部接口的 MCP 提示模板。安全机制包括每日发送上限、两秒限流、幂等键,以及只校验输入而不实际寄出的测试模式。
- 适用场景
- 当助手需要通过实体邮件而非电子邮件或聊天触达用户时适用,例如把渲染图片与简短手写留言搭配的个性化外联活动。也适合需要严格控制单卡成本与发送量的自动化流程。
- 运行要求
- 以 stdio 方式在本机运行,通常通过 npx postals-mcp 启动,因此需要 Node.js。必须提供 POSTALS_API_KEY;建议设置寄件人姓名、地址、城市、州和邮编等变量作为回信地址。可选的 CLOUDFLARE_ACCOUNT_ID 与 CLOUDFLARE_API_TOKEN 用于启用 AI 文案生成。卡片图片需可通过公开 HTTPS 链接访问。寄出真实卡片需要账号与已充值余额。
安装
在 SourceWeft 中
- 打开 控制台中的 Postals Mcp,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
Postals
The agent skill that turns any AI into a direct mail machine. One tool call. Real handwritten postcards. Delivered by USPS.
[npm version] [MCP compatible] [License]
Send physical handwritten postcards from any MCP-compatible AI agent — Claude Desktop, Cursor, Claude Code, OpenClaw, n8n, LangChain, CrewAI, or your own code. Postals handles image upload, card creation, robotic handwriting (real pen and ink), and USPS mailing.
Website: postals.ai
- 💌 $4.99 per card — no subscriptions, no monthly minimums
- ✍️ Real handwriting — robotic pens hold real ink (not font simulation)
- 📬 3–5 business days — printed and mailed via USPS
- 🤖 Built for agents — one tool call, spend controls, idempotency, test mode
- 🌎 US + international — worldwide delivery, pricing varies by destination
Table of Contents
- Why this exists
- Quick start (under 5 minutes)
- Client configuration
- Tools reference
- The pool builder workflow
- Message generation
- Image handling
- Test mode
- Spend control
- Error handling
- Configuration reference
- Handwriting styles
- Troubleshooting
- FAQ
- What's next (roadmap)
- Contributing
- License
Why this exists
A new pattern is emerging in the AI agent ecosystem: autonomous bots that scan the world (satellite imagery, social media, public records), identify opportunities, and reach out with real physical mail. Pool builders, landscapers, roofers, solar installers, real estate agents — they're closing five- and six-figure deals from postcards mailed by bots.
Before Postals, every builder hand-rolled their own mailing stack: image upload, card templating, print API, address validation, USPS handoff, tracking. It took weeks and was fragile.
We ship this as one tool. Your agent calls send_postcard with a recipient and a message. We do the rest.
Quick start
1. Sign up and get an API key
Coming soon — the developer portal at postals.ai/developers is launching shortly. Once live, the flow is:
- Go to postals.ai/developers
- Create an account with your email (one-click magic link — no password)
- Fund your wallet ($25 / $50 / $100 / $250 via Stripe or crypto)
- Copy your
postals_live_API key- Paste it into your MCP config (see step 2 below)
That's it. No external accounts needed. Just Postals.
2. Add the server to your MCP client
Option A — ask your coding agent to install it (fastest path)
If you're in Claude Code, Cursor, Continue, Aider, or any other MCP client with filesystem access, just tell your agent:
Install the postals-mcp MCP server for this client. My Postals API key is:
PASTE_YOUR_KEY_HERE. Start in test mode so I can verify the setup before sending real cards.
Your agent will locate your MCP config file, merge the postals entry into your existing mcpServers (preserving any other servers you have), wire up the env vars, and tell you to restart the client. You never touch JSON.
Optional — add return-address details to the same prompt so send_postcard works without per-call overrides:
...and use Jane Smith, 123 Main St, Austin TX 78701 as my return address.
Then fully quit and relaunch the client (Cmd+Q on macOS — just closing the window isn't enough).
Option B — edit your MCP config file directly
For Claude Desktop (no built-in filesystem access by default), or any client where you'd rather set it up manually, edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
Configs for other clients (Cursor, Claude Code, OpenClaw) are in the Client configuration section below.
Fully restart the client after editing. (Not just close the window — quit from the menu.)
3. Verify it's working
Open a new chat and ask:
"List the MCP tools you have available."
You should see send_postcard and generate_message.
4. Send a test card
Still in test mode (POSTALS_TEST_MODE=true), ask:
"Send a postcard to Jane Smith at 123 Oak St, Austin TX 78701 saying 'Thanks for the great meeting yesterday — looking forward to next steps.'"
The agent will call send_postcard. You'll get back a mock order_id and confirmation that test mode is on. No card mailed, no money spent.
5. Go live
Remove POSTALS_TEST_MODE from your config (or set to false), restart, and your next send will mail a real card.
Client configuration
Copy-paste-ready configs for every major MCP client. If you're in Claude Code, Cursor, Continue, or Aider, you can skip this section entirely — just tell your agent to install Postals (see Option A in Quick Start) and it'll handle the config for you.
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
%APPDATA%\Claude\claude_desktop_config.json (Windows)
Cursor
Global: ~/.cursor/mcp.json
Per-project: .cursor/mcp.json in repo root
Claude Code
Then set env vars in ~/.claude/settings.json under mcpServers.postals.env.
OpenClaw / InstaClaw
See the bundled SKILL.md for the full agent-facing skill definition. For standalone OpenClaw usage:
n8n (via Composio — v1.1+)
Install the Postals toolkit from the Composio marketplace. One-click add to any workflow. See Composio docs when available.
Custom agents (programmatic)
Any MCP client library works. Example with the official TypeScript SDK:
Tools reference
send_postcard
Mails one physical handwritten postcard to a US address.
Input
Output (success)
balance_remaining and cards_available return real values when using a postals_live_ API key from postals.ai/developers.
Output (test mode) adds test_mode: true and mock_order_id. No card is mailed.
Output (error) returns isError: true with an actionable message. See Error handling.
generate_message
AI-drafts a personalized postcard message. Uses Cloudflare AI if configured; otherwise returns a structured prompt your agent can use to self-generate (which is often just as good, since the agent is already an LLM).
Input
Output (AI configured)
Output (AI not configured) — returns the system + user prompts your agent can feed into its own LLM:
compose_postcard_message (MCP prompt)
An MCP prompt primitive (not a tool). Returns a formatted prompt template for your agent to use with its own LLM. Zero external API dependencies. Useful when you want deterministic, dependency-free message composition.
Arguments: recipient, sender (optional), tone (optional).
The pool builder workflow
This is the viral use case that put autonomous postcard sending on the map. Pool builders run agents that:
- Scan satellite imagery of a neighborhood (Google Maps, Nearmap, etc.)
- Classify — find homes without pools
- Render — generate a personalized before/after showing a pool in that exact backyard
- Compose — write a warm, specific message about that home
- Send — mail the handwritten postcard
- Close — five-figure deals landing weekly
Postals owns steps 4–5 with two tool calls. You own 1–3 (any image pipeline works).
Full example
Why this works
- Real handwriting beats printed mail 5–10× on open rate
- Hyper-personalized image (their actual house!) makes it unignorable
- Warm, specific message feels human, not mass-mailed
- USPS delivery triggers the "this is important" instinct
Variations
All use the same two tool calls. Only the scanning, rendering, tone, and message change.
Message generation
You have three ways to compose the handwritten message. Pick based on your setup:
Option A — generate_message tool with Cloudflare AI
Set CLOUDFLARE_ACCOUNT_ID + CLOUDFLARE_API_TOKEN. The server calls Llama 3.1 8B Instruct via Cloudflare Workers AI with Postals' proven tone profiles. Returns a ready-to-use message.
Option B — generate_message tool without AI (recommended for most agents)
Don't set the CF vars. The tool returns a structured prompt (system + user) that your agent uses with its own LLM. Since the calling agent is already an LLM (Claude, GPT, etc.), it generates a message at least as good as Llama 3.1 — often better.
Option C — compose_postcard_message MCP prompt
An MCP prompt primitive (not a tool). Claude Desktop surfaces this in the slash-command menu. The agent injects Postals' guidelines directly into its context and composes.
Option D — Your agent writes the message itself
Skip generate_message entirely. Your agent already knows how to write. Just pass a message directly to send_postcard.
Image handling
The front_image_url must be a public HTTPS URL to a PNG or JPEG. The server fetches the image, uploads it to our print partner and creates a custom card.
Recommended specs
- Format: PNG or JPEG
- Orientation: Landscape (wider than tall)
- Size: 2100 × 1500 px (7×5 inches at 300 DPI) — print quality
- Minimum: 1050 × 750 px
- Max file size: 10 MB
- Accessibility: Public URL, no auth headers, no signed URLs with short TTLs
Common sources
No image?
Set POSTALS_DEFAULT_CARD_IMAGE to your branded fallback. Every call without front_image_url uses the default. This is ideal for business use cases where every card shares the same template.
Test mode
Zero-cost, zero-risk testing. Set POSTALS_TEST_MODE=true in your env.
When enabled:
- All inputs are validated normally (state code, ZIP format, message length, HTTPS URL)
- Daily limit counter increments (so you can test spend controls)
- Rate limiter enforces 2-second delays (so you can test timing)
- The fulfillment API is not called — no cards printed, no money spent
- Response includes
test_mode: trueandmock_order_id
Best practice: start with POSTALS_TEST_MODE=true, verify your agent's tool calls look right, then flip it off for your first real send.
Spend control
Agents run autonomously. Bad config + no limits = expensive bug. This server ships with four safety layers:
1. Daily limit (POSTALS_DAILY_LIMIT, default 50)
Hard cap on cards per day. Counter resets at midnight UTC. Once reached:
Set this low (5–10) while developing. Raise it once your agent is proven.
2. Rate limiter (2-second minimum between sends)
Firm server-side throttle. If you call send_postcard twice in rapid succession, the second call waits 2 seconds before executing. Prevents API abuse and gives you time to notice runaway behavior.
3. Idempotency keys
Pass idempotency_key in send_postcard args. Same key = same result, no duplicate send. Keys are cached for 24 hours.
Critical for autonomous agents. Without this, a network timeout + retry = two postcards.
4. Test mode
See above. Belt and suspenders during development.
Coming in v1.1
Prepaid wallet (pay ahead, spend down) with per-card billing, auto-reload with monthly cap, three funding paths (Stripe, USDC/WLD crypto, agent self-funding), instant pause (revoke API key from dashboard), and balance tracking in every response so agents can self-regulate.
Error handling
Errors return isError: true with an actionable message written for the agent to relay to the human. Examples:
Error messages are designed so your agent can read them and either self-correct or relay the fix to the human in plain language.
Configuration reference
All config is via environment variables in your MCP client config.
Per-call overrides: return_address, handwriting_style, and front_image_url in send_postcard args override the env defaults for that one send.
Handwriting styles
Default: Joyful Jennifer — warm, friendly, genuine handwriting.
Common handwriting style options:
Joyful Jennifer— warm, friendly feminineTarzan— bold, energeticCasual Craig— relaxed masculineFancy Fiona— elegant scriptPrecise Paul— neat, business-like
Pass the exact style name as handwriting_style in the tool args, or set POSTALS_HANDWRITING_STYLE globally. To see all styles available on your account, browse available styles at postals.ai/developers.
Troubleshooting
Claude Desktop doesn't show the tools
- Fully quit Claude Desktop (menu → Quit, not just close window) and reopen. Config changes require a full restart.
- Verify the config JSON is valid (no trailing commas, correct quotes).
- On macOS, check the path:
~/Library/Application\ Support/Claude/claude_desktop_config.json. - Run
npx -y postals-mcpmanually in a terminal. If it errors, fix that first.
npx -y postals-mcp hangs
That's expected — it's waiting for MCP protocol input on stdin. To test it standalone, use the included test harness:
"POSTALS_API_KEY not set"
The env var isn't being passed to the server. Check that:
- Your MCP client config has the
envblock set correctly - You restarted the client after editing config
- The key is wrapped in quotes in JSON
"Cannot fetch image from URL"
The image URL must be:
- A public HTTPS URL (no http://, no file://, no data:)
- Accessible without auth headers or cookies
- Returning a valid PNG or JPEG with
Content-Type: image/pngorimage/jpeg
Test with curl -I <url> — should return 200 and a valid image content-type.
Cards aren't arriving
- Is
POSTALS_TEST_MODEset totrue? If so, no cards are actually mailed. Remove it or set tofalse. - Check the order status at postals.ai/developers for the
order_idreturned by the call. - Delivery is 3–5 business days after the card is mailed (not ordered). Printing happens within 1 business day.
Rate limiter seems too slow
The 2-second minimum is intentional and firm. It prevents API abuse and gives you a chance to notice runaway behavior.
FAQ
How much does it cost? $4.99 per card. No monthly minimums, no subscriptions. Volume discounts starting at 101 cards/month (v1.1).
How fast does it arrive? 3–5 business days via USPS after mailing. Cards are printed and mailed within 1 business day of the API call.
Is the handwriting really handwritten? Yes. Custom-built robots hold real pens and write in real ink on real paper. Recipients can't tell it's robotic.
What's the open rate on handwritten mail? Typically 5–10× higher than printed direct mail. Personalized imagery on the front (AI-rendered) further lifts response rates.
What countries are supported? US addresses ship for $4.99/card with 3-5 business day USPS delivery. International addresses are supported — delivery takes longer and pricing varies by destination. Contact us for international rates.
Can I send letters or packages? Postcards only in v1.0. Letters, envelopes, and greeting cards planned for later releases.
What image formats work? PNG or JPEG. Landscape 7×5 inches (2100×1500 px at 300 DPI) is ideal.
Can I cancel a send?
Not in v1.0. Cancel-within-printing-window (cancel_postcard tool) is planned for v1.1.
Can I check delivery status?
Not in v1.0. check_order_status tool is planned for v1.1.
What happens if the agent has a bug and tries to send 1000 cards?
Set POSTALS_DAILY_LIMIT low (5–10) while developing. Send #11 returns an error instead of mailing. Combined with idempotency_key for retries and 2-second rate limiting, the three most common runaway scenarios are covered. v1.1 adds a wallet with a hard balance cap — once you hit $0, the agent stops.
Can the agent fund itself from crypto earnings? Coming in v1.1. Three funding paths: Stripe (human pays), crypto deposit (human sends USDC/WLD), and agent self-funding (agent spends from its own wallet — human-authorized with monthly cap). This enables fully autonomous business loops: agent earns crypto → funds wallet → sends cards → closes deals → earns more.
Can I use this commercially? Yes. MIT license. Cards are billed per-send, no license fees.
How does pricing compare to Lob or PostGrid? Lob and PostGrid do printed postcards at $0.48–$0.77. We do handwritten postcards at $4.99. Different product. The handwriting premium pays for itself via the dramatically higher open and response rates for the kinds of outbound use cases where this matters (real estate, home services, high-ticket sales).
Can multiple agents share one API key? Yes, but they share the daily limit. Use separate keys per agent for isolation (v1.1+ supports multiple keys per account).
Does this work with langchain / crewai / autogen? Any framework with MCP client support works. The TypeScript/Python MCP SDK connects to this server like any other MCP tool. See the Custom agents section for code.
What data do you log? Structured JSON events to stderr only. We log: event name, timestamp, city/state (for debugging), counter values, order IDs. We never log: full addresses, full messages, recipient names, API keys, or image URLs with auth tokens.
What's next
Current: v1.0 — $4.99/card.
Coming in v1.1 (2–3 weeks):
- Postals developer signup at postals.ai/developers
- Prepaid wallet (pay ahead, spend down) with Stripe + USDC crypto
check_balancetool — agents see their balance in every responsecheck_order_statustool — poll fulfillment statuscancel_postcardtool — cancel within printing window- No external account required
Coming in v2.0 (6–8 weeks):
- Full developer dashboard at postals.ai/developers
- Auto-reload with monthly cap
- Webhook events (card_sent, low_balance, daily_limit_hit)
- Multiple API keys per account
- Path 3: Agent self-funding from its own crypto wallet (human-authorized)
- USPS CASS-certified address validation
- Volume pricing tiers (101–500: $4.49, 501–2000: $3.99, 2000+: custom)
Coming in v3.0+:
generate_card_imagetool — Recraft V3 AI card art- Card template library (thank-you, birthday, business, real estate, etc.)
- Multi-provider fulfillment (handwritten + printed options)
- International mail (Canada, UK, EU)
- Batch send tool for high-volume workflows
- Letters and envelopes
More on the roadmap and architecture at postals.ai.
Contributing
Issues and PRs welcome at the GitHub repo. For major changes, open an issue first to discuss.
Running the test harness:
All 37 checks should pass.
Links
- Website: postals.ai
- npm:
postals-mcp - GitHub: github.com/coopergwrenn/postals-mcp
- agents.md (for agents): postals.ai/agents.md
- SKILL.md (bundled skill file):
./SKILL.md - Model Context Protocol: modelcontextprotocol.io
License
MIT © Postals
来源:README.md,提交 382827f
工具
0版本历史
1- v1.0.0最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分