In breve
Cursor risponde a domande di business su SAP S/4HANA on-premise o Private Cloud leggendo HANA, col data dictionary SAP come tool. Sola lettura, senza BTP.
Prova a chiedere
Prompt di esempio per SAP S/4HANA (HANA SQL)
Clicca su un prompt per copiarlo. Incollalo in Claude, ChatGPT, Cursor, Gemini, Copilot o OpenClaw per eseguirlo contro questo connettore.
Claude è un'AI e può sbagliare. Verifica sempre le risposte.
Risposta breve: il connettore SAP S/4HANA (HANA SQL) permette a Cursor di leggere un sistema S/4HANA direttamente dal suo database HANA. Prima di scrivere una query, Cursor cerca nel data dictionary di SAP cosa significano BUKRS, HSL o VBRK, e così sceglie la tabella giusta, il campo valuta giusto e il mandante giusto. La sessione è in sola lettura in HANA stesso, i risultati sono limitati a 1.000 righe e ogni statement ha un timeout. Ti servono un utente del database HANA dal team SAP Basis e un AnythingMCP self-hosted che raggiunga la porta SQL di HANA.
| In breve | |
|---|---|
| Connettore | SAP S/4HANA (HANA SQL), 10 tool |
| Sistemi | S/4HANA on-premise, Private Cloud (RISE), HANA Enterprise Cloud |
| Accesso | Sola lettura: un solo SELECT per chiamata, SET TRANSACTION READ ONLY, massimo 1.000 righe, timeout di 60 s |
| Driver | hdb incluso; @sap/hana-client di SAP opzionale, installato da te |
| Hosting | Self-hosted nella rete che raggiunge HANA (AnythingMCP è open source, AGPL-3.0) |
| Testato | Ogni tool eseguito su un sistema SAP S/4HANA 2025 reale |
- 10 tool sap_*
- Ruoli e accesso ai tool
- Sola lettura di default
- Log di audit
Perché un semplice connettore SQL non basta per SAP
Tabelle e campi di SAP sono brevi abbreviazioni tedesche: ACDOCA è l'Universal Journal, RBUKRS la società, HSL l'importo in valuta della società, VBRK la testata del documento di fatturazione. Un modello che vede solo i nomi delle colonne tira a indovinare, e SAP punisce chi indovina: gli importi dipendono da un campo valuta in un'altra colonna, ogni tabella è divisa per mandante (MANDT), le date sono stringhe YYYYMMDD e i numeri di documento hanno zeri iniziali.
Il connettore dà a Cursor il dizionario di SAP come tool. Legge le tabelle con cui SAP descrive sé stesso (DD02L, DD03L, DD04T, DD07T, DD08L e le annotazioni CDS), così Cursor vede l'etichetta di business di ogni campo, quale campo valuta o unità di misura va con ogni importo, cosa significano i codici di un campo, come si collegano le tabelle e quali CDS view di SAP sono rilasciate e analitiche. Solo dopo scrive la query.
Come Cursor trova i dati
sap_guidespiega il modello dati di SAP per l'SQL: il mandante, le date comeYYYYMMDD, le valute, l'Universal Journal. Non costa nulla e non tocca dati.sap_org_structureelenca le società con valuta e variante di esercizio, le divisioni e le organizzazioni commerciali. Quasi ogni domanda è delimitata da una di queste.sap_search_cds_viewsesap_search_tablestrovano dove stanno i dati, preferendo le CDS view analitiche rilasciate da SAP, in cui join, valute e segni sono già gestiti.sap_describe_tabledà a ogni campo la sua etichetta di business, il campo valuta o unità di ogni importo e la tabella di controllo di ogni codice.sap_queryesegue un soloSELECTin sola lettura, filtrato per mandante, unità organizzativa e periodo, con l'aggregazione fatta in SQL.
Cosa puoi chiedere
Tre domande dall'inizio alla fine. L'SQL viene dalle ricette di sap_guide; sostituisci il mandante 100, la società 1010 e le date con i tuoi valori. Cursor dichiara le ipotesi che ha fatto, per esempio quali conti contano come ricavi, e ti chiede di confermarle.
“Qual è stato il nostro fatturato per periodo contabile nel 2025?”
HANA SQLsap_guidesap_org_structuresap_queryACDOCAUniversal Journal, ledger principale 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' -- conti ricavi: conferma l'intervallo
GROUP BY POPER, RHCUR ORDER BY POPER;
Una riga per periodo contabile, in valuta della società. I ricavi sono registrati in avere, quindi la somma viene cambiata di segno.
“Quali clienti hanno fatture scadute da più di 60 giorni, e per quanto?”
HANA SQLsap_guidesap_org_structuresap_queryACDOCAUniversal Journal, righe 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;
Partite aperte alla data di riferimento, suddivise per fasce di scadenza netta. Le partite pareggiate dopo la data di riferimento contano ancora come aperte a quella data.
“Chi sono stati i nostri 10 clienti principali per fatturato netto nel 2025?”
HANA SQLsap_guidesap_field_valuessap_queryVBRKtestata documento di fatturazioneVBRPposizioni documento di fatturazioneKNA1anagrafica clienti
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;
Dieci righe con numero cliente, nome, valuta e fatturato netto. La classifica viene dai documenti di fatturazione, non dal journal: in ACDOCA il cliente sta sulla riga del credito, non su quella del ricavo. Cursor legge prima i valori di VBTYP per distinguere le fatture dalle note di credito e dagli storni.
HANA SQL o OData?
AnythingMCP si collega a S/4HANA on-premise e Private Cloud in due modi. Scegline uno, o usali entrambi fianco a fianco.
| HANA SQL (questa guida) | OData | |
|---|---|---|
| Legge | Ogni tabella o CDS view che l'utente del database può leggere | I servizi OData che l'utente SAP può chiamare |
| Autorizzazioni SAP | Non applicate: il confine sono i grant del database | Controllate da SAP a ogni chiamata |
| Forte in | Totali su milioni di righe, analisi finanziarie e tra moduli | API pubblicate, viste sugli oggetti di business, controlli di SAP |
| Ti serve | Un utente del database HANA, accesso di rete alla porta SQL, una licenza che lo consenta | Un utente tecnico SAP, servizi Gateway attivi |
Cosa ti serve
- Un amministratore SAP Basis che possa creare un utente nel tenant che contiene lo schema ABAP (di solito
SAPHANADBoSAPABAP1). - I dati di connessione: host, la porta SQL del tenant (
3<instance>15per il primo tenant,3<instance>41e successive per gli altri tenant), nome del tenant, schema, il mandante SAP a tre cifre e la lingua SAP per i testi (Einglese,Dtedesco). - Un AnythingMCP self-hosted che raggiunga quella porta. La porta SQL di HANA di solito è raggiungibile solo dalla rete aziendale o dalla landing zone della private cloud di SAP.
- Una verifica della licenza. L'accesso SQL diretto allo schema ABAP da parte di un'applicazione terza è regolato dalla tua licenza SAP HANA. Una licenza runtime inclusa in S/4HANA di solito non lo copre; una licenza full-use sì. Chiedi al tuo account team SAP prima di collegare un sistema di produzione. Nelle offerte private cloud di SAP, l'utente del database e il percorso di rete si richiedono a SAP.
Configurazione
Passo 1: Crea un utente del database in sola lettura
Nel tenant che contiene lo schema ABAP:
CREATE USER AMCP_READER PASSWORD "<strong password>" NO FORCE_FIRST_PASSWORD_CHANGE;
ALTER USER AMCP_READER DISABLE PASSWORD LIFETIME;
-- tool del dizionario
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;
-- struttura organizzativa
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;
-- poi le tabelle di business e le CDS view che servono ai tuoi casi d'uso, ad es.
GRANT SELECT ON SAPHANADB.ACDOCA TO AMCP_READER;
GRANT SELECT ON SCHEMA SAPHANADB è più semplice per analisi ampie, ma rende leggibile tutto lo schema, dati HR compresi. L'SQL non applica le autorizzazioni applicative di SAP (società, organizzazione commerciale, controlli HR): quello che l'utente del database può leggere, Cursor può leggerlo.
Se vuoi, limita gli statement dell'utente anche lato server:
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';
Passo 2: Avvia AnythingMCP dentro la rete
Su un host che raggiunge la porta SQL di 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
Aggiungi l'host HANA a SSRF_ALLOWED_HOSTS nel file .env: di default AnythingMCP rifiuta gli indirizzi privati.
Passo 3: Installa il connettore
Apri Connectors → Marketplace, cerca S/4HANA e installa SAP S/4HANA (HANA SQL):

Poi compila le variabili. Quelle che formano l'indirizzo di connessione sono obbligatorie prima di poter creare il connettore:
| Variabile | Esempio |
|---|---|
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 per un certificato autofirmato, oppure off |
SAP_HANA_USER / SAP_HANA_PASSWORD | AMCP_READER e la sua password |

L'installazione fa una chiamata di prova (sap_org_structure) e ti dice se credenziali e grant funzionano. La password è salvata cifrata e non viene mai mostrata a Cursor.

Passo 4: Aggiungi il server MCP a Cursor
Cursor gira sul tuo computer, quindi può usare un'istanza locale di AnythingMCP così come una pubblica. Aggiungi il server a ~/.cursor/mcp.json (tutti i progetti) o a .cursor/mcp.json (un progetto), con l'URL del tuo server MCP (lo trovi sotto MCP Servers in AnythingMCP) e una chiave delle sue API keys:
{
"mcpServers": {
"sap-hana": {
"url": "<your MCP server URL>",
"headers": { "X-API-Key": "<key>" }
}
}
}
Poi verifica nelle impostazioni MCP di Cursor che il server sia attivo e che i suoi tool siano elencati.
Passo 5: Chiedi
Inizia con qualcosa che delimiti i dati, per esempio "Quali società ci sono in questo sistema, e in che valuta?". Il connettore dice a Cursor di leggere prima sap_guide; da lì usa da solo i tool del dizionario.
Tool disponibili
| Tool | Cosa dà a Cursor |
|---|---|
sap_guide | Il modello dati di SAP spiegato per l'SQL, per argomento: basi (mandante, date, zeri iniziali, valute), finanza (l'Universal Journal ACDOCA), vendite, magazzino, acquisti, operations, trappole e ricette di query. Non costa nulla e non tocca dati. |
sap_org_structure | Società con valuta, piano dei conti e variante di esercizio; aree di controlling, divisioni, organizzazioni commerciali e di acquisto. |
sap_search_tables | Tabelle per nome o descrizione con il numero di righe, segnalando le view di compatibilità di S/4HANA che un SQL semplice leggerebbe male. |
sap_describe_table | Ogni campo con etichetta, flag di chiave, tipo, il campo valuta o unità di ogni importo e la tabella di controllo. |
sap_find_fields | Quali tabelle contengono un campo di business, es. "scadenza netta". |
sap_field_values | Cosa significano i codici di un campo, es. le categorie dei documenti di fatturazione. |
sap_table_relations | Chiavi esterne con le condizioni di join, e la tabella dei testi. |
sap_search_cds_views | Le CDS view di SAP per nome o etichetta, indicando quelle rilasciate e analitiche. |
sap_describe_cds_view | Colonne di una CDS view con etichette, misure, campi valuta e unità, e associazioni. |
sap_query | Un solo SELECT in sola lettura, limitato a 1.000 righe e con timeout. |

Cosa impone il connettore
Usare il driver nativo di SAP
AnythingMCP include hdb, il driver HANA di SAP in puro JavaScript (Apache-2.0). Copre utente e password, TLS, sistemi multi-tenant e tutto ciò che fa il connettore. Il driver nativo di SAP, @sap/hana-client, aggiunge Kerberos, il secure user store (hdbuserstore) e il connection pooling. È pubblicato con la SAP Developer License, che non ci consente di ridistribuirlo, quindi non fa mai parte dell'immagine: lo installi tu nel tuo deployment, estendendo l'immagine oppure montandolo come volume, e lo selezioni con driver=hana-client nella connection string o con HANA_DRIVER=hana-client per tutti i connettori HANA. Verifica che il tuo contratto SAP ne copra l'uso in produzione. Sugli host arm64, resta sul driver hdb incluso o costruisci un'immagine tua basata su Debian. Passo per passo: SAP HANA nella documentazione di AnythingMCP.
Prompt di esempio
- "Mostrami il fatturato per periodo contabile della società 1010 nel 2025."
- "Quali clienti hanno crediti aperti più vecchi di 30 giorni, e per quanto ciascuno?"
- "I 10 clienti con il fatturato netto più alto quest'anno, dai documenti di fatturazione."
- "Quali CDS view analitiche rilasciate coprono le registrazioni contabili? Descrivi le misure della prima."
- "Cosa significano i valori del campo categoria del documento di fatturazione?"
- "Movimenti merci per tipo movimento nella divisione 1010 il mese scorso."
Risoluzione dei problemi
- Una CDS view non restituisce righe.
SAP_CLIENTmanca o è sbagliato; il connettore ne ha bisogno per impostareCDS_CLIENT. - Connessione rifiutata o redirect verso un host sconosciuto. Usa la porta SQL propria del tenant invece di quella del system database, che può reindirizzare a un nome host interno che il connettore non riesce a risolvere.
- "Insufficient privilege". La tabella non è concessa all'utente del database. Concedila, oppure chiedi a Cursor di usare una tabella o una CDS view che può leggere.
- Errore di certificato. Usa
SAP_HANA_TLS=no-verifyper un certificato autofirmato, oppure installa la CA. - Una query va in timeout. Chiedi a Cursor di filtrare per società, periodo o divisione e di aggregare in SQL; aumenta
statementTimeoutsolo se la query è davvero grande.
FAQ
Cursor può modificare dati in SAP con questo connettore?
No. La sessione HANA è in sola lettura, gira un solo SELECT, e scritture e letture con lock vengono rifiutate. Crea l'utente del database solo con grant SELECT, così HANA applica la stessa regola.
Rispetta le autorizzazioni SAP? No. L'SQL scavalca le autorizzazioni applicative di SAP, quindi sono i grant del database a decidere cosa può leggere Cursor. Se ti servono i controlli di autorizzazione di SAP, usa la via OData, oppure concedi solo tabelle e view che è lecito leggere.
La mia licenza SAP consente l'accesso SQL diretto a S/4HANA? Dipende dalla tua licenza HANA. Una licenza runtime inclusa in S/4HANA di solito non copre l'accesso SQL allo schema ABAP da parte di applicazioni terze; una licenza full-use sì. Verifica il contratto prima di collegare la produzione.
Funziona con S/4HANA Private Cloud (RISE)? Sì, se SAP fornisce un utente del database e un percorso di rete verso la porta SQL di HANA, e AnythingMCP gira dove può raggiungere quella porta. Entrambi si richiedono a SAP.
Posso usare AnythingMCP Cloud invece del self-hosting? Solo se la porta SQL di HANA è raggiungibile da internet, cosa rara e raramente consigliabile. Installa AnythingMCP self-hosted accanto a SAP.
Funziona anche con ChatGPT e Copilot? Sì. Lo stesso server MCP funziona in ChatGPT (modalità sviluppatore, piani a pagamento), GitHub Copilot, Claude e Claude Code, con gli stessi tool e gli stessi limiti di sola lettura.
Mi servono SAP BTP o SAP Joule? No. Il connettore parla direttamente con il database HANA, quindi non richiede né BTP, né Joule, né SAP Gateway. Può anche girare accanto a Joule, se usi entrambi.
È un server MCP per SAP HANA che posso gestire da solo? Sì. AnythingMCP è open source (AGPL-3.0) e gira con Docker Compose accanto a SAP. Il repository sap-hana-mcp-server contiene solo questo connettore, e Server MCP per SAP HANA lo spiega dal punto di vista di uno sviluppatore.
Cursor supporta server MCP personalizzati nel piano gratuito? Sì — MCP è disponibile nei piani Hobby, Pro e Business.
Prossimi passi
- Server MCP per SAP HANA: lo stesso connettore dal punto di vista di uno sviluppatore
- OData to MCP: l'altra via verso S/4HANA on-premise, con i controlli di autorizzazione di SAP
- Collegare SAP a Cursor: tutti i connettori SAP in sintesi
- Database to MCP: SAP HANA come semplice connettore database, accanto a SQL Server, PostgreSQL e Oracle
- SAP HANA su GitHub: opzioni della connection string e driver nativo
- Collega a Claude
- Collega a Meta Muse
- Collega a Gemini
Questa guida ti è stata utile?