MCP-сервер, чтобы Claude искал российское ПО: ФСТЭК, ФСБ и реестр Минцифры
TL;DR: Написал open-source MCP-сервер для каталогпо.рф. Теперь Claude Code/Claude Desktop умеет искать российское ПО прямо в диалоге: «найди антивирус для Linux с ФСТЭК-сертификатом», «покажи SIEM от отечественных производителей», «что заменит Veeam из реестра». Репо: velvetway/minreestr-mcp.
Зачем
Делаю диплом — платформу управления киберрисками под 152-ФЗ и 187-ФЗ. Одна из страниц — справочник ПО из реестра Минцифры с сертификатами ФСТЭК/ФСБ. Когда понадобилось наполнить БД реальными данными, уткнулся в проблему:
Официальный реестр на
reestr.digital.gov.ruне имеет API, дампы не публикуются, а сам сайт геоблокирован от зарубежных IP.Публичных MCP для работы с реестром тоже нет — проверил awesome-mcp-servers и GitHub-поиск, ноль проектов.
При этом в MCP-экосистеме Claude сейчас бум: любой простой инструмент получает аудиторию. Решил попробовать закрыть нишу.
Что за каталогпо.рф
Случайно нашёл сайт каталогпо.рф — агрегатор российского ПО с 26 000+ продуктов. Не аффилирован с Минцифры, но данные свежие, описания подробные, часто с упоминанием ФСТЭК-классов, совместимости с Astra Linux/РЕД ОС, соответствия 152-ФЗ.
Главное — сайт не блокирует зарубежные IP и у него нашёлся неофициальный публичный API. Обнаружил, когда reverse-инженерил JS-бандл (main.25bead19.js):
GET /api/products/search?query={q}&limit={n}
GET /api/manufacturers?page={p}&limit={n}
GET /images/main-product.json ← featured productsЭндпоинт /api/categories отдаёт 404, страницы продуктов — SPA, данные подгружаются по id через тот же search. Для большинства задач трёх открытых эндпоинтов достаточно.
Архитектура MCP
Три инструмента, стандартный stdio transport, Python + mcp SDK + httpx:
@server.list_tools()
async def list_tools() -> list[Tool]:
return [
Tool(name="search_russian_software",
description="Full-text search over Russian software catalog..."),
Tool(name="list_russian_manufacturers",
description="Paginated list of vendors with preview products..."),
Tool(name="get_featured_russian_software",
description="Featured products from the homepage..."),
]Клиент — тонкая обёртка над тремя HTTP-эндпоинтами с нормализацией (id → строка, добавление url, клэмп limit в [1, 100]):
async def search_products(self, query: str, limit: int = 10) -> list[dict]:
r = await self._client.get("/api/products/search",
params={"query": query, "limit": limit})
r.raise_for_status()
return [{
"id": str(it.get("id", "")),
"name": it.get("name", ""),
"description": it.get("description", ""),
"url": PRODUCT_PAGE_URL.format(id=it["id"]) if it.get("id") else None,
} for it in r.json().get("items", [])]Ответы формируются в читаемом для LLM виде, не raw JSON — Claude такое переваривает лучше и может цитировать.
Пример использования
В ~/.claude/settings.json:
{
"mcpServers": {
"minreestr": { "command": "minreestr-mcp" }
}
}Диалог:
Я: Нужен российский SIEM с ФСТЭК-сертификатом. Что есть?
Claude (вызывает
search_russian_software("SIEM", limit=5)): Нашёл 5 продуктов. Наиболее подходящие:
MaxPatrol SIEM (Positive Technologies) — ФСТЭК УД-4, СЗИ, рекомендован для объектов КИИ
Kaspersky Unified Monitoring and Analysis Platform — ФСТЭК УД-4
Ankey SIEM NG (Газинформсервис) — ФСТЭК УД-4, в реестре Минцифры № 3348
Все три могут работать с Astra Linux и поддерживают интеграцию с БДУ ФСТЭК.
Технические мелочи
Тесты. Через respx мокаются HTTP-вызовы, 6 юнит-тестов покрывают нормализацию, клэмп, пустой ответ, HTTP-ошибки, обработку «промо»-записей без id. CI на Python 3.10/3.11/3.12.
Entry point. В pyproject.toml:
[project.scripts]
minreestr-mcp = "minreestr_mcp.server:main"После pip install команда minreestr-mcp запускает stdio-сервер.
Trusted publishing. PyPI настроен через GitHub OIDC — при публикации GitHub Release воркфлоу автоматически билдит wheel и заливает на PyPI без токенов.
Правовая сторона
API неофициальный. Данные публичные (ПО из реестра Минцифры), MIT-лицензия на мою обёртку, но не на данные. В README явно указано, что проект не аффилирован с каталогпо.рф и пользователи должны соблюдать ToS сайта-источника. Связался с владельцами через их Telegram-бота из бандла (@CatalogPO_bot), жду ответа — если откажут, переключусь на альтернативные источники или перейду к CSV-дампу по запросу.
Что дальше
Больше эндпоинтов. Есть подозрение, что скрытые
/api/category/{id}//api/product/{id}существуют на бэкенде (или SSR-роуты с JSON-LD). Не успел дореверсить.Fallback через сторонние зеркала (reestr-po.1c.ru, soware.ru) для устойчивости.
Интеграция в мой CyberRisk. Сейчас наш
/api/softwareтянет свой сид; логичный next-step — опция «подтянуть из внешнего реестра» на стороне бэкенда.
Ссылки
Релиз v0.1.0: https://github.com/velvetway/minreestr-mcp/releases/tag/v0.1.0
Источник данных: https://каталогпо.рф
MCP-спецификация: https://modelcontextprotocol.io
Добавлен в awesome-mcp-servers: https://github.com/punkpeye/awesome-mcp-servers
Буду рад звёздам, PR и фидбеку. Если сайт-донор что-то сломает — в issues. Если есть идеи других open API для РФ-специфики (БДУ ФСТЭК, НКЦКИ, реестр Минпромторга) — предлагайте, писать такие обёртки оказалось неожиданно быстро.