
Pixelletter Mcp
io.github.bitterdevPublished by GitHub account bitterdevv1.0.3Updated Oct 24, 2026
Send physical letters and faxes through the PixelLetter interface, test mode included.
Overview
Lets an assistant send physical letters and faxes through a PixelLetter account, with a test mode that prints and charges nothing.
- What you can do
- Wraps the PixelLetter HTTPS interface as a local stdio server. Tools send documents or plain text as a printed letter (optionally also faxed), send faxes only, read account data and credit, cancel a submitted order by its order id, and submit documents for electronic invoice signature. A reference tool looks up action values, dispatch centres, service codes, limits and error codes offline.
- When to use it
- Use it when an assistant should turn a PDF or plain text into real postal mail, registered mail, a fax, or a signed invoice, and when you want to rehearse the whole flow in test mode before anything is printed or charged.
- Requirements
- Runs locally as a Node.js process (npm package pixelletter-mcp, built with npm install and npm run build) and needs network access to the PixelLetter endpoint. Required environment variables: PIXELLETTER_EMAIL and PIXELLETTER_PASSWORD. Optional: PIXELLETTER_DEFAULT_DESTINATION, PIXELLETTER_FORCE_TEST_MODE, PIXELLETTER_ENDPOINT, PIXELLETTER_ACCEPT_TERMS, PIXELLETTER_WAIVE_WITHDRAWAL_RIGHT, PIXELLETTER_DEFAULT_LOCATION, PIXELLETTER_TIMEOUT_MS.
Installation
In SourceWeft
- Open Pixelletter Mcp in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
pixelletter-mcp
Local MCP server (stdio) for the PixelLetter HTTPS interface. Hand it a PDF and a destination country and PixelLetter prints, folds, franks and posts the letter, optionally as registered mail. It also sends faxes, cancels orders, reads the account balance and drives the electronic invoice signature.
It pairs with pdf-letter-mcp: that server writes a DIN 5008 letter PDF, this one puts it in the post. send_letter takes the absolute path that create_letter returns.
The implementation follows the published documentation: the HTTPS handbook, the e-mail handbook, the two signature handbooks, the reference PHP class (version 2.01) and the public error code list. Three values are not printed in those documents, colour printing, GoGreen postage and the NODUPLEX switch, and they are taken from the hudora/pyPostal client that has been sending real orders with them. They are marked as such in the table below. Nothing else is invented.
How the interface works
Everything is one multipart HTTPS POST to https://www.pixelletter.de/xml/index.php. The form field xml carries the order document, credentials included, and the fields uploadfile0, uploadfile1 and so on carry the documents. The answer is a small XML document: code 100 means the order was accepted, anything else is an error code from the published list. The final result, including whether the recipient address fitted the address window, arrives by e-mail a few hours later.
Test mode
Every sending tool needs an explicit testMode flag, there is no default. testMode: true runs the order exactly like a real one but PixelLetter never prints it, never sends it and never charges for it. testMode: false really posts the letter. Set PIXELLETTER_FORCE_TEST_MODE=true to pin the whole server to test mode while wiring things up.
Install
Register the server in Claude Code:
Or in ~/.claude.json / claude_desktop_config.json:
Environment
Credentials are only read from the environment, nothing is stored in the repository and nothing is written to disk.
Tools
send_letter
Ready made PDF, the normal case:
Registered mail with return receipt, printed in colour on one side only:
Plain text, typeset by PixelLetter, with the signature stored in the account:
Rules the tool enforces before anything is sent:
- One order carries either documents or text, not both. Several documents are converted and merged into one letter, in the order given.
- The destination country is mandatory for letters, a wrong code leads to wrong postage.
- The recipient address has to be visible in the address window area of the document, PixelLetter checks this before dispatch.
- Allowed upload types are
.pdf,.doc,.xls,.ppt,.rtf,.wpd,.psd, 50 MB maximum. Error 053 shows that PixelLetter can restrict this to PDF, so PDF is the safe choice. - Additional services, colour print and duplex are letter only, a pure fax order rejects them. Codes 28 (return receipt) and 29 (personal delivery) need 27 (registered), code 30 (drop-in registered) stands alone. Registered mail is a German product, other destinations run into error 026.
Every option of the interface
Full coverage of the fields the interface documents. "Applies to" says which dispatch type accepts the option, invalid combinations are rejected before the request goes out.
get_interface_reference returns the same list at runtime, including the full error code table.
What the interface does not offer
Named explicitly, because their absence is a property of the API and not an omission of this server:
- No job list. There is no documented call that lists or queries submitted orders.
cancel_orderworks on an order id from the confirmation e-mail,get_account_inforeports the balance, everything else lives in the PixelLetter customer area. - No envelope or paper format, no postage class, no delivery speed, no cover sheet, no reply envelope, no sender identification. These are no fields of the interface. Letters go into a DIN C6/5 window envelope and the postage follows weight and destination country.
- No address correction. Premiumadress shows up in error 088, but it has to be set up by PixelLetter support for the account and has no request field.
- Postcards, upload templates and bulk orders. The reference class and the error codes show they exist (
font, template number, action 5), but no handbook documents their action values or their field layout. Sending a guessed action could produce a real, wrong dispatch, so they are left out. refin the auth block has no documented meaning and is always sent empty, exactly like the reference class does.
Verification
The tests never touch the live API. The HTTP layer is exercised through an injected fetch, which checks the endpoint, the xml field, the uploadfileN parts, the test mode flag and the error code mapping.
License
MIT, see LICENSE.
Source: README.md at commit dfdf924
Tools
0Version history
1- v1.0.3LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts