Factuarea API
Servidor MCP

Scopes y permisos

El catálogo de scopes del consentimiento OAuth, cómo se mapea a los scopes detallados que aplican las tools, el super-scope y el gating por plan/módulo.

Cada tool MCP declara el scope que una credencial debe tener para invocarla. Los scopes funcionan de forma ligeramente distinta según el canal:

  • Las API keys se crean directamente con scopes detallados (resource:action, p. ej. invoices:read) — el mismo catálogo cerrado que usa la API REST. También puedes conceder el super-scope *.
  • Los tokens OAuth reciben scopes con punto (resource.action, p. ej. invoices.read) en la pantalla de consentimiento. El servidor los traduce a los scopes detallados automáticamente, de modo que ambos canales aplican el mismo conjunto en el límite de la tool.

Catálogo de consentimiento OAuth

Estos son los scopes que un usuario puede conceder a una app de terceros en la pantalla de consentimiento. Hay 56 scopes simples más 3 macros.

Scopes simples

Cada uno concede una capacidad. La columna Maps to muestra el scope detallado que aplican las tools — la capa de consentimiento traduce los scopes OAuth con punto a estos automáticamente. La columna Sensitive marca los scopes que la pantalla de consentimiento destaca y no marca por defecto.

Perfil

ScopeConcedeMaps toSensitive
profile.readLeer tu nombre, email y empresa activa.account:readno

CRM — clientes y proveedores

ScopeConcedeMaps toSensitive
clients.readListar y leer clientes.clients:readno
clients.writeCrear y actualizar clientes.clients:writeno
clients.deleteEliminar clientes.clients:delete⚠ sí
suppliers.readListar y leer proveedores.suppliers:readno
suppliers.writeCrear y actualizar proveedores.suppliers:writeno
suppliers.deleteEliminar proveedores.suppliers:delete⚠ sí

Catálogo — productos, series, impuestos

ScopeConcedeMaps toSensitive
products.readListar y leer el catálogo de productos.products:readno
products.writeCrear y actualizar productos.products:writeno
products.deleteEliminar productos.products:delete⚠ sí
series.readLeer series de numeración.series:readno
series.writeCrear y actualizar series de numeración.series:writeno
taxes.readLeer tipos impositivos y retenciones.taxes:readno
taxes.writeCrear y actualizar tipos impositivos.taxes:writeno

Ventas — facturas, presupuestos, proformas, albaranes

ScopeConcedeMaps toSensitive
invoices.readListar y leer facturas.invoices:readno
invoices.writeCrear y actualizar facturas.invoices:writeno
invoices.sendEnviar facturas por email.invoices:sendno
invoices.deleteEliminar facturas en borrador.invoices:delete⚠ sí
invoices.annulAnular facturas emitidas.invoices:void⚠ sí
invoices.create_correctiveEmitir facturas rectificativas.invoices:writeno
quotes.readListar y leer presupuestos.quotes:readno
quotes.writeCrear y actualizar presupuestos.quotes:writeno
quotes.sendEnviar presupuestos por email.quotes:sendno
quotes.deleteEliminar presupuestos.quotes:delete⚠ sí
quotes.convert_to_invoiceAceptar/rechazar y convertir presupuestos en facturas.quotes:transitionno
proformas.readListar y leer facturas proforma.proformas:readno
proformas.writeCrear y actualizar proformas.proformas:writeno
proformas.sendEnviar proformas por email.proformas:sendno
proformas.deleteEliminar proformas.proformas:delete⚠ sí
proformas.convertConvertir proformas en facturas.proformas:transitionno
delivery_notes.readListar y leer albaranes.delivery_notes:readno
delivery_notes.writeCrear, actualizar y enviar albaranes.delivery_notes:writeno
delivery_notes.sendEnviar albaranes por email.delivery_notes:writeno
delivery_notes.deleteEliminar albaranes.delivery_notes:delete⚠ sí
delivery_notes.convertConvertir albaranes.delivery_notes:transitionno
delivery_notes.signMarcar como entregados / firmar albaranes.delivery_notes:transition⚠ sí

Compras

ScopeConcedeMaps toSensitive
purchase_invoices.readListar y leer facturas de compra.purchase_invoices:readno
purchase_invoices.writeCrear y actualizar facturas de compra.purchase_invoices:writeno
purchase_invoices.mark_paidMarcar facturas de compra como pagadas.purchase_invoices:transition⚠ sí
purchase_invoices.deleteEliminar facturas de compra.purchase_invoices:delete⚠ sí

Los scopes de pago son asimétricos entre ventas y compras. Registrar un pago en una factura de venta (register_invoice_payment) requiere invoices:write — edita la factura. En cambio, registrar un pago en una factura de compra (register_purchase_invoice_payment) requiere purchase_invoices:transition, porque en el lado de compra un pago hace avanzar la factura por su ciclo de vida (pendiente → pagada) en vez de editarla.

Facturas recurrentes

ScopeConcedeMaps toSensitive
recurring.readListar y leer plantillas recurrentes.recurring_invoices:readno
recurring.writeCrear y actualizar plantillas recurrentes.recurring_invoices:writeno
recurring.pausePausar plantillas recurrentes.recurring_invoices:transitionno
recurring.resumeReanudar plantillas recurrentes.recurring_invoices:transitionno
recurring.generate_nowEmitir una factura recurrente manualmente.recurring_invoices:transition⚠ sí
recurring.deleteEliminar plantillas recurrentes.recurring_invoices:delete⚠ sí

Cumplimiento (VeriFactu)

ScopeConcedeMaps toSensitive
verifactu.readLeer registros, eventos, certificados y configuración de VeriFactu.verifactu:readno

Webhooks

ScopeConcedeMaps toSensitive
webhooks.readListar webhook endpoints y entregas.webhooks:readno
webhooks.writeCrear, actualizar, rotar y hacer ping de webhook endpoints.webhooks:write⚠ sí
webhooks.deleteEliminar webhook endpoints.webhooks:delete⚠ sí

Macros

Paquetes de conveniencia que se expanden a una lista de scopes simples en el momento de emitir el token. El token persiste los scopes expandidos — las macros nunca se almacenan.

MacroConcedeSensitive
factuarea.readAcceso de lectura completo a todo (sin escrituras).no
factuarea.writeLeer todo, además de crear/actualizar documentos y enviar emails.no
factuarea.fullLeer, escribir, enviar y acciones destructivas (eliminar, anular, marcar como pagada, firmar). Excluye las escrituras de VeriFactu.⚠ sí

El super-scope *

Una credencial que tiene * cubre todos los scopes — las 232 tools en el caso de una API key. Es el equivalente a una clave de propietario. Resérvalo para migraciones puntuales o automatizaciones de propietario totalmente confiables; para todo lo demás, prefiere el conjunto de scopes más reducido. El super-scope está disponible para las API keys; el consentimiento OAuth concede scopes explícitos (o macros), nunca un * directo.

Cómo los scopes OAuth se convierten en scopes detallados

Cuando se emite un token OAuth, sus scopes con punto se traducen una vez al catálogo detallado que aplican las tools. Conviene conocer algunas reconciliaciones:

  • recurring.* se mapea al recurso recurring_invoices:*.
  • invoices.create_corrective se mapea a invoices:write (crear es una escritura).
  • invoices.annul se mapea a invoices:void.
  • Las acciones de ciclo de vida (*.convert, *.sign, *.pause, *.resume, *.generate_now, *.mark_paid, quotes.convert_to_invoice) se mapean al scope :transition del recurso.
  • Cualquier scope de lectura sobre un documento también concede las utilidades de lectura transversales pdfs:read (descargar su PDF/recibo) y events:read (su registro de actividad).
  • verifactu.write y delivery_notes:gdpr_forget no tienen scope OAuth con punto — son inalcanzables vía OAuth por diseño.
  • facturae:read / facturae:write aún no están en el catálogo de consentimiento OAuth — las tools de FacturaE (FACe) solo son accesibles con API key por ahora.

Gating por plan y módulo

Hoy ninguna tool del MCP público está limitada por módulo: cada tool publicada es accesible en cuanto la credencial tiene el scope requerido — solo aplica la comprobación de scope. Si en el futuro se publicara una tool limitada por módulo, el servidor la ocultaría de tools/list cuando el plan de la empresa no incluya el módulo y devolvería module_not_in_plan (-32005) ante una llamada directa.

  • Los límites de uso del plan (p. ej. cuotas mensuales de documentos) se aplican en el momento de la llamada y se manifiestan como plan_limit_exceeded (-32004). Consulta Errores y límites de peticiones.

Toda la superficie pública MCP también requiere que el add-on de API para desarrolladores de la empresa esté activo; de lo contrario, cada llamada devuelve addon_not_active (-32007).

En esta página