file-insight-mcp
Файловый анализ 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
Что делает этот сервер
Сканирует структуру фиксированной целевой папки (
data/sample_docs/).Читает только документы с разрешёнными расширениями (
.txt .md .csv .log).Извлекает из документов оглавление (структуру заголовков), кандидатов в даты, числовые значения и ключевые термины на основе правил.
Составляет сводный промпт, объединяющий все документы. Саму сводку пишет хостовая LLM (Claude/Codex), а этот MCP не вызывает LLM API.
Проверяет структуру составленного сводного отчёта и сверяет, что упомянутые в нём имена файлов действительно существуют.
Сохраняет отчёт в файл только после явного одобрения пользователя.
Быстрый старт
Требуемое окружение: Python 3.11 или новее, uv
uv sync --extra devПосле установки убедитесь, что все четыре команды из раздела Проверка ниже проходят успешно.
Чтобы визуально проверить инструменты через MCP Inspector:
uv run mcp dev src/file_insight_mcp/server.pyСтруктура проекта
Доменная логика и соглашения об инструментах разделены, чтобы при изменении правил проверки не затрагивать слой инструментов.
Путь | Роль |
| Проверка безопасности путей, allowlist расширений, лимиты размера и количества элементов |
| Сканирование папки, чтение документов, проверка структуры отчёта, сохранение на основе одобрения |
| Извлечение оглавления, дат, числовых значений и ключевых терминов (на основе правил, детерминированно) |
| Сверка имён файлов, упомянутых в сводке (консультативная проверка) |
| Общие элементы соглашений об инструментах — |
| Регистрация MCP-инструментов, ресурсов и промптов (слой harness) |
| Чистая логика выражений путей, критериев оценки и подстановки переменных для eval-кейсов |
| Детерминированные регрессионные кейсы (данные, а не код) |
| Раннер, выполняющий кейсы через реальный MCP-протокол |
| Смоук-тест запуска STDIO, схемы и соглашений harness |
| Статическая проверка перед публикацией (учётные данные, опасные вызовы, комментарии инструментов) |
| Модульные тесты доменных функций (выполняются без запуска сервера) |
Рекомендуемый поток
SCAN → LIST → READ → EXTRACT → DRAFT → CHECK → PREVIEW → [사용자 승인] → SAVEDЭтап | Tool | Чтение/запись | Роль |
SCAN |
| чтение | Структура целевой папки, количество по расширениям, допустимость |
LIST |
| чтение | Список документов, которые реально можно прочитать |
READ |
| чтение | Просмотр исходного текста. Поддерживает указание диапазона строк и якоря цитирования |
EXTRACT |
| чтение | Извлечение структуры оглавления (заголовки/нумерация) |
EXTRACT |
| чтение | Извлечение кандидатов в ключевые термины на основе дат, чисел и частотности |
DRAFT |
| чтение | Создание промпта, объединяющего все документы и стандартный формат отчёта |
CHECK |
| чтение | Проверка структуры. Предоставляет |
CHECK |
| чтение | Сверка, что упомянутые в сводке имена файлов действительно существуют (консультативно, не блокирует сохранение) |
PREVIEW |
| чтение | Просмотр различий с ранее сохранённой версией |
PREVIEW |
| чтение | Показывает проверку и diff вместе, выдаёт токен одобрения |
SAVED |
| запись | Сохраняет только при совпадении токена одобрения (единственный инструмент записи) |
OBSERVE |
| чтение | Список сохранённых отчётов |
OBSERVE |
| чтение | Просмотр журнала аудита сохранений |
Ресурсы и промпты
Тип | URI или имя | Роль |
Resource |
| Исходный текст документа |
Resource |
| Сохранённый сводный отчёт |
Prompt |
| Аналитический рабочий процесс от сканирования до одобрения сохранения |
Проектирование 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Роли четырёх команд различны, поэтому должны пройти все.
Команда | Область проверки | Запуск сервера |
| Доменные функции | нет |
| Регистрация инструментов, плоскостность схем, комментарии, соглашения о сообщениях об ошибках | да |
| Детерминированные регрессионные кейсы из | да |
| Статическая проверка утечки учётных данных, опасных вызовов, комментариев инструментов | нет |
run_evals.py содержит весь поток сохранения, включая случаи, когда сохранение при правильном токене одобрения успешно, а при неправильном — отклоняется. При каждом исправлении ошибки в evals/cases.jsonl добавляется одна строка с кейсом, воспроизводящим эту ошибку. Синтаксис кейсов описан в evals/README.md.
Если нужно анализировать другую папку
В целях безопасности этот проект фиксирует целевую папку в TARGET_DIR (папка data/sample_docs/ внутри пакета) в src/file_insight_mcp/security.py. Чтобы анализировать реальную рабочую папку:
Замените
TARGET_DIRна нужный абсолютный путь или измените код так, чтобы он внедрялся через переменную окружения.Отразите в
ALLOWED_EXTENSIONSрасширения, которые реально есть в этой папке.Сначала убедитесь, что в папке нет чувствительных подпапок (учётные данные, персональные данные и т.п.).
Подключение к 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).
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
- AlicenseNot gradedqualityDmaintenanceEnables 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.22MIT
- FlicenseAqualityCmaintenanceEnables 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
- AlicenseAqualityCmaintenanceEnables 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.11MIT
- 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
Related MCP Connectors
Convert PDF bank statements into structured transactions, accounts, and balances.
Turn any PDF into structured JSON via AI + OCR: invoices, bank statements, contracts.
LLM chat, text summarization and AI image generation
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/jm333-B/temp_mcp_server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server