SAP connector for Claude
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
SAP S/4HANA, read-only. Production by default; dev only via switch_environment. PREFER TABLE READS: read_sap_table / aggregate_sap_table read any table or view like SE16, fast and exact, under the user's own authorizations. LET SAP DO THE ARITHMETIC: aggregate_sap_table, find_duplicates, trial_balance_by_period, open_items_ageing, grir_differences return results, not rows; never add up rows yourself. SAP GUI REPORTS (find_sap_reports, sap_report_info, run_sap_report): when the user names a report or tcode; ask before any report that may post or change data. OData (query_entity, get_service_metadata) only when a table read is refused, too large, or lacks SAP logic / derived fields. WHERE = ABAP Open SQL: '1000', leading zeros ('0001010000'), dates '20260401'. KEEP IT SMALL: big results go to Excel (you get a summary + path); ask for totals, only needed fields; the per-conversation SAP allowance can only be extended by the user. Key tables: ACDOCA (RLDNR '0L', RBUKRS, GJAHR, POPER, BELNR, RACCT, HSL signed amount in company-code currency, BUDAT, PRCTR, KOSTL, LIFNR, KUNNR); BKPF/BSEG; BSID/BSAD, BSIK/BSAK (open/cleared AR/AP); SKA1/SKAT/SKB1; VBAK/VBAP, LIKP/LIPS, VBRK/VBRP; EKKO/EKPO/EKBE, RBKP/RSEG; MARA/MARC/MBEW, MATDOC; LFA1/KNA1/BUT000; T001, T030, T685/T683S. If old stand-alone SAP tools (mcp__sap__...) still appear: tell the user to restart Claude, then log in to SAP again.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| token_budgetB | SAP data pulled in this conversation, per tool, and the limits. No SAP call. reset=true asks the USER in a window for more allowance. |
| list_servicesB | Search the Gateway catalog for OData services by name/title substring. Prefer a search term over paging. |
| get_service_metadataB | OData service structure: entity sets, or one entity's keys and fields (cached 7 days). raw=true returns the full EDMX (very large; avoid). refresh re-downloads. |
| query_entityC | Generic OData v2 query ($select/$filter/$orderby/$top/$skip/$expand) on a service's entity set. |
| whoamiC | Active SAP system, host, client and user. |
| list_environmentsB | SAP systems available, which is active, and login status. No SAP call. |
| switch_environmentA | Point all SAP tools at prod or dev (also production/development/test/SID) for this session. Non-prod answers carry _sap_env: never report them as live books. Same env = reload login. |
| read_sap_tableA | Read rows of any SAP table or DB view, like SE16. FIRST CHOICE for SAP data. For totals use aggregate_sap_table; unsure of field names: describe_sap_table. where: ABAP Open SQL, not OData: 'quoted' literals, internal formats (leading zeros, dates '20250401'), e.g. "KAPPL = 'M' AND KSCHL LIKE 'Z%'". fields: comma list (keys always included); name them, wide tables get large. top max 1000; page with skip (answer gives next_skip). drop_empty omits blank fields. |
| aggregate_sap_tableA | Totals computed in SAP: one call instead of paging rows. measures: comma list of SUM:f, AVG:f, MIN:f, MAX:f, COUNT, COUNTD:f (results named SUM_HSL, ROW_COUNT, COUNTD_BELNR...). group_by: comma fields (empty = one row). where: ABAP Open SQL. order_by: result columns, e.g. "SUM_HSL DESC" with top=20. top max 1000. E.g. TB: table=ACDOCA, measures=SUM:HSL, group_by=RACCT, where="RLDNR = '0L' AND RBUKRS = '1000' AND GJAHR = '2026'". |
| find_duplicatesA | Groups of rows sharing the same values on |
| trial_balance_by_periodA | Trial balance from ACDOCA computed in SAP: per G/L account opening (incl. carry-forward), period debit/credit, closing, with names. periods 1-16 (opening = periods before period_from); optional account range; ledger default 0L. Full-year results are also saved to Excel. |
| open_items_ageingA | Vendor/customer ageing computed in SAP: open items at key_date (YYYY-MM-DD, default today) per partner in buckets by days past net due (not due, 1-30, 31-60, 61-90, 91-180, >180), with names. account_type: vendor | customer. top max 1000. |
| grir_differencesA | GR/IR differences computed in SAP from EKBE: per PO item, GR vs IR quantity and value, only mismatches. Optional vendor, po, key_date (YYYY-MM-DD, default today). top max 1000. |
| describe_sap_tableA | A table's fields (name, type, length, key, description); cached 7 days. search filters by name or description; refresh re-reads from SAP. |
| condition_typesA | Pricing condition types (T685/T685T/T685A) with texts, access sequence and control data. No condition_type: paged list (limit/offset; prefer search, sales has ~1000); with one: all filled fields. application: V sales, M purchasing, TX tax. usage A = pricing. language: 1-letter key. |
| pricing_procedureB | Steps of a pricing procedure (T683S, as in V/08 / M/08) with texts; only filled fields, field_legend explains columns. application V/M/TX or empty for all; usage A = pricing. |
| account_determinationA | MM account determination (OBYC / T030) with G/L names. transaction key e.g. WRX (GR/IR), BSX (inventory), GBB (offsetting), PRD (price diff), KDM (FX diff). chart_of_accounts: empty = the configured chart(s); "*" = all incl. SAP sample charts (only if asked). Optional valuation_class (BKLAS), account_modifier (KOMOK), valuation_modifier (BWMOD). |
| find_sap_reportsA | Find reports by name pattern (programs and their transaction codes, with titles), e.g. "ZFI*", "AGEING". |
| sap_report_infoA | A report's selection fields and saved variants (report = tcode or program). Call before run_sap_report. |
| run_sap_reportA | Run an SAP GUI report (tcode or program) and save its output: ALV to Excel with the report's own headings (Downloads/SAP reports), classic lists to text. Returns path, columns, preview; read the file for the rest. ASK THE USER FIRST before any report that may post, change or send anything. variant: saved variant (easiest). selections override it: {"S_BUKRS": "1000", "P_KEYDT": "20260930", "S_KUNNR": ["1000","1001"], "S_BUDAT": {"low": "20260401", "high": "20260930"}}, internal formats. max_rows max 5000. No popups; must finish in ~55 s. |
| get_attachmentsA | GOS attachments of an SAP document: lists them and saves the files to Downloads/SAP attachments (content is never returned; open the saved file). kind: invoice (MIRO, needs year), material_doc (needs year), po, fi (needs year + company_code). Or raw object_type + object_key (e.g. BUS2091). download=false only lists. |
| sap_loginA | Opens a login window on the user's screen for their own SAP user (password never in chat; kept in the OS keychain). Use when a tool reports missing or rejected credentials, or when asked. env: prod (default) | dev. Waits up to 10 min. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 22 tools
Most tools occupy distinct niches: purpose-built analytics (trial_balance_by_period, open_items_ageing, grir_differences, account_determination, pricing_procedure) are clearly separable, and descriptions explicitly steer choices (read_sap_table 'FIRST CHOICE', aggregate for totals, describe for field names). Minor overlap remains between query_entity (OData) and read_sap_table (Open SQL/SE16) and between find_duplicates and aggregate_sap_table with group_by, but the descriptions disambiguate them adequately.
All names are lowercase snake_case, giving a predictable surface. However the convention mixes verb_noun (list_services, query_entity, read_sap_table, run_sap_report) with bare noun phrases for report-style tools (grir_differences, trial_balance_by_period, token_budget, condition_types), which is a readable but noticeable deviation rather than a single unified pattern.
22 tools is on the high side of the ideal range, but each maps to a genuinely distinct SAP capability (connectivity/auth, metadata discovery, generic table access, aggregation, and several packaged finance/MM analyses). Nothing looks like filler, though a couple of generic query tools could in principle be folded together.
The surface covers the full read/analysis lifecycle: environment and login management, service and table metadata, raw and aggregated reads, duplicate detection, targeted finance/MM reports, report discovery/execution, and attachment retrieval. Gaps are mainly by design (no write/update/post operations, no master-data lookup helpers), which agents can work around via read_sap_table and run_sap_report.