EGRUL/EGRIP company registry lookup for Russian legal entities and entrepreneurs.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
💡 Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
MCP-сервер (Model Context Protocol — открытый протокол подключения AI-ассистентов к внешним инструментам) для работы с ЕГРЮЛ (Единый Государственный Реестр Юридических Лиц РФ) и ЕГРИП (Единый Государственный Реестр Индивидуальных Предпринимателей). Источник — официальные open-data дампы ФНС (Федеральной налоговой службы).
Статус: v0.1.2 — open-версия (self-host через SQLite) полностью готова + клиентская часть hosted Pro (HTTP-клиент HostedClient для api.atomno-mcp.ru). Опубликована на PyPI, индексирована в Glama и Smithery. Сама hosted Pro-инфра — в активной разработке. Coverage 100.00% (345 тестов, ruff clean, fastmcp 3.2.4, enforced через --cov-fail-under=100).
Парный проект: mcp-fns-check (risk-чек-слой поверх ЕГРЮЛ).
Семь MCP-тулзов, видимых AI-ассистенту (Cursor, Claude Desktop, Cline, любой MCP-клиент):
| Tool | Описание | Аргументы |
|---|---|---|
search_by_inn | Поиск по ИНН (10 цифр — юр.лицо, 12 — ИП) | inn: str |
search_by_ogrn | Поиск по ОГРН (13) или ОГРНИП (15) | ogrn: str |
search_by_name | Fuzzy-поиск по названию (FTS5) | query: str, limit?: int, only_active?: bool |
get_full_card | Полная карточка со всеми секциями | inn?: str, ogrn?: str |
get_founders | Только учредители с долями | inn: str |
get_director | Только текущий руководитель | inn: str |
bulk_cards | Массовая проверка (до 100 ИНН) | inns: list[str] |
Плюс диагностический ping для проверки что сервер жив.
Полная спецификация payload'ов — в src/mcp_egrul/schemas.py (Pydantic-модели CompanyCard, IECard, SearchResult, BulkResult).
Требуется Python 3.11+ и uv (быстрая замена pip, опционально).
Альтернативно через pip:
Транспорт по умолчанию — stdio (стандартный ввод/вывод JSON-RPC). Подходит для подключения к Cursor / Claude Desktop / Claude Code.
claude_desktop_config.json).cursor/mcp.json в проекте или ~/.cursor/mcp.json глобально)Если не используете
uv, замените"command": "uvx", "args": ["atomno-mcp-egrul"]на"command": "atomno-mcp-egrul"(требуетpip install atomno-mcp-egrulилиpipx install atomno-mcp-egrul).
Через ~10 минут после импорта все тулзы (search_by_inn, search_by_name и пр.) уже отвечают данными из локального слепка ФНС.
Схема тома /data внутри контейнера:
Cron-демон (atomno-mcp-egrul-scheduler) сам забирает самую свежую выгрузку после
того как вы положите её в dumps/<registry>/<YYYY-MM-DD>/ — ночью в 03:00
Europe/Moscow. Если ничего нового нет — job завершится с nothing_to_import
и никаких лишних записей в import_log не сделает.
Источники:
https://www.nalog.gov.ru/opendata/7707329152-egrul/https://www.nalog.gov.ru/opendata/7707329152-egrip/Формат: суточные архивы XML в ZIP, ~15 ГБ на полный слепок. Юридически их нужно скачать с сайта ФНС после acceptance лицензии — сервер не качает архивы сам (строго).
CLI:
Exit-коды atomno-mcp-egrul-import:
| Код | Значение |
|---|---|
| 0 | Импорт прошёл успешно |
| 2 | Невалидный конфиг / аргумент CLI |
| 4 | Ошибка ингеста (битый XML, нет каталога дампов, DB error) |
| 5 | nothing_to_import — самая свежая дата уже в БД (инкремент) |
api.atomno-mcp.ru)Когда пользователь задаёт ATOMNO_API_KEY, все семь тулзов автоматически
проксируются на hosted Pro API (SPEC §5.4, §5.4.1). Локальный SQLite в этом
режиме не используется — hosted Pro даёт:
egrul.nalog.ru + Dadata fallback на стороне сервера.POST /companies/bulk) — один запрос вместо N локальных gather'ов.Цена: Pro — $10/мес отдельно или $15/мес в паре с mcp-fns-check (bundle-ключ). Free tier: 30 запросов/день/IP без регистрации (SPEC §1).
Настройка в Cursor (.cursor/mcp.json):
Поведение и ошибки — никакого silent fallback: если hosted API недоступен, клиент поднимает типизированное исключение, а не молча отдаёт данные из устаревшего локального дампа. Сопоставление HTTP ↔ MCP-код ошибки — в SPEC §5.4.1:
| HTTP-ответ hosted API | Исключение клиента | error.code |
|---|---|---|
| 200 | — | — |
| 400 | ValidationError | invalid_input |
| 401 | HostedAuthError | auth_required |
| 403 | ProRequiredError | pro_required |
| 404 (code=not_found) | NotFoundError | not_found |
| 404 (wrong route) | SourceUnavailableError | source_unavailable |
| 413 | BulkTooLargeError | bulk_too_large |
| 429 | RateLimitedError (+ Retry-After) | rate_limit |
| 5xx | SourceUnavailableError | source_unavailable |
| timeout / DNS fail | SourceUnavailableError (cause=timeout/ConnectError) | source_unavailable |
Валидация ИНН/ОГРН остаётся клиент-саид (контрольные цифры проверяются до HTTP-запроса — экономия round-trip на битых идентификаторах).
| Переменная | Описание | По умолчанию |
|---|---|---|
MCP_EGRUL_DB | Путь к SQLite-файлу со слепком ЕГРЮЛ/ЕГРИП | ./mcp_egrul_data.sqlite |
MCP_EGRUL_USER_AGENT | User-Agent HTTP-клиента | mcp-egrul/0.1 (+https://github.com/atomno-mcp/mcp-egrul) |
MCP_EGRUL_HTTP_TIMEOUT | Таймаут HTTP в секундах | 30 |
MCP_EGRUL_DUMPS_DIR | Каталог с дампами ФНС, структура <dir>/<registry>/<YYYY-MM-DD>/*.zip | ./dumps |
MCP_EGRUL_LOG_LEVEL | Уровень логирования | INFO |
TZ | Таймзона для scheduler (cron 03:00) | Europe/Moscow |
ATOMNO_API_KEY | (Pro) ключ hosted-подписки — включает проксирование на api.atomno-mcp.ru | не задан |
ATOMNO_API_BASE | (Pro) базовый URL hosted-API | https://api.atomno-mcp.ru/mcp-egrul/v1 |
Пример — см. .env.example.
Текущий coverage: 100.00% (345 tests passed, ruff clean, 1529 statements + 382 branches,
0 misses). Enforced политикой --cov-fail-under=100 — любая регрессия сломает CI. Тесты покрывают:
Config.from_env + парсер float-env-переменных (валидация, а не silent fallback);import_log;OpenDataSource.run_ingest (full/incremental/nothing_to_import);import fixture → search → get_card → bulk;atomno-mcp-egrul-import, atomno-mcp-egrul-scheduler) — регистрация cron-job'ов, парсинг
аргументов, _run_daily_ingest на all-happy/nothing_to_import/McpEgrulError, полный цикл
_run_scheduler с mock-ed asyncio.Event;mcp.call_tool() — сериализация ошибок в структурированные dict'ы,
server.main() с валидным и невалидным env;HostedClient (hosted Pro API proxy) — happy-path всех 7 методов, все HTTP-ошибки из
SPEC §5.4.1 (401/403/404/413/429/5xx), timeout/ConnectError, невалидный JSON/payload от
сервера, клиентская валидация bulk, async with-контекст; плюс маршрутизация из тулзов
в hosted-режиме (при задан ATOMNO_API_KEY — запрос идёт в api.atomno-mcp.ru, не в SQLite,
валидация ИНН до HTTP);_parse_company/_parse_ie/
_parse_share/_parse_director/_parse_founders/address fallback'ы/legacy-атрибуты/
невалидные длины ИНН/ОГРН/КПП);_wrap, _prepare_row, _row_to_dict, _normalize_bm25,
auto-init через _ensure, rejecting invalid finish_import статусов);ServiceContext reentry-идемпотентность, atexit-cleanup, Config.from_env ValidationError
→ exit-code 2 из atomno-mcp-egrul-import CLI.Внешние API никогда не вызываются напрямую из тестов — только через respx (HTTP-мокинг) и
локальные XML-фикстуры (tests/fixtures/).
.env.example без значений.Сервис — агрегатор и удобный интерфейс над публичными данными ФНС. Не аффилирован с ФНС. Используется на ваш риск. Информация в ответах сервиса не является заменой полноценной юридической или финансовой оценки.
MIT. Файл LICENSE в корне папки.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/mcp-egrul)<a href="https://allmcps.com/mcp/mcp-egrul"><img src="https://allmcps.com/api/badge/mcp-egrul?style=directory" alt="Mcp Egrul on AllMCPs" /></a>