← SCRAM AI Lab

Herramientas IA

INEGI BIE/DENUE para context grounding

Aprende a conectar las APIs de INEGI BIE y DENUE como herramientas MCP para eliminar alucinaciones numéricas en modelos de lenguaje sobre empresas en México.

May 21, 2026

537 lecturas

INEGI BIE/DENUE para context grounding

El LLM no sabe cuántas empresas hay en Querétaro. INEGI sí.

Claude Opus 4.7 te puede recitar la teoría de juegos de Nash pero no sabe cuántas empresas de manufactura hay en el Parque Industrial Bernardo Quintana. Esa pregunta — que un consultor de PyME mexicana hace todos los días — solo la responde INEGI: 16 millones de series económicas en BIE y 5 millones de empresas geolocalizadas en DENUE. Exponerlos como MCP es lo que convierte un chatbot genérico en un asesor competitivo para el mercado mexicano.

¿Por qué conectar INEGI a un LLM en vez de usar búsqueda web o RAG tradicional?

Conectar las APIs oficiales de INEGI mediante Model Context Protocol (MCP) resuelve el problema de la alucinación numérica y territorial que la búsqueda web no mitiga. Mientras un scraper recupera directorios desactualizados o notas de prensa con cifras infladas, DENUE y BIE entregan microdatos estructurados y validados por el Estado mexicano, listos para alimentar modelos sin degradar precisión analítica.

El RAG tradicional sobre documentos no estructurados (PDFs de reportes sectoriales o diagnósticos estatales) suele extraer rangos aproximados o metodologías desfasadas. Al consultar directamente los endpoints oficiales, el sistema trabaja con la última actualización censal o con el corte trimestral del indicador, garantizando consistencia legal y financiera frente a inversionistas o comités de crédito.

BIE vs DENUE: dos APIs, dos casos de uso

  • BIE (Banco de Información Económica): series temporales — IPC, IGAE, ENOE, exportaciones por estado. Útil para queries de "cómo va el sector X" o "cuánto creció Y"
  • DENUE (Directorio Estadístico Nacional): empresas geolocalizadas con SCIAN, tamaño, teléfono. Útil para queries de "cuántas/dónde están" y prospecting territorial

Comparativa técnica de fuentes de datos económicos en México

Criterio DENUE API BIE API Google Places API Web Search / RAG
Tipo de dato Unidades económicas georreferenciadas Series de tiempo macro/microeconómicas Puntos de interés comercial Texto no estructurado
Cobertura México Nacional exhaustiva (formal e informal) Nacional, estatal y municipal Sesgo urbano hacia consumo B2C Variable y desarticulada
Estandarización SCIAN oficial de 2 a 6 dígitos Clasificación estadística INEGI Categorías propietarias de Google Nula
Costo de consulta Gratuito (token INEGI) Gratuito (token INEGI) Por bloques de llamadas (pago por uso) Costo de inferencia y búsqueda
Latencia típica 800 ms – 1500 ms 600 ms – 1200 ms 150 ms – 300 ms 1200 ms – 3500 ms
Frecuencia de corte Semestral / Trimestral Mensual / Trimestral Dinámica continua No determinista

El patrón de grounding

No mandamos toda la query del usuario al LLM y esperamos que pida los datos. Hacemos detection primero: un regex y un clasificador ligero (gpt-4o-mini, tier 1) deciden si la pregunta tiene intent geográfico (estado, municipio, región) y/o sectorial (SCIAN, industria). Si sí, llamamos al MCP de INEGI y inyectamos el resultado en el system prompt antes de la respuesta final.

// detection layer (corre antes del LLM principal)
const intent = await classifyIntent(userMessage, {
  geographic: ['estado', 'municipio', 'región', 'cdmx', 'querétaro'],
  sectorial: ['manufactura', 'comercio', 'servicios', 'scian'],
});

if (intent.geographic && intent.sectorial) {
  const denueData = await mcp.call('denue_search', {
    entidad: intent.estado,
    municipio: intent.municipio,
    scian: intent.scian,
    estratos: ['51_100', '101_250', '251_mas'], // medianas y grandes
  });

  systemPrompt += `\n\nDATOS INEGI/DENUE (ground truth):\n${
    JSON.stringify(denueData.summary, null, 2)
  }\nUsa estos datos en tu respuesta. No inventes números.`;
}

Ejemplo real: Querétaro manufactura

Query del usuario: "¿cuántas empresas medianas/grandes de manufactura hay en Querétaro?". Sin grounding, Claude alucina un número plausible ("aproximadamente 3,500"). Con grounding vía DENUE MCP, retorna 4,287 empresas filtradas por estratos 51-100 / 101-250 / 251+ empleados, código SCIAN 31-33 (industrias manufactureras), entidad 22 (Querétaro). El LLM ahora puede desglosar por municipio y por subsector.

MCP tool definition para DENUE

{
  name: 'denue_search',
  description: 'Busca empresas en DENUE por entidad, municipio, SCIAN y estrato',
  inputSchema: {
    type: 'object',
    properties: {
      entidad: { type: 'string', description: 'Código INEGI de estado (01-32)' },
      municipio: { type: 'string', description: 'Código de municipio (opcional)' },
      scian: { type: 'string', description: 'Código SCIAN 2-6 dígitos' },
      estratos: {
        type: 'array',
        items: { enum: ['0_5', '6_10', '11_30', '31_50', '51_100', '101_250', '251_mas'] },
      },
      limit: { type: 'number', default: 100, maximum: 5000 },
    },
    required: ['entidad'],
  },
}

Optimizando la ventana de contexto: preagregación y muestreo

Un error común al implementar herramientas MCP territoriales es descargar la lista completa de registros individuales e intentar inyectarla cruda en el contexto. El límite de respuesta del API de DENUE admite hasta 5,000 registros por llamada; serializar ese volumen en formato GeoJSON o JSON tradicional consume más de 120,000 tokens de contexto, encareciendo la inferencia y provocando que el LLM sufra pérdida de atención sobre el prompt de instrucciones.

La solución aplicada en el servidor MCP consiste en procesar dos representaciones: un objeto de sumario agregado para el prompt principal y una interfaz paginada para inspección detallada. El sumario calcula totales absolutos agrupados por código SCIAN a 4 dígitos y por municipio, acompañado de un muestreo representativo de 5 entidades principales que incluyan razón social, coordenadas de latitud/longitud y estrato de personal ocupado.

Caching agresivo

DENUE no cambia minuto a minuto; tiene release trimestral. Cacheamos respuestas en Postgres con TTL 30 días usando la query normalizada como key. Una búsqueda como "manufactura en Querétaro" se sirve en 12ms tras el primer hit; sin cache, INEGI tarda 800-1500ms. BIE es similar — series mensuales/trimestrales, TTL 7 días razonable.

Implicaciones operativas para análisis de Nearshoring en LATAM

En el contexto de la relocalización de cadenas productivas en el norte y bajío de México, los tomadores de decisiones corporativas demandan métricas precisas sobre proveedores de segundo nivel (Tier 2) y tercer nivel (Tier 3). Un modelo genérico falla al identificar clusters metalmecánicos o de inyección de plásticos en municipios no metropolitanos como Ciénega de Flores en Nuevo León o El Marqués en Querétaro.

Integrar el catálogo de microdatos de INEGI permite que agentes autónomos de análisis comercial ejecuten auditorías de factibilidad logística: determinan la masa crítica de talleres de maquinado registrados en un radio de 25 kilómetros alrededor de una parcela industrial, cruzando la información con indicadores de desocupación laboral del BIE provenientes de la Encuesta Nacional de Ocupación y Empleo (ENOE).

Lo que falla en INEGI MCP

El endpoint BISE de INEGI tira HTML cuando el formato debería ser JSON si pasas un indicador desconocido. Nuestra fix (commit a7e381b del inegi-mcp) detecta el content-type antes de parsear y retorna error estructurado. Si construyes tu propio MCP wrapper: siempre valida content-type de respuestas INEGI antes de JSON.parse.

El siguiente reto: cuando el usuario pregunta sobre tendencias (no solo conteos), el grounding con BIE necesita series de 5+ años y eso explota tokens. Spoiler: pre-agregamos a quarterly y dejamos que el LLM pida zoom.

Puntos de quiebre y límites de tasa en producción

Al desplegar wrappers de INEGI en ambientes de alta concurrencia, deben considerarse restricciones técnicas del servidor gubernamental:

  • Límites de concurrencia no documentados: Aunque el registro para desarrolladores de INEGI otorga un token API universal gratuito, solicitudes simultáneas superiores a 15 llamadas concurrentes desde una misma IP provocan bloqueos temporales por HTTP 429 o conexiones reseteadas mediante TCP RST. Se recomienda implementar un semáforo de colas (RateLimiter) en Node.js o Python que limite el tráfico a un máximo de 8 solicitudes por segundo hacia los servidores del instituto.
  • Discrepancias entre versiones del SCIAN: INEGI actualiza el Sistema de Clasificación Industrial de América del Norte cada cinco años (2013, 2018 y 2023). Determinadas ramas de servicios digitales y comercio electrónico migraron de clave entre 2018 y 2023; si el modelo de detección lingüística utiliza un clasificador entrenado con claves obsoletas, DENUE retornará cero registros. El MCP debe incorporar una tabla de equivalencias de claves en memoria para resolver la retrocompatibilidad antes del despacho HTTP.
mcp
inegi
grounding
← Volver a SCRAM AI Lab