MCP-MD-PDF: Markdown to Word/PDF Converter
A simple, reliable Model Context Protocol (MCP) server that converts Markdown files into professional Word (.docx) and PDF documents — with full support for .dotx templates.
MCP-MD-PDF: Markdown to Word/PDF Converter
A simple, reliable Model Context Protocol (MCP) server that converts Markdown files into professional Word (.docx) and PDF documents — with full support for .dotx templates.
Background
This tool was born from a practical need. We often write documentation, guides, and technical notes in Markdown — it’s fast, lightweight, and easy to version. But when it’s time to deliver these files to clients or present them professionally, we usually want them to match our project or company style: clean layout, consistent fonts, branded cover page, and polished formatting.
So instead of doing that manually every time, we built a simple flow:
Convert Markdown → Word (.docx using a
.dotxtemplate) → PDF
By using Word templates, we could apply our own design once and keep every document consistent. That’s where this small project came from — a quick way to turn Markdown into beautiful, ready-to-share documents that look like they belong to your organization.
Features
- 🚀 Fast Conversion – From Markdown to Word or PDF in seconds
- 🎨 Template Support – Apply
.dotxtemplates for consistent, branded styling - 📦 Batch Processing – Convert multiple files at once
- 🔧 Flexible Output – Choose between
.docx,.pdf, or both - 🤖 AI-Ready – Built to integrate smoothly with Claude and other MCP-compatible AI tools
Installation
Choose the installation method that best fits your needs:
| Method | Code Download? | PDF Support | Best For |
|---|---|---|---|
| uvx (Option 1) | ❌ No | ✅ Yes (LibreOffice required) | Claude Desktop users |
| pip (Option 2) | ❌ No | ✅ Yes (LibreOffice required) | Python package users |
| From Source (Option 3) | ✅ Yes | ✅ Yes (LibreOffice required) | Developers |
Option 1: Using uvx (Recommended - No Code Download Needed)
Best for: Claude Desktop users who want the simplest installation.
Requirements:
- Python 3.10+
- For PDF conversion:
- Windows: Microsoft Word (uses COM automation)
- macOS: LibreOffice (
brew install --cask libreoffice) - Linux: LibreOffice (
sudo apt-get install libreoffice)
Installation:
# No code download needed - uvx handles everything
uvx mcp-md-pdf
Claude Desktop Setup:
Add to your claude_desktop_config.json:
{
"mcpServers": {
"md-pdf": {
"command": "uvx",
"args": ["mcp-md-pdf"]
}
}
}
Restart Claude Desktop for changes to take effect.
📖 See Configuration section for config file location and alternative setups.
Option 2: Using pip (No Code Download Needed)
Best for: Users who want to install as a Python package.
Requirements:
- Python 3.10+
- For PDF conversion (same as Option 1):
- Windows: Microsoft Word
- macOS/Linux: LibreOffice
Installation:
# Install from PyPI (when published)
pip install mcp-md-pdf
# Or install with development dependencies
pip install "mcp-md-pdf[dev]"
Claude Desktop Setup:
Add to your claude_desktop_config.json:
{
"mcpServers": {
"md-pdf": {
"command": "python",
"args": ["-m", "md_pdf_mcp.server"]
}
}
}
Restart Claude Desktop for changes to take effect.
📖 See Configuration section for config file location and alternative setups.
Option 3: From Source (Code Download Required)
Best for: Developers who want to modify the code or contribute.
Requirements:
- Git
- Python 3.10+
- For PDF conversion (same as above)
Installation:
# Step 1: Clone the repository
git clone https://github.com/sham-devs/mcp-md-pdf.git
cd mcp-md-pdf
# Step 2: Install in development mode
pip install -e .
# Step 3: (Optional) Install dev dependencies
pip install -e ".[dev]"
Claude Desktop Setup:
Add to your claude_desktop_config.json:
{
"mcpServers": {
"md-pdf": {
"command": "python",
"args": ["-m", "md_pdf_mcp.server"]
}
}
}
Restart Claude Desktop for changes to take effect.
📖 See Configuration section for config file location and alternative setups.
Configuration
Step 1: Find Your Configuration File
Windows:
%APPDATA%\Claude\claude_desktop_config.json
macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Step 2: Add MCP Server
Open the configuration file and add the mcp-md-pdf server:
Option A: Using uvx (Recommended)
{
"mcpServers": {
"md-pdf": {
"command": "uvx",
"args": ["mcp-md-pdf"]
}
}
}
Option B: Local Installation
{
"mcpServers": {
"md-pdf": {
"command": "python",
"args": ["-m", "md_pdf_mcp.server"]
}
}
}
Option C: With Environment Variables
{
"mcpServers": {
"md-pdf": {
"command": "python",
"args": ["-m", "md_pdf_mcp.server"],
"env": {
"PYTHONPATH": "/path/to/mcp-md-pdf"
}
}
}
}
Step 3: Restart Claude Desktop
Close and reopen Claude Desktop for changes to take effect.
Usage
With Claude Desktop
After setup, restart Claude Desktop and simply ask:
Convert my README.md to Word format
Convert docs.md to PDF using my company-template.dotx
Convert all markdown files in the docs folder to both Word and PDF
MCP Tools
1. convert_markdown
Convert a single Markdown file to Word or PDF.
Parameters:
markdown_path(str) – Path to the.mdfileoutput_path(str) – Output base path (no extension)output_format(str) –"docx","pdf", or"both"(default:"docx")template_path(str, optional) – Path to.dotxtemplate
Examples:
# Create Word document
convert_markdown("README.md", "output", "docx")
# Create PDF with template
convert_markdown("doc.md", "result", "pdf", "template.dotx")
# Create both formats
convert_markdown("guide.md", "final", "both", "company.dotx")
2. convert_markdown_batch
Convert multiple Markdown files at once.
Parameters:
markdown_files(list[str]) – List of.mdfilesoutput_dir(str) – Output directoryoutput_format(str) –"docx","pdf", or"both"template_path(str, optional) – Shared.dotxtemplate
Example:
convert_markdown_batch(
["doc1.md", "doc2.md", "doc3.md"],
"output",
"both",
"template.dotx"
)
3. list_supported_formats
List supported formats and their capabilities.
Supported Markdown Features
| Feature | Supported | Notes |
|---|---|---|
| Headings (H1–H6) | ✅ | # through ######, with template fallback |
| Bold / Italic | ✅ | Markdown standard syntax |
| Inline code | ✅ | Monospaced with gray background |
| Code blocks | ✅ | Professional styling with background and borders |
| Bullet & Numbered lists | ✅ | Nested up to 3 levels |
| Tables | ✅ | With header styling and inline formatting |
| Blockquotes | ✅ | Italic text with left border and background shading |
| Horizontal rules | ✅ | --- |
| Unicode & Emoji | ✅ | Full UTF-8 support |
For detailed feature coverage analysis, see docs/MARKDOWN_COVERAGE.md
Template Support
Use a .dotx Word template to define your document style:
- Custom headings, fonts, and colors
- Page margins and layout
- Headers and footers
- Branding and logo placement
- Table of contents formatting
If no template is provided, a clean default design is used.
PDF Conversion Setup
Important: PDF conversion requires LibreOffice (or Microsoft Word on Windows) to preserve all DOCX formatting.
Why LibreOffice?
LibreOffice is required for PDF conversion because it preserves ALL formatting from DOCX files:
- ✅ Colors, backgrounds, borders - Professional styling intact
- ✅ Code blocks - Syntax highlighting and backgrounds preserved
- ✅ Tables - Headers, borders, and cell styling maintained
- ✅ Template styles -
.dotxtemplate formatting carried through to PDF - ✅ Fonts & spacing - Typography remains pixel-perfect
Alternative approaches (Pandoc, etc.) lose formatting - they treat DOCX as plain text markup, stripping visual styles during PDF conversion.
DOCX Conversion (All Platforms)
✅ Works out of the box - no additional software needed!
PDF Conversion (Platform-Specific)
Windows Users
Option A: Microsoft Word (Best for Windows)
If you have Microsoft Word installed:
# Install Python COM automation library
pip install pywin32
That's it! The converter will automatically use Word for PDF conversion.
Option B: LibreOffice (Recommended if no Word)
# Method 1: Direct download (easiest)
# Visit: https://www.libreoffice.org/download/
# Method 2: Using Chocolatey package manager
choco install libreoffice
# Method 3: Using winget (Windows Package Manager)
winget install TheDocumentFoundation.LibreOffice
Verify installation:
# Check if LibreOffice is installed
where.exe soffice
# Should output: C:\Program Files\LibreOffice\program\soffice.exe
macOS Users
LibreOffice is REQUIRED for PDF conversion on macOS (no native MS Word COM support).
Installation (Choose one method):
# Method 1: Homebrew (RECOMMENDED - easiest updates)
brew install --cask libreoffice
# Method 2: Direct download
# Visit: https://www.libreoffice.org/download/
# Download LibreOffice_25.x.x_MacOS_aarch64.dmg (M1/M2/M3)
# Or LibreOffice_25.x.x_MacOS_x86-64.dmg (Intel Macs)
System Requirements:
- macOS 10.15 (Catalina) or newer
- ~800 MB disk space
- Works on both Intel and Apple Silicon (M1/M2/M3)
Verify installation:
which soffice
# Should output: /Applications/LibreOffice.app/Contents/MacOS/soffice
libreoffice --version
# Should output: LibreOffice 25.x.x or higher
Linux Users
Ubuntu/Debian (Recommended method):
# Update package list
sudo apt-get update
# Install LibreOffice (headless mode supported)
sudo apt-get install -y libreoffice libreoffice-writer
# Optional: Install additional fonts for better compatibility
sudo apt-get install -y fonts-liberation fonts-dejavu
For headless servers (CI/CD):
# Minimal installation without GUI components
sudo apt-get install -y libreoffice-writer libreoffice-calc \
libxinerama1 libfontconfig1 libdbus-glib-1-2 libcairo2 \
libcups2 libglu1-mesa libsm6
Fedora/RHEL:
sudo dnf install libreoffice libreoffice-writer
Arch Linux:
sudo pacman -S libreoffice-fresh
Verify installation:
libreoffice --version
# Should output: LibreOffice 7.x or 25.x
# Test headless mode
soffice --headless --version
# Should output version without GUI
Platform Notes
- DOCX Conversion: Works on all platforms (Windows, macOS, Linux) - no additional software required
- PDF Conversion: Cross-platform with automatic platform detection:
- Windows: Uses Microsoft Word (if installed) or LibreOffice
- macOS/Linux: Uses LibreOffice in headless mode
Why LibreOffice for PDF? LibreOffice preserves ALL DOCX formatting when converting to PDF:
- ✅ Colors, backgrounds, and borders
- ✅ Professional code block styling (#F5F5F5 backgrounds)
- ✅ Blockquote borders (blue left border)
- ✅ Table headers with colored backgrounds
- ✅ Template styles from .dotx files
- ✅ Fonts, spacing, and layout
Requirements
- Python 3.10+
Pillow(image handling)python-docx(Word generation)pywin32(Windows only)fastmcp(MCP framework)
Development
# Clone the repository
git clone https://github.com/sham-devs/mcp-md-pdf.git
cd mcp-md-pdf
# Install with dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run tests with coverage
pytest --cov=src/md_pdf_mcp --cov-report=html
# Format code
black src/ tests/
ruff check src/ tests/
Testing
Covers:
- Markdown → Word conversion
- Template application
- MCP server tools
- Unicode, emoji, and edge cases
Structure:
tests/
├── conftest.py
├── test_converter.py
├── test_server.py
└── README.md
Examples
# Run the MCP server directly
python -m md_pdf_mcp.server
Or inspect via:
npx @modelcontextprotocol/inspector python -m md_pdf_mcp.server
Example usage:
User: Convert my README.md to Word format
→ Created: README.docx
User: Create a PDF with our company template
→ Created: guide.pdf
User: Convert all docs to both formats
→ Batch Conversion Complete (5 succeeded, 0 failed)
Troubleshooting
Server Not Showing Up in Claude Desktop
- Verify
claude_desktop_config.jsonis valid JSON (no trailing commas) - Check that the Python path is correct for your system
- Review Claude Desktop logs:
- Windows:
%APPDATA%\Claude\logs\ - macOS:
~/Library/Logs/Claude/
- Windows:
- Restart Claude Desktop completely
Python Path Issues
Verify your Python installation:
python --version
# or
python3 --version
If the command doesn't work, find your Python path:
- Windows:
where python - macOS/Linux:
which python3
Update the configuration file with the correct path.
PDF Conversion Fails
Error: pywin32 library required for PDF conversion on Windows
Fix (Windows):
pip install pywin32
Error: LibreOffice not found
Fix (macOS):
brew install --cask libreoffice
Fix (Ubuntu/Debian):
sudo apt-get install libreoffice libreoffice-writer
Fix (Fedora):
sudo dnf install libreoffice
Template Not Loading
Error: Invalid or missing .dotx file
Fix:
- Verify the file path and extension are correct
- Ensure the template file exists and is accessible
- Try conversion without template to isolate the issue
Import Errors
Error: ModuleNotFoundError: No module named 'fastmcp'
Fix:
- Run
pip install -e .from the project directory - Or install from PyPI:
pip install mcp-md-pdf
Testing with MCP Inspector
For advanced debugging, test the server directly:
npx @modelcontextprotocol/inspector python -m md_pdf_mcp.server
This opens a web interface to interact with the MCP tools directly.
License
MIT License – see LICENSE file.
Contributing
Pull requests are welcome. If you have ideas for improving conversions, templates, or new formats, we’d love to see them.
Credits
Built with ❤️ using the FastMCP framework — created to make Markdown documents look like real reports, not just text on GitHub.
Related Servers
Taiwan Holiday
Provides Taiwan national holidays and compensatory workday information. Data is fetched and cached automatically.
unstructured-mcp
Provides unstructured document processing capabilities using the Unstructured API.
activity-mcp
An MCP server for interacting with various services like Slack, Harvest, and GitHub to manage activities and data.
Video Editor MCP Server
Perform video editing operations using natural language commands via FFmpeg.
Powerpoint
Create PowerPoint presentations with AI-generated images using the Stable Diffusion API.
DeltaTask
A powerful, locally-hosted task management application with Obsidian integration and SQLite database support.
Home Assistant MCP Server
An MCP server for interacting with Home Assistant. Requires HA_URL and HA_TOKEN environment variables.
Mac Apps Launcher MCP Server
Launch and manage macOS applications. List installed apps, launch them by name, or open files with specific apps.
Changerawr MCP Server
Manage changelogs, projects, and content on Changerawr using natural language with AI assistants.
Limitless MCP Server
Connect AI assistants to Limitless to access personal memory and lifelog data.