Skip to main content
Glama
jm333-B

file-insight-mcp

by jm333-B

Файловый анализ MCP (file-insight-mcp)

Это персональный локальный MCP-сервер, который читает неструктурированные документы в указанной папке, анализирует их структуру, составляет сводку по каждому документу и итоговый сводный отчёт по всей папке.

Все документы в data/sample_docs/ этого пакета — синтетические данные, созданные для демонстрации.

Справочная основа

  • Структура сервера (FastMCP, stdio, комбинация нескольких MCP-серверов): https://github.com/kyopark2014/mcp

  • Соглашения harness (поэтапные stage/next_actions, якоря обоснования, границы одобрения): переиспользуется подход, выработанный в проекте personal-meeting-mcp-training той же серии

  • Список принципов harness-инжиниринга: https://github.com/walkinglabs/awesome-harness-engineering (пункты о бюджете контекста, хуках предварительного одобрения, детерминированном eval и статическом сканере безопасности применены выборочно под масштаб этого проекта)

  • MCP Python SDK: https://github.com/modelcontextprotocol/python-sdk

Related MCP server: file-analyzer

Что делает этот сервер

  1. Сканирует структуру фиксированной целевой папки (data/sample_docs/).

  2. Читает только документы с разрешёнными расширениями (.txt .md .csv .log).

  3. Извлекает из документов оглавление (структуру заголовков), кандидатов в даты, числовые значения и ключевые термины на основе правил.

  4. Составляет сводный промпт, объединяющий все документы. Саму сводку пишет хостовая LLM (Claude/Codex), а этот MCP не вызывает LLM API.

  5. Проверяет структуру составленного сводного отчёта и сверяет, что упомянутые в нём имена файлов действительно существуют.

  6. Сохраняет отчёт в файл только после явного одобрения пользователя.

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

Требуемое окружение: Python 3.11 или новее, uv

uv sync --extra dev

После установки убедитесь, что все четыре команды из раздела Проверка ниже проходят успешно.

Чтобы визуально проверить инструменты через MCP Inspector:

uv run mcp dev src/file_insight_mcp/server.py

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

Доменная логика и соглашения об инструментах разделены, чтобы при изменении правил проверки не затрагивать слой инструментов.

Путь

Роль

src/file_insight_mcp/security.py

Проверка безопасности путей, allowlist расширений, лимиты размера и количества элементов

src/file_insight_mcp/core.py

Сканирование папки, чтение документов, проверка структуры отчёта, сохранение на основе одобрения

src/file_insight_mcp/outline.py

Извлечение оглавления, дат, числовых значений и ключевых терминов (на основе правил, детерминированно)

src/file_insight_mcp/grounding.py

Сверка имён файлов, упомянутых в сводке (консультативная проверка)

src/file_insight_mcp/harness.py

Общие элементы соглашений об инструментах — NextAction, ToolFailure, обрезка и номера строк

src/file_insight_mcp/server.py

Регистрация MCP-инструментов, ресурсов и промптов (слой harness)

src/file_insight_mcp/evalkit.py

Чистая логика выражений путей, критериев оценки и подстановки переменных для eval-кейсов

evals/cases.jsonl

Детерминированные регрессионные кейсы (данные, а не код)

scripts/run_evals.py

Раннер, выполняющий кейсы через реальный MCP-протокол

scripts/smoke_stdio.py

Смоук-тест запуска STDIO, схемы и соглашений harness

scripts/validate_package.py

Статическая проверка перед публикацией (учётные данные, опасные вызовы, комментарии инструментов)

tests/

Модульные тесты доменных функций (выполняются без запуска сервера)

Рекомендуемый поток

SCAN → LIST → READ → EXTRACT → DRAFT → CHECK → PREVIEW → [사용자 승인] → SAVED

Этап

Tool

Чтение/запись

Роль

SCAN

scan_folder_structure

чтение

Структура целевой папки, количество по расширениям, допустимость

LIST

list_target_documents

чтение

Список документов, которые реально можно прочитать

READ

read_document_chunk

чтение

Просмотр исходного текста. Поддерживает указание диапазона строк и якоря цитирования L14

EXTRACT

extract_document_outline

чтение

Извлечение структуры оглавления (заголовки/нумерация)

EXTRACT

extract_key_terms

чтение

Извлечение кандидатов в ключевые термины на основе дат, чисел и частотности

DRAFT

build_summary_prompt

чтение

Создание промпта, объединяющего все документы и стандартный формат отчёта

CHECK

validate_report_draft

чтение

Проверка структуры. Предоставляет rule_id·severity·line·fix (гейт сохранения)

CHECK

check_summary_grounding

чтение

Сверка, что упомянутые в сводке имена файлов действительно существуют (консультативно, не блокирует сохранение)

PREVIEW

diff_report_against_saved

чтение

Просмотр различий с ранее сохранённой версией

PREVIEW

preview_save_report

чтение

Показывает проверку и diff вместе, выдаёт токен одобрения

SAVED

save_approved_report

запись

Сохраняет только при совпадении токена одобрения (единственный инструмент записи)

OBSERVE

list_saved_reports

чтение

Список сохранённых отчётов

OBSERVE

read_report_audit_log

чтение

Просмотр журнала аудита сохранений

Ресурсы и промпты

Тип

URI или имя

Роль

Resource

document://{relative_path}

Исходный текст документа

Resource

report://{report_id}

Сохранённый сводный отчёт

Prompt

analyze_folder

Аналитический рабочий процесс от сканирования до одобрения сохранения

Проектирование harness

Этот сервер рассматривает как объект проектирования не только функциональность, но и способ, которым модель использует инструменты.

  • В каждом ответе есть stage и next_actions, поэтому модель выбирает следующий инструмент, глядя только на ответ. blocking: true — это подсказка «не пропускай этот этап». Фактически сохранение блокируют проверка структуры и токен одобрения; подсказка не берёт на себя эту роль.

  • Ошибки возвращаются через ToolFailure вместе с кодом причины, способом восстановления и доступными вариантами. Цель — чтобы модель могла восстановиться сама, не переспрашивая.

  • Схемы аргументов остаются плоскими ({"relative_path": "..."}). Если использовать Pydantic-модель как тип аргумента, она вложится как {"params": {...}}, и форма вызова изменится.

  • Возвращаемые значения — Pydantic-модели, поэтому outputSchema генерируется автоматически.

  • Все инструменты снабжены readOnlyHint / destructiveHint, чтобы хост мог показывать другой UI одобрения для инструментов записи.

  • Сохранение блокируют только надёжные проверки (структура), а эвристические проверки (сверка имён файлов) лишь сообщаются как предупреждения.

Бюджет контекста

Следуя принципу «окно контекста — это не место для выброса, а бюджет рабочей памяти», все инструменты имеют явные верхние пределы размера ответа.

  • scan_folder_structure: при превышении MAX_SCAN_ENTRIES (500) сообщает truncated: true и обрезает.

  • read_document: файлы больше MAX_FILE_BYTES (200 КБ) целиком не читаются; вместо этого возвращается ошибка с указанием читать частями через read_document_chunk.

  • extract_key_terms: ограничивает количество элементов по категориям через max_terms.

  • preview_save_report: по умолчанию include_preview=False, поэтому уже имеющийся черновик не дублируется в ответе. Когда включить нужно, длина ограничивается через max_preview_chars.

  • harness.truncate() / harness.number_lines(): всегда явно указывают факт обрезки и якоря цитирования (номера строк), чтобы модель не гадала, «это целиком или часть».

Границы безопасности

  • Сервер работает только с одним security.TARGET_DIR (data/sample_docs/). Доступ наружу невозможен даже через .., абсолютные пути, буквы дисков или символические ссылки (security.safe_relative_path).

  • Файлы вне allowlist расширений (.txt .md .csv .log) не читаются. Исполняемые/скриптовые расширения всегда исключаются из рассмотрения.

  • Если размер файла превышает MAX_FILE_BYTES (200 КБ), файл целиком не читается; вместо этого возвращается ошибка.

  • Скрытые файлы и папки, имя которых начинается с ., исключаются из сканирования.

  • Инструмент записи только один — save_approved_report, и он срабатывает лишь при совпадении хэш-токена (report_id, текст), выданного preview_save_report.

  • Этот сервер только читает документы. Если в исходный код попадут вызовы выполнения кода или shell-команд, такие как eval/exec/subprocess, scripts/validate_package.py завершится с ошибкой.

Проверка

uv run pytest -q
uv run python scripts/smoke_stdio.py
uv run python scripts/run_evals.py
uv run python scripts/validate_package.py

Роли четырёх команд различны, поэтому должны пройти все.

Команда

Область проверки

Запуск сервера

pytest -q

Доменные функции core·outline·grounding·security·evalkit

нет

smoke_stdio.py

Регистрация инструментов, плоскостность схем, комментарии, соглашения о сообщениях об ошибках

да

run_evals.py

Детерминированные регрессионные кейсы из evals/cases.jsonl

да

validate_package.py

Статическая проверка утечки учётных данных, опасных вызовов, комментариев инструментов

нет

run_evals.py содержит весь поток сохранения, включая случаи, когда сохранение при правильном токене одобрения успешно, а при неправильном — отклоняется. При каждом исправлении ошибки в evals/cases.jsonl добавляется одна строка с кейсом, воспроизводящим эту ошибку. Синтаксис кейсов описан в evals/README.md.

Если нужно анализировать другую папку

В целях безопасности этот проект фиксирует целевую папку в TARGET_DIR (папка data/sample_docs/ внутри пакета) в src/file_insight_mcp/security.py. Чтобы анализировать реальную рабочую папку:

  1. Замените TARGET_DIR на нужный абсолютный путь или измените код так, чтобы он внедрялся через переменную окружения.

  2. Отразите в ALLOWED_EXTENSIONS расширения, которые реально есть в этой папке.

  3. Сначала убедитесь, что в папке нет чувствительных подпапок (учётные данные, персональные данные и т.п.).

Подключение к Claude Desktop

Замените ABSOLUTE_PROJECT_PATH в config/claude_desktop_config.example.json на абсолютный путь к этой папке и примените в настройках Claude Desktop. После этого приложение нужно полностью закрыть и запустить заново.

Принципы проектирования

  • MCP не вызывает отдельный LLM API. Сводные предложения создаёт Claude или Codex, а этот MCP отвечает за исходный текст, структуру, проверку и сохранение.

  • Не выдумываются имена файлов, числа и даты, не подтверждённые в документах; проверка обоснованности сверяет их механически.

  • Для окончательного сохранения требуются и токен одобрения, выданный при предпросмотре, и явное одобрение пользователя.

  • Доменная логика (core, outline, grounding) отделена от соглашений об инструментах (server, harness, security).

Install Server
F
license - not found
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables real-time indexing and semantic search of local documents (PDF, Word, text, Markdown, RTF) using vector embeddings and local LLMs. Monitors folders for changes and provides natural language search capabilities through Claude Desktop integration.
    22
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables read-only analysis of local unstructured documents by scanning a folder, extracting text and structural metadata, and passing content with truncation and error-awareness to an LLM for summarization.
    9
  • A
    license
    A
    quality
    C
    maintenance
    Enables reading and extracting text from local documents (PDF, Word, Excel, PowerPoint, HWP, Markdown, CSV, etc.) without network access, and provides approval-gated summary saving and file organization.
    11
    MIT

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

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/jm333-B/temp_mcp_server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server