From 640b5ddcbd023169003508caa93ab212bce86b35 Mon Sep 17 00:00:00 2001 From: blockrushusa Date: Fri, 16 Oct 2026 11:51:42 -0400 Subject: [PATCH] feat(third_party): add DirectMailAmerica plugin --- .cursor-plugin/marketplace.json | 5 ++ README.md | 1 + .../.cursor-plugin/plugin.json | 49 +++++++++++++ third_party/directmailamerica/CHANGELOG.md | 10 +++ third_party/directmailamerica/LICENSE | 21 ++++++ third_party/directmailamerica/README.md | 67 ++++++++++++++++++ third_party/directmailamerica/assets/logo.png | Bin 0 -> 18497 bytes third_party/directmailamerica/mcp.json | 11 +++ .../skills/dma-email-to-letter/SKILL.md | 26 +++++++ .../skills/dma-order-status/SKILL.md | 15 ++++ .../skills/dma-send-mail/SKILL.md | 21 ++++++ 11 files changed, 226 insertions(+) create mode 100644 third_party/directmailamerica/.cursor-plugin/plugin.json create mode 100644 third_party/directmailamerica/CHANGELOG.md create mode 100644 third_party/directmailamerica/LICENSE create mode 100644 third_party/directmailamerica/README.md create mode 100644 third_party/directmailamerica/assets/logo.png create mode 100644 third_party/directmailamerica/mcp.json create mode 100644 third_party/directmailamerica/skills/dma-email-to-letter/SKILL.md create mode 100644 third_party/directmailamerica/skills/dma-order-status/SKILL.md create mode 100644 third_party/directmailamerica/skills/dma-send-mail/SKILL.md diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index b8b863993..f5a2b1dcc 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -547,6 +547,11 @@ "name": "finary", "source": "third_party/finary", "description": "Read your net worth, accounts, holdings, spending, and budgets." + }, + { + "name": "directmailamerica", + "source": "third_party/directmailamerica", + "description": "Print and mail USPS letters and postcards, run Email to Letter rules, and track orders." } ] } diff --git a/README.md b/README.md index b42a64469..25ed41137 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,7 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `tailscale` | [Tailscale](third_party/tailscale/) | Cursor | Integrations | Let Grok Bot reach MCP servers on your private Tailscale network. Sign in to Tailscale to connect your tailnet; Grok Bot joins it as one tagged device and only reaches the hosts you grant to tag:grokbot. | | `highlevel` | [HighLevel](third_party/highlevel/) | Cursor | Integrations | Work with contacts, conversations, opportunities, calendars, and payments. | | `finary` | [Finary](third_party/finary/) | Cursor | Integrations | Read your net worth, accounts, holdings, spending, and budgets. | +| `directmailamerica` | [DirectMailAmerica](third_party/directmailamerica/) | Rainmaker LLC d/b/a DirectMailAmerica.com | Integrations | Print and mail USPS letters and postcards, run Email to Letter rules, and track orders. | Author values match each plugin’s `plugin.json` `author.name` (Cursor lists `plugins@cursor.com` in the manifest). ## Repository structure diff --git a/third_party/directmailamerica/.cursor-plugin/plugin.json b/third_party/directmailamerica/.cursor-plugin/plugin.json new file mode 100644 index 000000000..33244b128 --- /dev/null +++ b/third_party/directmailamerica/.cursor-plugin/plugin.json @@ -0,0 +1,49 @@ +{ + "name": "directmailamerica", + "displayName": "DirectMailAmerica", + "version": "1.0.0", + "minClientVersions": { + "cursor": "3.13.0" + }, + "description": "Print and mail USPS letters and postcards, run Email to Letter rules, and track orders.", + "author": { + "name": "Rainmaker LLC d/b/a DirectMailAmerica.com", + "email": "support@directmailamerica.com" + }, + "homepage": "https://directmailamerica.com/agents", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", + "logo": "assets/logo.png", + "keywords": [ + "directmailamerica", + "mail", + "letters", + "postcards", + "usps", + "certified mail", + "email to letter", + "mcp" + ], + "category": "integrations", + "tags": [ + "directmailamerica", + "mail", + "usps", + "mcp" + ], + "variables": { + "type": "object", + "properties": { + "DIRECTMAILAMERICA_API_KEY": { + "type": "string", + "title": "DirectMailAmerica API key", + "description": "Workspace key from https://directmailamerica.com (Developers settings). lbl_live_ keys mail for real; lbl_test_ keys never buy postage." + } + }, + "required": [ + "DIRECTMAILAMERICA_API_KEY" + ] + }, + "mcpServers": "./mcp.json", + "skills": "./skills/" +} diff --git a/third_party/directmailamerica/CHANGELOG.md b/third_party/directmailamerica/CHANGELOG.md new file mode 100644 index 000000000..49875f2ee --- /dev/null +++ b/third_party/directmailamerica/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog + +All notable changes to this plugin will be documented here. + +## 1.0.0 — initial release + +- Added the `directmailamerica` MCP server pointing at DirectMailAmerica's hosted endpoint (`https://directmailamerica.com/api/mcp`). +- Auth uses a user-supplied workspace API key (`DIRECTMAILAMERICA_API_KEY`), sent as a Bearer header. +- Skills: `dma-send-mail`, `dma-email-to-letter`, `dma-order-status`. Mailing always requires explicit approval of the preview and price. +- Logo: DirectMailAmerica's official mark. diff --git a/third_party/directmailamerica/LICENSE b/third_party/directmailamerica/LICENSE new file mode 100644 index 000000000..31e4bc54b --- /dev/null +++ b/third_party/directmailamerica/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Rainmaker LLC d/b/a DirectMailAmerica.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/third_party/directmailamerica/README.md b/third_party/directmailamerica/README.md new file mode 100644 index 000000000..a76e01d4e --- /dev/null +++ b/third_party/directmailamerica/README.md @@ -0,0 +1,67 @@ +# DirectMailAmerica + +Cursor plugin that connects agents to [DirectMailAmerica](https://directmailamerica.com) through DirectMailAmerica's official remote [Model Context Protocol](https://modelcontextprotocol.io/) server. + +Print and mail USPS letters and postcards, run Email to Letter rules, and track orders. + +## Install + +1. Open **Cursor Settings → Plugins**. +2. Search for **DirectMailAmerica**. +3. Click **Install**, then paste your workspace API key into `DIRECTMAILAMERICA_API_KEY`. + +Or run `/add-plugin directmailamerica` in chat. + +## MCP + +```json +{ + "mcpServers": { + "directmailamerica": { + "type": "http", + "url": "https://directmailamerica.com/api/mcp", + "headers": { + "Authorization": "Bearer ${DIRECTMAILAMERICA_API_KEY}" + } + } + } +} +``` + +Auth is a workspace API key the user supplies. Sign in at directmailamerica.com and create a key under **Developers**. `lbl_live_` keys print and mail for real; `lbl_test_` keys never buy postage. + +## What agents can do + +| Area | Tools | +| --- | --- | +| Quotes and catalog | `get_pricing`, `get_product_catalog`, `quote_product` | +| Mailing (paid, approval required) | `send_letter`, `send_product_quote` | +| Email to Letter | inbox, rules, budgets, letterheads, previews, `approve_email_letter` / `reject_email_letter` | +| Status and balance | `list_jobs`, `get_letter_status`, `get_credits` | + +The hosted runtime is the source of truth for tool names and schemas. + +## Skills + +- `dma-send-mail`: collect addresses, draft, quote, show the preview and total, then mail only after approval. +- `dma-email-to-letter`: manage the inbox and rules, and review and approve pending letters. +- `dma-order-status`: read-only job, tracking and balance checks. + +## Notes + +- Mailing is real, costs money and cannot be undone. The skills never mail until the user has explicitly approved the exact preview, addresses and price, and they ask again if anything changes. +- Email to Letter rules default to approval mode. Automatic sending needs the user's explicit consent. +- List prices: First-Class letter $1.49 + $0.25 per extra page; Certified Mail $12.99; postcard $1.99. + +## Docs + +- Agents page: https://directmailamerica.com/agents +- MCP docs: https://directmailamerica.com/docs/mcp +- Server URL: https://directmailamerica.com/api/mcp +- Support: support@directmailamerica.com + +Logo is DirectMailAmerica's official mark. + +## License + +MIT diff --git a/third_party/directmailamerica/assets/logo.png b/third_party/directmailamerica/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5b05bcd1304c4d80a2d9c53c865455523d3b714b GIT binary patch literal 18497 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 DBDPt$ literal 0 HcmV?d00001 diff --git a/third_party/directmailamerica/mcp.json b/third_party/directmailamerica/mcp.json new file mode 100644 index 000000000..a8483d092 --- /dev/null +++ b/third_party/directmailamerica/mcp.json @@ -0,0 +1,11 @@ +{ + "mcpServers": { + "directmailamerica": { + "type": "http", + "url": "https://directmailamerica.com/api/mcp", + "headers": { + "Authorization": "Bearer ${DIRECTMAILAMERICA_API_KEY}" + } + } + } +} diff --git a/third_party/directmailamerica/skills/dma-email-to-letter/SKILL.md b/third_party/directmailamerica/skills/dma-email-to-letter/SKILL.md new file mode 100644 index 000000000..2db41fdc7 --- /dev/null +++ b/third_party/directmailamerica/skills/dma-email-to-letter/SKILL.md @@ -0,0 +1,26 @@ +--- +name: dma-email-to-letter +description: Manage DirectMailAmerica Email to Letter - the workspace inbox, mailing rules, budgets, incoming email drafts and their approval. Use when the user asks about the letter inbox, rules, or pending email letters. +--- + +# Email to Letter inbox and rules + +## Approval rule (always) +Mailing is real, costs money and cannot be undone. Never call `send_letter`, `send_product_quote` or `approve_email_letter` until the user has explicitly approved, in this conversation, the exact preview (PDF/artwork), the sender and recipient addresses, and the exact price. A general instruction like "send me a letter" is not approval of a specific preview and price. If anything changes after approval (text, address, price, options), get approval again. Never retry a failed send without checking `list_jobs` first, and always pass an `idempotencyKey`. + +## Look around (no charge) +- `get_email_to_letter`: inbox address, rules, budgets, usage, balance, letterheads and defaults. +- `list_email_letters` (page with `before`): recent emails and their letter state. +- `get_email_letter` / `download_email_letter` (format pdf or eml): full text, price and the PDF preview. +- `check_email_box`: checks the inbox now (about 60 s cooldown; new mail can take several minutes to appear). + +## Rules +- `save_email_letter_rule` creates or replaces a rule (sender, recipient, optional subject match, address, formatting). Default to approval mode. Switching a rule to automatic sending needs the user's explicit consent to autosend and to the Terms of Use, passed in `consent`; never assume it. +- `preview_email_letter` renders a sample before saving. `delete_email_letter_rule` removes a rule only when the user asks. +- `update_email_letter_settings` changes budgets and limits only when the user asks; enabling may resume paused sending, so say so. + +## Pending letters +1. Show the user the PDF preview, recipient and quoted cents from `get_email_letter`. +2. Edit with `edit_email_letter` or `reapply_email_letter` if asked, then show the new preview and price again. +3. Only after explicit approval: `approve_email_letter` with id, exact version, exact cents and `confirmMail: true`. Otherwise `reject_email_letter` if the user declines. +- `delete_email_letters` is permanent; use only on request with `confirmDelete: true`. diff --git a/third_party/directmailamerica/skills/dma-order-status/SKILL.md b/third_party/directmailamerica/skills/dma-order-status/SKILL.md new file mode 100644 index 000000000..8f0d88eb7 --- /dev/null +++ b/third_party/directmailamerica/skills/dma-order-status/SKILL.md @@ -0,0 +1,15 @@ +--- +name: dma-order-status +description: Check DirectMailAmerica order status, tracking, recent jobs and credit balance. Use when the user asks where a letter or postcard is, or what they have sent or spent. Read-only. +--- + +# Order status + +All of these are free and read-only. + +- `list_jobs` (limit up to 100): recent jobs with ids, status and price. +- `get_letter_status` with a job id (e.g. `job_...`): stored status and USPS tracking. It does not poll the carrier live, so mention when the last update was. +- `get_credits`: prepaid balance in cents. `get_payment_status` with a paymentId checks a Square top-up. +- For Email to Letter items, `list_email_letters` / `get_email_letter` show draft, approved and mailed state. + +Report times in the user's time zone. If a job looks stuck or failed, say so and suggest support@directmailamerica.com; do not resend without explicit approval of a new preview and price (see dma-send-mail). diff --git a/third_party/directmailamerica/skills/dma-send-mail/SKILL.md b/third_party/directmailamerica/skills/dma-send-mail/SKILL.md new file mode 100644 index 000000000..41af4d3e6 --- /dev/null +++ b/third_party/directmailamerica/skills/dma-send-mail/SKILL.md @@ -0,0 +1,21 @@ +--- +name: dma-send-mail +description: Send a physical USPS letter, Certified Mail piece or postcard through DirectMailAmerica. Use when the user wants something printed and mailed. Always quotes and previews first and mails only after explicit approval. +--- + +# Send a letter or postcard + +## Approval rule (always) +Mailing is real, costs money and cannot be undone. Never call `send_letter`, `send_product_quote` or `approve_email_letter` until the user has explicitly approved, in this conversation, the exact preview (PDF/artwork), the sender and recipient addresses, and the exact price. A general instruction like "send me a letter" is not approval of a specific preview and price. If anything changes after approval (text, address, price, options), get approval again. Never retry a failed send without checking `list_jobs` first, and always pass an `idempotencyKey`. + +## Steps +1. `get_connection_status` to confirm the workspace key works; `get_credits` to see the balance. +2. Collect the sender and recipient (name, street, city, state, ZIP). Ask for anything missing; never invent addresses. +3. Draft the content: + - Letter: plain body text, or a print-ready 8.5x11 PDF. + - Postcard: one landscape 396x306 pt (5.5x4.25 in) artwork page; the address side is added by the printer. Set `color` explicitly. + - Anything else (custom sizes, Pro postcards): `get_product_catalog`, then `quote_product` (36-hour exact quote). +4. Quote: `get_pricing` with mailClass, pageCount, recipientCount and options (certified, electronicReturnReceipt, color). List prices: First-Class $1.49 + $0.25/extra page; Certified $12.99 + $0.25/page; postcard $1.99; e-return receipt +$2.40. +5. Show the user the preview (render the PDF to an image when possible), both addresses, the mail class and options, and the exact total. Ask: "Mail this for $X.XX?" +6. Only after a clear yes: `send_letter` (or `send_product_quote` with `confirmed: true` for a saved quote) with an `idempotencyKey`. Never pay with x402 or create a credit checkout unless the user separately asks for it. +7. Report the job id and price, and offer to track it with the dma-order-status skill.