MCP PDF Reader
Extraer texto, imágenes y realizar OCR en documentos PDF utilizando Tesseract OCR.
Documentación
Servidor MCP PDF Reader (Python + FastMCP)
Un potente servidor de Model Context Protocol (MCP) construido con FastMCP que proporciona capacidades integrales de procesamiento de PDF, incluyendo extracción de texto, extracción de imágenes y OCR para leer texto dentro de imágenes.
Características
- Extracción de texto: Extrae contenido de texto de páginas PDF
- Extracción de imágenes: Extrae todas las imágenes de archivos PDF
- Capacidades OCR: Lee texto de imágenes usando Tesseract OCR
- Análisis integral: Obtén estructura detallada y metadatos del PDF
- Soporte de rango de páginas: Procesa rangos de páginas específicos
- Múltiples idiomas: Soporte OCR para varios idiomas
Requisitos previos
Dependencias del sistema
Tesseract OCR
Necesitas instalar Tesseract OCR en tu sistema:
Ubuntu/Debian:
sudo apt update
sudo apt install tesseract-ocr tesseract-ocr-eng
macOS:
brew install tesseract
Windows:
- Descárgalo desde: https://github.com/UB-Mannheim/tesseract/wiki
- Instálalo y agrégalo al PATH
- O usa:
conda install -c conda-forge tesseract
Paquetes de idiomas adicionales (Opcional)
# For multiple languages
sudo apt install tesseract-ocr-fra tesseract-ocr-deu tesseract-ocr-spa
Instalación
Inicio rápido con UV
- Instala UV (si aún no está instalado):
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
- Clona/Crea el proyecto:
mkdir mcp-pdf-reader-server
cd mcp-pdf-reader-server
- Inicializa e instala con UV:
# Copy the files (pdf_reader_server.py and pyproject.toml)
# Then install dependencies
uv sync
- Verifica la instalación:
uv run python -c "import pytesseract; print(pytesseract.get_tesseract_version())"
Alternativa: Configuración manual
Si prefieres la configuración tradicional:
- Crea un entorno virtual:
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
- Instala las dependencias:
pip install fastmcp PyMuPDF pytesseract Pillow
Uso
Ejecutar el servidor
Con UV:
uv run python pdf_reader_server.py
O si tienes el entorno activado:
python pdf_reader_server.py
El servidor se iniciará y escuchará solicitudes MCP en stdin/stdout.
Herramientas disponibles
1. read_pdf_text
Extrae contenido de texto de páginas PDF.
Parámetros:
file_path(cadena, obligatorio): Ruta al archivo PDFpage_range(objeto, opcional): Diccionario constartyendnúmeros de página
Ejemplo:
{
"file_path": "/path/to/document.pdf",
"page_range": {"start": 1, "end": 5}
}
2. extract_pdf_images
Extrae todas las imágenes de un archivo PDF.
Parámetros:
file_path(cadena, obligatorio): Ruta al archivo PDFoutput_dir(cadena, opcional): Directorio para guardar las imágenespage_range(objeto, opcional): Rango de páginas a procesar
Ejemplo:
{
"file_path": "/path/to/document.pdf",
"output_dir": "/path/to/images/",
"page_range": {"start": 1, "end": 3}
}
3. read_pdf_with_ocr
Extrae texto tanto de texto regular como de imágenes usando OCR.
Parámetros:
file_path(cadena, obligatorio): Ruta al archivo PDFpage_range(objeto, opcional): Rango de páginas a procesarocr_language(cadena, opcional): Código de idioma OCR (predeterminado: "eng")
Ejemplo:
{
"file_path": "/path/to/document.pdf",
"ocr_language": "eng+fra",
"page_range": {"start": 1, "end": 10}
}
Idiomas OCR compatibles:
eng- Inglésfra- Francésdeu- Alemánspa- Españoleng+fra- Múltiples idiomas
4. get_pdf_info
Obtén metadatos y estadísticas completos sobre un PDF.
Parámetros:
file_path(cadena, obligatorio): Ruta al archivo PDF
5. analyze_pdf_structure
Analiza la estructura y distribución de contenido de un PDF.
Parámetros:
file_path(cadena, obligatorio): Ruta al archivo PDF
Configuración con Claude Desktop
Con UV
Agrega esto a tu claude_desktop_config.json:
{
"mcpServers": {
"pdf-reader": {
"command": "uv",
"args": ["run", "python", "/path/to/your/pdf_reader_server.py"],
"cwd": "/path/to/your/mcp-pdf-reader-server"
}
}
}
Con entorno virtual
{
"mcpServers": {
"pdf-reader": {
"command": "/path/to/your/.venv/bin/python",
"args": ["/path/to/your/pdf_reader_server.py"]
}
}
}
Python del sistema
{
"mcpServers": {
"pdf-reader": {
"command": "python",
"args": ["/path/to/your/pdf_reader_server.py"],
"env": {
"PYTHONPATH": "/path/to/your/.venv/lib/python3.x/site-packages"
}
}
}
}
Respuestas de ejemplo
Respuesta de extracción de texto
{
"success": true,
"file_path": "/path/to/document.pdf",
"pages_processed": "1-3",
"total_pages": 10,
"pages_text": [
{
"page_number": 1,
"text": "Page 1 content...",
"word_count": 125
}
],
"combined_text": "All text combined...",
"total_word_count": 1250,
"total_character_count": 8750
}
Respuesta OCR
{
"success": true,
"file_path": "/path/to/document.pdf",
"pages_processed": "1-2",
"ocr_language": "eng",
"pages_data": [
{
"page_number": 1,
"text": "Regular text from PDF...",
"ocr_text": "Text extracted from images...",
"images_with_text": [
{
"image_index": 1,
"ocr_text": "Text from image 1",
"confidence": "high"
}
],
"combined_text": "Combined text and OCR...",
"text_word_count": 100,
"ocr_word_count": 25
}
],
"summary": {
"total_text_word_count": 200,
"total_ocr_word_count": 50,
"combined_word_count": 250,
"images_processed": 3
},
"all_text_combined": "All extracted text..."
}
Consideraciones de rendimiento
Rendimiento OCR
- El procesamiento OCR puede ser lento para imágenes grandes
- Considera procesar rangos de páginas más pequeños para obtener resultados más rápidos
- Las imágenes más pequeñas de 50x50 píxeles se omiten automáticamente
Uso de memoria
- Los PDF grandes con muchas imágenes pueden consumir memoria significativa
- El servidor procesa las páginas secuencialmente para gestionar el uso de memoria
- Las imágenes extraídas se guardan en disco para reducir la presión de memoria
Consejos de optimización
- Usa rangos de páginas para documentos grandes
- Especifica directorios de salida para la extracción de imágenes y evitar acumulación de archivos temporales
- Elige idiomas OCR apropiados para mejorar precisión y velocidad
- Preprocesa imágenes si la calidad del OCR es deficiente (considera agregar OpenCV)
Solución de problemas
Problemas comunes
-
Tesseract no encontrado:
TesseractNotFoundError: tesseract is not installed- Instala el paquete del sistema Tesseract OCR
- Asegúrate de que esté en tu PATH
-
Errores de permisos:
- Asegúrate de que el proceso de Python tenga acceso de lectura a los archivos PDF
- Asegúrate de tener acceso de escritura a los directorios de salida
-
Resultados OCR deficientes:
- Prueba con diferentes códigos de idioma OCR
- Considera el preprocesamiento de imágenes
- Verifica si las imágenes tienen suficiente resolución
-
Errores de memoria:
- Procesa rangos de páginas más pequeños
- Cierra otras aplicaciones
- Considera aumentar la RAM disponible
Modo de depuración
Ejecuta con registro de depuración usando UV:
PYTHONUNBUFFERED=1 uv run python pdf_reader_server.py
O con Python regular:
PYTHONUNBUFFERED=1 python pdf_reader_server.py
Prueba de OCR
Prueba Tesseract directamente:
tesseract --list-langs
tesseract image.png output.txt
Dependencias
- fastmcp: Marco moderno de servidor MCP
- PyMuPDF: Procesamiento y renderizado rápido de PDF
- pytesseract: Envoltorio de Python para Tesseract OCR
- Pillow: Biblioteca de procesamiento de imágenes
- tesseract-ocr: Motor OCR del sistema
Características avanzadas
Configuración personalizada de OCR
Puedes modificar la configuración de OCR en el código:
ocr_text = pytesseract.image_to_string(
pil_image,
lang=ocr_language,
config='--psm 6 -c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz '
)
Preprocesamiento de imágenes
Para mejores resultados de OCR, considera agregar preprocesamiento de imágenes:
# Add to requirements: opencv-python, numpy
import cv2
import numpy as np
# Preprocessing example
def preprocess_image(image):
gray = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
return Image.fromarray(thresh)
Contribuciones
- Haz un fork del repositorio
- Crea una rama de características
- Agrega pruebas para la nueva funcionalidad
- Envía una solicitud de extracción
Licencia
Licencia MIT: consulta el archivo LICENSE para más detalles.