Servidor MCP
ERP DLM expone un servidor MCP (Model Context Protocol) en /api/mcp que permite a asistentes de IA consultar datos del ERP en solo lectura.
¿Qué es MCP?
Sección titulada «¿Qué es MCP?»MCP es un protocolo abierto para conectar modelos de lenguaje con fuentes de datos y herramientas externas. Gracias al servidor MCP, un asistente puede:
- Listar facturas de venta y compra.
- Consultar clientes, proveedores y productos.
- Ver el plan contable, asientos y saldos.
- Obtener un snapshot de tesorería y movimientos bancarios.
Transportes disponibles
Sección titulada «Transportes disponibles»HTTP SSE (producción / nube)
Sección titulada «HTTP SSE (producción / nube)»Montado en la aplicación FastAPI:
GET /api/mcp/sse— conexión Server-Sent Events.POST /api/mcp/messages/— envío de mensajes JSON-RPC.
El montaje se realiza directamente en backend/app/main.py mediante _McpBypassApp, evitando que el middleware de FastAPI rompa las respuestas streaming.
stdio (local)
Sección titulada «stdio (local)»Para uso local con Hermes u otros clientes MCP que prefieran stdio:
cd backend. .venv/bin/activatepython mcp_server.pyPara exigir autenticación también en stdio, exporta MCP_AUTH_TOKEN.
Autenticación
Sección titulada «Autenticación»Se requiere el header Authorization: Bearer <token> en el transporte HTTP. El token se hashea con SHA-256 y se busca en api_tokens; debe estar activo, no expirado, y tener al menos una regla en api_access con:
resource_name = 'mcp'(acceso global), oresource_name = '*'(wildcard), o- el ámbito concreto de la herramienta (p. ej.
mcp:invoices).
En el transporte stdio, si no se exporta MCP_AUTH_TOKEN, el servidor permite acceso local ilimitado (útil para desarrollo mono-tenant).
Multi-tenant
Sección titulada «Multi-tenant»El campo company_id de api_tokens determina la empresa cuyos datos ve el asistente. Si es NULL, se consultan todas las empresas (comportamiento por defecto en instalaciones mono-empresa). Para SaaS multi-tenant se recomienda asignar company_id obligatoriamente a cada token.
Herramientas expuestas
Sección titulada «Herramientas expuestas»El servidor expone 13 herramientas, todas de solo lectura:
| Herramienta | Ámbito | Descripción | Parámetros principales |
|---|---|---|---|
list_invoices |
mcp:invoices |
Facturas de venta | status, date_from, date_to, client_id, paid, limit, offset |
get_invoice |
mcp:invoices |
Detalle de factura de venta | invoice_id o document_number |
list_purchase_invoices |
mcp:purchase_invoices |
Facturas de compra | status, date_from, date_to, supplier_id, paid, limit, offset |
get_purchase_invoice |
mcp:purchase_invoices |
Detalle de factura de compra | invoice_id o document_number |
list_contacts |
mcp:contacts |
Clientes y/o proveedores | contact_type, search, is_active, limit, offset |
get_contact |
mcp:contacts |
Detalle de contacto | contact_id |
list_products |
mcp:products |
Productos | search, family_code, is_active, limit, offset |
get_product |
mcp:products |
Detalle de producto | product_id o reference |
list_accounts |
mcp:accounting |
Plan contable | fiscal_year_code, is_active, limit, offset |
get_account_balance |
mcp:accounting |
Saldo de cuenta contable | account_code, fiscal_year_code |
list_journal_entries |
mcp:accounting |
Asientos contables | fiscal_year_code, date_from, date_to, limit, offset |
get_cash_flow |
mcp:treasury |
Snapshot de tesorería | — |
list_bank_movements |
mcp:banking |
Movimientos bancarios | status, date_from, date_to, limit, offset |
Ejemplo de configuración para Claude Desktop
Sección titulada «Ejemplo de configuración para Claude Desktop»{ "mcpServers": { "erp-dlm": { "command": "npx", "args": ["-y", "@anthropic-ai/mcp-sse-proxy"], "env": { "SSE_URL": "https://erp.ovlicuo.com/api/mcp/sse", "MCP_AUTHORIZATION": "Bearer tok-..." } } }}Más información
Sección titulada «Más información»- Documentación oficial de MCP
- API REST de ERP DLM
- Fichero de implementación:
backend/app/modules/mcp_server/server.py - Consultas SQL:
backend/app/modules/mcp_server/queries.py - Autenticación MCP:
backend/app/modules/mcp_server/auth.py