MCP PDF Server
An MCP (Model Context Protocol) server exposing tools to render Markdown into PDF.
What’s included
- MCP tools:
pdf_from_markdown(primary) andmd_to_pdf(alias). - Accepts inline Markdown or a file path.
- Options for paper format and orientation; sensible
output/defaults.
Prerequisites
- Node.js 18+ recommended.
Install
npm install
# Download browsers for Playwright (Chromium only is enough):
npx playwright install chromium
Build
npm run build
Run (stdio)
npm start
Configure in your MCP-compatible client by pointing to the compiled binary or npm start command.
MCP Tools
- Tool ids:
pdf_from_markdown(primary) andmd_to_pdf(alias for discoverability)- Purpose: Generate a PDF from Markdown.
- Inputs:
markdown(string, optional): Inline Markdown content. If set,pathis ignored.path(string, optional): Absolute or relative path to a.mdfile. Ignored ifmarkdownis provided.outputPath(string, optional): Desired output PDF path. Defaults tooutput/<timestamp>.pdfand creates missing directories.paperFormat(string, optional):A4|Letter|Legal(default:A4).paperOrientation(string, optional):portrait|landscape(default:portrait).- Provide exactly one of
markdownorpath. If both are set,markdowntakes precedence.
- Output:
- Returns a text message containing the absolute path to the created PDF.
- Example (inline):
{ "tool": "md_to_pdf", "arguments": { "markdown": "# Hello\nThis will render to PDF.", "paperFormat": "A4" } } - Example (file path):
{ "tool": "pdf_from_markdown", "arguments": { "path": "examples/sample.md", "outputPath": "output/sample.pdf", "paperOrientation": "landscape" } }
Tool Schema (compact)
tools:
- id: pdf_from_markdown
alias: md_to_pdf
params:
markdown?: string # Inline Markdown (preferred if both set)
path?: string # Path to a .md file
outputPath?: string # Output PDF path (default: output/<timestamp>.pdf)
paperFormat?: 'A4'|'Letter'|'Legal' # default: 'A4'
paperOrientation?: 'portrait'|'landscape' # default: 'portrait'
constraints:
- Provide exactly one of markdown or path (if both provided, markdown is used)
result:
- type: text
text: "PDF created at: <absolute path>"
Client configuration (example) If your MCP client supports JSON configuration for a stdio server, a minimal entry might look like:
{
"servers": {
"mcp-pdf": {
"command": "node",
"args": ["dist/index.js"]
}
}
}
Notes
- Uses Playwright (Chromium) to render HTML from Markdown and print to PDF.
- On first install, Playwright may download a browser. You can also point it to an existing Chrome/Chromium.
One‑liner with npx
- After this package is published to npm, you can run the server directly:
npx -y md-2-pdf-mcp(runs themd-2-pdf-mcpbin)- Or explicitly:
npx -y -p md-2-pdf-mcp mcp-pdf - The package defines
binentries and apostinstallthat installs Chromium.
- From the local repo (without publishing):
npx --yes .- This uses the
binin package.json and thepreparescript to build.