Agentes MCP
MCP (Model Context Protocol) conecta Claude, ChatGPT, Cursor o tu propio agente de IA con Facturalo. Emite facturas y boletas conversando, integra la API en una tarde y diagnostica rechazos de SUNAT con datos reales.
Hay cuatro servidores en mcp.facturalo.pe. Cada petición lleva tu token en Authorization: el servidor no guarda ningún token. Todos validan con las reglas oficiales de SUNAT antes de emitir y están incluidos en todos los planes.
Para qué
- Emitir facturas y boletas en lenguaje natural: buscar al cliente por RUC o DNI, ver la vista previa y confirmar.
- Dejar que tu agente de IA (ventas, atención) facture solo, dentro de los límites que fijas.
- Integrar la API sin inventar campos: payloads oficiales, código con el SDK y handler del webhook.
- Saber por qué SUNAT rechazó un comprobante, qué campo corregir y qué pasó con cada petición.
| Agente | URL | Para quién | Token |
|---|---|---|---|
| Facturalo Billing | https://mcp.facturalo.pe/billing | Negocios y contadores: emite cuando una persona confirma | sk_test_… o sk_live_… |
| Facturalo Billing automático | https://mcp.facturalo.pe/billing-auto | Agentes de IA: emite solo, con límites del operador | sk_test_… o sk_live_… |
| Facturalo Integration | https://mcp.facturalo.pe/integration | Developers: Consultar → Generar → Probar → Verificar → Producción | sk_test_… (solo emite en demo) |
| Facturalo Troubleshooter | https://mcp.facturalo.pe/troubleshooter | Soporte y developers: Localizar → Diagnosticar → Corregir | sk_test_… o sk_live_… (solo lectura) |
Conectar
Copia la config de tu cliente y pon tu token (console.facturalo.pe → Empresa → API keys). sk_test_… emite en demo, sin afectar SUNAT; sk_live_… emite comprobantes reales.
Cursor
VS Code
Claude Code
Windsurf
Instala los agentes que necesites con un clic y luego edita mcp.json para poner tu token.
{
"mcpServers": {
"facturalo-integration": {
"url": "https://mcp.facturalo.pe/integration",
"headers": {
"Authorization": "Bearer sk_test_…"
}
},
"facturalo-troubleshooter": {
"url": "https://mcp.facturalo.pe/troubleshooter",
"headers": {
"Authorization": "Bearer sk_test_…"
}
}
}
}Billing: factura conversando
Busca al cliente, arma el comprobante (RUC → factura, DNI o sin documento → boleta), lo valida con las reglas de SUNAT y te muestra la vista previa con totales. Solo emite cuando confirmas; el modelo no puede saltarse ese paso. Cada emisión lleva una clave de idempotencia: un reintento nunca crea otro comprobante.
| Tool | Qué hace | Prompt sugerido |
|---|---|---|
| lookup_customer | Datos del cliente por RUC (razón social y dirección) o DNI | ¿Quién es el RUC 20100070970? |
| find_sunat_product_code | Código de producto SUNAT de un ítem a partir de su descripción | ¿Qué código SUNAT lleva una laptop core i5? |
| prepare_document / issue_document | Arma, valida y muestra la vista previa; emite tras tu confirmación | Factura a 20100070970: 3 horas de consultoría a S/ 150 + IGV |
| prepare_void / confirm_void | Prepara la anulación y la envía cuando confirmas | Anula la F001-149 por error en el monto |
| list_documents / sales_summary | Comprobantes emitidos y resumen de ventas por periodo | ¿Cuánto vendí esta semana? |
| billing_policy | Modo y límites con los que trabaja la conexión | ¿Qué puedo emitir con esta conexión? |
Billing automático: para agentes de IA
Para un agente que vende o atiende y factura sin intervención. Agrega emit_document (emite en un paso, con idempotency_key obligatoria). El operador fija los límites en los headers de la conexión; el modo lo fija el servidor y un header no puede cambiarlo. Producción queda apagada hasta que la habilitas.
{
"mcpServers": {
"facturalo-auto": {
"url": "https://mcp.facturalo.pe/billing-auto",
"headers": {
"Authorization": "Bearer sk_live_…",
"X-Facturalo-Permitir-Live": "true",
"X-Facturalo-Max-Total": "2000",
"X-Facturalo-Max-Por-Dia": "200",
"X-Facturalo-Series": "F001,B001"
}
}
}
}| Header | Qué limita | Por defecto |
|---|---|---|
| X-Facturalo-Permitir-Live | Emitir con sk_live_… (comprobantes reales) | false: solo demo |
| X-Facturalo-Max-Total | Total máximo por comprobante, en soles | 5000 |
| X-Facturalo-Max-Por-Dia | Comprobantes por día en esa conexión | 100 |
| X-Facturalo-Series | Series permitidas, separadas por coma | Todas |
Tools — Integration
| Tool | Qué hace | Token | Prompt sugerido |
|---|---|---|---|
| search_docs / get_doc_page | Documentación oficial: búsqueda semántica y página completa | No | ¿Cómo emito una factura con detracción? |
| list_payload_examples / get_payload_example | El JSON oficial de cada caso (exonerada, dólares, anticipo…) | No | Dame el payload de una boleta en dólares |
| get_code_sample / get_webhook_handler | Código con el SDK (Node, PHP, Python, cURL) y receptor del webhook con firma | No | Integra Facturalo en este Laravel y recibe el webhook |
| explain_sunat_error / search_sunat_errors | Qué significa un código de SUNAT y cómo corregirlo (catálogo oficial, 1 998 códigos) | No | ¿Qué es el error 3103? |
| check_token / validate_document | Empresa y entorno del token; valida un payload sin emitir | Sí | ¿Este JSON pasaría en SUNAT? |
| send_test_document | Emite en demo para probar de punta a punta | sk_test_… | Emite una boleta de prueba de S/ 10 |
| list_webhook_deliveries / check_integration / go_live_checklist | Entregas del webhook, puntaje de la integración y lo que falta para producción | Sí | ¿Qué me falta para pasar a producción? |
Tools — Troubleshooter
Solo observa: no emite, no anula ni reenvía. Pega una serie-número (F001-120) o un request id (req_…).
| Tool | Qué hace | Prompt sugerido |
|---|---|---|
| find_document / list_documents | Localiza comprobantes por serie-número, estado o fecha | Busca la F001-120 |
| diagnose_document | Qué pasó, de quién depende y qué campo corregir | ¿Por qué SUNAT rechazó la F001-120? |
| get_document / get_document_events | Estado actual e historial completo del comprobante | ¿Qué pasó con la B001-45 desde que se envió? |
| get_request_trace / list_failed_requests | La historia de una petición por su request id y las que fallaron | ¿Qué falló en mis peticiones de hoy? |
| explain_sunat_error / search_sunat_errors | Códigos de SUNAT con su corrección en el payload | El mensaje dice 'tipo de documento del receptor' |
Búsqueda en la documentación
search_docs entiende preguntas en lenguaje natural y también términos exactos (sunatTransaccion, 3103, documento.sunat.respuesta). Combina significado y palabras clave sobre esta documentación, que se reindexa sola cada 15 minutos. Si la búsqueda semántica no responde, el agente busca por palabras sin que lo notes.
Siguiente
- Guía rápida — tu primera factura con la API
- Autenticación — sk_test_… y sk_live_…
- Request ID — la traza que usa el Troubleshooter
- Validar (sin emitir) — las reglas de SUNAT que aplican los agentes
- SDKs — Node, PHP y Python en tu backend