Skip to main content
Glama
asuramama-hue

file-analyzer-mcp

file-analyzer-mcp

Python Protocol Scope Tests

Персональный stdio MCP-сервер, который извлекает только текст/структуру из PDF·DOCX·PPTX·SVG·PNG в локальной папке. Он не делает резюме и не интерпретирует — читать извлечённые результаты и обобщать их — задача хост-LLM (например, Claude Code), который вызывает этот инструмент.

Что делает / чего не делает

Что делает

Чего не делает

Извлекает текст/структуру документов в указанной корневой папке

Резюме и интерпретация (это делает хост-LLM)

Дерево папок · подсчёт файлов/объёма по расширениям

Запись, удаление, перемещение файлов (только чтение)

Извлечение OCR-текста из PNG

Понимание визуального смысла изображений (рисунков, диаграмм)

Обработка тайм-аутов для больших/повреждённых файлов

Изменение анализируемой папки во время работы сервера

Related MCP server: Docalyze

Пример запуска

> 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" }

Быстрый старт

git clone https://github.com/asuramama-hue/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 추가)

Регистрация в Claude Code:

claude mcp add file-analyzer --env FILE_ANALYZER_ROOT=/분석할/폴더 -- \
  "$(pwd)/.venv/bin/python" "$(pwd)/server.py"
claude mcp list   # ✔ Connected 확인

После регистрации в новом сеансе запросите «резюмируй документы в этой папке» — и Claude напрямую вызовет следующие 3 инструмента.

Инструменты (Tools)

Инструмент

Описание

list_directory(subpath=".", recursive=True)

Дерево папок, количество/объём файлов по расширениям

read_document(relative_path)

Извлечение текста/структуры — .pdf .docx .pptx .svg .png

get_file_metadata(relative_path)

Размер, время изменения, количество страниц/слайдов, разрешение изображений и т. д.

Структура проекта

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)를 위한 운영 지침

Безопасность и ограничения

Пункт

Политика

Изоляция путей

Доступ только к содержимому FILE_ANALYZER_ROOT — блокируются ../, инъекция абсолютных путей и выход через symlink

Размер файла

При превышении 50MB возвращается ошибка без чтения

Тайм-аут

Если извлечение/разбор метаданных превышает 30 секунд, возвращается ошибка с прерыванием

Поддерживаемые расширения

.pdf .docx .pptx .svg .png — .ppt (старый формат), .jpg и др. не поддерживаются

Интерпретация изображений

Извлекается только OCR-текст, визуальный смысл рисунков/диаграмм не распознаётся

Анализируемая папка

Фиксируется один раз при запуске сервера, изменение во время работы невозможно

Наблюдаемость — журнал аудита

Каждый вызов инструмента записывается одной строкой только локально в logs/audit.jsonl (без внешней передачи).

{"timestamp": "2026-08-26T06:03:35Z", "tool": "read_document", "params": {"relative_path": "report.pdf"}, "status": "ok", "duration_ms": 251.3}

Чтобы очистить журнал, удалите logs/audit.jsonl.

Разработка

pip install -e ".[dev]"
pytest -q

tests/ охватывает блокировку выхода за пределы путей и инъекции абсолютных путей, 5 типов экстракторов, тайм-ауты, журнал аудита и интеграцию сервера. При масштабе этого проекта мы решили, что для проверки регрессий достаточно локального запуска pytest без CI-пайплайна, и так и поддерживаем.

Почему такая архитектура

  • Нет функции резюмирования — чтобы работать без отдельного ключа LLM API, выбрана минимальная структура: извлечение делает сервер, резюме — хост.

  • PNG — это OCR, а не передача vision — вместо передачи изображения хосту в base64 извлекается только текст, что снижает объём возвращаемых данных и сложность реализации (визуальный смысл рисунков не виден).

  • Только локальный pytest без git/CI — для масштаба локального инструмента одного человека CI-инфраструктура избыточна.

Известные ограничения

  • Тайм-аут основан на потоках, поэтому фоновый поток превышенного вызова может продолжать выполняться до конца и после возврата результата.

  • .ppt не поддерживается — конвертируйте в .pptx перед использованием.

Лицензия

Это личный проект без отдельного файла лицензии.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server that reads PDFs and exposes them as structured Markdown, metadata, outlines, images, and tables to LLM consumers via tools like pdf_read_markdown and pdf_info.
    Apache 2.0
  • A
    license
    B
    quality
    D
    maintenance
    An MCP server that lets AI assistants read and visually analyze local documents — PDFs, Excel spreadsheets, CSV files, Word documents, PowerPoint presentations, and images.
    4
    21 npm
    49 PyPI
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Local MCP server that indexes folders of documents into a hybrid vector + keyword search index for Claude Desktop, with support for PDFs, Office files, and images via OCR.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for indexing, semantic search, and generation of multi-format documents. Exposes 13 tools over JSON-RPC 2.0 so an LLM can search your local PDF, Excel, and Word files, and create or edit Excel and Word documents.
    AGPL 3.0