Send real, printed letters by post across Europe. Requires a free account; quote before sending.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Send a real letter β printed, folded, franked and handed to the post β from Node.
Get a key at sendletter.eu. Keys starting
sk_test_ post nothing, charge nothing, and still run the whole status chain, so
you can build against the real thing.
Give the content exactly one way: text, document (rich text), file
(base64) or fileUrl. Two is refused rather than guessed at, because the wrong
document in a postbox cannot be recalled.
Send an idempotencyKey on anything that can be retried. A repeat with the
same key returns the original letter instead of a second envelope. That single
field is what makes a retry after a network timeout safe, and a timeout says
nothing about whether the letter was accepted.
validateAddress returns a bad address rather than throwing: a wrong postcode
is the successful outcome of asking. supported: false is the one that cannot
be fixed by editing the address β we do not carry to that country.
Everything the API refuses becomes a SendLetterError with a code to branch
on.
isRetryable covers 429 and 5xx. Nothing else should be retried: a 400 means
the letter will be refused just as firmly the second time.
Status changes arrive as a POST to the URL you registered. Verify them. Without that, anyone who learns your endpoint can tell your system a letter was delivered.
Two things this shape gets right and hand-rolled verification usually does not:
JSON.stringify does not promise to reproduce them. Read
the body as text, verify, then parse.event.id. Delivery is at-least-once with retries, so a
timeout on your side means the same event arrives again. letter.posted
handled twice should not bill a customer twice.Events: letter.submitted, letter.printed, letter.posted,
letter.delivered, letter.failed, letter.refunded.
A sk_test_ key runs the full chain β submitted β printed β posted β delivered β with webhooks firing exactly as they will in production, while
touching no wallet and no printer. client.isTestMode tells you which kind of
key you are holding, which is worth asserting in a deploy check: the two look
alike in a log and only one of them costs money.
sendletter.eu/en/developers Β·
OpenAPI at /api/v1/openapi.json Β· MIT
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/sendletter)<a href="https://allmcps.com/mcp/sendletter"><img src="https://allmcps.com/api/badge/sendletter?style=directory" alt="SendLetter on AllMCPs" /></a>