Turns LLM output into polished corporate PDFs without leaving your MCP client. Exposes three tools: generate_report takes structured JSON specs with sections, tables, and charts; generate_report_from_text parses raw markdown-style text and builds the structure automatically; list_themes returns five color schemes (navy, charcoal, forest, burgundy, default). Every report gets a cover page, table of contents, and configurable metadata like classification levels and document IDs. Requires reportlab and matplotlib on the Python side. Useful when you need to hand Claude research or analysis and get back a distribution-ready PDF with proper formatting, not just raw text or HTML.
An MCP server that generates professional corporate PDF reports from structured JSON specs or raw LLM text output. Drop it into Claude Desktop (or any MCP client) and ask Claude to turn analysis, research, or meeting notes into a polished multi-page report complete with cover page, table of contents, executive summary, section headings, tables, and charts.
A sample output is at examples/sample_report.pdf.
Install Python dependencies:
pip install reportlab matplotlib
Add to your claude_desktop_config.json:
{
"mcpServers": {
"pdf-report": {
"command": "npx",
"args": ["-y", "pdf-report-generator"]
}
}
}
generate_reportGenerates a PDF from a full structured spec.
Minimal example input:
{
"spec": {
"metadata": {
"title": "Q3 Performance Review",
"author": "Engineering Team",
"company": "Acme Corp",
"classification": "INTERNAL"
},
"executive_summary": "Overall performance improved this quarter...",
"sections": [
{
"heading": "Infrastructure",
"body": "Uptime reached 99.94%...",
"subsections": []
}
],
"tables": [],
"charts": []
}
}
generate_report_from_textConverts raw text into a structured PDF report. Sections are auto-detected from headings.
{
"text": "# Overview\nThis quarter...\n\n# Key Findings\n...",
"title": "Q3 Summary",
"author": "Data Team",
"company": "Acme Corp",
"classification": "INTERNAL",
"theme_name": "navy"
}
list_themesReturns available color themes: default, navy, charcoal, forest, burgundy.
metadata
title* string
subtitle string
author string
date string (YYYY-MM-DD; defaults to today)
company string
department string
document_id string (e.g. RPT-2026-001)
classification string (PUBLIC | INTERNAL | CONFIDENTIAL)
logo_path string (absolute path to PNG/JPG)
page_size "letter" | "a4"
executive_summary string
sections[]
heading* string
body* string (\n\n = paragraph break)
subsections[]
heading* string
body* string
tables[]
title string
headers* string[]
rows* string[][]
after_section int (0-based section index; -1 = after exec summary)
charts[]
title string
type "bar" | "line" | "pie" | "horizontal_bar"
labels* string[]
datasets* [{label, values[]}]
after_section int
images[]
path* string (absolute path)
caption string
width_inches number
after_section int
theme
primary_color [R, G, B]
accent_color [R, G, B]
highlight_color [R, G, B]
Python not found — ensure python or python3 is on your PATH and is version 3.8+.
reportlab not installed — run pip install reportlab matplotlib.
Charts missing — matplotlib is required for charts. Install it with pip install matplotlib.
Large PDFs — complex specs with many charts can take 5–15 seconds. This is normal.
MIT
io.github.ericm1018/skillfm-llm-cost-optimizer-openai-anthropic-usage
io.github.mikerawsonnz/llm-orchestration-agent
io.github.mikerawsonnz/authenticated-llm-agent
labforgedev/copilot-memory-mcp
csoai-org/agent-prompt-injection-firewall-mcp
io.github.mikerawsonnz/authenticated-multi-llm-agent