pdf-reporter-mcp

pdf-reporter-mcp

MCP server for rendering Mermaid diagrams to SVG and converting Markdown with callout blocks into styled PDF reports.

Category
Visit Server

README

CI Docker TypeScript Tests Mutation Score License: MIT Node.js

PDF Reporter MCP

Multi-purpose MCP server for generating SVG diagrams and PDF documents. Render Mermaid diagrams to SVG, compose Markdown content with callout blocks, and produce styled PDF reports — all through standard MCP tools.

Features

  • Mermaid to SVG — Render Mermaid diagrams to clean SVG via dedicated MCP tool
  • Markdown to PDF — Convert Markdown content with custom callout blocks to styled PDF documents
  • Callout Blocks — 9 callout types (idea, automation, warning, success, info, critical, business, expert, tip) using :::type Title syntax
  • Pastel Theme — Professional styling with configurable pastel color palette
  • Harmonious Diagrams — Pastel fills with tonal text and borders for visual consistency
  • MCP Protocol — Standard MCP server with stdio and SSE transports

Quick Start

Installation

git clone https://github.com/alexmakeev/pdf-reporter-mcp.git
cd pdf-reporter-mcp
npm install

Usage

# Development
npm run dev

# Production
npm run build && npm start

# Docker (pre-built image)
docker run --rm -p 3000:3000 -e TRANSPORT=sse ghcr.io/alexmakeev/pdf-reporter-mcp:latest

# Docker (build locally)
docker compose up

MCP Client Configuration

{
  "mcpServers": {
    "pdf-reporter": {
      "command": "node",
      "args": ["/path/to/pdf-reporter-mcp/dist/server.js"]
    }
  }
}

Docker

Pre-built Docker images are published to GitHub Container Registry on every push to main.

Pull and Run

docker pull ghcr.io/alexmakeev/pdf-reporter-mcp:latest
docker run --rm -p 3000:3000 -e TRANSPORT=sse ghcr.io/alexmakeev/pdf-reporter-mcp:latest

MCP Client Configuration (Docker)

{
  "mcpServers": {
    "pdf-reporter": {
      "url": "http://localhost:3000/sse"
    }
  }
}

Available Tags

Tag Description
latest Latest build from main branch
main Same as latest
v1.0.0 Specific release version
sha-abc1234 Specific commit build

Custom Configuration

docker run --rm \
  -p 3000:3000 \
  -e TRANSPORT=sse \
  -e THEME_PRIMARY_COLOR="#E81E63" \
  -v $(pwd)/output:/app/output \
  ghcr.io/alexmakeev/pdf-reporter-mcp:latest

MCP Tools

1. render_diagram

Render a single Mermaid diagram to SVG.

Input Parameters:

  • mermaid (required, string) — Mermaid diagram definition

Output:

{
  "svg": "<svg>...</svg>"
}

2. render_content

Render Markdown content with callouts and diagram placeholders to HTML.

Input Parameters:

  • content (required, string) — Markdown content with optional callout syntax
  • diagrams (optional, object) — Pre-rendered SVG diagrams: { [name]: string }

Output:

{
  "html": "<article>...</article>"
}

3. generate_pdf

Generate a PDF document from HTML content.

Input Parameters:

  • title (required, string) — Document title for cover page
  • html (required, string) — Rendered HTML content
  • subtitle (optional, string) — Document subtitle
  • logo (optional, string) — Logo as data URI or file path
  • template (optional, string, default: generic) — Template name
  • options (optional, object) — PDF generation options:
    • pageSize (string, default: A4) — Page size (e.g. A4, Letter)
    • toc (boolean, default: false) — Generate table of contents
    • headerTemplate (string or false) — Custom header template HTML
    • footerTemplate (string or false) — Custom footer template HTML
    • margins (object) — Page margins with top, bottom, left, right (e.g. 17mm)

Output:

{
  "path": "/tmp/pdf-reporter-output/document-title.pdf",
  "size": "2.4 MB",
  "pages": 15
}

4. list_templates

List available report templates.

Output:

{
  "templates": [
    {
      "name": "generic",
      "description": "Universal report template with cover page, optional TOC, and markdown content"
    }
  ]
}

5. get_template_schema

Get the input schema for a specific template.

Input:

  • template (required, string) — Template name

Output:

{
  "required": ["title", "html"],
  "optional": ["subtitle", "logo", "options"]
}

Workflow

The typical workflow is three steps:

1. render_diagram  →  Mermaid source  →  SVG string
2. render_content  →  Markdown + SVGs  →  HTML
3. generate_pdf    →  HTML + metadata  →  PDF file

Callout Syntax

:::info Important Note
This is an informational callout block.
Supports **markdown** inside.
:::

:::warning Caution
Be careful with this operation.
:::

:::success Achievement Unlocked
All systems operational.
:::

Supported Callout Types

Type Emoji Use Case
info ℹ️ General information
idea 💡 New ideas and suggestions
automation 🤖 Automation features
warning ⚠️ Warnings and cautions
success Successful outcomes
critical 🔴 Critical alerts
business 💰 Business insights
expert 🔍 Expert recommendations
tip 💎 Tips and best practices

Example

See the demo report for a complete example featuring all capabilities.

Generated with examples/generate-demo.ts.

Theme Configuration

Variable Default Description
THEME_PRIMARY_COLOR #4169E1 Primary accent color (Royal Blue)
THEME_COVER_COLOR same as primary Cover page accent color

The server auto-generates a pastel palette from the primary color for backgrounds, table headers, and cover elements. All text remains dark for readability.

Example:

export THEME_PRIMARY_COLOR="#E81E63"
export THEME_COVER_COLOR="#880E4F"
npm run dev

Architecture

MCP Input
  → Mermaid Renderer (mmdc CLI → SVG)
  → Callout Parser (:::syntax → HTML)
  → Markdown Renderer (marked + highlight.js)
  → Template Engine (Handlebars)
  → PDF Generator (Puppeteer)

Development

npm run dev          # Start dev server
npm test             # Run 164 tests
npm run test:watch   # Watch mode
npm run test:mutation # Mutation testing (Stryker)
npm run build        # TypeScript compilation

See docs/dev.md for the full developer guide.

Deployment

See docs/prod.md for Docker and Dokploy deployment instructions.

Testing

  • 164 unit tests across 8 test suites (vitest)
  • 94.21% mutation score via Stryker (minimum 89% per module)
  • All tests run offline with mocked dependencies

Tech Stack

Component Technology
Runtime Node.js 20+, TypeScript (strict)
PDF Puppeteer (headless Chrome)
Diagrams @mermaid-js/mermaid-cli
Templates Handlebars
Markdown marked + highlight.js
MCP @modelcontextprotocol/sdk
Tests vitest + Stryker

License

MIT © Alexander Makeev

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured