Ir al contenido

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.

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.

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.

Para uso local con Hermes u otros clientes MCP que prefieran stdio:

Ventana de terminal
cd backend
. .venv/bin/activate
python mcp_server.py

Para exigir autenticación también en stdio, exporta MCP_AUTH_TOKEN.

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), o
  • resource_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).

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.

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-..."
}
}
}
}