
Pdf Letter Mcp
io.github.bitterdev由 GitHub 账号 bitterdev 发布v1.0.3更新于 Oct 24, 2026
Renders letters as print ready PDFs, DIN 5008 compliant for German window envelopes.
概览
将结构化信件数据渲染为符合 DIN 5008、适用于德国窗口信封的打印就绪 PDF,完全离线运行。
- 可以做什么
- 这是一个本地 stdio MCP 服务器,使用固定的一种 DIN 5008 版式把结构化信件内容生成打印就绪的 PDF,收件人地址按标准定位,可对准 DL 与 C6/C5 窗口信封。工具包括 create_letter(渲染并写出 PDF,返回路径、页数、版式度量和警告)、preview_letter(同样渲染但不写文件)、prepare_signature(对扫描签名进行裁剪、去背景和墨色重着色并输出 PNG)、get_din5008_spec、list_locales 和 list_fonts。支持多语言信件、标记语法、列表、自动分页、折痕与打孔标记以及签名图片。
- 适用场景
- 适合让助手起草或生成正式的德式信件 PDF,尤其是需要装入标准窗口信封的信件。适用于更看重统一固定版式而非排版自由度的私人或商务通信。
- 运行要求
- 作为本地 Node.js 进程运行,通过 npm 包 pdf-letter-mcp 安装并以 stdio 注册。可选环境变量:PDF_LETTER_OUTPUT_DIR、PDF_LETTER_FONT_DIR、PDF_LETTER_FONT、PDF_LETTER_FONT_SIZE、PDF_LETTER_PROFILES、PDF_LETTER_PROFILE。发件人地址和签名来自本地配置文件,默认 ~/.config/pdf-letter-mcp/profiles.json。无 Web 服务或外部 API,仅限桌面端。
安装
在 SourceWeft 中
- 打开 控制台中的 Pdf Letter Mcp,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
pdf-letter-mcp
Local MCP server (stdio) that turns structured letter data into a print ready PDF. One fixed layout, the everyday German letter, with the recipient address positioned per DIN 5008 so it sits exactly in the window of DL and C6/C5 window envelopes. No web service, no external API, everything runs offline on your machine.
Features
- One layout, no variants: return address line, recipient, right aligned "place, date", bold subject block with references below it, salutation, body, closing, signature, enclosures
- Address field 45 mm high ending at 105 mm from the left, with return address line, remark zone (Einschreiben, Nicht nachsenden) and address zone
- Return address, remarks and recipient are balanced inside the address field, so the block sits evenly in the envelope window and further address lines still fit.
addressLayout: "din"switches back to the fixed zone boundaries - Page breaks keep closing, signature image, name and enclosures together, follow-up pages carry recipient, date and page number
- Subject 33 mm below the address field, place and date three lines above it
- Fold marks at 105 mm and 210 mm, punch mark at 148.5 mm
- DIN 5008 writing margin of 25 mm on the left, and the address field follows it, so address, subject and body share one edge. The field keeps its right edge at 105 mm and stays inside the 90 mm envelope window
- Closing, one blank line, printed name.
signature.spaceMmreserves more room for signing by hand - Signature as an image file: PNG with alpha channel keeps its transparency, the image is laid over the blank line above the printed name and never shifts the text. Optional crop, background removal and ink recolouring for scans
- Multilingual: de, en, fr, es, it, nl, pt, pl, tr, da, sv, cs with locale aware date formats and address rules per country
- Language aware hyphenation, bold/italic markup, bullet and numbered lists, automatic page breaks with continuation headers
- Page numbers and a layout debug mode that draws the DIN 5008 zones
- Embedded Unicode fonts (DejaVu), any installed system font or a .ttf path
Install
Register the server in Claude Code:
Or in ~/.claude.json / claude_desktop_config.json:
Environment
Sender profiles
Sender addresses and signatures live in a file on the machine, never in the prompt. A letter names a profile, the server fills in address, return address line and signature image verbatim.
create_letter then only needs "profile": "erika" plus the content. The profile owns the identity: a sender or signature passed in the call is replaced by the profile, place, locale and closing are defaults that a letter may override. list_profiles shows what is available. Without a profile and without a sender the letter is refused instead of being invented.
The file belongs outside the repository, profiles.json is in .gitignore.
Layout is fixed
The MCP tools take content only: addresses, date, subject, references, text, signature, enclosures. There are no parameters for margins, spacing, font, image size or position, and unknown fields sent by a client are dropped. Typography is an installation setting (PDF_LETTER_FONT, PDF_LETTER_FONT_SIZE), so every letter of one installation looks identical. The building blocks for a company letterhead, an information block and a footer are still in the library, but they are not reachable through the MCP.
Tools
create_letter
The sender appears only in the small return address line above the recipient. Place and date sit right aligned above the bold subject block, references go directly below the subject.
Everything except sender, recipient and body is optional. The salutation is derived from the recipient (Frau plus Dr. Erika Mustermann becomes Sehr geehrte Frau Dr. Mustermann,), the date defaults to today, the closing to the locale default.
Body markup
- Blank line: new paragraph
- Single newline: line break (set
bodyModetomarkdownto reflow instead) - itemor1. item: bullet or numbered list**bold**,*italic*\pagebreakon its own line: forced page break
Signature
Two ways, both end up as a real image in the PDF:
- Pass the file directly:
signature.pathplustrimandremoveBackground. The scan is cleaned on every render. - Clean it once with
prepare_signatureand reuse the resulting PNG. Faster and lets you check the result before it goes into a letter.
trim, removeBackground and inkColor need the optional sharp dependency, which is installed by default. A PNG that already has a transparent background works without it.
The image is an overlay: closing, one blank line, printed name stay exactly where they are, and the signature sits on top of that blank line and across the closing, the way a signature is written over "Mit freundlichen Grüßen" on paper. That overlap is the intended result.
Size and position are decided by the renderer, not by the caller. The signature is scaled to roughly the width of the closing line, around 50 mm, capped proportionally at 1.2 times that width and 28 mm in height. There is no parameter for width, height, offset or spacing, so nothing can shift the layout letter by letter.
Verification
examples/ holds the German letter, the same letter in English and a debug variant that draws the DIN 5008 zones, so the address field position can be checked against a window envelope. preview_letter reports the same measurements as JSON, plus warnings when the address is too long or does not fit the address field.
License
MIT, see LICENSE. The bundled DejaVu fonts are covered by the Bitstream Vera and Arev licenses.
来源:README.md,提交 8e23a4a
工具
0版本历史
1- v1.0.3最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分