mcp-fns-check
Servidor MCP para verificar contrapartes rusas (personas jurídicas y empresarios individuales) a través de datos públicos del Servicio Federal de Impuestos (FNS): EGRUL/EGRIP, EFRSB, "Negocio Transparente", FSSP, KAD.
Documentación
atomno-mcp-fns-check
Servidor MCP para verificación de contrapartes rusas: EGRUL, quiebra, 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: EGRUL no está bien indexado por los buscadores, los datos en Transparent Business de la FNS están detrás de solicitudes POST y CAPTCHA, EFRSB 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: operativo, en liquidación, quiebra, liquidado, reorganización.
- Si es seguro trabajar con él: dirección masiva, director masivo, inhabilitación, quiebra, 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 shell: 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á a check_contractor por sí mismo.
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 EGRUL | 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 | EGRUL + EFRSB |
get_okveds | Códigos OKVED con descripción | inn o ogrn | EGRUL + diccionario OKVED-2 |
get_directors_history | Director actual (+ historial según Open Data) | inn: str | EGRUL |
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 — EGRUL/EGRIP, tarjeta de la contraparte.
- bankrot.fedresurs.ru — EFRSB (Registro Federal Unificado de Información sobre Quiebras).
- Datos abiertos de la FNS, 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 de la FSSP.
- kad.arbitr.ru — Archivo de casos de arbitraje.
- Cortes locales de registros de la FNS — direcciones masivas, directores masivos, personas inhabilitadas (se cargan con el script
atomno-mcp-fns-etldesde Open Data de la FNS).
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
- EGRUL es la única fuente bloqueante. Si no está disponible,
check_contractorlanzaSourceUnavailableError(el agente recibirá un mensaje legible para humanos). - Las demás fuentes se integran best-effort: CAPTCHA en FSSP, antibot en KAD, 5xx en pb.nalog.ru — todo se acumula en
risks.errors[]y NO derriba 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 masivos/inhabilitaciones) | <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 de la FNS
Los registros de direcciones/directores masivos son descargas CSV de datos abiertos de la FNS. 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 frescura de 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 a través de respx (mock de httpx) + fixtures locales en tests/fixtures/.
Limitaciones
- Sin historial de directores — la FNS no entrega el historial de cambios a través de la search-API; el historial completo aparecerá tras cargar el slice Open Data de EGRUL (planificado en v0.5+).
- EFRSB (quiebra 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 quiebra". No hay solución lista — se necesita acceso oficial de Fedresurs o verificación manual en bankrot.fedresurs.ru. - FSSP 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 la razóncaptcha_required. - KAD 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í mismo no significa "limpio". - Deudas fiscales se toman de datos abiertos de la FNS (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 de la inspección fiscal.
- Registros locales de la FNS (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 EGRUL, 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 de la FNS 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 la FNS en EGRUL; 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 de la FNS. No está afiliado con la FNS de Rusia, EFRSB, KAD, FSSP. 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