Skip to main content
Glama
atomno-mcp

mcp-egrul

by atomno-mcp

mcp-egrul

ロシア連邦の法人登記簿(EGRUL)および個人事業主登記簿(EGRIP)を操作するためのMCPサーバー(Model Context Protocol — AIアシスタントを外部ツールに接続するためのオープンプロトコル)。ソースは連邦税務局(FTS)の公式オープンデータダンプです。

ステータス: v0.1.2 — オープンバージョン(SQLite経由のセルフホスト)が完全に準備完了。さらに、ホスト型Proクライアント(api.atomno.ru用のHTTPクライアント HostedClient)も利用可能です。PyPIで公開されており、GlamaおよびSmitheryにインデックスされています。ホスト型Proインフラ自体は現在活発に開発中です。カバレッジ 100.00%(345テスト、ruff clean、fastmcp 3.2.4、--cov-fail-under=100による強制)。

ペアプロジェクト: mcp-fns-check(EGRUL上のリスクチェックレイヤー)。


概要

AIアシスタント(Cursor、Claude Desktop、Cline、その他のMCPクライアント)から見える7つのMCPツール:

ツール

説明

引数

search_by_inn

INNによる検索(10桁:法人、12桁:個人事業主)

inn: str

search_by_ogrn

OGRN(13桁)またはOGRNIP(15桁)による検索

ogrn: str

search_by_name

名称によるファジー検索(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件のINN)

inns: list[str]

加えて、サーバーの稼働確認用の ping ツールがあります。

ペイロードの完全な仕様は src/mcp_egrul/schemas.py(Pydanticモデル CompanyCard, IECard, SearchResult, BulkResult)を参照してください。


Related MCP server: onec-meta-mcp

インストール

オプション1 — PyPI経由(ユーザー向け推奨)

# Без локального clone — работает «из коробки»
uvx atomno-mcp-egrul

# Или установка глобально
pipx install atomno-mcp-egrul
atomno-mcp-egrul

# Или классический pip в venv
pip install atomno-mcp-egrul
atomno-mcp-egrul

オプション2 — 開発モード(開発者向け)

Python 3.11+ および uv(pipの高速代替、オプション)が必要です。

git clone https://github.com/atomno-labs/mcp-egrul
cd mcp-egrul
uv venv
uv pip install -e ".[dev]"

pip経由の代替手段:

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

実行

atomno-mcp-egrul

デフォルトのトランスポートは stdio(標準入出力 JSON-RPC)です。Cursor / Claude Desktop / Claude Codeへの接続に適しています。

Claude Desktop (claude_desktop_config.json)

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

Cursor(プロジェクト内の .cursor/mcp.json またはグローバルの ~/.cursor/mcp.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 (セルフホスト) — クイックスタート

# 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-24
cp ~/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 --full
docker compose --profile import run --rm \
    mcp-egrul-import atomno-mcp-egrul-import --registry egrip --full

# 3. Запустите сервер + фоновый cron-демон:
docker compose up -d
docker compose logs -f mcp-egrul-scheduler

インポート開始から約10分後には、すべてのツール(search_by_inn, search_by_name など)がローカルのFTSスナップショットデータを使用して応答します。

コンテナ内の /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に最新のダンプを自動的に取り込みます。新しいデータがない場合、ジョブは nothing_to_import で終了し、import_log に不要な記録は行われません。


FTSダンプのインポート(手動モード)

ソース:

  • EGRUL open-data: https://www.nalog.gov.ru/opendata/7707329152-egrul/

  • EGRIP open-data: https://www.nalog.gov.ru/opendata/7707329152-egrip/

形式:ZIP内の日次XMLアーカイブ、フルスナップショットで約15GB。法的に、これらはライセンスに同意した上でFTSのサイトからダウンロードする必要があります。サーバーはアーカイブを自動的にダウンロードしません(厳格な制限)。

CLI:

# Полный первоначальный импорт (однократно):
atomno-mcp-egrul-import --registry egrul --full
atomno-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

atomno-mcp-egrul-import の終了コード:

コード

意味

0

インポート成功

2

無効な設定 / CLI引数

4

インジェストエラー(破損したXML、ダンプディレクトリ不在、DBエラー)

5

nothing_to_import — 最新の日付が既にDBに存在(増分)


Pro / ホスト型モード(api.atomno.ru へのプロキシ)

ユーザーが ATOMNO_API_KEY を設定すると、7つのツールすべてが自動的にホスト型Pro APIにプロキシされます(SPEC §5.4, §5.4.1)。このモードではローカルのSQLiteは使用されません。ホスト型Proの利点:

  • 最新のデータ(オープンデータダンプの1日遅延なし):egrul.nalog.ru の直接スクレイピング + サーバー側でのDadataフォールバック。

  • レート制限なしのBulkエンドポイント (POST /companies/bulk) — ローカルでのN回のgatherの代わりに1回のリクエストで完了。

  • AIによるカード要約、変更履歴、代表者氏名による検索(Pro専用ツール — フェーズ2でホスト型サーバーと共に提供、§5.4.1参照)。

価格: Proは月額10ドル、または mcp-fns-check とのセットで月額15ドル(バンドルキー)。Free tier:登録なしで1日30リクエスト/IP(SPEC §1)。

Cursorでの設定 (.cursor/mcp.json):

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

動作とエラー — サイレントフォールバックはありません。ホスト型APIが利用できない場合、クライアントは古いローカルダンプからデータを返すのではなく、型定義された例外を発生させます。HTTP ↔ MCPエラーコードの対応は SPEC §5.4.1 を参照してください。

ホスト型APIのHTTPレスポンス

クライアント例外

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

INN/OGRNの検証はクライアントサイドで行われます(HTTPリクエスト前にチェックディジットを検証し、無効な識別子による無駄なラウンドトリップを削減)。


設定(環境変数)

変数

説明

デフォルト

MCP_EGRUL_DB

EGRUL/EGRIPスナップショットのSQLiteファイルパス

./mcp_egrul_data.sqlite

MCP_EGRUL_USER_AGENT

HTTPクライアントのUser-Agent

mcp-egrul/0.1 (+https://github.com/atomno-labs/mcp-egrul)

MCP_EGRUL_HTTP_TIMEOUT

HTTPタイムアウト(秒)

30

MCP_EGRUL_DUMPS_DIR

FTSダンプのディレクトリ、構造 <dir>/<registry>/<YYYY-MM-DD>/*.zip

./dumps

MCP_EGRUL_LOG_LEVEL

ログレベル

INFO

TZ

スケジューラ用タイムゾーン(cron 03:00)

Europe/Moscow

ATOMNO_API_KEY

(Pro) ホスト型サブスクリプションキー — api.atomno.ru へのプロキシを有効化

未設定

ATOMNO_API_BASE

(Pro) ホスト型APIのベースURL

https://api.atomno.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-моки)

テスト

pytest -v --cov=src/mcp_egrul

現在のカバレッジ: 100.00% (345 tests passed, ruff clean, 1529 statements + 382 branches, 0 misses)。--cov-fail-under=100 ポリシーにより強制されており、リグレッションが発生するとCIが失敗します。テスト範囲:

  • INN/OGRN/OGRNIPバリデーター(チェックディジット);

  • Config.from_env + float環境変数のパーサー(サイレントフォールバックではなく検証);

  • 7つのMCPツールすべて(ハッピーパス + 検証 + not_found + bulk partial);

  • SQLiteストア + FTS5 + import_log

  • EGRUL/EGRIP XMLパーサー(zip, xml, 不明なステータスのレコードスキップ);

  • OpenDataSource.run_ingest (full/incremental/nothing_to_import);

  • 完全な統合サイクル import fixture → search → get_card → bulk

  • 両方のCLI (atomno-mcp-egrul-import, atomno-mcp-egrul-scheduler) — cronジョブの登録、引数解析、_run_daily_ingest(all-happy/nothing_to_import/McpEgrulError)、mockされた asyncio.Event を使用した _run_scheduler の完全サイクル;

  • mcp.call_tool() を介したFastMCPツールレイヤー — エラーの構造化辞書へのシリアライズ、有効/無効なenvでの server.main()

  • HostedClient (ホスト型Pro APIプロキシ) — 7つのメソッドすべてのハッピーパス、SPEC §5.4.1のすべてのHTTPエラー(401/403/404/413/429/5xx)、タイムアウト/ConnectError、サーバーからの無効なJSON/ペイロード、クライアント側のbulk検証、async with コンテキスト;さらにホストモードでのツールからのルーティング(ATOMNO_API_KEY 設定時 — SQLiteではなく api.atomno.ru へリクエスト、HTTP前のINN検証);

  • XMLパーサーのエッジケース(_parse_company/_parse_ie/_parse_share/_parse_director/_parse_founders/addressフォールバック/レガシー属性/無効なINN/OGRN/KPP長に関する75の個別ユニットテスト);

  • SQLiteストアのプライベートヘルパー(_wrap, _prepare_row, _row_to_dict, _normalize_bm25, _ensure による自動初期化、無効な finish_import ステータスの拒否);

  • ServiceContext の再入可能性、atexit クリーンアップ、Config.from_env の ValidationError → atomno-mcp-egrul-import CLIからの終了コード2。

外部APIはテストから直接呼び出されることはありませんrespx(HTTPモッキング)とローカルのXMLフィクスチャ(tests/fixtures/)のみを使用します。


セキュリティと法的ステータス

  • すべてのソースは FTSの公開オープンデータ(EGRUL / EGRIP open-datasets)であり、その配布は「情報に関する法律」およびEGRUL固有の規定により許可されています(SPEC §8参照)。

  • 法人は152-FZ(個人情報保護法)の対象外です。

  • 代表者や創業者の氏名はFTS自身が公開レジストリで公開しているため、これらのデータの転送は合法です。

  • 外部APIへの書き込み操作は一切ありません。

  • シークレットは環境変数経由のみで管理し、リポジトリには値を含まない .env.example のみを配置しています。


免責事項

本サービスは FTSの公開データに対するアグリゲーターおよび便利なインターフェース です。FTSとは提携していません。自己責任でご利用ください。本サービスの回答に含まれる情報は、完全な法的または財務的評価に代わるものではありません。


ライセンス

MIT。ルートフォルダの LICENSE ファイルを参照してください。

Install Server
A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
Response time
1wRelease cycle
9Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    B
    maintenance
    MCP server for verifying Russian counterparties (legal entities and individual entrepreneurs) via public Federal Tax Service data: EGRUL/EGRIP, bankruptcy registry (EFRSB), Transparent Business, bailiff service (FSSP), and arbitration courts (KAD).
    8
    15
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server for searching and analyzing 1C enterprise metadata and BSL code using a SQLite backend. Enables querying configuration structure, code routines, and performing compliance checks via natural language.
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for Russian court practice (Sudact): full-text case search by law article, court, instance and dates, with access to full decision texts.
    2
    2
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for checking Russian FSSP (Federal Bailiff Service) debts, enabling AI agents to look up enforcement proceedings for individuals and legal entities through MCP clients like Cursor and Claude Desktop.
    4
    MIT

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

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/atomno-mcp/mcp-egrul'

If you have feedback or need assistance with the MCP directory API, please join our Discord server