Open MCP server for AI agents that need to send physical mail through PostalForm hosted checkout, MPP, or x402.
Server has 4 tools with explicit schemas and descriptions. Naming follows verb_noun convention (agent_mail_discovery, list_postalform_tools, validate_letter_mail, create_letter_checkout_draft). Schemas are well-structured using Zod with proper constraints (min/max lengths, enums, email format). However, descriptions are brief (10-80 chars) and lack actionable context for LLM tool selection. Parameter descriptions exist but are minimal. Error handling is absent, no guidance on retryability, user-fixable vs fatal errors, or recovery paths. Output is JSON text only, not structured with documented field types. Missing idempotency hints and confirmation patterns for the destructive create_letter_checkout_draft tool.
Return canonical PostalForm MCP, OpenAPI, x402, A2A, and documentation URLs for agents that need to send physical mail.
Create an unpaid hosted-checkout draft through PostalForm MCP. This does not send mail until a human reviews and pays checkout.
Read-only check that connects to PostalForm MCP and lists the live tool names.
Validate and quote a PostalForm machine-order letter payload without payment, printing, or mailing.
Descriptions lack LLM-optimized context. 'Return canonical PostalForm MCP...' (80 chars) and 'Read-only check that connects...' (50 chars) are too terse. LLMs need WHEN to use, WHAT it returns, and dependencies. Baseline: 50-200 chars with actionable guidance.
No error handling or recovery guidance. Tools return JSON text only; no structured error responses. If validation fails or PostalForm MCP is unreachable, LLM gets no actionable error message. Missing pattern:recovery-guide.
create_letter_checkout_draft is destructive (WRITE risk) but lacks confirmation pattern. Parameter 'confirm_create_unpaid_draft' is a soft client-side guard, not a true confirmation flow. Should support dry-run or explicit confirmation step per pattern:confirmation-request.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Output schemas not documented. Tools return JSON text via jsonText() helper, but field structure, types, and required fields are not declared. LLMs cannot plan downstream calls or extract data reliably. Missing pattern:response-shaper.
Parameter descriptions are minimal or missing context. E.g., 'confirm_create_unpaid_draft' description says 'Must be true to create...' but does not explain WHY this guard exists or what happens if false. Descriptions should guide LLM decision-making.