← SCRAM AI Lab
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

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.
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.
| 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 |
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.`;
}
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.
{
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'],
},
}
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.
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.
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).
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.
Al desplegar wrappers de INEGI en ambientes de alta concurrencia, deben considerarse restricciones técnicas del servidor gubernamental:
Artículos relacionados
OpenAI DevDay 2026: GPT-6.1 Sol a un quinto del precio de Astra y agentes que no se apagan
En DevDay (29 sep) OpenAI lanzó GPT-6.1 Sol a $2/$10, dots para ChatGPT Pro y Business Premium, Ultrafast para Astra y uso de computadora en la Agents API.
Cómo evaluamos un modelo nuevo antes de ponerlo frente a un cliente: el juez, 120 turnos y el enrutador
Septiembre trajo Fable 5.1 y GPT-6 Astra. Nuestro método para decidir si un modelo entra al asistente de SCRAM: un juez automático que califica cada turno, una muestra de 120 conversaciones reales etiquetadas por una persona, tres métricas y un enrutador por niveles. Con la historia del juez que borraba su propio rastro.
GPT-6 Astra: lo que OpenAI confirmó, lo que circula sin fuente y qué hacer mientras tanto
OpenAI presentó GPT-6 Astra el 4 de septiembre de 2026 como su modelo "más inteligente y alineado", con rollout escalonado y sin precio publicado. Separamos lo confirmado de los rumores (1M de contexto, benchmarks saturados) y explicamos cómo evaluarlo sin romper tu producto.