Servidor MCP
Conecta tu asistente de IA (Claude, Cursor, VS Code…) a la API de Ticketbai WS con el Model Context Protocol. Cada método de la API es una herramienta: emite, consulta y anula facturas TicketBAI y Verifactu desde el chat.
Direcciones
| Entorno | URL del servidor MCP |
|---|---|
| Pruebas | https://api-test.ticketbaiws.eus/mcp-api |
| Producción | https://api.ticketbaiws.eus/mcp-api |
Empieza siempre en pruebas. En producción las facturas tienen validez fiscal y se envían a Hacienda: pide al asistente que te confirme cada factura antes de emitirla.
Autenticación
Igual que la API REST: tu cliente MCP envía dos cabeceras HTTP, Token (el token de test o el real, según el entorno, en el área privada de la empresa) y Nif (el NIF de la empresa emisora). Si tu cliente solo permite Authorization, envía Authorization: Bearer TU_TOKEN junto con la cabecera Nif. Si tu cliente solo deja elegir cabeceras de una lista, usa X-API-Token para el token y X-Client-ID para el NIF.
El servidor no guarda tus credenciales ni accede a nada que no puedas hacer con la API: cada herramienta hace la misma llamada REST que harías tú, con los mismos límites de uso.
Configurar tu cliente
Claude Code
claude mcp add --transport http ticketbaiws-test https://api-test.ticketbaiws.eus/mcp-api \
--header "Token: TU_TOKEN_DE_TEST" \
--header "Nif: TU_NIF"
Claude Desktop y claude.ai
- En Ajustes → Conectores, añade un conector personalizado con la URL del servidor MCP.
- En autenticación elige sin inicio de sesión y, en cabeceras de la petición, añade
X-API-Tokencon tu token yX-Client-IDcon tu NIF.
La autenticación no se puede cambiar después de añadir el conector: si cambias de token, borra el conector y créalo de nuevo. En cuentas de empresa puede que solo un administrador pueda añadirlo, y entonces todos los usuarios comparten esas credenciales.
Cursor y otros clientes con configuración JSON
{
"mcpServers": {
"ticketbaiws-test": {
"url": "https://api-test.ticketbaiws.eus/mcp-api",
"headers": {
"Token": "TU_TOKEN_DE_TEST",
"Nif": "TU_NIF"
}
}
}
}
El formato exacto cambia de un cliente a otro (por ejemplo, VS Code usa "servers" y "type": "http"). Lo importante es la URL y las dos cabeceras.
Ejemplos de lo que puedes pedir
- «Emite un ticket de 12,10 € IVA incluido, serie T, con un café y un bocadillo.»
- «¿Cómo ha terminado en Hacienda la factura A-2026-0042?»
- «Lista las facturas de ayer que tengan errores.»
- «Anula la factura T-118 y dime la huella de la anulación.»
Herramientas
Son los métodos de la documentación del API, con los mismos parámetros. Algunos métodos de gestión solo existen en producción.
Facturas TicketBAI / Verifactu
ticketbai_post: Nueva factura TicketBAI / Verifactu (POST /tbai/)ticketbai_get: Consulta factura TicketBAI (GET /tbai/)ticketbai_del: Anular factura TicketBAI (DELETE /tbai/)tbai_completar_post: TicketBAI - Completar factura simplificada (POST /tbai-completar/)ticketbai_list_get: Listado facturas TicketBAI (GET /tbai-list/)ticketbai_xml_get: Descarga XML TicketBAI (GET /tbai-xml/)facturae_get: Descarga en formato FacturaE (GET /facturae/)tbai_pdf_get: Descarga en formato PDF (GET /tbai-pdf/)status_get: Estado del sistema (GET /status/)reset_tbai_put: Reset envío TBAI (PUT /reset-tbai/)validar_nif_post: Validar NIF en la AEAT (POST /validar-nif/, solo producción)validar_nif_vies_post: Validar NIF en el VIES (POST /validar-nif-vies/, solo producción)
Verifactu: documento de representación
doc_representante_modelo_get: Documento Representación Verifactu - Descargar modelo (GET /doc-representante/modelo/)doc_representante_post: Documento Representación Verifactu - Enviar documento (POST /doc-representante/, solo producción)doc_representante_get: Documento Representación Verifactu - Descargar documento cargado (GET /doc-representante/)doc_representante_delete: Documento Representación Verifactu - Revocar documento cargado (DELETE /doc-representante/)
Batuz Bizkaia (LROE)
epigrafes_get: Listado epígrafes (GET /epigrafes/, solo producción)lroe_recibidas_post: LROE - Envío de facturas recibidas (POST /lroe-recibidas/)lroe_recibidas_put: LROE - Modificar facturas recibidas (PUT /lroe-recibidas/)lroe_recibidas_get: LROE - Consulta de facturas recibidas (GET /lroe-recibidas/)lroe_recibidas_del: LROE - Anular facturas recibidas (DELETE /lroe-recibidas/)lroe_critcaja_cobros_post: LROE - Criterio de caja - COBROS - Envío de cobros (POST /lroe-critcaja-cobros/)lroe_critcaja_cobros_put: LROE - Criterio de caja - COBROS - Modificar cobros (PUT /lroe-critcaja-cobros/)lroe_critcaja_cobros_get: LROE - Criterio de caja - COBROS - Consulta de cobros (GET /lroe-critcaja-cobros/)lroe_critcaja_cobros_del: LROE - Criterio de caja - COBROS - Anulación de cobros (DELETE /lroe-critcaja-cobros/)lroe_critcaja_pagos_post: LROE - Criterio de caja - PAGOS - Envío de pagos (POST /lroe-critcaja-pagos/)lroe_critcaja_pagos_put: LROE - Criterio de caja - PAGOS - Modificar pagos (PUT /lroe-critcaja-pagos/)lroe_critcaja_pagos_get: LROE - Criterio de caja - PAGOS - Consulta de pagos (GET /lroe-critcaja-pagos/)lroe_critcaja_pagos_del: LROE - Criterio de caja - PAGOS - Anulación de pagos (DELETE /lroe-critcaja-pagos/)
Webhooks, empresas y licencias
webhooks_post: Webhooks - Nuevo webhook (POST /webhooks/, solo producción)webhooks_get: Webhooks - Consultar webhooks (GET /webhooks/)webhooks_put: Webhooks - Modificar webhook (PUT /webhooks/{codigo_webhook}/, solo producción)empresas_post: Nueva empresa (POST /empresas/, solo producción)empresas_get: Listado empresas (GET /empresas/, solo producción)licencias_post: Nueva licencia (POST /licencias/, solo producción)licencias_get: Consulta licencias (GET /licencias/, solo producción)empresas_put: Editar datos empresa (PUT /empresas/{nif}/, solo producción)
Buenas prácticas
- Si alguna herramienta devuelve
TOKEN error, pide al asistente que usecomprobar_conexion: te dirá el entorno, qué cabeceras han llegado, el NIF recibido y los 4 últimos caracteres del token. - El envío a Hacienda es asíncrono: después de emitir, el asistente debe consultar el estado con
ticketbai_get(o puedes configurar un webhook). - Los importes de las líneas van sin IVA y las fechas en formato dd/mm/yyyy. Los ejemplos sirven también como referencia para el asistente.
- Si recibes HTTP 429, se ha superado el límite de peticiones: espera antes de reintentar.
- La especificación completa está en openapi.json.
