Create and edit PDFs: text, Markdown, tables, metadata and pages, with Japanese font embedding.
MCPpedia last refreshed this data
io.github.shuji-bonji/pdf-writer-mcp is an MCP server that create and edit PDFs: text, Markdown, tables, metadata and pages, with Japanese font embedding. Its tool list has not been published yet over stdio and sse, requires no API key, and scores 91/100 on MCPpedia's security, maintenance and efficiency rubric.
Config is the same across clients - only the file and path differ.
{
"mcpServers": {
"pdf-writer": {
"env": {
"PDF_WRITER_FONT": "/absolute/path/to/NotoSansJP-Regular.otf"
},
"args": [
"-y",
"@shuji-bonji/pdf-writer-mcp@latest"
],
"command": "npx"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
Create and edit PDFs: text, Markdown, tables, metadata and pages, with Japanese font embedding.
This server supports HTTP transport. Be the first to test it - help the community know if it works.
Five weighted categories - click any category to see the underlying evidence.
No known CVEs.
Checked @shuji-bonji/pdf-writer-mcp against OSV.dev.
Click any tool to inspect its schema.
Be the first to review
Have you used this server?
Share your experience - it helps other developers decide.
Sign in to write a review.
Others in writing
Scrape, crawl, and map websites to Markdown or JSON via local CLI.
Documents to Markdown for agents: PDF layout, tables and OCR, Office, HTML, scans. docling in Rust.
一键同步文章到多个内容平台,支持今日头条、WordPress、知乎、简书、掘金、CSDN、typecho各大平台,一次发布,多平台同步发布。解放个人生产力
LaTeX editor for AI agents: live PDF preview, PDF comments that drive edits, git history
MCP Security Weekly
Get CVE alerts and security updates for io.github.shuji-bonji/pdf-writer-mcp and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
MCP server that creates PDFs from text, Markdown, or tabular data and edits existing ones (metadata and page operations). Built on normativepdf — a clause-driven PDF library in which every behaviour is tied to an ISO 32000 clause — with CJK font embedding via harfbuzz subsetting.
Part of the PDF family alongside pdf-reader-mcp (structure analysis) and pdf-verify-mcp (authenticity verification). Where pdf-reader-mcp tells you what is in a PDF and pdf-verify-mcp tells you whether it is genuine, pdf-writer-mcp is the one that writes it.
[!IMPORTANT] All file paths must be absolute (since v0.7.0). Relative paths and paths containing
..are rejected — a relative path would resolve against the MCP host's working directory, which is not the directory you think it is. This applies toinputPath,inputPaths,outputPath,outputDir,fontPathandattachmentPath. Input PDFs larger than 100 MB are also rejected.
| Tool | Purpose |
|---|---|
create_text_pdf | Plain text — honours \n, blank lines separate paragraphs, long lines wrap |
create_markdown_pdf | Markdown — headings, paragraphs, bullet/ordered lists, code blocks, quotes, rules, tables |
create_table_pdf | Ruled tables — automatic column widths, cell wrapping, headers repeated across page breaks |
Shared options: outputPath, returnBase64, fontPath, fontSize, pageSize (A4/A3/A5/LETTER/LEGAL), margin, title, drawTitle, author, onMissingGlyph, tagged, lang, pdfVersion.
Pass pdfVersion: "2.0" to write an ISO 32000-2 file. The default stays "1.7", and its bytes are unchanged.
The version is not only a header. ISO 32000-2 attaches two obligations to it, and both are met:
/ID becomes Required (Table 15). Both elements are equal on a first write (R-14.4-6), and the value stays deterministic under SOURCE_DATE_EPOCH.CreationDate and ModDate (§14.3.3); the title, author and producer move to the XMP metadata stream, where PDF 2.0 says document metadata belongs.{ "text": "Body.", "title": "Report", "pdfVersion": "2.0" }
With tagged: true, a 2.0 file declares PDF/UA-2 (ISO 14289-2) instead of PDF/UA-1, which allows only PDF 1.0 to 1.7 (ISO 14289-1 §6.1). See PDF/UA-2 below. Up to v0.26.x the combination was refused.
Pass tagged: true to produce an accessible, tagged PDF conforming to PDF/UA-1 (ISO 14289). Output is verified compliant by veraPDF (--flavour ua1, 106/106 rules).
{ "markdown": "# Title\n\nBody.", "title": "Report", "tagged": true, "lang": "en" }
Markdown maps onto the structure tree: headings → H1–H6, lists → L/LI/LBody, tables → Table/TR/TH/TD (headers get /Scope), quotes → BlockQuote, code → Code. Rules, borders and code backgrounds become artifacts. Under PDF/UA-1, heading levels are normalised so they start at H1 and never skip — a Markdown # → ### jump becomes H1 → H2 in the structure, while visual sizes stay as authored (PDF/UA-2 keeps the level as written; see below).
PDF/UA mandates a document title, so tagged: true requires title. The title is always written to the metadata (dc:title) and, by default, also drawn as the first H1. When the Markdown already starts with its own