doc-extract-mcp
doc-extract-mcp
Un servidor MCP (Model Context Protocol) que proporciona a un LLM herramientas deterministas para trabajar con documentos en flujos de extracción de datos estructurados. El LLM hace la lectura y el razonamiento de extracción; este servidor proporciona las partes que nunca deberían delegarse en un modelo de lenguaje: acceso fiable a archivos, análisis sintáctico, fragmentación en chunks, validación de JSON Schema y salida de archivos protegida.
Construido por Koray Nar como un proyecto de portafolio para los flujos de trabajo de automatización documental con IA que está desarrollando. El caso de uso objetivo es convertir PDFs desordenados (órdenes de compra, facturas, informes) en JSON validado contra esquema. Publicado como parte de un portafolio público. Se integra con Claude Code y Claude Desktop, y con cualquier otro cliente MCP.
Por qué
Un agente de extracción falla en lugares predecibles: alucina contenidos de archivos, pierde la pista de documentos largos, produce silenciosamente JSON que casi coincide con el esquema objetivo y escribe la salida donde le parece. Este servidor elimina estos modos de fallo:
El acceso a archivos está confinado a una única raíz permitida (
DOC_EXTRACT_ROOT).El texto de los PDF llega con marcadores explícitos
--- page N ---, de modo que las citas de «page 3» significan página 3.Los documentos largos se dividen en chunks de forma determinista, con solapamiento y pistas de página.
El JSON extraído se valida contra un JSON Schema (Draft 2020-12) y se notifican todos los errores con su ruta JSON Pointer — no solo el primero — para que el modelo pueda corregir todos los fallos en una sola pasada.
La salida la escribe el servidor (JSON o CSV), dentro de la misma raíz, con un recuento verificable de filas y bytes.
Related MCP server: BigContext MCP
Herramientas
Herramienta | Argumentos | Qué hace |
|
| Lista los archivos de un directorio dentro de la raíz permitida, con tamaño y hora de modificación. Admite globs recursivos como |
|
| Devuelve el texto de un documento. |
|
| Metadatos sin el contenido completo: tipo, tamaño, hora de modificación; número de páginas y metadatos PDF para PDFs; número de líneas para archivos de texto. |
|
| Divide un documento en chunks ordenados y solapados, cada uno con un índice, un desplazamiento inicial y (para PDFs) una pista de página. |
|
| Valida una cadena JSON contra un JSON Schema (Draft 2020-12). Devuelve todos los errores de validación con una ruta JSON Pointer mediante |
|
| Escribe los datos extraídos dentro de la raíz permitida. CSV espera un array JSON de objetos planos. Devuelve la ruta escrita, el número de filas y el número de bytes. |
Todos los argumentos de ruta se resuelven y se rechazan si se salen de la raíz permitida (protección contra path traversal). El argumento glob_pattern está confinado de la misma manera: se rechazan los patrones absolutos y los que contienen .., y cualquier coincidencia que se resuelva fuera de la raíz (por ejemplo mediante un symlink) se descarta silenciosamente del listado. Los fallos de protección se lanzan como errores de herramienta MCP, de modo que el modelo que llama de la llamada vea el motivo real y no un error genérico enmascarado.
Inicio rápido
Requiere Python 3.11+ y uv.
git clone https://github.com/koraynar/doc-extract-mcp.git
cd doc-extract-mcp
uv venv
uv pip install -e .Ejecución independiente (transporte stdio):
DOC_EXTRACT_ROOT=/path/to/your/documents uv run doc-extract-mcpClaude Code
claude mcp add doc-extract --env DOC_EXTRACT_ROOT=/path/to/your/documents \
-- uv run --directory /absolute/path/to/doc-extract-mcp doc-extract-mcpClaude Desktop
Añade a claude_desktop_config.json:
{
"mcpServers": {
"doc-extract": {
"command": "uv",
"args": [
"run",
"--directory",
"/absolute/path/to/doc-extract-mcp",
"doc-extract-mcp"
],
"env": {
"DOC_EXTRACT_ROOT": "/path/to/your/documents"
}
}
}
}DOC_EXTRACT_ROOT adopta el directorio de trabajo del servidor si no se define. Pero debe apuntar a la carpeta donde están tus documentos; nada fuera de ella se puede leer ni escribir.
Flujo de trabajo típico
list_documents("", "*.pdf")— encuentra las facturas.document_info("invoice.pdf")— comprueba el número de páginas.read_document("invoice.pdf", "1-3")orchunk_document(...)— obtén el texto.El LLM extrae los campos a JSON.
validate_json(data, json_schema)— corrige todos los errores notificados y vuelve a validar.save_structured("out/invoice.json", data, "json")— escribe el resultado exacto.
Limitaciones (honestas)
Solo PDFs con una plantilla de texto. La extracción usa
pypdf; los PDF escaneados o solo de imagen devuelven texto vacío. No hay OCR.La calidad de extracción varía con la forma de balancear el PDF. Los resúmenes complejos (multiples columnas, tablas pesadas) pueden tener un orden de lectura no perfecto: se hereda de pypdf.
No hay soporte para .docx/.xlsx. Son compatibles
.pdf,.txt,.md,.csv,.json.El servidor no hace razonamiento de extracción. No va a encontrar el total de tu factura; solo se asegura de que el modelo que lo haga trabaje con texto real y que el resultado coincida con tu esquema.
Es una herramienta funcional, pensada para el trabajo de automatización con IA que estoy montando, y publicada como parte de mi portafolio — es nueva y todavía no tiene recorrido en producción. Tiene lituratura de pruebas y una baruna de confinamiento de rutas, pero no ha sido endurecida más allá de eso — revísala antes de poner directorios sensibles.
Desarrollo
uv venv
uv pip install -e '.[dev]'
uv run pytestEl suite de pruebas construye en memoria un fixture PDF de dos páginas (aparato PDF mínimo construido a mano, sin dependencias extra) y cubre las seis herramientas, la protección de path traversal, el confinamiento del glob pattern (incluidos los escapes via symlink), los rangos de página, la validación de esquema con múltiples errores, un round-trip de CSV, y el registro de herramientas y la propagación de errores a través del archivo objeto del servidor MCP.
Licencia
MIT © 2026 Kurt Langer
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to securely read and extract information from PDF files including text content, metadata, and page counts from both local files and URLs within the project context.12,191MIT
- AlicenseBqualityDmaintenanceEnables working with large documents of any size by intelligently segmenting them and using TF-IDF search to retrieve only relevant fragments, preventing context window saturation. Provides 31 domain-agnostic tools for document ingestion, semantic analysis, epistemological validation, and extraction verification across formats like PDF, EPUB, and HTML.31MIT
- AlicenseBqualityDmaintenanceEnables AI agents to generate professional Word and PDF documents with support for Markdown, syntax highlighting, and smart pagination. It features automatic JSON detection and responsive A4 formatting for creating high-quality technical reports and manuals.2757MIT
- AlicenseNot gradedqualityCmaintenanceProvides AI agents with comprehensive document parsing capabilities including PDF text extraction, OCR, HTML-to-markdown conversion, table extraction, and summarization, optimized for agent workflows.101MIT
Related MCP Connectors
Turn any PDF into structured JSON via AI + OCR: invoices, bank statements, contracts.
Deterministic JSON repair, validate, example-gen, schema-coerce for agents. Zero LLM, sub-10ms.
Generate PDFs from templates via AI chat. Works with Claude, ChatGPT, Cursor, and any MCP client.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/koraynar/doc-extract-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server