Docs / Servidor MCP
Empezar

Servidor MCP (asistentes IA)

Emitoo expone un servidor MCP (Model Context Protocol) en https://api.emitoo.io/mcp. Claude, ChatGPT, Cursor, Claude Code o tu propio agente pueden consultar los comprobantes emitidos, las ventas, los clientes, las compras y los cobros de una empresa en lenguaje natural: «¿cuánto facturé en septiembre?», «¿qué facturas de ACME siguen con saldo?», «muéstrame el resumen fiscal del mes».

Solo lectura, por diseño

Ninguna herramienta crea, modifica, anula ni envía nada, y no existe una versión «con escritura» para activar. La credencial que usa un asistente es una API key de tipo mcp (prefijo fmk_) que solo admite permisos de lectura; aunque alguien la usara contra la API REST, cualquier POST, PUT o DELETE recibe 403.

Claude.ai y ChatGPT (Conectores)

Los hosts que soportan OAuth se conectan sin copiar claves. El flujo es OAuth 2.1 con PKCE y registro dinámico del cliente; a ti solo te toca aprobar.

  1. En el asistente, añade un conector personalizado con la URL https://api.emitoo.io/mcp.
  2. El asistente te lleva a app.emitoo.io/conectar. Inicia sesión con un usuario administrador de la empresa.
  3. Elige la empresa (si administras varias) y los alcances que autorizas. La pantalla muestra a qué dominio volverá el navegador: si no lo esperabas, cancela.
  4. Vuelves al asistente ya conectado. Empieza preguntando «¿a qué empresa estás conectado?» (usa empresa_actual).

La conexión vence a los 90 días; al vencer, el asistente vuelve a pedir autorización. Puedes revocarla antes desde API keys → Asistentes IA en el panel.

Claude Code, Cursor y Claude Desktop

Para hosts que se configuran con un archivo o un comando, crea una conexión en API keys → Asistentes IA → Nueva conexión. Te da una clave fmk_… (se muestra una sola vez) que viaja como Authorization: Bearer.

claude mcp add --transport http emitoo https://api.emitoo.io/mcp \
  --header "Authorization: Bearer fmk_..."

Qué puede consultar

24 herramientas, todas anotadas como readOnlyHint. Los listados devuelven como mucho 100 filas y un siguiente_offset para paginar; los importes van en USD y las fechas en hora de Ecuador. Cada alcance agrupa un conjunto de herramientas:

comprobantes:read — Comprobantes emitidos y reportes de ventas

HerramientaQué devuelve
empresa_actualRUC, razón social, ambiente del SRI, plan y alcances de la conexión. Siempre disponible.
listar_facturasPor fecha, estado, cliente, texto o solo con saldo por cobrar. Paginado.
obtener_facturaPor id, número (001-001-000000123) o clave de acceso: detalles, pagos, estado SRI, saldo.
ventas_periodoTotales entre dos fechas: subtotales por tarifa, IVA, notas de crédito, neto.
resumen_fiscalResumen mensual: ventas, compras, retenciones emitidas y recibidas, IVA.
listar_notas_credito / obtener_nota_creditoNotas de crédito emitidas y su detalle.
listar_notas_debito / obtener_nota_debitoNotas de débito emitidas y su detalle.
listar_retenciones / obtener_retencionRetenciones emitidas, por fecha, estado o período fiscal.
listar_guias_remision / obtener_guia_remisionGuías de remisión emitidas.
listar_liquidaciones_compra / obtener_liquidacion_compraLiquidaciones de compra emitidas.

catalogo:read — Clientes, proveedores y servicios

HerramientaQué devuelve
listar_clientes_proveedoresBúsqueda por razón social o identificación.
obtener_cliente_proveedorPor id o por cédula/RUC.
listar_serviciosCatálogo de productos y servicios con precio y tarifa de IVA.

compras:read — Compras, cobros y pagos a proveedores

HerramientaQué devuelve
listar_compras / obtener_compraFacturas de proveedores recibidas, por fecha, estado de pago o proveedor.
listar_cobros / obtener_cobroDinero recibido de clientes y a qué facturas se aplicó.
listar_pagos_proveedor / obtener_pago_proveedorPagos hechos a proveedores y qué compras cancelan.

Lo que nunca sale por el MCP

XML firmados, PDFs (RIDE), certificados .p12 ni ningún binario. La clave de acceso y el número de autorización sí: son datos públicos del comprobante y sirven para consultarlo en el SRI.

Seguridad y control

  • Una conexión = una empresa. El asistente nunca ve otra empresa aunque tu usuario administre varias; para dos empresas se crean dos conexiones.
  • Solo un administrador autoriza. Las cuentas de plataforma y los roles contador, usuario o admin de sucursal no pueden conectar asistentes.
  • Alcances recortables. Al autorizar eliges qué grupos de datos puede leer; el resto responde «esta conexión no tiene acceso».
  • Auditoría. Cada llamada a una herramienta queda en la bitácora de la empresa (método MCP, herramienta, argumentos, IP, duración), junto a las peticiones de la API REST.
  • Revocación inmediata desde el panel; la conexión también vence sola a los 90 días.
  • Mismo rate limit que la API pública, por conexión y por IP.

Planes

El servidor MCP está incluido en todos los planes de pago. En el plan Gratis, empresa_actual responde (para que el asistente pueda explicarlo) y el resto de herramientas devuelve «Tu plan no incluye el Asistente IA (MCP)». Se activa al subir de plan, sin reconectar.

Para desarrolladores: el protocolo

Es MCP estándar sobre Streamable HTTP, sin estado y con respuestas JSON, así que cualquier cliente compatible funciona. Los endpoints relevantes cuelgan de https://api.emitoo.io:

EndpointPara qué
POST /mcpJSON-RPC del protocolo (initialize, tools/list, tools/call). Manda Accept: application/json, text/event-stream.
GET /.well-known/oauth-protected-resource/mcpMetadata del recurso (RFC 9728): qué servidor de autorización usar.
GET /.well-known/oauth-authorization-serverMetadata del servidor de autorización (RFC 8414).
POST /registerRegistro dinámico de clientes (RFC 7591). redirect_uris solo https (o http://localhost).
GET /authorizePKCE S256 obligatorio; acepta resource (RFC 8707). Redirige al consentimiento en la web.
POST /tokengrant_type=authorization_code. El access_token es una key fmk_…. Sin refresh tokens: al vencer se vuelve a autorizar.
POST /revokeRevoca el token (RFC 7009).

Sin credencial, /mcp responde el 401 que dispara el flujo OAuth en el host:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer error="invalid_token",
  resource_metadata="https://api.emitoo.io/.well-known/oauth-protected-resource/mcp"

Y la respuesta de /token tras el consentimiento:

{
  "access_token": "fmk_…",
  "token_type": "Bearer",
  "expires_in": 7776000,
  "scope": "comprobantes:read catalogo:read compras:read"
}

Claves manuales y OAuth son lo mismo por dentro

Tanto la clave que creas en el panel como el token que obtiene un host por OAuth son API keys de tipo mcp: se listan, se auditan y se revocan en el mismo sitio. Una key fpk_ de la API REST no funciona en /mcp, aunque solo tenga permisos de lectura.

Errores habituales

Qué vesPor qué
401 en /mcpSin Bearer, clave revocada o vencida, o una key fpk_ de la API REST.
Resultado con isError: «Tu plan no incluye el Asistente IA»La empresa está en el plan Gratis.
Resultado con isError: «Esta conexión no tiene acceso a …»Ese alcance no se autorizó al conectar. Reconecta autorizándolo.
Resultado con isError: «No existe …»El id no pertenece a la empresa de la conexión (no se revela si existe en otra).
400 invalid_grant en /tokencode_verifier incorrecto, código ya usado o expirado (5 minutos).