file-analyzer-mcp
file-analyzer-mcp
Servidor MCP stdio personal que extrae solo texto/estructura de PDF·DOCX·PPTX·SVG·PNG en una carpeta local. No resume ni interpreta — leer y resumir los resultados extraídos es tarea del LLM anfitrión (Claude Code, etc.) que invoca esta herramienta.
Qué hace / Qué no hace
Qué hace | Qué no hace |
Extraer texto/estructura de los documentos bajo la carpeta raíz especificada | Resumir/interpretar (lo hace el LLM anfitrión) |
Agregar el árbol de carpetas · número/tamaño de archivos por extensión | Escribir/borrar/mover archivos (solo lectura) |
Extraer texto OCR de PNG | Comprender el significado visual de las imágenes (dibujos·gráficos) |
Manejar con timeout archivos grandes/corruptos | Cambiar la carpeta analizada mientras el servidor está en ejecución |
Related MCP server: file-analysis-mcp
Ejemplo de ejecución
> read_document("quarterly-report.pdf")
{
"type": "pdf",
"num_pages": 12,
"text": "Q3 Revenue Summary\n..."
}
> read_document("../../etc/passwd")
{ "error": "'../../etc/passwd' resolves outside the allowed root folder" }Inicio rápido
git clone https://github.com/saewookkangboy/fileanalyzer_mcp_testmonial.git
cd fileanalyzer_mcp_testmonial
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
brew install tesseract # PNG OCR용 (한국어는 brew install tesseract-lang 추가)Registro en Claude Code:
claude mcp add file-analyzer --env FILE_ANALYZER_ROOT=/분석할/폴더 -- \
"$(pwd)/.venv/bin/python" "$(pwd)/server.py"
claude mcp list # ✔ Connected 확인Después del registro, si en una sesión nueva pides «resume los documentos de esta carpeta», Claude invocará directamente las 3 herramientas siguientes.
Herramientas (Tools)
Herramienta | Descripción |
| Árbol de carpetas, número/tamaño de archivos por extensión |
| Extracción de texto/estructura — |
| Tamaño, hora de modificación, número de páginas/diapositivas, resolución de imagen, etc. |
Estructura del proyecto
server.py # FastMCP 앱 진입점, 툴 등록, 루트 폴더 검증
file_analyzer/
security.py # 경로 격리(resolve_safe_path), 크기 제한
timeout.py # 추출 작업 하드 타임아웃
audit.py # 로컬 감사 로그(logs/audit.jsonl)
tree.py, metadata.py # list_directory / get_file_metadata 로직
extractors/ # pdf · docx · pptx · svg · image(OCR) 추출기
tests/ # pytest 회귀 스위트
AGENTS.md # 호출 에이전트(Claude Code)를 위한 운영 지침Seguridad y restricciones
Aspecto | Política |
Aislamiento de rutas | Solo se puede acceder a |
Tamaño de archivo | Si supera 50 MB, devuelve un error sin leerlo |
Timeout | Si la extracción/el parseo de metadatos supera los 30 segundos, se interrumpe y se devuelve un error |
Extensiones admitidas |
|
Interpretación de imágenes | Solo se extrae texto OCR; no se comprende el significado visual de dibujos/gráficos |
Carpeta analizada | Se fija una sola vez al iniciar el servidor; no se puede cambiar durante la ejecución |
Observabilidad — registro de auditoría
Cada invocación de herramienta se registra localmente, una línea por llamada, en logs/audit.jsonl (sin transmisión externa).
{"timestamp": "2026-08-26T06:03:35Z", "tool": "read_document", "params": {"relative_path": "report.pdf"}, "status": "ok", "duration_ms": 251.3}Para vaciar el registro, basta con eliminar logs/audit.jsonl.
Desarrollo
pip install -e ".[dev]"
pytest -qtests/ cubre el bloqueo de la salida de rutas y de la inyección de rutas absolutas, los 5 extractores, el timeout, el registro de auditoría y la integración del servidor. Dado el tamaño de este proyecto, consideramos que basta la ejecución local de pytest, sin un pipeline de CI, para la verificación de regresiones, y así lo hemos mantenido.
Por qué se diseñó así
Sin función de resumen — para que funcione sin una clave de API de LLM aparte, optamos por una estructura mínima en la que el servidor se encarga de la extracción y el anfitrión, del resumen.
PNG: OCR, no envío a vision — en lugar de pasar la imagen en base64 al anfitrión, extraemos solo el texto para reducir el volumen de respuesta y la complejidad de implementación (no capta el significado visual de las imágenes).
Solo pytest local, sin git/CI — consideramos que una infraestructura de CI es excesiva para una herramienta local de una sola persona.
Limitaciones conocidas
El timeout está basado en hilos; el hilo en segundo plano de la propia llamada que excedió el límite puede seguir ejecutándose hasta el final incluso después de devolverse la respuesta.
No se admite
.ppt— conviértalo a.pptxantes de usarlo.
Licencia
Es un proyecto personal sin archivo de licencia aparte.
This server cannot be deployed
Maintenance
Related MCP Connectors
Convert PDF, Word, Excel and scanned documents to Markdown, tables and RAG chunks. OCR.
Extract text, pages and metadata from PDFs in bulk, with OCR for scanned files.
Deterministic DOCX/PPTX/XLSX/PDF parser: track changes, comments, headers, footers, merged cells.
High-fidelity PDF to structured Markdown conversion and document field extraction.
Related MCP Servers
- FlicenseAqualityCmaintenanceEnables local analysis of unstructured documents (PDF, DOCX, PPTX, SVG, PNG) by extracting text and structure with citation anchors, and verifies summaries against source material before a human approves saving a report.9-
- FlicenseAqualityCmaintenanceEnables read-only scanning and text extraction from PDF, DOCX, PPTX, SVG, and PNG files in a local folder, providing the raw text to AI models for summarization or analysis without an external LLM API.5-
- FlicenseNot gradedqualityCmaintenanceLocal MCP server that extracts text and structure from PDF, DOCX, PPTX, SVG, and PNG files, along with directory and metadata listing, for read-only document analysis by LLM hosts.-
- FlicenseNot gradedqualityCmaintenanceEnables extracting text, structure, and image data from unstructured documents (PDF, DOCX, PPTX, SVG, PNG, JPG) and scanning folder trees.-