Ir al contenido
Facturalo

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.
AgenteURLPara quiénToken
Facturalo Billinghttps://mcp.facturalo.pe/billingNegocios y contadores: emite cuando una persona confirmask_test_… o sk_live_…
Facturalo Billing automáticohttps://mcp.facturalo.pe/billing-autoAgentes de IA: emite solo, con límites del operadorsk_test_… o sk_live_…
Facturalo Integrationhttps://mcp.facturalo.pe/integrationDevelopers: Consultar → Generar → Probar → Verificar → Producciónsk_test_… (solo emite en demo)
Facturalo Troubleshooterhttps://mcp.facturalo.pe/troubleshooterSoporte y developers: Localizar → Diagnosticar → Corregirsk_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.

~/.cursor/mcp.jsonjson
{
  "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_…"
      }
    }
  }
}
Funciona con o sin la palabra Bearer: Authorization: sk_test_… también vale, igual que en la API. Sin token puedes consultar la documentación y el catálogo de errores de SUNAT; para emitir, validar o ver trazas hace falta.

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.

ToolQué hacePrompt sugerido
lookup_customerDatos del cliente por RUC (razón social y dirección) o DNI¿Quién es el RUC 20100070970?
find_sunat_product_codeCó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_documentArma, valida y muestra la vista previa; emite tras tu confirmaciónFactura a 20100070970: 3 horas de consultoría a S/ 150 + IGV
prepare_void / confirm_voidPrepara la anulación y la envía cuando confirmasAnula la F001-149 por error en el monto
list_documents / sales_summaryComprobantes emitidos y resumen de ventas por periodo¿Cuánto vendí esta semana?
billing_policyModo 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.

mcp.json — agente autónomojson
{
  "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"
      }
    }
  }
}
HeaderQué limitaPor defecto
X-Facturalo-Permitir-LiveEmitir con sk_live_… (comprobantes reales)false: solo demo
X-Facturalo-Max-TotalTotal máximo por comprobante, en soles5000
X-Facturalo-Max-Por-DiaComprobantes por día en esa conexión100
X-Facturalo-SeriesSeries permitidas, separadas por comaTodas

Tools — Integration

ToolQué haceTokenPrompt sugerido
search_docs / get_doc_pageDocumentación oficial: búsqueda semántica y página completaNo¿Cómo emito una factura con detracción?
list_payload_examples / get_payload_exampleEl JSON oficial de cada caso (exonerada, dólares, anticipo…)NoDame el payload de una boleta en dólares
get_code_sample / get_webhook_handlerCódigo con el SDK (Node, PHP, Python, cURL) y receptor del webhook con firmaNoIntegra Facturalo en este Laravel y recibe el webhook
explain_sunat_error / search_sunat_errorsQué 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_documentEmpresa y entorno del token; valida un payload sin emitirSí¿Este JSON pasaría en SUNAT?
send_test_documentEmite en demo para probar de punta a puntask_test_…Emite una boleta de prueba de S/ 10
list_webhook_deliveries / check_integration / go_live_checklistEntregas del webhook, puntaje de la integración y lo que falta para producciónSí¿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_…).

ToolQué hacePrompt sugerido
find_document / list_documentsLocaliza comprobantes por serie-número, estado o fechaBusca la F001-120
diagnose_documentQué pasó, de quién depende y qué campo corregir¿Por qué SUNAT rechazó la F001-120?
get_document / get_document_eventsEstado actual e historial completo del comprobante¿Qué pasó con la B001-45 desde que se envió?
get_request_trace / list_failed_requestsLa 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_errorsCódigos de SUNAT con su corrección en el payloadEl 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