{
  "markdown": "<!-- mcp-name: io.github.atomno-mcp/mcp-fns-check -->\n\n# atomno-mcp-fns-check\n\nMCP-сервер проверки российских контрагентов: ЕГРЮЛ, банкротство, налоговые долги, приставы и арбитражные дела. Для разведки компаний — подключается к Cursor, Claude и любому клиенту MCP.\n\nRussian counterparty check for AI agents.\n\n![build](https://img.shields.io/badge/build-local-informational)\n![version](https://img.shields.io/badge/version-0.1.0-blue)\n![license](https://img.shields.io/badge/license-MIT-green)\n![mcp](https://img.shields.io/badge/MCP-compatible-brightgreen)\n![tests](https://img.shields.io/badge/tests-265%20passed-brightgreen)\n![coverage](https://img.shields.io/badge/coverage-86%25-brightgreen)\n[![Glama](https://img.shields.io/badge/Glama-listed-7c3aed.svg)](https://glama.ai/mcp/servers/atomno-mcp/mcp-fns-check)\n\n<a href=\"https://glama.ai/mcp/servers/atomno-mcp/mcp-fns-check\">\n  <img width=\"380\" height=\"200\" src=\"https://glama.ai/mcp/servers/atomno-mcp/mcp-fns-check/badge\" alt=\"mcp-fns-check MCP server\" />\n</a>\n\nГотов к подключению в Claude Desktop, Cursor, Claude Code, Cline и любой другой клиент, совместимый с Model Context Protocol (MCP).\n\n---\n\n## Зачем\n\nAI-агент (Claude, Cursor, etc.) обычно ничего не знает о российских контрагентах: ЕГРЮЛ не индексируется поисковиками нормально, данные в Прозрачном бизнесе ФНС — за POST-запросами и CAPTCHA, ЕФРСБ отдаёт HTML. Этот MCP-сервер даёт агенту **семь тулзов**, через которые он за один вызов получит полную картину:\n\n- Кто это: наименование, адрес, ОКВЭД, руководитель.\n- Жив ли: действующее, в ликвидации, банкротство, ликвидировано, реорганизация.\n- Безопасно ли с ним работать: массовый адрес, массовый руководитель, дисквалификация, банкротство, налоговые долги, исполнительные производства, арбитражные дела.\n\nГлавный тул — `check_contractor(identifier)` — принимает ИНН или ОГРН и возвращает **агрегированный отчёт с вердиктом** (`safe_to_proceed` / `manual_review_required` / `high_risk_do_not_proceed` / `impossible_contractor_defunct`) и список конкретных рекомендаций.\n\n---\n\n## Быстрый старт\n\n### Установка\n\n```bash\npip install atomno-mcp-fns-check\n```\n\nИли через `uv` / `pipx`:\n\n```bash\nuv pip install atomno-mcp-fns-check\n# или\npipx install atomno-mcp-fns-check\n```\n\n### Проверка работы\n\n```bash\natomno-mcp-fns-check --version\n# → atomno-mcp-fns-check 0.1.1\n\natomno-mcp-fns-check --help\n# → полный список флагов: --transport / --host / --port / --log-level\n```\n\nПо умолчанию пакет запускается как stdio-MCP-сервер: агент общается с ним через stdin/stdout JSON-RPC. Напрямую из шелла вы его не «потыкаете» — подключите к MCP-клиенту. Для сетевых сценариев доступен флаг `--transport {http,sse,streamable-http}` с `--host`/`--port`.\n\n---\n\n## Подключение к MCP-клиентам\n\n### Cursor\n\nОтредактируйте `mcp.json` (Cursor → Settings → Cursor Settings → MCP):\n\n```json\n{\n  \"mcpServers\": {\n    \"fns-check\": {\n      \"command\": \"atomno-mcp-fns-check\"\n    }\n  }\n}\n```\n\nПерезапустите Cursor. В чате спросите: «Проверь контрагента ИНН 7707083893» — агент сам вызовет `check_contractor`.\n\n### Claude Desktop\n\nОтредактируйте `claude_desktop_config.json` (macOS: `~/Library/Application Support/Claude/`, Windows: `%APPDATA%\\Claude\\`):\n\n```json\n{\n  \"mcpServers\": {\n    \"fns-check\": {\n      \"command\": \"atomno-mcp-fns-check\"\n    }\n  }\n}\n```\n\nПерезапустите Claude Desktop.\n\n### Claude Code (CLI)\n\n```bash\nclaude mcp add fns-check atomno-mcp-fns-check\n```\n\n### Cline (VS Code)\n\nВ `cline_mcp_settings.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"fns-check\": {\n      \"command\": \"atomno-mcp-fns-check\",\n      \"disabled\": false,\n      \"autoApprove\": []\n    }\n  }\n}\n```\n\n---\n\n## Тулзы\n\n| Тул | Назначение | Вход | Источники |\n|---|---|---|---|\n| **`check_contractor`** | **Главный.** Полная проверка по одному идентификатору + детерминированный вердикт и рекомендации | `identifier: str` (ИНН 10/12 или ОГРН 13/15) | все 5 |\n| `check_inn` | Базовая карточка ЕГРЮЛ | `inn: str` | egrul.nalog.ru |\n| `check_ogrn` | Базовая карточка по ОГРН/ОГРНИП | `ogrn: str` | egrul.nalog.ru |\n| `get_legal_status` | Жизненный статус с обогащением | `inn` или `ogrn` | ЕГРЮЛ + ЕФРСБ |\n| `get_okveds` | Коды ОКВЭД с расшифровкой | `inn` или `ogrn` | ЕГРЮЛ + словарь ОКВЭД-2 |\n| `get_directors_history` | Текущий руководитель (+ история по мере Open Data) | `inn: str` | ЕГРЮЛ |\n| `check_for_red_flags` | 7 проверок риска (4 базовые + 3 расширенные) | `inn: str` | все источники |\n\nИспользуемые публичные источники:\n\n- **egrul.nalog.ru** — ЕГРЮЛ/ЕГРИП, карточка контрагента.\n- **bankrot.fedresurs.ru** — ЕФРСБ (Единый федеральный реестр сведений о банкротстве).\n- **Открытые данные ФНС, набор «debtam»** — налоговая задолженность (локальная выгрузка).\n- **service.nalog.ru** — живой реестр дисквалифицированных лиц.\n- **fssp.gov.ru** — Банк данных исполнительных производств ФССП.\n- **kad.arbitr.ru** — Картотека арбитражных дел.\n- Локальные срезы реестров ФНС — массовые адреса, массовые руководители, дисквалифицированные лица (загружаются скриптом `atomno-mcp-fns-etl` из Open Data ФНС).\n\nПроверки непредставления налоговой отчётности в наборе **нет**: публичного\nисточника этих сведений не существует, а отвечать «отчётность сдаётся» без\nданных сервис не будет.\n\n### Пример ответа `check_contractor`\n\n```json\n{\n  \"identifier\": \"7707083893\",\n  \"identifier_type\": \"inn\",\n  \"inn\": \"7707083893\",\n  \"ogrn\": \"1027700132195\",\n  \"card\": {\n    \"name\": {\"full\": \"ПАО СБЕРБАНК\", \"short\": \"СБЕРБАНК\"},\n    \"status\": \"active\",\n    \"address\": {\"full\": \"117997, Г.Москва, УЛ. ВАВИЛОВА, Д. 19\", \"is_mass_address\": false},\n    \"director\": {\"full_name\": \"Греф Г. О.\", \"position\": \"Президент\"},\n    \"okved_main\": {\"code\": \"64.19\", \"name\": \"Денежное посредничество прочее\"}\n  },\n  \"legal_status\": {\"status\": \"active\", \"status_label_ru\": \"Действующее\", \"sources_checked\": [\"egrul\", \"efrsb\"]},\n  \"risks\": {\"overall_risk_level\": \"low\", \"overall_risk_score\": 0, \"flags\": [], \"errors\": []},\n  \"verdict_action\": \"safe_to_proceed\",\n  \"verdict_reason_ru\": \"Статус «Действующее», уровень риска — low (score 0/100). Препятствий к заключению сделки по открытым источникам не найдено.\",\n  \"recommendations\": [\n    \"По открытым источникам препятствий к заключению сделки не обнаружено. Соблюдайте стандартные меры должной осмотрительности (ст. 54.1 НК РФ): копия устава, приказ на руководителя, договор.\"\n  ],\n  \"sources\": {\"sources_queried\": [\"efrsb\", \"egrul\", \"fssp\", \"kad\", \"pb_fns\", \"registries\"]},\n  \"tier\": \"open\",\n  \"checked_at\": \"2026-04-24T20:15:00Z\"\n}\n```\n\n### Поведение при сбоях источников\n\n- ЕГРЮЛ — единственный **blocking**-источник. Если он недоступен, `check_contractor` поднимает `SourceUnavailableError` (агент получит человекочитаемое сообщение).\n- Остальные источники подмешиваются **best-effort**: CAPTCHA на ФССП, antibot на КАД, 5xx на pb.nalog.ru — всё складывается в `risks.errors[]` и НЕ валит отчёт. Верхнеуровневый вердикт становится `manual_review_required`.\n\n---\n\n## Конфигурация\n\nВсе настройки — через переменные окружения. Никаких креденшелов не требуется (источники публичные).\n\n| Переменная | Описание | По умолчанию |\n|---|---|---|\n| `MCP_FNS_CACHE_DB` | Путь к SQLite-файлу кэша карточек | каталог данных пользователя (`%LOCALAPPDATA%/atomno/` или `~/.local/share/atomno/`), не папка проекта |\n| `MCP_FNS_REGISTRIES_DB` | Путь к SQLite-файлу реестров (массовые адреса/руководители/дисквалификации) | `<cache>.registries.sqlite` |\n| `MCP_FNS_CACHE_TTL_HOURS` | TTL кэшированных карточек, часов | `168` (7 суток) |\n| `MCP_FNS_HTTP_TIMEOUT` | Таймаут HTTP, секунд | `15` |\n| `MCP_FNS_USER_AGENT` | User-Agent HTTP-клиента | `atomno-mcp-fns-check/0.1 (+https://github.com/atomno-mcp/mcp-fns-check)` |\n| `MCP_FNS_LOG_LEVEL` | Уровень логирования (DEBUG/INFO/WARNING/ERROR) | `INFO` |\n\nШаблон — `.env.example`.\n\n---\n\n## Локальные реестры ФНС\n\nРеестры массовых адресов / руководителей — это CSV-выгрузки открытых данных ФНС. Без загруженной выгрузки эти проверки отвечают «не выполнена» и не влияют на вердикт так, будто источник ответил. В поставке есть учебный файл `registries_seed.json` **только для тестов**; сервер его в рабочую базу не подгружает.\n\nДля рабочих проверок загрузите срезы через CLI `atomno-mcp-fns-etl`:\n\n```bash\natomno-mcp-fns-etl --registry mass_addresses --source ./fns_open_data/ulm.csv --commit\natomno-mcp-fns-etl --registry mass_directors --source ./fns_open_data/uchredt.csv --commit\natomno-mcp-fns-etl --registry disqualified --source ./fns_open_data/disqualified.csv --commit\n```\n\nИсточники Open Data:\n\n- `mass_addresses` → [nalog.gov.ru/opendata/7707329152-masaddress/](https://www.nalog.gov.ru/opendata/7707329152-masaddress/)\n- `mass_directors` → [nalog.gov.ru/opendata/7707329152-massleaders/](https://www.nalog.gov.ru/opendata/7707329152-massleaders/)\n- `disqualified` → [service.nalog.ru/disqualified.do](https://service.nalog.ru/disqualified.do)\n\nПо умолчанию CLI работает в `--dry-run` (парсит и печатает sample); для записи нужен явный `--commit`. Meta-поля `<registry>.last_etl`, `<registry>.last_etl_source`, `<registry>.last_etl_count` сохраняются автоматически — используйте их для cron-мониторинга свежести данных.\n\n---\n\n## Разработка\n\n```bash\ngit clone https://github.com/atomno-mcp/mcp-fns-check\ncd mcp-fns-check\npython -m venv .venv\nsource .venv/bin/activate    # Linux/macOS\n# .venv/Scripts/activate     # Windows\npip install -e \".[dev]\"\npytest -v --cov=src/atomno_mcp_fns_check\n```\n\nВнешние API в тестах **никогда не вызываются напрямую** — только через `respx` (мокинг httpx) + локальные фикстуры в `tests/fixtures/`.\n\n---\n\n## Ограничения\n\n- **Нет history для руководителей** — ФНС не отдаёт историю смены через search-API; полная история появится после загрузки Open Data slice ЕГРЮЛ (планируется в v0.5+).\n- **ЕФРСБ (банкротство юрлица)** для программного запроса закрыт защитой Qrator (`403` / проверка «человек или робот»). Автоматически эта проверка часто не выполняется; в отчёте это ошибка источника, а не «банкротства нет». Готового обхода нет — нужен официальный доступ Федресурса либо ручная проверка на bankrot.fedresurs.ru.\n- **ФССП** на публичном поиске отвечает окном с кодом с картинки. Код не разгадываем: проверка честно попадает в `errors[]` с причиной `captcha_required`.\n- **КАД** на программный поиск отвечает `451` (защита DDoS-Guard). Это не ошибка сертификата: сайт подписан Let's Encrypt. Официальный доступ — у оператора картотеки. В отчёте это «не проверено», не «судов нет».\n- Если часть проверок не ответила, итоговый уровень риска — **«не определён»** (`unknown`), а не «низкий». Пустой `flags[]` сам по себе не означает «чисто».\n- **Налоговые долги** берутся из открытых данных ФНС (набор «debtam»): суммы недоимки, пеней и штрафов есть, но данные публикуются срезом за отчётную дату, а не в реальном времени. Актуальную сумму подтверждайте справкой ИФНС.\n- **Локальные реестры ФНС** (массовые адреса, массовые руководители, дисквалифицированные) требуют регулярной загрузки. Если выгрузка пустая или устарела, проверка честно отвечает «не проверено» и попадает в `errors[]` — «совпадений нет» по устаревшим данным не выдаётся.\n- **Непредставление налоговой отчётности не проверяется** — публичного источника нет.\n\nPro-tier (hosted backend в `atomno-mcp-fns-check-server` — закрытый бэк) убирает эти ограничения через: кэш Redis 24h, ротация прокси для обхода CAPTCHA, полный срез Open Data ЕГРЮЛ, batch-проверки до 100 ИНН, AI-summary через LLM. Сам backend не опубликован.\n\n---\n\n## Безопасность и юридический статус\n\n- Все источники — **публично открытые данные ФНС** и связанных реестров. Использование легально по 149-ФЗ «Об информации».\n- Юридические лица и ИП **не подпадают** под 152-ФЗ (О персональных данных).\n- ФИО физических лиц-руководителей публикуются ФНС в ЕГРЮЛ открыто; в outbound-ответах ИНН физлица-руководителя маскируется (формат `XXX*****YY`).\n- Никаких write-операций ни в один внешний API.\n- Никаких credential'ов / токенов не требуется — источники полностью публичные.\n\n---\n\n## Дисклеймер\n\nСервис — **агрегатор и удобный интерфейс над публичными данными ФНС**. Не аффилирован с ФНС России, ЕФРСБ, КАД, ФССП. Используется на ваш риск.\n\nИнформация в ответах сервиса **не заменяет** полноценной юридической или финансовой оценки. Решение о заключении договора с контрагентом принимаете вы.\n\n---\n\n## Лицензия\n\nMIT — см. `LICENSE`.\n\n---\n\n## Ссылки\n\n- GitHub: [atomno-mcp/mcp-fns-check](https://github.com/atomno-mcp/mcp-fns-check)\n- Больше MCP-серверов под брендом atomno: [каталог atomno-mcp.ru](https://atomno-mcp.ru/)\n- MCP-спецификация: [modelcontextprotocol.io](https://modelcontextprotocol.io)\n",
  "bytes": 12529,
  "sha": "146de8a86ea3016c33cd707345f012ca3c2dd54401310af41e1247f4dc17af66",
  "repo_slug": "atomno-mcp/mcp-fns-check",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_atomno_mcp_mcp_fns_check_7446821f/readme"
}