Archive MCP Server
Archive MCP Server
MCP-сервер, который предоставляет записи и логику хранения Enterprise Data Archival & Records Management System любому MCP-клиенту — Claude Code, Claude Desktop, Cursor или вашему собственному клиенту — через stdio.
Вместо того чтобы кликать по дашборду React в поисках ответа на «что мы можем архивировать в Finance?», вы спрашиваете модель, и она вызывает эти инструменты.
Инструменты
Инструмент | Что делает |
| Находит записи по сотруднику, отделу или типу документа |
| Возвращает одну запись вместе с вердиктом о сроке хранения |
| Активные записи с истёкшим сроком хранения, сначала самые просроченные |
| Количество активных и архивированных записей по отделам |
| Помесячный прогноз того, что станет доступно для архивирования |
| Что сделала плановая задача архивирования и когда |
Related MCP server: context-archive
Ресурсы
URI | Содержимое |
| Срок хранения в годах для каждого типа документа |
Требования
Требуются Python 3.10+ и MCP SDK 2.x. В SDK v2 FastMCP переименован в MCPServer и перенесён в mcp.server.mcpserver; этот код рассчитан на v2. Доступ к данным — SQLAlchemy 2.x, с psycopg2 для PostgreSQL.
Установка
python -m venv .venv
source .venv/bin/activate # macOS/Linux
.venv\Scripts\activate # Windows
python -m pip install -r requirements.txt
python seed_db.py # builds the local demo database
python server.py --selftest # sanity check, no MCP client neededЗатем проверьте его в реальной MCP-сессии:
python verify_mcp.pyВыбор базы данных
Сервер читает DATABASE_URL (из окружения или из файла .env — см. .env.example):
| Бэкенд |
не задано |
|
задано | реальная архивная база данных, например |
archive.db содержит синтетические записи, поэтому сервер — и --selftest — работает у любого, кто склонирует этот репозиторий без учётных данных. Это не другая кодовая база: seed_db.py создаёт ту же схему из пяти таблиц, которую использует производственная база данных (active_records, archived_records, retention_policy, audit_logs, documents), так что каждый запрос в server.py выполняется без изменений на любой из них.
Никогда не коммитьте настоящий DATABASE_URL. .env игнорируется гитом; .env.example — это коммитируемый шаблон.
Подключение к Claude Code
Из каталога проекта:
claude mcp add --scope project archive-system -- /absolute/path/to/.venv/bin/python /absolute/path/to/server.py
claude mcp list--scope project записывает коммитируемый .mcp.json в корень проекта, так что любой, кто склонирует репозиторий, получит сервер. Запустите claude, подтвердите проектный сервер по запросу и проверьте /mcp — archive-system должен показывать Подключено с 6 инструментами. Затем спросите:
Какие записи ИТ-отдела просрочены для архивирования?
Если запуск не удался, выполните claude --debug=mcp и прочтите лог в ~/.claude/debug/.
Подключение к Claude Desktop
Добавьте это в claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"archive-system": {
"command": "D:\\Python\\project\\archive-mcp\\.venv\\Scripts\\python.exe",
"args": ["D:\\Python\\project\\archive-mcp\\server.py"]
}
}
}Укажите в command Python из виртуального окружения, а не голый python — хост не наследует ни PATH вашего шелла, ни активированного виртуального окружения. В Windows оба путя должны содержать удвоенные обртные слэши.
Перезапустите из значка в трее — Выйти, а не кнопкой закрытия окна, — иначе приложение продолжит работать со старым конфигом.
Примечание для сборки Microsoft Store (MSIX) в Windows: её конфиг находится не в %APPDATA%, а в собственном каталоге пакета, %LOCALAPPDATA%\Packages\Claude_<id>\LocaCache\Roamng\Claude\. Она нормально запускает локальные stdio-серверы. Не пытайтесь проверить это по logs\mcp.log — этот файл может оставаться пустым и нетронутым, пока всё работает. Проверьте вместо этого процесс; сервер работает как дочерний процесс Claude Desktop:
Get-CimInstance Win32_Process -Filter "Name like '%python%'" |
Where-Object { $_.CommandLine -like "*archive-mcp*" }Заметки о дизайне
Транспорт stdio, потому что клиент запускает сервер как дочерний процесс на той же машине. HTTP-транспорт имел бы смысл, есл бы сервер работал удалённо и обслуживал несколько клиентов.
Единая точка подключения к хранилищу.
_connect()возвращаетEngineSQLAlchemy и является единственным местоом, которое знает, что за база данных. Запросы используют именованные бинд-параметры (:department), которые не зависят от диалекта, поэтому SQLite и PostgreSQL используют один набор запросов, а не два.pool_pre_ping=True, потому что бессерверный PostgreSQL (Neon и подобные) приостанавливает простой вычислений, а MCP-сервер простаивает между вопросами. Без этого первый вопрос после затишья падает на устраевшем соединении из пула.Право на архивирование вычисляется в Python, а не в SQL. Арифметика
INTERVALв PostgreSQL не имеет эквивалента в SQLite, а хранение сравнения в одном месте не даёт двум бэкендам расходиться. При нескольких тысячах активных строк эти затраты не стоят оптимизации.Возраст отсчитывается от
joining_date.created_at— это временная метка массовой загрузки, одинаковая для всех строк, поэтому расчёт срока хранения от неё никогда не нашёл бы ничего подлежащего архивированию.joining_date— это дата уровня сотрудника, заменяющая дату докуента; в схеме нет даты докуента, и это реальный пробел, который стоит закрть выше по потоку.Состояние архивирования — это таблица, а не флаг. Запись живёт в
active_recordsили вarchived_records, и идемтификаторы стабильны при переезде, поэтомуget_recordпроверяет обе таблицы. Стоlбецstatus— это статус трудоустройства и не связан с этим.Инструменты аннотированы как «только для чтения». Каждый несёт
ToolAnnotations(read_only_hint=True, destructive_hint=False), так что клиент может отличить безопасный вызов от изменяющего состояние до его выполнения.По факту инструменты тоже только для чтения. Архивирование разрушительно и подчиняется политыке;
archival_candidatesнамеренно сообщает, что можно было бы архивировать, и оставляяет рещение существущей плановой задаче. Предоставление разрушительного инструмента модели — это решение, которое требует сначала пути подтверждения.Докстринги — это API. Модель выбирает инструменты по докстрингам и аннотациям типов, поэтому там перечислены допустимые отделы и типы докуентов. Устаревший enum хуже, чем его отсутствие: модель передаёт правдоподобное значение, например
Legal, получает пустой результат и сообщает, что архивировать нечего.Одно определение «подходящего для архивирования», используемое в обоих направлениях.
_verdictопределяет возраст записи относительно её срока хранения;_eligible_onинвертирует его, чтобы получить дату, когда запись пересекает этот срок, — именно по нейretention_forecastгруппирует. Они должны точьно совпадать, иначе в один и тот же день запись может появиться как предстощая в прогнозе и просроченная вarchival_candidates. Если написать обратную функцию очевидным способом (joining + timedelta(days=years * 365.25)), это сломается, потомучтоdate + timedeltaсохраняет только целые дни и молча теряет.75.Вывод — это форматированый текст, а не сырые JSON-дампы, так что модель может цитировать его пользователю без переформатирования.
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Read-only MCP access to authorized Vocci sessions, notes, files, and memory search.
A paid remote MCP for AI SDK data query MCP, built to return verdicts, receipts, usage logs, and aud
Related MCP Servers
- FlicenseNot gradedqualityAmaintenanceProvides a stdio MCP server for Codex to inspect and query configured datasources, with tools for health checks, read-only queries, metadata, and fixed physical sessions with audit trails.15 npm-
- AlicenseCqualityCmaintenanceEnables agents to query a local macOS archive of Knowledge and browser history through read-only stdio MCP tools for status, timelines, search, original records/blobs, schemas, bounded SQL, and usage or domain summaries.143MIT
- AlicenseNot gradedqualityBmaintenanceProvides read-only, deterministic tools for searching accounts and knowledge and retrieving tickets, ticket details, and product information over a stdio MCP connection.MIT
- AlicenseAqualityBmaintenanceEnables MCP clients to deterministically audit claimed data-deletion requests, reconstruct what personal data remains reachable at a chosen cut-off, and retrieve evidence, case details, queues, what-if results, and verification outputs. It is read-only and lets agents build risk dashboards, review queues, case cards, and DPO briefs from the same capabilities as the CLI.10MIT