mcp-fns-check
MCP-сервер для проверки российских контрагентов (юридические лица и ИП) через публичные данные ФНС: ЕГРЮЛ/ЕГРИП, ЕФРСБ, «Прозрачный бизнес», ФССП, КАД.
Documentación
atomno-mcp-fns-check
Servidor MCP para verificación de contrapartes rusas: ЕГРЮЛ, bancarrota, deudas fiscales, alguaciles y casos de arbitraje. Para inteligencia de empresas: se conecta a Cursor, Claude y cualquier cliente MCP.
Verificación de contrapartes rusas para agentes de IA.
Listo para conectarse a Claude Desktop, Cursor, Claude Code, Cline y cualquier otro cliente compatible con Model Context Protocol (MCP).
Para qué sirve
Un agente de IA (Claude, Cursor, etc.) normalmente no sabe nada sobre contrapartes rusas: ЕГРЮЛ no se indexa bien en los buscadores, los datos en Transparencia Empresarial del Servicio Fiscal Federal (ФНС) están detrás de solicitudes POST y CAPTCHA, ЕФРСБ devuelve HTML. Este servidor MCP le da al agente siete herramientas con las que, en una sola llamada, obtendrá el panorama completo:
- Quién es: nombre, dirección, OKVED, director.
- Si está activo: operando, en liquidación, bancarrota, liquidado, reorganización.
- Si es seguro trabajar con él: dirección masiva, director masivo, inhabilitación, bancarrota, deudas fiscales, procedimientos de ejecución, casos de arbitraje.
La herramienta principal — check_contractor(identifier) — acepta INN u OGRN y devuelve un informe agregado con veredicto (safe_to_proceed / manual_review_required / high_risk_do_not_proceed / impossible_contractor_defunct) y una lista de recomendaciones concretas.
Inicio rápido
Instalación
pip install atomno-mcp-fns-check
O mediante uv / pipx:
uv pip install atomno-mcp-fns-check
# или
pipx install atomno-mcp-fns-check
Verificación de funcionamiento
atomno-mcp-fns-check --version
# → atomno-mcp-fns-check 0.1.1
atomno-mcp-fns-check --help
# → полный список флагов: --transport / --host / --port / --log-level
Por defecto, el paquete se ejecuta como servidor MCP stdio: el agente se comunica con él a través de stdin/stdout JSON-RPC. No podrá "probarlo" directamente desde la terminal: conéctelo a un cliente MCP. Para escenarios de red, está disponible la bandera --transport {http,sse,streamable-http} con --host/--port.
Conexión a clientes MCP
Cursor
Edite mcp.json (Cursor → Settings → Cursor Settings → MCP):
{
"mcpServers": {
"fns-check": {
"command": "atomno-mcp-fns-check"
}
}
}
Reinicie Cursor. En el chat pregunte: "Verifica la contraparte INN 7707083893" — el agente llamará automáticamente a check_contractor.
Claude Desktop
Edite claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):
{
"mcpServers": {
"fns-check": {
"command": "atomno-mcp-fns-check"
}
}
}
Reinicie Claude Desktop.
Claude Code (CLI)
claude mcp add fns-check atomno-mcp-fns-check
Cline (VS Code)
En cline_mcp_settings.json:
{
"mcpServers": {
"fns-check": {
"command": "atomno-mcp-fns-check",
"disabled": false,
"autoApprove": []
}
}
}
Herramientas
| Herramienta | Propósito | Entrada | Fuentes |
|---|---|---|---|
check_contractor | Principal. Verificación completa por un solo identificador + veredicto determinista y recomendaciones | identifier: str (INN 10/12 u OGRN 13/15) | las 5 |
check_inn | Tarjeta básica de ЕГРЮЛ | inn: str | egrul.nalog.ru |
check_ogrn | Tarjeta básica por OGRN/OGRNIP | ogrn: str | egrul.nalog.ru |
get_legal_status | Estado vital con enriquecimiento | inn o ogrn | ЕГРЮЛ + ЕФРСБ |
get_okveds | Códigos OKVED con descripción | inn o ogrn | ЕГРЮЛ + diccionario OKVED-2 |
get_directors_history | Director actual (+ historial según Open Data) | inn: str | ЕГРЮЛ |
check_for_red_flags | 7 verificaciones de riesgo (4 básicas + 3 ampliadas) | inn: str | todas las fuentes |
Fuentes públicas utilizadas:
- egrul.nalog.ru — ЕГРЮЛ/ЕГРИП, tarjeta de la contraparte.
- bankrot.fedresurs.ru — ЕФРСБ (Registro Federal Unificado de Información sobre Bancarrota).
- Datos abiertos del ФНС, conjunto "debtam" — deuda fiscal (descarga local).
- service.nalog.ru — registro en vivo de personas inhabilitadas.
- fssp.gov.ru — Banco de datos de procedimientos de ejecución del ФССП.
- kad.arbitr.ru — Archivo de casos de arbitraje.
- Cortes locales de registros del ФНС — direcciones masivas, directores masivos, personas inhabilitadas (se cargan con el script
atomno-mcp-fns-etldesde Open Data del ФНС).
Las verificaciones de no presentación de declaraciones fiscales no están en el conjunto: no existe una fuente pública de esta información, y el servicio no responderá "las declaraciones se presentan" sin datos.
Ejemplo de respuesta de check_contractor
{
"identifier": "7707083893",
"identifier_type": "inn",
"inn": "7707083893",
"ogrn": "1027700132195",
"card": {
"name": {"full": "ПАО СБЕРБАНК", "short": "СБЕРБАНК"},
"status": "active",
"address": {"full": "117997, Г.Москва, УЛ. ВАВИЛОВА, Д. 19", "is_mass_address": false},
"director": {"full_name": "Греф Г. О.", "position": "Президент"},
"okved_main": {"code": "64.19", "name": "Денежное посредничество прочее"}
},
"legal_status": {"status": "active", "status_label_ru": "Действующее", "sources_checked": ["egrul", "efrsb"]},
"risks": {"overall_risk_level": "low", "overall_risk_score": 0, "flags": [], "errors": []},
"verdict_action": "safe_to_proceed",
"verdict_reason_ru": "Статус «Действующее», уровень риска — low (score 0/100). Препятствий к заключению сделки по открытым источникам не найдено.",
"recommendations": [
"По открытым источникам препятствий к заключению сделки не обнаружено. Соблюдайте стандартные меры должной осмотрительности (ст. 54.1 НК РФ): копия устава, приказ на руководителя, договор."
],
"sources": {"sources_queried": ["efrsb", "egrul", "fssp", "kad", "pb_fns", "registries"]},
"tier": "open",
"checked_at": "2026-04-24T20:15:00Z"
}
Comportamiento ante fallos de fuentes
- ЕГРЮЛ — la única fuente bloqueante. Si no está disponible,
check_contractorlanzaSourceUnavailableError(el agente recibirá un mensaje legible). - Las demás fuentes se integran best-effort: CAPTCHA en ФССП, antibot en КАД, 5xx en pb.nalog.ru — todo se acumula en
risks.errors[]y NO tumba el informe. El veredicto de nivel superior se convierte enmanual_review_required.
Configuración
Todos los ajustes se realizan mediante variables de entorno. No se requieren credenciales (las fuentes son públicas).
| Variable | Descripción | Por defecto |
|---|---|---|
MCP_FNS_CACHE_DB | Ruta al archivo SQLite de caché de tarjetas | directorio de datos del usuario (%LOCALAPPDATA%/atomno/ o ~/.local/share/atomno/), no la carpeta del proyecto |
MCP_FNS_REGISTRIES_DB | Ruta al archivo SQLite de registros (direcciones/directores/inhabilitaciones masivas) | <cache>.registries.sqlite |
MCP_FNS_CACHE_TTL_HOURS | TTL de tarjetas en caché, horas | 168 (7 días) |
MCP_FNS_HTTP_TIMEOUT | Timeout HTTP, segundos | 15 |
MCP_FNS_USER_AGENT | User-Agent del cliente HTTP | atomno-mcp-fns-check/0.1 (+https://github.com/atomno-mcp/mcp-fns-check) |
MCP_FNS_LOG_LEVEL | Nivel de registro (DEBUG/INFO/WARNING/ERROR) | INFO |
Plantilla — .env.example.
Registros locales del ФНС
Los registros de direcciones/directores masivos son descargas CSV de datos abiertos del ФНС. Sin la descarga cargada, estas verificaciones responden "no realizada" y no afectan el veredicto como si la fuente hubiera respondido. En el paquete se incluye un archivo de ejemplo registries_seed.json solo para pruebas; el servidor no lo carga en la base de trabajo.
Para verificaciones de producción, cargue los cortes mediante la CLI atomno-mcp-fns-etl:
atomno-mcp-fns-etl --registry mass_addresses --source ./fns_open_data/ulm.csv --commit
atomno-mcp-fns-etl --registry mass_directors --source ./fns_open_data/uchredt.csv --commit
atomno-mcp-fns-etl --registry disqualified --source ./fns_open_data/disqualified.csv --commit
Fuentes de Open Data:
mass_addresses→ nalog.gov.ru/opendata/7707329152-masaddress/mass_directors→ nalog.gov.ru/opendata/7707329152-massleaders/disqualified→ service.nalog.ru/disqualified.do
Por defecto, la CLI funciona en modo --dry-run (analiza e imprime una muestra); para escribir se necesita --commit explícito. Los meta-campos <registry>.last_etl, <registry>.last_etl_source, <registry>.last_etl_count se guardan automáticamente — úselos para monitoreo cron de la frescura de los datos.
Desarrollo
git clone https://github.com/atomno-mcp/mcp-fns-check
cd mcp-fns-check
python -m venv .venv
source .venv/bin/activate # Linux/macOS
# .venv/Scripts/activate # Windows
pip install -e ".[dev]"
pytest -v --cov=src/atomno_mcp_fns_check
Las API externas en las pruebas nunca se llaman directamente — solo mediante respx (mock de httpx) + fixtures locales en tests/fixtures/.
Limitaciones
- Sin historial de directores — el ФНС no entrega el historial de cambios a través de la search-API; el historial completo aparecerá tras cargar el slice Open Data de ЕГРЮЛ (planificado en v0.5+).
- ЕФРСБ (bancarrota de persona jurídica) está cerrado para solicitudes programáticas por la protección Qrator (
403/ verificación "humano o robot"). Automáticamente, esta verificación a menudo no se ejecuta; en el informe es un error de fuente, no "no hay bancarrota". No hay solución preparada: se necesita acceso oficial de Fedresurs o verificación manual en bankrot.fedresurs.ru. - ФССП en la búsqueda pública responde con una ventana de código de imagen. El código no se resuelve: la verificación cae honestamente en
errors[]con el motivocaptcha_required. - КАД responde a la búsqueda programática con
451(protección DDoS-Guard). No es un error de certificado: el sitio está firmado por Let's Encrypt. El acceso oficial lo tiene el operador del archivo. En el informe es "no verificado", no "no hay juicios". - Si parte de las verificaciones no respondió, el nivel de riesgo final es "no determinado" (
unknown), no "bajo". Unflags[]vacío por sí solo no significa "limpio". - Deudas fiscales se toman de datos abiertos del ФНС (conjunto "debtam"): hay montos de atrasos, multas y sanciones, pero los datos se publican como corte a la fecha de reporte, no en tiempo real. Confirme el monto actual con un certificado del ИФНС.
- Registros locales del ФНС (direcciones masivas, directores masivos, inhabilitados) requieren carga regular. Si la descarga está vacía o desactualizada, la verificación responde honestamente "no verificado" y cae en
errors[]— "sin coincidencias" con datos desactualizados no se emite. - La no presentación de declaraciones fiscales no se verifica — no hay fuente pública.
El nivel Pro (backend alojado en atomno-mcp-fns-check-server — backend cerrado) elimina estas limitaciones mediante: caché Redis 24h, rotación de proxies para evadir CAPTCHA, corte completo de Open Data de ЕГРЮЛ, verificaciones por lotes de hasta 100 INN, resumen con IA mediante LLM. El backend en sí no está publicado.
Seguridad y estatus legal
- Todas las fuentes son datos públicos abiertos del ФНС y registros relacionados. Su uso es legal según la Ley Federal 149-FZ "Sobre la información".
- Las personas jurídicas y los empresarios individuales no están sujetos a la 152-FZ (Sobre datos personales).
- Los nombres completos de directores personas físicas son publicados abiertamente por el ФНС en ЕГРЮЛ; en las respuestas salientes, el INN de la persona física directora se enmascara (formato
XXX*****YY). - Sin operaciones de escritura en ninguna API externa.
- No se requieren credenciales/tokens — las fuentes son completamente públicas.
Aviso legal
El servicio es un agregador e interfaz conveniente sobre datos públicos del ФНС. No está afiliado con el ФНС de Rusia, ЕФРСБ, КАД, ФССП. Se usa bajo su propio riesgo.
La información en las respuestas del servicio no reemplaza una evaluación legal o financiera completa. La decisión de celebrar un contrato con una contraparte es suya.
Licencia
MIT — ver LICENSE.
Enlaces
- GitHub: atomno-mcp/mcp-fns-check
- Más servidores MCP bajo la marca atomno: catálogo atomno-mcp.ru
- Especificación MCP: modelcontextprotocol.io