Resumen
Convierte servicios OData V2 o V4, SAP Gateway incluido, en herramientas MCP para Claude, ChatGPT y Copilot. Lee $metadata: etiquetas, claves, unidades.
En resumen: AnythingMCP tiene un tipo de conector OData. Apúntalo a un servicio OData V2 o V4, o a un SAP Gateway, y Claude, ChatGPT y Copilot reciben cinco herramientas para encontrar servicios, leer sus entity sets y campos con sus etiquetas de negocio, consultar filas y obtener una entidad por su clave. Las consultas se comprueban contra $metadata antes de enviarse, se sigue la paginación del servidor y las respuestas de V2 y V4 llegan como filas simples. También puedes importar el $metadata de un servicio como herramientas con nombre, una herramienta de lista y otra de lectura por cada entity set.
| Datos clave | |
|---|---|
| Protocolos | OData V2 y V4, detectados a partir de $metadata |
| SAP | Catálogo de servicios del Gateway (V2 y V4), sap-client, sap-language, tokens CSRF para escrituras |
| Herramientas integradas | 5, de solo lectura: listar servicios, describir servicio, describir entidad, consultar, obtener entidad |
| Importación | $metadata → herramientas <set>_list y <set>_get por entity set |
| Autenticación | Cualquier método REST: Basic, OAuth 2.0, API key, certificados, token de login |
| Probado | Northwind V2 y V4 y TripPin V4 en services.odata.org |
| Alojamiento | Autoalojado (código abierto, AGPL-3.0) o AnythingMCP Cloud |
Por qué OData necesita algo más que una importación REST
Un servicio OData se describe a sí mismo. Su documento $metadata enumera cada entity set, sus claves, el tipo de cada campo y, en el caso de SAP, la etiqueta que ve el usuario en pantalla, la moneda o unidad que acompaña a cada importe, y qué campos son dimensiones y cuáles medidas. Una importación REST genérica descarta casi todo eso, así que el modelo tiene que adivinar que NetAmount está en TransactionCurrency, o que un servicio analítico se debe filtrar por un parámetro.
El conector OData lee $metadata y se lo pasa al modelo. Claude ve que NetAmount tiene la etiqueta Net Amount y lleva su moneda en TransactionCurrency, y cuando escribe mal un campo, el conector responde «Unknown field … Did you mean …» en lugar de pasarle el error al servidor.
Dos formas de tenerlo
- El tipo de conector OData. Elige OData al crear un conector. Marca SAP Gateway (S/4HANA, ECC, BW) para un sistema SAP: la URL base es el host, p. ej.
https://s4.example.com:44300, y los servicios salen del catálogo de SAP. Déjalo sin marcar para un único servicio OData: la URL base es la raíz del servicio, p. ej.https://services.example.com/odata/v4/Sales. - Un conector REST con configuración OData. Un conector REST cuya configuración incluye un bloque
odatarecibe las mismas herramientas integradas; sus propias herramientas siguen siendo llamadas REST normales. El adaptador de SAP S/4HANA Cloud funciona así.
Los dos se ejecutan sobre el motor REST, así que se aplican todos los métodos de autenticación REST, igual que los reintentos, la protección SSRF de salida y el proxy.
Herramientas integradas
Cada conector OData recibe cinco herramientas, con el nombre <prefix>_…. El prefijo es el nombre del conector más _odata, o el que tú definas.
| Herramienta | Qué hace |
|---|---|
<prefix>_list_services | SAP: busca en el catálogo de servicios del Gateway, V2 y V4, con caché de una hora. En otro caso, los servicios indicados en la configuración o la raíz del servicio único. |
<prefix>_describe_service | Entity sets con sus etiquetas, claves y número de campos, marcados como analytical (el servidor agrega), parameters (una vista parametrizada), requiredInFilter o readOnly. $metadata se guarda en caché durante 24 horas. |
<prefix>_describe_entity | Cada campo con etiqueta, tipo, clave, su campo de moneda o unidad, su campo de texto, si se puede filtrar y ordenar, y su papel de dimensión o medida; propiedades de navegación; indicaciones para sets analíticos y parametrizados. |
<prefix>_query | select, filter, orderby, top (hasta 1.000), skip, expand, parameters, y en V4 apply y search. Primero se comprueban los nombres de campo, se imponen los filtros obligatorios, la paginación del servidor se sigue solo en el propio host del conector, y la respuesta se aplana: filas simples, fechas ISO, decimales como cadenas, el recuento total y nextSkip. |
<prefix>_get_entity | Una entidad por clave, incluidas las claves compuestas como {"SalesOrder": "1", "SalesOrderItem": "10"}. |
Las herramientas integradas solo leen y están marcadas como de solo lectura para los clientes MCP.
Configuración
Paso 1: Ejecutar AnythingMCP
Para un servicio OData público, AnythingMCP Cloud funciona tal cual. Para un SAP Gateway o cualquier servicio de tu propia red, aloja AnythingMCP donde pueda llegar al servicio:
mkdir anythingmcp && cd anythingmcp
curl -fsSLo docker-compose.yml \
https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/main/docker-compose.quickstart.yml
printf 'JWT_SECRET=%s\nENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env
docker compose up -d # → http://localhost:3000
Añade los nombres de host internos a SSRF_ALLOWED_HOSTS; AnythingMCP rechaza las direcciones privadas por defecto.
Paso 2: Crear un conector OData
Crea un conector nuevo, elige OData e introduce la URL base. Para probarlo sin tener cuenta en ningún sitio, usa el servicio público Northwind: https://services.odata.org/V4/Northwind/Northwind.svc, SAP Gateway sin marcar, sin autenticación. Para SAP, marca SAP Gateway e introduce el mandante de tres dígitos y el idioma.
Paso 3: Configurar la autenticación y restringir los servicios
Elige la autenticación que espera tu servicio: Basic auth con un usuario técnico, OAuth 2.0 (client credentials o authorization code), una API key, un certificado de cliente o un token de login. En la configuración OData del conector, indica en Allowed services las rutas de servicio que el modelo puede llamar (* funciona como comodín); los demás servicios se rechazan.
Paso 4: Probar e importar herramientas
Test connection lee el catálogo de SAP o el $metadata del servicio. Si quieres herramientas con nombre para los entity sets que el modelo usa más, abre Import Tools → OData $metadata, indica la ruta del servicio (SAP) o déjala vacía (servicio único) y elige los entity sets. Más detalles abajo.
Paso 5: Conectar Claude, ChatGPT o Copilot
- Claude: Customize → Connectors → Add custom connector, pega la URL de tu servidor MCP. Paso a paso: cómo añadir un conector personalizado a Claude.
- ChatGPT: añade la misma URL HTTPS pública como conector (app) en la configuración de ChatGPT.
- Claude Code, Cursor, VS Code / Copilot: añade la URL con una cabecera
X-API-Key.
Importar herramientas desde $metadata
Import Tools → OData $metadata convierte los entity sets en herramientas con nombre: <set>_list con filter, select, orderby, top, skip y expand, y <set>_get con los parámetros de clave. El documento se obtiene con las credenciales del conector; también puedes pegar un documento $metadata y limitar la importación a algunos entity sets. Volver a importar un servicio actualiza sus herramientas y retira solo las de ese servicio que hayan desaparecido, nunca las integradas ni las de otro servicio.
En un conector OData, las herramientas HTTP importadas y las escritas a mano reciben el mandante y el idioma de SAP, el formato JSON en V2 y respuestas aplanadas. Las escrituras en SAP (POST, PUT, PATCH, DELETE) obtienen primero un token CSRF con las cookies de sesión. Las escrituras solo ocurren a través de herramientas que importes o escribas tú.
SAP Gateway: S/4HANA, ECC y BW
- Un usuario técnico de tipo Sistema, con contraseña productiva, en el mandante que quieres leer.
- Un rol con
S_SERVICEpara los servicios que el modelo puede llamar y autorizaciones de negocio solo de visualización. Para explorar el catálogo, también el servicio de catálogo V2/IWFND/CATALOGSERVICEy el catálogo V4. SAP comprueba estas autorizaciones en cada llamada; son el límite real. - Servicios activos en
/IWFND/MAINT_SERVICE(V2) y/IWFND/V4_ADMIN(V4). - Red: el puerto del Gateway suele ser interno. Aloja AnythingMCP dentro de la red o llega a él a través de una VPN.
La política de APIs de SAP espera que las integraciones de terceros usen APIs publicadas (los servicios API_* del SAP Business Accelerator Hub) o servicios desarrollados por ti; restringe Allowed services en consecuencia.
Para S/4HANA on-premise y Private Cloud hay un adaptador listo, SAP S/4HANA (OData). Configura todo esto con el prefijo s4 (s4_list_services, s4_describe_service, s4_describe_entity, s4_query, s4_get_entity) y añade herramientas listas para posiciones de asientos contables, documentos de facturación, pedidos de cliente, interlocutores comerciales, stock de materiales y productos, además de s4_guide, una guía sobre filtros, servicios analíticos y KPI. Se instala con Basic auth, y puedes cambiar el conector a OAuth 2.0. El adaptador de SAP S/4HANA Cloud incluye las mismas herramientas integradas como s4_cloud_* sobre las APIs de su communication arrangement.
Si prefieres leer directamente las tablas de S/4HANA, consulta SAP S/4HANA vía HANA SQL.
Opciones
| Opción | Significado |
|---|---|
| SAP Gateway | Descubrimiento del catálogo y parámetros de SAP. Implícito si hay un mandante SAP. |
| SAP client | Mandante de tres dígitos, enviado como sap-client en cada petición. |
| Language | Enviado como sap-language, p. ej. EN. |
| Allowed services | Rutas de servicio que el modelo puede llamar, * como comodín. |
| Version | v2 o v4, para anular la detección a partir de $metadata. |
| Max rows | Límite de filas por consulta, 1.000 como máximo. |
| Tool prefix | Prefijo de los nombres de las herramientas integradas. |
Cada opción puede contener {{VARIABLES}} de las variables de entorno del conector.
Prompts de ejemplo
- «¿Qué servicios del catálogo tratan de documentos de facturación?»
- «Describe la entidad de pedido de cliente: ¿qué campos son importes, y en qué moneda?»
- «Ventas netas por organización de ventas en septiembre, a partir de los documentos de facturación.»
- «Muestra el pedido de cliente 1 con todas sus posiciones.»
- En Northwind: «¿Qué diez productos tienen el precio unitario más alto, y qué proveedor los suministra?»
FAQ
¿Qué versiones de OData se admiten?
V2 y V4. La versión se detecta a partir de $metadata; puedes forzarla en la configuración.
¿Tengo que convertir $metadata a OpenAPI primero?
No. El conector OData lee $metadata directamente, y Import Tools → OData $metadata crea las herramientas a partir de él.
¿Puede Claude modificar datos a través de OData? No con las cinco herramientas integradas, que solo leen. Las escrituras necesitan herramientas que importes o escribas tú, y un rol del servidor MCP puede dejarlas fuera; las escrituras en SAP obtienen el token CSRF automáticamente.
¿Funciona con SAP S/4HANA on-premise y ECC? Sí, a través de SAP Gateway, con un AnythingMCP autoalojado que pueda llegar a él. El adaptador SAP S/4HANA (OData) es la forma más rápida de empezar con S/4HANA.
¿Cómo se gestionan los resultados grandes?
Una consulta devuelve como máximo 1.000 filas. El conector sigue la paginación del servidor en el mismo host y devuelve nextSkip, para que el modelo pueda pedir la página siguiente.
¿Funciona también con ChatGPT y Copilot? Sí. El mismo servidor MCP funciona en Claude, ChatGPT, GitHub Copilot, Cursor y Claude Code.
Relacionado
- Conectar SAP a Claude: todos los conectores de SAP de un vistazo
- SAP S/4HANA vía HANA SQL: la vía de base de datos, con el diccionario de datos de SAP como herramientas
- OpenAPI a MCP: APIs REST con una especificación OpenAPI o Swagger
- SOAP a MCP: servicios WSDL
- OData en la documentación de AnythingMCP
¿Te ha sido útil esta guía?