Un servidor ERP MCP es un sistema de acciones de negocio publicado a través del Protocolo de Contexto del Modelo, para que cualquier agente de IA compatible pueda descubrir lo que el sistema puede hacer y hacerlo. Concretamente, es un punto final HTTPS que responde a dos métodos JSON-RPC: tools/listque devuelve las herramientas disponibles para el llamador con un nombre, una descripción y un esquema JSON para las entradas, y tools/call, que ejecuta uno de ellos y devuelve un resultado que el modelo puede leer. Claude, ChatGPT, Cursor, VS Code y otros clientes hablan el protocolo, por lo que el servidor se escribe una vez y cada agente puede usarlo.
Para un ERP, las dos cosas que importan no están en el transporte. La primera es que la lista de herramientas y cada llamada están limitadas a la persona que el agente representa, lo cual el protocolo apoya a través de OAuth y autorización por solicitud, pero deja al servidor hacer cumplir. La segunda es que cada herramienta debe corresponder a una transacción comercial que sea segura para reintentar, rechazar o preguntar, porque un modelo hará las tres cosas.
Un servidor que convierte un sistema en herramientas
El Protocolo de Contexto del Modelo tiene tres roles. Un host es una aplicación de IA como Claude o ChatGPT. Dentro del host, se crea un cliente por servidor y habla solo con ese servidor. Un servidor es un servicio que ofrece contexto y capacidades al host a través de un pequeño número de primitivas. Los principios de diseño de la especificación dicen que los servidores deben ser fáciles de construir, componibles y no deben poder ver toda la conversación ni otros servidores; el host mantiene la conversación y hace cumplir el consentimiento, el servidor solo ve las llamadas dirigidas a él.
Por lo tanto, un servidor ERP MCP no es el ERP. Es la superficie de acción del ERP, expresada como herramientas con entradas tipadas, servidas en una URL. La decisión de diseño interesante es qué es una herramienta. Un servidor de clima tiene una; un sistema de negocio tiene cientos, y las útiles son acciones que una persona podría realizar (crear una factura, registrar un pago, mover un trato, reservar stock) en lugar de filas en tablas. El servidor de espacio de trabajo de Sois, por ejemplo, publica herramientas con nombres como crear factura, registrarPago, searchContacts y examinarContacto agrupados por módulo, y la lista exacta que recibe un llamador depende de quién sea.
Herramientas, recursos y avisos
La especificación define tres primitivas de servidor, y difieren en quién controla su uso. Las herramientas son controladas por el modelo: el modelo decide cuándo llamar a una. Los recursos son impulsados por la aplicación: el host decide qué contexto adjuntar, a menudo con el usuario eligiendo de una lista. Los prompts son plantillas controladas por el usuario. Un ERP necesita la primera, puede beneficiarse de la segunda y rara vez necesita la tercera.
| Primitivo | ¿Quién lo invoca? | Forma | En un ERP |
|---|---|---|---|
| Herramientas | El modelo, a través de herramientas/llamada | Nombre, descripción, inputSchema, outputSchema opcional y anotaciones; el resultado tiene contenido, structuredContent opcional y isError | Cada acción: buscar, crear, actualizar, enviar, aprobar, conciliar |
| Recursos | El anfitrión o el usuario, a través de resources/read | Una URI con un tipo MIME; contenidos de texto o binarios; plantillas opcionales y suscripciones a cambios | Documentos de referencia, un estado de cuenta del cliente, un informe; útiles pero no donde ocurre el trabajo |
| Indicaciones | El usuario, a través de prompts/get | Una plantilla de mensaje nombrada con argumentos | Ocasionalmente, para una rutina de fin de mes; la mayoría de los servidores ERP las omiten |
El conector de la API de Mensajes de Claude y las herramientas de soporte de la API de Respuestas de OpenAI son solo para herramientas, lo que es una razón más para integrar la sustancia del ERP en las herramientas.
Dos características de los resultados de las herramientas son importantes para un sistema empresarial. Una herramienta puede declarar un esquemaDeSalida y devolver contenidoEstructurado que se ajuste a él, junto con el texto que un modelo lee, para que una integración pueda usar el resultado sin analizar prosa. Y una herramienta que falla por una razón empresarial (una factura en el estado incorrecto, una fecha en el pasado, un permiso faltante) devuelve un resultado normal con isError: true y una explicación, en lugar de un error de protocolo, para que el modelo pueda corregir su entrada y volver a intentarlo. Los errores de protocolo están reservados para solicitudes mal formadas y herramientas desconocidas.
El transporte y la especificación actual
Dos transportes son estándar. Stdio es para un servidor que el cliente lanza como un proceso local, que es cómo funcionan las herramientas de escritorio como el acceso a archivos. HTTP transmitible es para servidores remotos y es lo que usa un ERP: el servidor expone un punto final que acepta un POST HTTP por mensaje JSON-RPC y responde con un objeto JSON o un flujo de Eventos Enviados por el Servidor limitado a esa solicitud, por lo que una llamada larga puede enviar progreso antes de su resultado final. El transporte anterior de HTTP con SSE está obsoleto.
La revisión actual, 2026-07-28, cambió el transporte de una manera que importa para cualquiera que implemente un servidor detrás de un balanceador de carga. Eliminó las sesiones a nivel de protocolo: ya no hay un apretón de manos de inicialización ni un encabezado de identificador de sesión, cada solicitud lleva su versión de protocolo y capacidades del cliente en su propia metadata, y un servidor que necesita estado entre llamadas devuelve un manejador explícito que el modelo pasa de vuelta como un argumento. Los servidores escritos contra la revisión de 2025-11-25, que sí usaron sesiones, siguen funcionando porque se requiere que los clientes detecten la era anterior y retrocedan; un nuevo servidor no debería adoptar sesiones.
Autorización: para quién es la llamada
Para los transportes HTTP, la especificación define un flujo OAuth 2.1. El servidor es un servidor de recursos y debe publicar metadatos de recursos protegidos (RFC 9728) nombrando su servidor de autorización; cuando una solicitud llega sin un token, responde 401 con un encabezado WWW-Authenticate que apunta a esos metadatos y, idealmente, al alcance mínimo necesario. El cliente descubre los puntos finales del servidor de autorización, se identifica (los documentos de metadatos del ID del cliente son la ruta recomendada; se mantiene el registro dinámico por compatibilidad), ejecuta un flujo de código de autorización con PKCE y debe incluir la URI canónica del servidor como el parámetro de recurso para que el token esté vinculado solo a este servidor. El servidor debe validar esa audiencia, debe rechazar tokens emitidos para cualquier otra cosa y nunca debe pasar un token a otro servicio.
La consecuencia para un ERP es la importante. Debido a que el token identifica a una persona, el servidor puede variar el resultado de tools/list por las credenciales en la solicitud, y la especificación lo dice explícitamente. Ese es el mecanismo para el filtrado basado en roles: la lista de un usuario de finanzas y la lista de un usuario de almacén provienen del mismo servidor y son diferentes. Un alcance insuficiente en tiempo de ejecución se señala con un 403 y un desafío de alcance del que el cliente puede avanzar, aunque para la mayoría de los sistemas empresariales el verdadero límite es el rol en el ERP en lugar del amplio alcance de OAuth.
La parte difícil: permisos y transacciones
Todo lo anterior se puede implementar en una tarde con un SDK. Lo que separa a un servidor ERP MCP de una demostración es el tratamiento de las dos cosas que el protocolo deja al servidor: si se permite una llamada y qué significa una llamada.
La autorización debe ser verificada dos veces. Filtrar la lista de herramientas evita que el modelo elija algo que no debería, lo que ahorra tokens y confusión. Verificar nuevamente cuando la herramienta se ejecuta es el límite real, porque un cliente puede enviar cualquier llamada que desee. Un rechazo es mejor devuelto como un error de ejecución de la herramienta, para que el modelo lo lea y lo informe, en lugar de como un fallo de transporte que termina el turno. Así es como se ve una llamada rechazada desde un espacio de trabajo de Sois: un resultado normal, marcado, con una razón.
{
"jsonrpc": "2.0",
"id": 7,
"result": {
"content": [
{
"type": "text",
"text": "Tool not permitted for this account: approveInvoice requires the finance approver role."
}
],
"isError": true
}
}Un rechazo de autorización devuelto como un error de ejecución de la herramienta. El modelo aprende por qué y puede pedir a la persona que apruebe en su lugar; no se escribió nada. Sois también reserva códigos de error JSON-RPC para sesiones no autorizadas, créditos insuficientes, herramientas no permitidas y límites de presupuesto alcanzados.
Las transacciones son la segunda mitad. Una herramienta debe mapearse a una transacción empresarial con un claro antes y después: crear factura produce un borrador con un identificador, registrarPago aplica un pago a una factura, y ninguno deja un estado a medio escribir si falla. Los modelos reintentan, por lo que las escrituras deben ser seguras para repetir o deben rechazar una repetición con un mensaje claro; las anotaciones de la especificación permiten que un servidor declare una herramienta como de solo lectura, idempotente o destructiva, y clientes como ChatGPT utilizan esas pistas al decidir si pedir confirmación. Donde un paso necesita una decisión que está por encima de la autoridad del agente, el servidor puede devolver un resultado que requiere entrada pidiendo a la persona una pregunta a través del cliente, en lugar de adivinar.
La capa de autorización se sitúa entre el punto final y los módulos. La lista de herramientas se filtra según el rol del llamador al salir, y cada llamada se verifica nuevamente al entrar, antes de que llegue a un módulo.
Cómo Sois implementa uno
Un espacio de trabajo de Sois es un servidor MCP en una única URL, la dirección del espacio de trabajo seguida de /api/mcpResponde al desafío 401 con metadatos de recursos protegidos, publica los metadatos de su servidor de autorización, requiere PKCE y emite tokens limitados al espacio de trabajo; un conector en Claude o ChatGPT completa el inicio de sesión sin nada copiado. Un token portador con una clave API está disponible para scripts que no utilizan OAuth, con la identidad y el gasto mantenidos en credenciales separadas a propósito.
La lista de herramientas se genera a partir de las definiciones de herramientas en vivo y se filtra por rol y aplicaciones instaladas; luego, cada llamada se verifica por permisos al ejecutarse y falla de manera segura. Las llamadas tienen un límite de tasa por conexión, se miden donde el agente propio del espacio de trabajo realiza el razonamiento y están libres de cargos de IA donde lo hace el agente del llamador, con un límite establecido por un presupuesto que define el espacio de trabajo, y se registran con entradas y resultados en contra de la persona que las realizó. Las aplicaciones publicadas en el mercado añaden sus herramientas a la misma lista bajo las mismas reglas, por lo que la aplicación de un desarrollador es operable por un agente en el momento en que se instala.
Preguntas que la gente hace
¿Es un servidor MCP solo un envoltorio alrededor de una API REST?
A menudo se implementa de esa manera, y está bien. La diferencia es lo que publica: herramientas tipadas que un modelo puede descubrir en tiempo de ejecución, resultados que un modelo puede leer y recuperar, y autorización OAuth por usuario, nada de lo cual una API REST le da a un agente por sí sola.
¿Qué agentes pueden usar un servidor MCP ERP hoy?
Claude (web, escritorio, Cowork, Claude Code y el conector de la API de Mensajes), ChatGPT en modo desarrollador y la API de Respuestas, Cursor, VS Code y cualquier otro cliente que implemente el protocolo. El servidor no necesita saber cuál está llamando.
¿El servidor necesita mantener sesiones?
No bajo la revisión actual, que eliminó las sesiones a nivel de protocolo y pide a los servidores que devuelvan identificadores explícitos para cualquier cosa que abarque llamadas. Los clientes aún interoperan con servidores en la revisión del 2025-11-25, que utilizó un encabezado de sesión, al detectar la era anterior.
¿Dónde aplica el ERP los permisos?
En el servidor, en la ejecución, en cada llamada. Filtrar la lista de herramientas es una conveniencia para el modelo; la verificación que importa ocurre cuando la herramienta se ejecuta, y una negativa debe regresar como un error de herramienta legible para que nada se escriba y el modelo pueda explicar por qué.
- Especificación del Protocolo de Contexto del Modelo (2026-07-28): herramientas definiciones de herramientas, resultados, manejo de errores, anotaciones y la variación por solicitud de herramientas/list
- Especificación del Protocolo de Contexto del Modelo: Transporte HTTP transmitible y registro de cambios el transporte de un solo punto final, la eliminación de sesiones y la compatibilidad hacia atrás
- Especificación del Protocolo de Contexto del Modelo: autorización OAuth 2.1, metadatos de recursos protegidos, indicadores de recursos y reglas de tokens
- documentación de Sois: el servidor MCP del espacio de trabajo el punto final, documentos de descubrimiento, filtrado de roles, límites y códigos de error según se implementaron
Este artículo se revisa cuando cambian los productos que describe. Próxima revisión programada: 4 de diciembre de 2026.
