mcp-egrul

io.github.atomno-mcp由 GitHub 帳號 atomno-mcp 發布v0.1.10更新於 Oct 25, 2026

EGRUL/EGRIP company registry lookup for Russian legal entities and entrepreneurs.

已驗證STDIO僅桌面金融商業與電商

概覽

AI 產生的概覽

依稅號、註冊號或名稱查詢俄羅斯企業與個體經營者登記資料(EGRUL/EGRIP),回傳公司卡片、創辦人與負責人。

可以做什麼
依 INN 稅號、OGRN 註冊號或模糊公司名稱檢索登記紀錄,可限定僅查仍在營運的主體並限制結果數量。取得完整公司卡片,或只取含持股比例的創辦人,或只取現任負責人。一次呼叫可批次查詢最多 100 個稅號。透過診斷用 ping 確認伺服器是否正常運作。
適用情境
適合需要查詢俄羅斯法人或個體經營者官方資料的情境,例如核對交易對象、取得創辦人或負責人、批次篩選稅號清單。對象是處理俄羅斯商業資料、希望在 MCP 用戶端內直接查詢的使用者。
執行需求
以 stdio 在本機執行,可透過 uvx、pipx 或 pip 從 PyPI 安裝;原始碼安裝需 Python 3.11 以上。自架模式需要本機 SQLite 資料庫,由使用者自行下載俄羅斯稅務機關開放資料傾印並以內附命令列工具匯入。託管模式需要環境變數 ATOMNO_API_KEY。
安裝前請注意
託管 Pro 模式為付費訂閱(約每月 10 美元,與搭配服務合購約 15 美元),查詢會送往第三方 API;免費額度依 IP 每日限制。設定 ATOMNO_API_KEY 後全部七個工具都會改走遠端服務而非本機資料庫。伺服器本身不會下載登記資料傾印,查詢結果不能取代正式的法律或財務盡職調查。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 mcp-egrul,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

mcp-egrul

MCP-сервер ЕГРЮЛ и ЕГРИП: реквизиты российских компаний и ИП по открытым данным налоговой службы. Можно поставить у себя или подключить к Cursor, Claude и любому клиенту MCP.

Russian company registry lookup for AI agents.

[Glama]

[mcp-egrul MCP server]

Статус: 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_nameFuzzy-поиск по названию (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).


Установка

Вариант 1 — через PyPI (рекомендуется для пользователей)

bash
# Без локального clone — работает «из коробки»uvx atomno-mcp-egrul
# Или установка глобальноpipx install atomno-mcp-egrulatomno-mcp-egrul
# Или классический pip в venvpip install atomno-mcp-egrulatomno-mcp-egrul

Вариант 2 — dev-режим (для разработчиков)

Требуется Python 3.11+ и uv (быстрая замена pip, опционально).

bash
git clone https://github.com/atomno-mcp/mcp-egrulcd mcp-egruluv venvuv pip install -e ".[dev]"

Альтернативно через pip:

bash
python -m venv .venv.venv/Scripts/activate    # Windows# source .venv/bin/activate  # Linux/macOSpip install -e ".[dev]"

Запуск

bash
atomno-mcp-egrul

Транспорт по умолчанию — stdio (стандартный ввод/вывод JSON-RPC). Подходит для подключения к Cursor / Claude Desktop / Claude Code.

Claude Desktop (claude_desktop_config.json)

json
{  "mcpServers": {    "egrul": {      "command": "uvx",      "args": ["atomno-mcp-egrul"]    }  }}

Cursor (.cursor/mcp.json в проекте или ~/.cursor/mcp.json глобально)

json
{  "mcpServers": {    "egrul": {      "command": "uvx",      "args": ["atomno-mcp-egrul"]    }  }}

Если не используете uv, замените "command": "uvx", "args": ["atomno-mcp-egrul"] на "command": "atomno-mcp-egrul" (требует pip install atomno-mcp-egrul или pipx install atomno-mcp-egrul).


Docker (self-host) — quick start

bash
# 1. Скачайте дампы ФНС (acceptance на сайте ФНС — раз в жизни).#    Источники:#      ЕГРЮЛ — https://www.nalog.gov.ru/opendata/7707329152-egrul/#      ЕГРИП — https://www.nalog.gov.ru/opendata/7707329152-egrip/#    Положите их в структуру:mkdir -p dumps/egrul/2026-04-24 dumps/egrip/2026-04-24cp ~/Downloads/EGRUL_*.zip dumps/egrul/2026-04-24/cp ~/Downloads/EGRIP_*.zip dumps/egrip/2026-04-24/
# 2. Первоначальный полный импорт (однократно, ~30-60 минут):docker compose --profile import run --rm \    mcp-egrul-import atomno-mcp-egrul-import --registry egrul --fulldocker compose --profile import run --rm \    mcp-egrul-import atomno-mcp-egrul-import --registry egrip --full
# 3. Запустите сервер + фоновый cron-демон:docker compose up -ddocker compose logs -f mcp-egrul-scheduler

Через ~10 минут после импорта все тулзы (search_by_inn, search_by_name и пр.) уже отвечают данными из локального слепка ФНС.

Схема тома /data внутри контейнера:

/data/├── mcp_egrul_data.sqlite     # SQLite + FTS5└── dumps/                    # read-only монтируется из ./dumps    ├── egrul/    │   └── YYYY-MM-DD/*.zip    └── egrip/        └── YYYY-MM-DD/*.zip

Cron-демон (atomno-mcp-egrul-scheduler) сам забирает самую свежую выгрузку после того как вы положите её в dumps/<registry>/<YYYY-MM-DD>/ — ночью в 03:00 Europe/Moscow. Если ничего нового нет — job завершится с nothing_to_import и никаких лишних записей в import_log не сделает.


Импорт дампов ФНС (ручной режим)

Источники:

  • ЕГРЮЛ open-data: https://www.nalog.gov.ru/opendata/7707329152-egrul/
  • ЕГРИП open-data: https://www.nalog.gov.ru/opendata/7707329152-egrip/

Формат: суточные архивы XML в ZIP, ~15 ГБ на полный слепок. Юридически их нужно скачать с сайта ФНС после acceptance лицензии — сервер не качает архивы сам (строго).

CLI:

bash
# Полный первоначальный импорт (однократно):atomno-mcp-egrul-import --registry egrul --fullatomno-mcp-egrul-import --registry egrip --full
# Инкремент (cron / ручной): загружается только если появилась более# свежая YYYY-MM-DD-папка, чем последний успешный `import_log.source_dump_date`.# Если новее нет — exit-code 5 и сообщение `nothing_to_import`.atomno-mcp-egrul-import --registry egrul --incremental
# Фоновой cron-демон с ежедневным 03:00 MSK (вызывать вручную редко;# обычно запускается сервисом mcp-egrul-scheduler в docker-compose).atomno-mcp-egrul-scheduler --run-now

Exit-коды atomno-mcp-egrul-import:

КодЗначение
0Импорт прошёл успешно
2Невалидный конфиг / аргумент CLI
4Ошибка ингеста (битый XML, нет каталога дампов, DB error)
5nothing_to_import — самая свежая дата уже в БД (инкремент)

Pro / hosted-режим (прокси на api.atomno-mcp.ru)

Когда пользователь задаёт ATOMNO_API_KEY, все семь тулзов автоматически проксируются на hosted Pro API (SPEC §5.4, §5.4.1). Локальный SQLite в этом режиме не используется — hosted Pro даёт:

  • Актуальные данные на сегодня (без суточной задержки open-data дампа): прямой scrape egrul.nalog.ru + Dadata fallback на стороне сервера.
  • Bulk-эндпойнт без rate-limit (POST /companies/bulk) — один запрос вместо N локальных gather'ов.
  • AI-summary карточки, история изменений, поиск по ФИО директора (Pro-only тулзы — приезжают вместе с hosted-сервером в Phase 2, см. §5.4.1).

Цена: Pro — $10/мес отдельно или $15/мес в паре с mcp-fns-check (bundle-ключ). Free tier: 30 запросов/день/IP без регистрации (SPEC §1).

Настройка в Cursor (.cursor/mcp.json):

json
{  "mcpServers": {    "egrul": {      "command": "uvx",      "args": ["atomno-mcp-egrul"],      "env": {        "ATOMNO_API_KEY": "your-pro-key-here"      }    }  }}

Поведение и ошибки — никакого silent fallback: если hosted API недоступен, клиент поднимает типизированное исключение, а не молча отдаёт данные из устаревшего локального дампа. Сопоставление HTTP ↔ MCP-код ошибки — в SPEC §5.4.1:

HTTP-ответ hosted APIИсключение клиентаerror.code
200——
400ValidationErrorinvalid_input
401HostedAuthErrorauth_required
403ProRequiredErrorpro_required
404 (code=not_found)NotFoundErrornot_found
404 (wrong route)SourceUnavailableErrorsource_unavailable
413BulkTooLargeErrorbulk_too_large
429RateLimitedError (+ Retry-After)rate_limit
5xxSourceUnavailableErrorsource_unavailable
timeout / DNS failSourceUnavailableError (cause=timeout/ConnectError)source_unavailable

Валидация ИНН/ОГРН остаётся клиент-саид (контрольные цифры проверяются до HTTP-запроса — экономия round-trip на битых идентификаторах).


Конфигурация (переменные окружения)

ПеременнаяОписаниеПо умолчанию
MCP_EGRUL_DBПуть к SQLite-файлу со слепком ЕГРЮЛ/ЕГРИП./mcp_egrul_data.sqlite
MCP_EGRUL_USER_AGENTUser-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-APIhttps://api.atomno-mcp.ru/mcp-egrul/v1

Пример — см. .env.example.


Структура

apps/mcp-egrul/├── pyproject.toml├── LICENSE                             # MIT├── README.md                           # ЭТОТ ФАЙЛ├── Dockerfile├── docker-compose.yml├── .env.example├── .gitignore├── src/mcp_egrul/│   ├── __init__.py│   ├── server.py                       # FastMCP entrypoint, регистрация 7 тулзов + ping│   ├── context.py                      # ServiceContext (DI: SQLiteStore + HTTP-клиент)│   ├── config.py                       # Чтение env-vars в типизированные поля│   ├── constants.py                    # Все магические числа и enum'ы│   ├── validators.py                   # Контрольные цифры ИНН (10/12) и ОГРН (13/15)│   ├── schemas.py                      # Pydantic-модели CompanyCard/IECard/SearchResult/...│   ├── errors.py                       # McpEgrulError и подклассы│   ├── db/│   │   ├── __init__.py│   │   └── sqlite.py                   # Async-клиент (aiosqlite), init/query/upsert/search + import_log│   ├── sources/│   │   ├── __init__.py│   │   ├── base.py                     # Абстрактный интерфейс Source│   │   ├── opendata.py                 # ФНС open-data адаптер (read-local → SQLite upsert)│   │   ├── opendata_parser.py          # Потоковый lxml.iterparse парсер ЕГРЮЛ/ЕГРИП XML│   │   └── hosted_adapter.py           # HTTP-клиент hosted Pro API (SPEC §5.4.1)│   ├── tools/│   │   ├── __init__.py│   │   ├── search_by_inn.py│   │   ├── search_by_ogrn.py│   │   ├── search_by_name.py│   │   ├── get_full_card.py│   │   ├── get_founders.py│   │   ├── get_director.py│   │   └── bulk_cards.py│   └── scripts/│       ├── __init__.py│       ├── import_opendata.py          # CLI `atomno-mcp-egrul-import` (ручной / одноразовый)│       └── scheduler.py                # CLI `atomno-mcp-egrul-scheduler` (apscheduler cron 03:00 MSK)└── tests/    ├── __init__.py    ├── conftest.py    ├── fixtures/    │   ├── egrul_sample.xml            # Мини-ЕГРЮЛ (2 валидных + 1 skip на неизвестный статус)    │   └── egrip_sample.xml            # Мини-ЕГРИП (active + closed)    ├── test_validators.py    ├── test_schemas.py    ├── test_config.py                  # Config.from_env + _parse_float_env (валидация env)    ├── test_sqlite_store.py    ├── test_cards.py                   # _cards.py: parse_iso_date/datetime + build_*card    ├── test_server_ping.py             # FastMCP tool-layer + server.main()    ├── test_tools.py                   # 7 тулзов: happy-path + validation + not_found    ├── test_opendata_parser.py         # XML-парсер (zip, xml, skip-на-неизвестный-статус)    ├── test_opendata_source.py         # OpenDataSource.run_ingest (full/incremental)    ├── test_integration_import.py      # Полный цикл import → search → get_card    ├── test_import_cli.py              # CLI `atomno-mcp-egrul-import`    ├── test_scheduler_cli.py           # CLI `atomno-mcp-egrul-scheduler` + _run_scheduler    └── test_hosted_adapter.py          # HostedClient + маршрутизация тулзов (respx-моки)

Тесты

bash
pytest -v --cov=src/mcp_egrul

Текущий 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);
  • все 7 MCP-тулзов (happy-path + validation + not_found + bulk partial);
  • SQLite store + FTS5 + import_log;
  • XML-парсер ЕГРЮЛ/ЕГРИП (zip, xml, skip-запись с неизвестным статусом);
  • OpenDataSource.run_ingest (full/incremental/nothing_to_import);
  • полный интеграционный цикл import fixture → search → get_card → bulk;
  • обе CLI (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;
  • FastMCP tool-layer через 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);
  • edge-case'ы XML-парсера (75 отдельных unit-тестов на _parse_company/_parse_ie/ _parse_share/_parse_director/_parse_founders/address fallback'ы/legacy-атрибуты/ невалидные длины ИНН/ОГРН/КПП);
  • приватные helper'ы SQLite-стора (_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/).


Безопасность и юридический статус

  • Все источники — публично открытые данные ФНС (ЕГРЮЛ / ЕГРИП open-datasets), распространение которых разрешено ФЗ «Об информации…» и ЕГРЮЛ-специфичными нормами (см. SPEC §8).
  • Юридические лица не подпадают под 152-ФЗ (О персональных данных).
  • ФИО физлиц-руководителей и учредителей публикуются самой ФНС в открытом реестре — пересылка этих данных легальна.
  • Никаких write-операций ни в один внешний API.
  • Секреты — только через переменные окружения, в репозитории — .env.example без значений.

Дисклеймер

Сервис — агрегатор и удобный интерфейс над публичными данными ФНС. Не аффилирован с ФНС. Используется на ваш риск. Информация в ответах сервиса не является заменой полноценной юридической или финансовой оценки.


Лицензия

MIT. Файл LICENSE в корне папки.

來源:README.md,提交 212aecc

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.1.10最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分