Recursos máquina-legibles
Todo el sitio existe en markdown y contratos: pega una URL y descubre el API entero.
Esta documentación tiene dos audiencias, y la segunda no navega: carga todo de una vez. Cada página de /docs existe también como markdown limpio, el catálogo completo existe como contrato OpenAPI 3.1 y el servidor MCP se describe solo. Pega cualquiera de estas URLs en el contexto de un agente y el agente tiene el API entero sin scrapear HTML.
Los artefactos
| URL | Qué contiene | Cuándo usarlo |
|---|---|---|
/llms.txt | El índice de todas las páginas, con el título y la descripción de cada una. | Para orientarse: es corto y lista qué más pedir. |
/llms-full.txt | El corpus completo: todas las páginas concatenadas como texto plano. | Para cargar la documentación entera en un contexto grande, de una sola vez. |
/docs/{ruta}.md | Cada página de /docs como markdown limpio: agrégale .md a la URL. El markdown de /docs/empezar/conectar está en /docs/empezar/conectar.md, y el de la portada en /docs.md. | Para leer una página puntual sin el HTML del sitio, o para mandarle a alguien el link del markdown. |
/llms.mdx/{ruta} | Exactamente la misma respuesta que la fila de arriba, en la ruta propia que existía antes del sufijo. | Si ya tienes esta ruta escrita en algún script. Para todo lo demás alcanza el sufijo .md. |
/docs/openapi.json | El contrato OpenAPI 3.1 del catálogo documentado completo, SII y bancos incluidos, con los JSON-Schema de entrada y salida de cada tool. | Para generar clientes, validar formas o alimentar un agente que razona sobre contratos. |
/api/v1/openapi.json | El feed público que sirve el propio runtime. Más angosto: solo los conectores de uso general. | Cuando importa lo que el gateway expone sin autenticar, no el catálogo entero. |
https://connect.emisso.ai/mcp | El servidor MCP. Anuncia dos meta-tools, search_docs y execute; el catálogo completo vive detrás de ellas. | Para operar, no para leer: es la superficie de ejecución. El detalle está en el servidor MCP. |
Los dos contratos OpenAPI cubren la ejecución de tools. Los endpoints de control (conexiones, sincronizaciones, webhooks) todavía no entran en esos archivos; su referencia es la API de control.
Tres formas de pedir la misma página
El markdown de una página se pide de tres maneras, y las tres devuelven el mismo cuerpo porque salen de la misma fuente.
- El sufijo
.md. Cualquier URL de/docssirve su markdown si le agregas.md. Es la convención que ya usan la documentación de Anthropic, la de Stripe y la del AI SDK, así que un agente que la conoce no necesita leer esta página para descubrirla. Además es la única forma que produce una URL propia: se puede pegar en un chat y quien la abra ve el markdown. - La cabecera
Accept: text/markdownsobre la URL normal de la página. Sirve al agente que no construye URLs y ya tiene el link HTML. Claude Code, Cursor y OpenCode mandan esa cabecera en todo pedido, así que reciben markdown sin configurar nada. - La ruta
/llms.mdx/{ruta}, que es donde vive el generador. Las dos formas de arriba reescriben a esta.
Las respuestas markdown salen con X-Robots-Tag: noindex. La página HTML tiene el mismo contenido y es la que queremos en los resultados de búsqueda: es la que está en el sitemap y la que se declara canónica. Sin ese encabezado habría tres copias exactas compitiendo con ella.
Copiar como Markdown
Cada página de /docs trae el botón «Copiar como Markdown». En vez de serializar el HTML, copia el espejo real /llms.mdx/{ruta} de esa página, el mismo que consume un agente por HTTP. Una sola fuente para la persona que pega la página en un chat y para la máquina que la fetchea.
El <head> de cada página declara además un alternates con tipo text/markdown apuntando a ese espejo, así que un agente que solo tiene la URL HTML puede descubrir la versión markdown sin conocer la convención de rutas.
Prompt de arranque
Para entregarle Connect a un agente, acompaña el servidor MCP con este bloque:
Tienes Emisso Connect (https://connect.emisso.ai/mcp): el puente a los sistemas chilenos de esta
organización (SII, bancos, indicadores). Reglas:
1. Parte siempre por search_docs. Sin argumentos trae el catálogo entero agrupado por sistema;
con {tool: "<id>"} trae la ficha completa y un ejemplo ejecutable.
2. En todo sistema conectable, connectionId es obligatorio: sácalo de conexiones.estado.consultar.
La conexión es la empresa; no hay elección implícita ni cuando existe una sola.
3. Leer son dos pasos: <sistema>.conexion.sincronizar escribe (login real contra el sistema, puede
tardar hasta 90 segundos en bancos) y <recurso>.consultar lee lo ya guardado. Una lista vacía
puede ser un período sin sincronizar: revisa datosListos en conexiones.estado.consultar antes
de concluir que no hay nada.
4. Si un sistema aparece con conectado: false, crea un enlace con conexiones.enlace.crear y
muéstralo con su dominio completo visible, explicando quién lo pidió y para qué. Nunca lo
presentes como un aviso del banco ni del SII.
5. Ante un error, sigue el suggested_fix que viene en la respuesta; no reintentes lo que no es
reintentable. Si no reconoces el error, reporta el request_id.Las cinco reglas responden a comportamiento real del gateway: la regla 2 evita el error validation_error con que el gateway rechaza una llamada sin conexión, la 3 evita concluir «no hay datos» sobre una caché todavía vacía y la 5 aprovecha que cada error del catálogo viaja con un suggested_fix accionable.
Qué hace solo un agente y qué no
| Acción | ¿La completa solo? | Por qué |
|---|---|---|
Descubrir el catálogo (search_docs) | Sí | Incluye los sistemas todavía no conectados, con el camino para conectarlos. |
Leer datos sincronizados (<recurso>.consultar) | Sí | Lee del plano ya persistido; no abre sesión contra el sistema externo. |
Sincronizar (<sistema>.conexion.sincronizar) | Sí | Usa la credencial ya vinculada en el vault; el agente solo dispara el trabajo. |
Conectar un sistema nuevo (conexiones.enlace.crear) | Solo la mitad | El agente acuña el enlace, pero la clave la entrega el humano en esa página. El enlace vence en una hora y sirve una sola vez. |
| Ver una credencial | Nunca | El vault es inaccesible también para el agente: la credencial se resuelve del lado del servidor y jamás entra al contexto del modelo ni a un resultado de tool. |
La última fila es una propiedad del diseño, no una restricción de permisos que alguien pueda relajar: ningún resultado de tool contiene material de credencial, y la bitácora guarda solo un digest del input.
Próximos pasos
- El servidor MCP: las dos meta-tools, el recorrido completo y cómo se conecta un cliente.
- Conectar un sistema: el flujo del enlace visto del lado humano.
- Sincronizar y consultar: qué separa el paso que escribe del que lee.
- Errores: el catálogo completo, con
suggested_fixpor código.
Servidor MCP
Connect es MCP-nativo, con dos herramientas que no cambian nunca, search_docs para descubrir y execute para correr, sobre el catálogo completo.
Enlace hosted de conexión
Un enlace de un solo uso para que un tercero entregue la clave del SII o del banco: sin cuenta, sin acceso al dashboard y sin que la credencial pase por tu aplicación.