DocFiller
Enables generating PDFs from DOCX/ODT templates using MCP with support for OpenAI or local Ollama models.
README
DocFiller - Sistema de Generación de PDFs desde Plantillas
Sistema modular para rellenar plantillas DOCX/ODT y generar PDFs usando Model Context Protocol (MCP) con diferentes backends (OpenAI, Ollama local).
📁 Estructura del Proyecto
mcp-server/
├── mcp-sse/ # Servidor MCP puro (SSE transport)
├── mcp-adaptado/ # Streamlit + OpenAI
├── mcp-adaptado-ollama/ # Streamlit + Ollama (modelos locales)
└── requirements.txt # Dependencias compartidas
Cada módulo contiene:
server.py- Servidor MCPclient.py- Cliente MCPapp.py- Interfaz Streamlit (en mcp-adaptado y mcp-adaptado-ollama)templates/- Plantillas DOCX/ODT con variables$campo$outputs/- PDFs generadosresources/- Guías y documentación
🚀 Requisitos Previos
- Python 3.9+
- LibreOffice (para conversión a PDF)
- Windows:
choco install libreofficeo descargar desde https://www.libreoffice.org/ - macOS:
brew install libreoffice - Linux:
sudo apt install libreoffice
- Windows:
Opcional (según el módulo)
- OpenAI API key (para
mcp-adaptado) - Ollama (para
mcp-adaptado-ollama) - https://ollama.ai/
📦 Instalación
1. Clonar el repositorio y crear entorno virtual
# Clonar o descargar el proyecto
cd mcp-server
# Crear entorno virtual
python -m venv venv
# Activar entorno virtual
# En Windows:
venv\Scripts\activate
# En macOS/Linux:
source venv/bin/activate
2. Instalar dependencias
pip install -r requirements.txt
🎯 Uso por Módulo
opción 1: mcp-sse (Servidor MCP puro)
Servidor MCP que expone herramientas para rellenar plantillas y generar PDFs.
cd mcp-sse
# Ejecutar servidor
python server.py
El servidor expone las siguientes herramientas:
listar_variables_plantilla(template_path)- Listar variables de una plantillavalidar_datos_plantilla(datos, template_path)- Validar datosgenerar_pdf_desde_plantilla(output_pdf_path, datos, template_path)- Generar PDF
Ejemplo con cliente MCP:
from client import DocFillerClient
client = DocFillerClient("http://localhost:8000")
# Listar variables
variables = client.listar_variables_plantilla()
# Generar PDF
result = client.generar_pdf_desde_plantilla(
output_pdf_path="resultado.pdf",
datos={"nombre": "Juan", "fecha": "2026-06-17"}
)
Opción 2: mcp-adaptado (Streamlit + OpenAI)
Interfaz web completa con OpenAI como LLM.
Configuración
cd mcp-adaptado
# Crear archivo .env
cat > .env << EOF
OPENAI_API_KEY=sk-your-key-here
EOF
Ejecución
streamlit run app.py
Abre http://localhost:8501 en tu navegador.
Opción 3: mcp-adaptado-ollama (Streamlit + Ollama)
Interfaz web con modelos locales vía Ollama (privacidad total, sin APIs externas).
Configuración
-
Instalar Ollama:
- Descargar desde https://ollama.ai/
- Ejecutar:
ollama pull mistral(o tu modelo preferido)
-
Verificar que Ollama está corriendo:
ollama serve(En otra terminal)
Ejecución
cd mcp-adaptado-ollama
# Crear archivo .env (opcional)
cat > .env << EOF
OLLAMA_API_URL=http://localhost:11434
EOF
# Ejecutar app
streamlit run app.py
Abre http://localhost:8501 en tu navegador.
📋 Crear Plantillas
Las plantillas usan la sintaxis $VARIABLE$ para campos reemplazables.
Ejemplo DOCX
Nombre: $nombre$
Fecha: $fecha$
Total: $total$
Pasos
- Abre Word o LibreOffice
- Crea un documento con variables en formato
$campo_nombre$ - Guarda como
.docxo.odten[modulo]/templates/ - La herramienta detectará automáticamente las variables
Importante: Los nombres de variables deben ser:
- Alfanuméricos y guiones bajos:
[A-Za-z0-9_] - Sin espacios ni caracteres especiales
- Máximo 200 variables por plantilla
🔧 Configuración Avanzada
Variables de entorno
Crear .env en el directorio del módulo:
# Para mcp-adaptado
OPENAI_API_KEY=sk-...
OPENAI_MODEL=gpt-4o-mini # o tu modelo preferido
# Para mcp-adaptado-ollama
OLLAMA_API_URL=http://localhost:11434
OLLAMA_MODEL=mistral # o tu modelo
# Global
DEBUG=true
Límites configurables
En server.py:
MAX_TEMPLATE_MB- Tamaño máximo de plantilla (default: 20 MB)MAX_VARIABLES- Máximo de variables por plantilla (default: 200)LIBREOFFICE_TIMEOUT- Timeout de conversión (default: 60s)
🐛 Solución de Problemas
"LibreOffice no encontrado"
# Windows
choco install libreoffice
# macOS
brew install libreoffice
# Linux (Debian/Ubuntu)
sudo apt install libreoffice
Error de conversión a PDF
LibreOffice superó el límite de 60s
- Aumentar
LIBREOFFICE_TIMEOUTenserver.py - Verificar que LibreOffice no tiene otras instancias corriendo
Ollama no responde
# Verificar que está corriendo
ollama serve
# Descargar modelo si falta
ollama pull mistral
Port 8501 ya en uso (Streamlit)
streamlit run app.py --server.port 8502
📚 API Reference
Herramientas MCP
listar_variables_plantilla(template_path="")
Analiza una plantilla y devuelve sus variables.
Respuesta:
{
"estado": "exito",
"plantilla": "/ruta/a/plantilla.docx",
"formato": ".docx",
"variables": ["nombre", "fecha", "total"],
"total": 3
}
validar_datos_plantilla(datos, template_path="")
Valida que los datos cubran todas las variables.
Respuesta:
{
"estado": "exito",
"valido": true,
"variables_requeridas": ["nombre", "fecha"],
"faltantes": [],
"sobrantes": ["extra"],
"valores_vacios": []
}
generar_pdf_desde_plantilla(output_pdf_path, datos, template_path="")
Rellena la plantilla y genera un PDF.
Respuesta:
{
"estado": "exito",
"pdf": "/ruta/a/outputs/resultado.pdf",
"motor_conversion": "libreoffice",
"variables_sin_reemplazar": []
}
📄 Recursos
📝 Licencia
MIT - Libre para uso personal y comercial.
🤝 Soporte
Para issues o consultas, contactar al equipo de desarrollo.
Recommended Servers
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.
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.
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.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
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.
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.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
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.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.