Resumen
Claude responde preguntas de negocio desde SAP S/4HANA on-premise o Private Cloud, directo desde HANA, con el diccionario de SAP. Solo lectura, sin BTP.
Prueba a pedir
Prompts de ejemplo para SAP S/4HANA (HANA SQL)
Haz clic en un prompt para copiarlo. Pégalo en Claude, ChatGPT, Cursor, Gemini, Copilot u OpenClaw para ejecutarlo contra este conector.
Claude es IA y puede equivocarse. Verifica siempre las respuestas.
En resumen: El conector SAP S/4HANA (HANA SQL) permite a Claude leer un sistema S/4HANA directamente desde su base de datos HANA. Antes de escribir una consulta, Claude busca en el propio diccionario de datos de SAP qué significan BUKRS, HSL o VBRK, y así elige la tabla correcta, el campo de moneda correcto y el mandante correcto. La sesión es de solo lectura en el propio HANA, los resultados se limitan a 1.000 filas y cada sentencia tiene un timeout. Necesitas un usuario de base de datos HANA de SAP Basis y un AnythingMCP autoalojado que llegue al puerto SQL de HANA.
| Datos clave | |
|---|---|
| Conector | SAP S/4HANA (HANA SQL), 10 herramientas |
| Sistemas | S/4HANA on-premise, Private Cloud (RISE), HANA Enterprise Cloud |
| Acceso | Solo lectura: un único SELECT por llamada, SET TRANSACTION READ ONLY, límite de 1.000 filas, timeout de 60 s |
| Driver | hdb incluido; @sap/hana-client de SAP opcional, instalado por ti |
| Alojamiento | Autoalojado dentro de la red que llega a HANA (AnythingMCP es de código abierto, AGPL-3.0) |
| Probado | Cada herramienta ejecutada contra un sistema SAP S/4HANA 2025 real |
- 10 tools sap_*
- Roles y acceso a tools
- Solo lectura por defecto
- Registro de auditoría
Por qué un conector SQL sin más no basta para SAP
Las tablas y los campos de SAP son abreviaturas cortas en alemán: ACDOCA es el diario universal (Universal Journal), RBUKRS la sociedad, HSL el importe en moneda de la sociedad, VBRK la cabecera del documento de facturación. Un modelo que solo ve nombres de columnas adivina, y SAP castiga las suposiciones: los importes dependen de un campo de moneda en otra columna, cada tabla está separada por mandante (MANDT), las fechas son cadenas YYYYMMDD y los números de documento llevan ceros a la izquierda.
El conector le da a Claude el propio diccionario de SAP como herramientas. Lee las tablas con las que SAP se describe a sí mismo (DD02L, DD03L, DD04T, DD07T, DD08L y las anotaciones CDS), así que Claude ve la denominación de negocio de cada campo, qué campo de moneda o unidad acompaña a cada importe, qué significan los códigos de un campo, cómo se unen las tablas y cuáles de las vistas CDS de SAP están liberadas y son analíticas. Solo entonces escribe la consulta.
Cómo encuentra Claude los datos
sap_guideexplica el modelo de datos de SAP para SQL: el mandante, las fechas comoYYYYMMDD, las monedas, el diario universal. No cuesta nada y no toca ningún dato.sap_org_structurelista las sociedades con su moneda y su variante de ejercicio, los centros y las organizaciones de ventas. Casi todas las preguntas se acotan por uno de ellos.sap_search_cds_viewsysap_search_tablesencuentran dónde están los datos, con preferencia por las vistas CDS analíticas liberadas de SAP, donde las uniones, las monedas y los signos ya están resueltos.sap_describe_tableda a cada campo su denominación de negocio, el campo de moneda o unidad de cada importe y la tabla de verificación de cada código.sap_queryejecuta un únicoSELECTde solo lectura, filtrado por mandante, unidad organizativa y período, y agregado en SQL.
Qué puedes preguntar
Tres preguntas de principio a fin. El SQL sale de las recetas de sap_guide; sustituye el mandante 100, la sociedad 1010 y las fechas por los tuyos. Claude indica las suposiciones que ha hecho, por ejemplo qué cuentas cuentan como ingresos, y te pide que las confirmes.
“¿Cuáles fueron nuestros ingresos por período contable en 2025?”
HANA SQLsap_guidesap_org_structuresap_queryACDOCAdiario universal, ledger principal 0L
SELECT POPER, RHCUR AS CURRENCY, -SUM(HSL) AS REVENUE
FROM ACDOCA
WHERE RCLNT = '100' AND RLDNR = '0L' AND RBUKRS = '1010' AND GJAHR = '2025'
AND RACCT BETWEEN '0040000000' AND '0049999999' -- cuentas de ingresos: confirma el rango
GROUP BY POPER, RHCUR ORDER BY POPER;
Una fila por período contable, en moneda de la sociedad. Los ingresos se contabilizan en el haber, así que la suma se invierte de signo.
“¿Qué clientes tienen facturas vencidas hace más de 60 días, y por qué importe?”
HANA SQLsap_guidesap_org_structuresap_queryACDOCAdiario universal, posiciones de cliente (KOART = D)
SELECT KUNNR, RHCUR AS CURRENCY,
SUM(HSL) AS OPEN_AMOUNT,
SUM(CASE WHEN NETDT >= '20251231' THEN HSL ELSE 0 END) AS NOT_DUE,
SUM(CASE WHEN NETDT < '20251231' AND NETDT >= '20251101' THEN HSL ELSE 0 END) AS OVERDUE_1_60,
SUM(CASE WHEN NETDT < '20251101' THEN HSL ELSE 0 END) AS OVERDUE_OVER_60
FROM ACDOCA
WHERE RCLNT = '100' AND RLDNR = '0L' AND RBUKRS = '1010' AND KOART = 'D' AND POPER <> '000'
AND BUDAT <= '20251231' AND (AUGDT = '00000000' OR AUGDT > '20251231')
GROUP BY KUNNR, RHCUR ORDER BY OVERDUE_OVER_60 DESC LIMIT 20;
Partidas abiertas a la fecha clave, clasificadas por antigüedad según el vencimiento neto. Las partidas compensadas después de la fecha clave siguen contando como abiertas en esa fecha.
“¿Cuáles fueron nuestros 10 principales clientes por ventas netas en 2025?”
HANA SQLsap_guidesap_field_valuessap_queryVBRKcabecera del documento de facturaciónVBRPposiciones del documento de facturaciónKNA1maestro de clientes
SELECT k.KUNAG, c.NAME1, k.WAERK, SUM(p.NETWR) AS NET_SALES
FROM VBRK k JOIN VBRP p ON p.MANDT = k.MANDT AND p.VBELN = k.VBELN
LEFT JOIN KNA1 c ON c.MANDT = k.MANDT AND c.KUNNR = k.KUNAG
WHERE k.MANDT = '100' AND k.FKDAT BETWEEN '20250101' AND '20251231'
AND k.FKSTO = '' AND k.VBTYP = 'M'
GROUP BY k.KUNAG, c.NAME1, k.WAERK ORDER BY NET_SALES DESC LIMIT 10;
Diez filas con número de cliente, nombre, moneda y ventas netas. La clasificación sale de los documentos de facturación, no del diario: en ACDOCA el cliente está en la línea de la cuenta por cobrar, no en la línea de ingresos. Claude lee primero los valores de VBTYP para distinguir las facturas de los abonos y las anulaciones.
¿HANA SQL u OData?
AnythingMCP se conecta a S/4HANA on-premise y Private Cloud de dos formas. Elige una, o usa las dos en paralelo.
| HANA SQL (esta guía) | OData | |
|---|---|---|
| Lee | Cualquier tabla o vista CDS que el usuario de base de datos pueda leer | Los servicios OData que el usuario de SAP pueda llamar |
| Autorizaciones de SAP | No se aplican: el límite son los permisos de la base de datos | SAP las comprueba en cada llamada |
| Destaca en | Totales sobre millones de filas, finanzas y análisis entre módulos | APIs publicadas, vistas de objetos de negocio, comprobaciones propias de SAP |
| Necesitas | Un usuario de base de datos HANA, acceso de red al puerto SQL y una licencia que lo permita | Un usuario técnico de SAP y servicios del Gateway activos |
Qué necesitas
- Un administrador de SAP Basis que pueda crear un usuario en la base de datos tenant que contiene el esquema ABAP (normalmente
SAPHANADBoSAPABAP1). - Los datos de conexión: host, puerto SQL del tenant (
3<instance>15para el primer tenant,3<instance>41y siguientes para los demás), nombre del tenant, esquema, el mandante SAP de tres dígitos y el idioma SAP para los textos (Einglés,Dalemán). - Un AnythingMCP autoalojado que llegue a ese puerto. El puerto SQL de HANA normalmente solo es accesible dentro de la red de la empresa o en la landing zone de la nube privada de SAP.
- Una comprobación de licencia. El acceso SQL directo al esquema ABAP desde una aplicación de terceros depende de tu licencia de SAP HANA. Una licencia runtime incluida con S/4HANA normalmente no lo cubre; una licencia full-use sí. Consulta a tu equipo de cuenta de SAP antes de conectar un sistema productivo. En las ofertas de nube privada de SAP, el usuario de base de datos y la ruta de red se solicitan a SAP.
Puesta en marcha
Paso 1: Crear un usuario de base de datos de solo lectura
En el tenant que contiene el esquema ABAP:
CREATE USER AMCP_READER PASSWORD "<strong password>" NO FORCE_FIRST_PASSWORD_CHANGE;
ALTER USER AMCP_READER DISABLE PASSWORD LIFETIME;
-- herramientas del diccionario
GRANT SELECT ON SAPHANADB.DD02L TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD02T TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD03L TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD03T TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD03ND TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD04T TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD07T TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD08L TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DD05S TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DDHEADANNO TO AMCP_READER;
GRANT SELECT ON SAPHANADB.DDFIELDANNO TO AMCP_READER;
GRANT SELECT ON SAPHANADB.ARS_W_API_STATE TO AMCP_READER;
-- estructura organizativa
GRANT SELECT ON SAPHANADB.T001 TO AMCP_READER;
GRANT SELECT ON SAPHANADB.T001K TO AMCP_READER;
GRANT SELECT ON SAPHANADB.T001W TO AMCP_READER;
GRANT SELECT ON SAPHANADB.TKA01 TO AMCP_READER;
GRANT SELECT ON SAPHANADB.TVKO TO AMCP_READER;
GRANT SELECT ON SAPHANADB.TVKOT TO AMCP_READER;
GRANT SELECT ON SAPHANADB.T024E TO AMCP_READER;
-- después, las tablas de negocio y vistas CDS que necesiten tus casos de uso, p. ej.
GRANT SELECT ON SAPHANADB.ACDOCA TO AMCP_READER;
GRANT SELECT ON SCHEMA SAPHANADB es más sencillo para análisis amplios, pero entonces todo el esquema es legible, datos de RR. HH. incluidos. SQL no aplica las autorizaciones de aplicación de SAP (sociedad, organización de ventas, comprobaciones de RR. HH.): lo que pueda leer el usuario de base de datos, lo puede leer Claude.
Opcionalmente, limita también las sentencias del usuario en el lado del servidor:
CREATE WORKLOAD CLASS "AMCP_READER_WC" SET 'STATEMENT TIMEOUT' = '60', 'STATEMENT MEMORY LIMIT' = '20';
CREATE WORKLOAD MAPPING "AMCP_READER_WM" WORKLOAD CLASS "AMCP_READER_WC" SET 'USER NAME' = 'AMCP_READER';
Paso 2: Ejecutar AnythingMCP dentro de la red
En un host que llegue al puerto SQL de HANA:
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 el host de HANA a SSRF_ALLOWED_HOSTS en .env: AnythingMCP rechaza las direcciones privadas por defecto.
Paso 3: Instalar el conector
Abre Connectors → Marketplace, busca S/4HANA e instala SAP S/4HANA (HANA SQL):

Después rellena las variables. Las que forman la dirección de conexión son obligatorias para poder crear el conector:
| Variable | Ejemplo |
|---|---|
SAP_HANA_HOST | hana.internal |
SAP_HANA_PORT | 30015 |
SAP_HANA_TENANT | S4P |
SAP_HANA_SCHEMA | SAPHANADB |
SAP_CLIENT | 100 |
SAP_LANGUAGE | E |
SAP_HANA_TLS | verify, no-verify para un certificado autofirmado, u off |
SAP_HANA_USER / SAP_HANA_PASSWORD | AMCP_READER y su contraseña |

La instalación hace una llamada de prueba (sap_org_structure) y te dice si las credenciales y los permisos funcionan. La contraseña se guarda cifrada y nunca se muestra a Claude.

Paso 4: Añadir el servidor MCP a Claude

En claude.ai o en Claude Desktop: Customize → Connectors → + → Add custom connector, pega la URL de tu servidor MCP (aparece en MCP Servers en AnythingMCP) e inicia sesión. Para claude.ai la URL debe ser HTTPS pública, porque Claude se conecta desde los servidores de Anthropic; solo hay que publicar el endpoint MCP, nunca el puerto de HANA. En Claude Code también funciona una instancia local:
claude mcp add --transport http sap-hana <your MCP server URL> --header "X-API-Key: <key>"
Paso 5: Pregunta
Empieza por algo que acote los datos, por ejemplo «¿Qué sociedades hay en este sistema, y en qué moneda?». El conector le indica a Claude que lea primero sap_guide; a partir de ahí recorre por sí mismo las herramientas del diccionario.
Herramientas disponibles
| Herramienta | Qué le da a Claude |
|---|---|
sap_guide | El modelo de datos de SAP explicado para SQL, por temas: conceptos básicos (mandante, fechas, ceros a la izquierda, monedas), finanzas (el diario universal ACDOCA), ventas, inventario, compras, operaciones, errores habituales y recetas de consultas. No cuesta nada y no toca ningún dato. |
sap_org_structure | Sociedades con moneda, plan de cuentas y variante de ejercicio; sociedades CO, centros, organizaciones de ventas y de compras. |
sap_search_tables | Tablas por nombre o descripción con su número de filas, marcando las vistas de compatibilidad de S/4HANA que un SQL sin más leería mal. |
sap_describe_table | Cada campo con su denominación, indicador de clave, tipo, el campo de moneda o unidad de cada importe y la tabla de verificación. |
sap_find_fields | Qué tablas contienen un campo de negocio, p. ej. «vencimiento neto». |
sap_field_values | Qué significan los códigos de un campo, p. ej. los tipos de documento comercial de las facturas. |
sap_table_relations | Claves externas con sus condiciones de unión, y la tabla de textos. |
sap_search_cds_views | Las vistas CDS de SAP por nombre o denominación, marcando las liberadas y las analíticas. |
sap_describe_cds_view | Columnas de una vista CDS con denominaciones, medidas, campos de moneda y unidad, y asociaciones. |
sap_query | Un único SELECT de solo lectura, limitado a 1.000 filas y con timeout. |

Qué impone el conector
Usar el driver nativo de SAP
AnythingMCP incluye hdb, el driver de HANA de SAP escrito en JavaScript puro (Apache-2.0). Cubre usuario y contraseña, TLS, sistemas multitenant y todo lo que hace el conector. El driver nativo de SAP, @sap/hana-client, añade Kerberos, el secure user store (hdbuserstore) y el pooling de conexiones. Se publica bajo la SAP Developer License, que no nos permite redistribuirlo, así que nunca forma parte de la imagen: lo instalas en tu propio despliegue, ampliando la imagen o montándolo como volumen, y lo seleccionas con driver=hana-client en la cadena de conexión o con HANA_DRIVER=hana-client para todos los conectores HANA. Comprueba que tu contrato con SAP cubre su uso en producción. En hosts arm64, quédate con el driver hdb incluido o crea tu propia imagen basada en Debian. Paso a paso: SAP HANA en la documentación de AnythingMCP.
Prompts de ejemplo
- «Muéstrame los ingresos por período contable de la sociedad 1010 en 2025.»
- «¿Qué clientes tienen cuentas por cobrar abiertas con más de 30 días, y cuánto por cliente?»
- «Los 10 principales clientes por ventas netas este año, a partir de los documentos de facturación.»
- «¿Qué vistas CDS analíticas liberadas cubren los asientos contables? Describe las medidas de la primera.»
- «¿Qué significan los valores del campo de tipo de documento comercial en las facturas?»
- «Movimientos de mercancías por clase de movimiento en el centro 1010 el mes pasado.»
Solución de problemas
- Una vista CDS no devuelve filas. Falta
SAP_CLIENTo es incorrecto; el conector lo necesita para fijarCDS_CLIENT. - Conexión rechazada o redirección a un host desconocido. Usa el puerto SQL propio del tenant en lugar del puerto de la base de datos del sistema, que puede redirigir a un nombre de host interno que el conector no puede resolver.
- «Insufficient privilege». La tabla no está concedida al usuario de base de datos. Concédela, o pide a Claude que use una tabla o vista CDS que pueda leer.
- Error de certificado. Usa
SAP_HANA_TLS=no-verifypara un certificado autofirmado, o instala la CA. - Una consulta supera el timeout. Pide a Claude que filtre por sociedad, período o centro y que agregue en SQL; sube
statementTimeoutsolo si la consulta es realmente grande.
FAQ
¿Puede Claude modificar datos en SAP a través de este conector?
No. La sesión de HANA es de solo lectura, solo se ejecuta un único SELECT, y las escrituras y las lecturas con bloqueo se rechazan. Crea el usuario de base de datos solo con permisos SELECT, así HANA impone la misma regla.
¿Respeta las autorizaciones de SAP? No. SQL se salta las autorizaciones de aplicación de SAP, así que son los permisos de la base de datos los que deciden qué puede leer Claude. Si necesitas las comprobaciones de autorización de SAP, usa la vía OData, o concede solo las tablas y vistas que se puedan leer sin problema.
¿Mi licencia de SAP permite el acceso SQL directo a S/4HANA? Depende de tu licencia de HANA. Una licencia runtime incluida con S/4HANA normalmente no cubre el acceso SQL de terceros al esquema ABAP; una licencia full-use sí. Revisa tu contrato antes de conectar un sistema productivo.
¿Funciona con S/4HANA Private Cloud (RISE)? Sí, si SAP proporciona un usuario de base de datos y una ruta de red al puerto SQL de HANA, y AnythingMCP se ejecuta donde pueda llegar a ese puerto. Solicita ambas cosas a SAP.
¿Puedo usar AnythingMCP Cloud en lugar de autoalojarlo? Solo si el puerto SQL de HANA es accesible desde internet, algo que rara vez ocurre y rara vez es recomendable. Aloja AnythingMCP tú mismo junto a SAP.
¿Funciona también con ChatGPT y Copilot? Sí. El mismo servidor MCP funciona en ChatGPT (modo desarrollador, planes de pago), GitHub Copilot, Cursor y Claude Code, con las mismas herramientas y los mismos límites de solo lectura.
¿Necesito SAP BTP o SAP Joule para esto? No. El conector habla directamente con la base de datos HANA, así que no necesita ni BTP, ni Joule, ni SAP Gateway. También funciona junto a Joule si usas ambos.
¿Es un servidor MCP para SAP HANA que puedo ejecutar yo mismo? Sí. AnythingMCP es de código abierto (AGPL-3.0) y se ejecuta con Docker Compose junto a SAP. El repositorio sap-hana-mcp-server empaqueta este conector por separado, y Servidor MCP para SAP HANA lo explica para desarrolladores.
Siguientes pasos
- Servidor MCP para SAP HANA: el mismo conector desde el punto de vista de un desarrollador
- OData a MCP: la otra vía a S/4HANA on-premise, con las comprobaciones de autorización de SAP
- Conectar SAP a Claude: todos los conectores de SAP de un vistazo
- Base de datos a MCP: SAP HANA como conector de base de datos sin más, junto a SQL Server, PostgreSQL y Oracle
- SAP HANA en GitHub: opciones de la cadena de conexión y el driver nativo
¿Te ha sido útil esta guía?