MCP MD2PDF Server

MCP MD2PDF Server

Provides tools for converting Markdown content and files into professional PDF documents with full support for Mermaid diagrams and LaTeX rendering. It allows for high-quality output customization, including paper size, table of contents, and syntax highlighting styles.

Category
访问服务器

README

MCP MD2PDF Server

Un sistema completo per convertire documenti Markdown in PDF con supporto per diagrammi Mermaid, utilizzabile sia come script standalone che come server MCP (Model Context Protocol).

🚀 Panoramica

Questo progetto offre due modalità d'uso:

🔧 Modalità Script Standalone

Utilizza direttamente lo scri## 🏗️ Struttura del Progetto

md2pdf/
├── mcp_md2pdf_server.py    # 🌐 Server MCP principale
├── convert.sh              # 🔧 Script conversione standalone
├── pandoc-wrapper.sh       # 🔄 Wrapper per Pandoc
├── requirements.txt        # 📦 Dipendenze Python
├── Dockerfile              # 🐳 Immagine Docker per conversione
├── install.sh              # ⚙️ Script di installazione automatica
├── test_both_modes.sh      # 🧪 Test completo entrambe modalità
├── start_server.sh         # 🚀 Script di avvio MCP (generato)
├── test_document.md        # 📄 Documento di test (generato)
└── README.md              # 📖 Questa documentazione

# Directory generate durante test/uso:
test_results/               # 📂 Risultati test automatici
├── test_document.md        # 📄 Documento test complesso
├── script_output.pdf       # 📑 Output modalità script  
├── mcp_content_output.pdf  # 📑 Output modalità MCP (contenuto)
├── mcp_file_output.pdf     # 📑 Output modalità MCP (file)
└── test_mcp.py            # 🐍 Script test MCP generato

📋 Descrizione File Principali

  • mcp_md2pdf_server.py: Server MCP con API completa
  • convert.sh: Script bash per conversioni dirette
  • install.sh: Setup automatico di tutto il sistema
  • test_both_modes.sh: Test completo che verifica entrambe le modalità
  • Dockerfile: Ambiente Docker con Pandoc + Mermaid + LaTeX` per conversioni rapide:
  • Conversione diretta da command line
  • Nessuna configurazione MCP richiesta
  • Perfetto per script automatizzati e CI/CD
  • Utilizzo immediato senza server

🌐 Modalità Server MCP

Espone un server MCP con strumenti avanzati per:

  • Integrazione con client MCP
  • API programmatica per conversioni
  • Gestione avanzata di contenuti e metadati
  • Controllo granulare delle opzioni di conversione

Funzionalità Comuni

Entrambe le modalità supportano:

  • Conversione Markdown → PDF di alta qualità
  • Supporto completo per diagrammi Mermaid
  • Personalizzazione dell'output (formato carta, stili, indice)
  • Gestione degli stili di syntax highlighting
  • Rendering professionale con LaTeX

📋 Prerequisiti

  • Python 3.7+ con pip
  • Docker (per l'ambiente di conversione)
  • Sistema operativo: Linux, macOS, Windows (con WSL)

🔧 Installazione

Installazione Automatica

Esegui lo script di installazione che configura tutto automaticamente:

./install.sh

Lo script:

  1. ✅ Verifica Python e pip
  2. 📦 Installa le dipendenze Python
  3. � Verifica Docker
  4. 🏗️ Costruisce l'immagine Docker per Pandoc/Mermaid
  5. 🧪 Esegue test di funzionalità
  6. 🚀 Crea script di avvio
  7. 📝 Crea file di test

Installazione Manuale

Se preferisci installare manualmente:

  1. Installa dipendenze Python:

    pip3 install -r requirements.txt
    
  2. Costruisci l'immagine Docker:

    docker build -t pandoc-mermaid .
    
  3. Rendi eseguibili gli script:

    chmod +x convert.sh start_server.sh
    

🏃 Utilizzo

🔧 Modalità Script Standalone

Utilizzare direttamente lo script di conversione:

# Conversione semplice
./convert.sh input.md output.pdf

# Conversione con file di esempio
./convert.sh test_document.md test_document.pdf

Vantaggi:

  • ⚡ Veloce e immediato
  • 🚀 Nessuna configurazione server
  • 📝 Perfetto per script automatizzati
  • 🔄 Ideale per CI/CD pipeline

🌐 Modalità Server MCP

Avvio del Server MCP

./start_server.sh

Oppure direttamente:

python3 mcp_md2pdf_server.py

Configurazione Client MCP

Il server si connette tramite stdio. Esempio di configurazione:

{
  "mcpServers": {
    "md2pdf": {
      "command": "python3",
      "args": ["/path/to/mcp_md2pdf_server.py"],
      "cwd": "/workspace/db-ready/md2pdf/"
    }
  }
}

Vantaggi:

  • 🔌 Integrazione con client MCP
  • 📊 API strutturata con response JSON
  • 🎯 Controllo granulare dei parametri
  • 📦 Gestione avanzata di contenuti e metadati

🎯 Quando Usare Quale Modalità

🔧 Usa la Modalità Script quando:

  • ⚡ Hai bisogno di conversioni rapide e immediate
  • 🔄 Stai automatizzando processi in script bash/shell
  • 🏗️ Integri in pipeline CI/CD
  • � Converti documenti occasionalmente
  • 🖥️ Lavori principalmente da command line
  • ⚙️ Vuoi il minimo overhead di setup

Esempio tipico:

# Nel tuo script di build
./convert.sh documentation.md docs/manual.pdf

🌐 Usa la Modalità MCP quando:

  • 🔌 Ti integri con client MCP esistenti
  • 📊 Hai bisogno di response strutturate JSON
  • 🎛️ Vuoi controllo granulare sui parametri
  • 📦 Gestisci metadati complessi (title, author, etc.)
  • 🔄 Converti contenuti dinamici da applicazioni
  • 🖥️ Sviluppi applicazioni che richiedono API

Esempio tipico:

# Nel tuo client MCP
result = await mcp_client.call_tool("convert_md_to_pdf", {
    "markdown_content": dynamic_content,
    "title": "Report Generato",
    "author": "Sistema Automatico"
})

📊 Confronto Modalità

Aspetto 🔧 Script 🌐 MCP
Setup Immediato Configurazione client
Velocità ⚡ Velocissimo 🔧 Configurabile
Output File PDF JSON + PDF base64
Integrazione Shell/Bash Programmatica
Metadati Limitati Completi
Error Handling Exit codes JSON structured
Uso Tipico Batch/Automation Applications/Services

🛠️ Strumenti Disponibili (Modalità MCP)

Il server MCP espone i seguenti strumenti:

1. convert_md_to_pdf

Converte contenuto Markdown in PDF.

Parametri:

  • markdown_content (required): Il contenuto Markdown da convertire
  • output_filename (optional): Nome del file PDF di output (default: "output.pdf")
  • title (optional): Titolo del documento
  • author (optional): Autore del documento
  • papersize (optional): Formato carta (a4, letter, a3, legal, etc.) (default: "a4")
  • toc (optional): Includere l'indice (default: true)
  • highlight_style (optional): Stile di syntax highlighting (default: "pygments")

Esempio risposta:

{
  "success": true,
  "filename": "output.pdf",
  "size_bytes": 123456,
  "size_human": "120.6 KB",
  "pdf_base64": "JVBERi0xLjQK...",
  "message": "✅ PDF generato con successo"
}

2. convert_md_file_to_pdf

Converte un file Markdown esistente in PDF.

Parametri:

  • input_path (required): Percorso del file Markdown di input
  • output_path (optional): Percorso del file PDF di output
  • title, author, papersize, toc, highlight_style: Come sopra

Esempio risposta:

{
  "success": true,
  "output_path": "/path/to/output.pdf",
  "filename": "output.pdf",
  "size_bytes": 123456,
  "size_human": "120.6 KB",
  "message": "✅ PDF salvato in: /path/to/output.pdf"
}

3. list_highlight_styles

Elenca gli stili di syntax highlighting disponibili.

Esempio risposta:

{
  "success": true,
  "styles": ["pygments", "kate", "monochrome", "breezeDark", ...],
  "count": 25
}

4. get_pandoc_info

Ottiene informazioni sulla versione di Pandoc e funzionalità disponibili.

Esempio risposta:

{
  "success": true,
  "pandoc_version": "pandoc 3.1.11",
  "pdf_engines": ["pdflatex", "xelatex", "lualatex"],
  "mermaid_filter_available": true
}

� Esempi Pratici

🔧 Script Mode - Esempi Command Line

# Conversione base
./convert.sh document.md document.pdf

# Conversione con file di documentazione
./convert.sh README.md manual.pdf

# Batch conversion (esempio script)
for file in *.md; do
    ./convert.sh "$file" "${file%.md}.pdf"
done

# Integrazione in Makefile
docs: 
	./convert.sh docs/api.md dist/api-manual.pdf
	./convert.sh docs/guide.md dist/user-guide.pdf

🌐 MCP Mode - Esempi Programmatici

Conversione contenuto dinamico:

import asyncio
from mcp_md2pdf_server import convert_md_to_pdf

async def generate_report():
    content = f"""
# Report Giornaliero
Data: {datetime.now().strftime('%Y-%m-%d')}

## Statistiche
- Utenti attivi: {get_active_users()}
- Vendite: {get_sales_data()}
"""
    
    result = await convert_md_to_pdf(
        markdown_content=content,
        output_filename="daily_report.pdf",
        title="Report Giornaliero",
        author="Sistema Automatico"
    )
    
    return result

Integrazione con client MCP:

{
  "tool": "convert_md_file_to_pdf",
  "arguments": {
    "input_path": "/docs/specification.md",
    "output_path": "/output/spec_v2.pdf",
    "title": "API Specification v2.0",
    "author": "Development Team",
    "papersize": "a4",
    "toc": true
  }
}

📊 Supporto Mermaid

Il server supporta completamente i diagrammi Mermaid. Esempi di diagrammi supportati:

Flowchart

graph TD
    A[Start] --> B{Decision}
    B -->|Yes| C[Action 1]
    B -->|No| D[Action 2]
    C --> E[End]
    D --> E

Sequence Diagram

sequenceDiagram
    participant A as Alice
    participant B as Bob
    A->>B: Hello Bob, how are you?
    B-->>A: Great!

Gantt Chart

gantt
    title A Gantt Diagram
    dateFormat  YYYY-MM-DD
    section Section
    A task           :a1, 2014-01-01, 30d
    Another task     :after a1  , 20d

�️ Struttura del Progetto

md2pdf/
├── mcp_md2pdf_server.py    # Server MCP principale
├── requirements.txt        # Dipendenze Python
├── Dockerfile             # Immagine Docker per conversione
├── convert.sh             # Script di conversione
├── pandoc-wrapper.sh      # Wrapper per Pandoc
├── install.sh             # Script di installazione
├── start_server.sh        # Script di avvio (generato)
├── test_document.md       # Documento di test (generato)
└── README.md             # Questa documentazione

🐳 Ambiente Docker

L'ambiente Docker include:

  • Ubuntu 22.04 come base
  • Pandoc 3.1.11 per la conversione
  • Node.js 18.x per mermaid-filter
  • TeX Live per la generazione PDF
  • Google Chrome per il rendering Mermaid
  • mermaid-filter e @mermaid-js/mermaid-cli

⚙️ Configurazione

Variabili d'Ambiente Docker

Il container utilizza:

  • PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
  • PUPPETEER_EXECUTABLE_PATH=/usr/bin/google-chrome-stable
  • PUPPETEER_ARGS="--no-sandbox --disable-setuid-sandbox --disable-dev-shm-usage --disable-gpu"

Opzioni di Conversione

Il sistema supporta:

  • Formati carta: a4, letter, a3, legal, etc.
  • Stili highlighting: pygments, kate, monochrome, breezeDark, etc.
  • Engines PDF: pdflatex, xelatex, lualatex
  • Opzioni layout: margini personalizzabili, indice, numerazione pagine

🔍 Troubleshooting

Errori Comuni

  1. Docker non in esecuzione

    Errore: Docker daemon non in esecuzione
    Soluzione: Avvia Docker Desktop o il daemon Docker
    
  2. Immagine Docker non trovata

    Errore: Unable to find image 'pandoc-mermaid:latest'
    Soluzione: Ricostruisci l'immagine con: docker build -t pandoc-mermaid .
    
  3. Errori di conversione Mermaid

    Errore: mermaid-filter non trovato
    Soluzione: Ricostruisci l'immagine Docker per installare mermaid-filter
    
  4. Problemi di permessi

    Errore: Permission denied
    Soluzione: Verifica i permessi dei file e directory
    

Debug

Per debug dettagliato, modifica convert.sh aggiungendo:

set -x  # Abilita debug verbose

Log

Il server MCP scrive su stdout/stderr. Per salvare i log:

python3 mcp_md2pdf_server.py 2>&1 | tee server.log

🧪 Testing

Test Script Standalone

  1. Test conversione diretta con script:

    # Test con documento di esempio
    ./convert.sh test_document.md test_output.pdf
    
    # Test con contenuto personalizzato
    echo "# Test Document" > my_test.md
    ./convert.sh my_test.md my_test.pdf
    
  2. Test con diagrammi Mermaid:

    cat > mermaid_test.md << 'EOF'
    # Test Mermaid
    
    ```mermaid
    graph TD
        A[Start] --> B[End]
    

    EOF

    ./convert.sh mermaid_test.md mermaid_test.pdf

    
    

Test Server MCP

  1. Test server MCP programmatico:

    python3 -c "
    from mcp_md2pdf_server import convert_md_to_pdf
    import asyncio
    result = asyncio.run(convert_md_to_pdf('# Test MCP'))
    print(result)
    "
    
  2. Test avvio server:

    # Avvia server in background per test
    python3 mcp_md2pdf_server.py &
    SERVER_PID=$!
    
    # Attendi avvio e poi chiudi
    sleep 2
    kill $SERVER_PID
    

Test Completo Sistema

  1. Verifica Docker:

    # Verifica che l'immagine sia stata costruita
    docker images | grep pandoc-mermaid
    
    # Test dell'immagine
    docker run --rm pandoc-mermaid pandoc --version
    
  2. Test integrazione completa:

    # Crea documento di test complesso
    cat > full_test.md << 'EOF'
    # Test Completo
    
    ## Sezione Code
    ```python
    print("Hello World")
    

    Sezione Mermaid

    sequenceDiagram
        Alice->>Bob: Hello
        Bob-->>Alice: Hi!
    

    EOF

    Test script

    ./convert.sh full_test.md full_test_script.pdf

    Test MCP (se server è in esecuzione)

    Confronta i risultati

    
    
  3. Test automatico completo (Entrambe le modalità):

    # Esegue test completo di entrambe le modalità
    ./test_both_modes.sh
    

    Questo script:

    • ✅ Testa conversione con script convert.sh
    • ✅ Testa conversione con server MCP
    • 📊 Confronta i risultati di entrambe le modalità
    • 🔍 Verifica l'integrazione Docker
    • 📈 Genera report dettagliato dei test
    • 📂 Salva tutti i file di test in test_results/

🤝 Contribuire

  1. Fork del repository
  2. Crea un branch per la feature (git checkout -b feature/AmazingFeature)
  3. Commit delle modifiche (git commit -m 'Add some AmazingFeature')
  4. Push al branch (git push origin feature/AmazingFeature)
  5. Apri una Pull Request

📄 Licenza

Questo progetto è distribuito sotto licenza MIT. Vedi il file LICENSE per i dettagli.

🆘 Supporto

Per problemi o domande:

  1. Controlla la sezione Troubleshooting
  2. Verifica che tutti i prerequisiti siano installati
  3. Esegui il test di installazione con ./install.sh
  4. Apri un issue su GitHub con i dettagli dell'errore

🔄 Aggiornamenti

Per aggiornare il sistema:

  1. Ferma il server MCP
  2. Fai il pull delle modifiche
  3. Ricostruisci l'immagine Docker: docker build -t pandoc-mermaid .
  4. Riavvia il server

Versione: 1.0.0
Ultimo aggiornamento: $(date +%Y-%m-%d)

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选