# 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 [#los-artefactos]

| URL                                                                     | Qué contiene                                                                                                                                                                                                                                                                    | Cuándo usarlo                                                                                                      |
| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| [`/llms.txt`](https://connect.emisso.ai/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`](https://connect.emisso.ai/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`](https://connect.emisso.ai/docs/empezar/conectar.md), y el de la portada en [`/docs.md`](https://connect.emisso.ai/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`](https://connect.emisso.ai/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`](https://connect.emisso.ai/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`](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](/docs/agentes/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](/docs/api-control).

## Tres formas de pedir la misma página [#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.

1. **El sufijo `.md`.** Cualquier URL de `/docs` sirve 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.
2. **La cabecera `Accept: text/markdown`** sobre 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.
3. **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 [#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 [#prompt-de-arranque]

Para entregarle Connect a un agente, acompaña el servidor MCP con este bloque:

```text
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 [#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 [#próximos-pasos]

* [El servidor MCP](/docs/agentes/mcp): las dos meta-tools, el recorrido completo y cómo se conecta un cliente.
* [Conectar un sistema](/docs/empezar/conectar): el flujo del enlace visto del lado humano.
* [Sincronizar y consultar](/docs/conceptos/sincronizar-consultar): qué separa el paso que escribe del que lee.
* [Errores](/docs/operar/errores): el catálogo completo, con `suggested_fix` por código.
