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.
One-click editor setup isn’t available for this listing yet — we don’t have a confirmed install command, and we’d rather show nothing than point your editor at the wrong package or host. Follow the project’s own setup instructions, linked above.
Send a real letter — printed, folded, franked and handed to the post — from Node.
Show the PDF and exact total to the user. After approval, use the same input and key:
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.
Every paid live letter receives its invoice number at payment time. Test letters never consume the statutory series. A full refund keeps that invoice and adds a separately numbered negative credit note.
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
No reviews yet — be the first to share how this listing worked for you.
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>