MCP serverMCP servertypeExposes tools to a coding agent over MCP.See every one →What this type is →independently maintainedindependently maintainedoriginPublished by one person or a small company outside SAP. Says nothing about quality; the readings say that.See every one →

sap-mcp-server

Reads SAP ECC and S/4HANA for an agent over Gateway OData and RFC, with a Node bridge that speaks the RFC protocol without the proprietary SAP NetWeaver RFC SDK.

Tools over stdio in three groups: Gateway OData reads — a connection ping, a service list, a generic odata_query over any entity set, and three convenience readers for material, production orders and purchase orders — RFC reads with read_table, table_fields and a bapi_call restricted to a read-only allowlist in the source, and one write, create_purchase_requisition, which returns a proposal unless it is called again with confirm=True and whose SAP write is not implemented yet. The RFC half is what sets it apart: a small Node bridge on open-rfc, an Apache-2.0 package that implements the RFC protocol, so nothing here needs the licensed SAP NetWeaver RFC SDK, which is why the OData tools run on Python alone and the RFC tools want Node 22.14. sap-security-mcp reads one subject, a system's security posture, and MarkWuRY168/SAP_MCP lets a configuration table inside the system decide what is published; this one ships a fixed set of business reads and leaves the governance to SAP authorisations, the allowlist in rfc_tools.py and a denylist of credential and personnel tables. Two of its tools have nothing to do with SAP: ted_search and ted_notice query the EU's Tenders Electronic Daily and need no SAP connection.

Facts

Last pushLicenceMIT

Where it sits

Lives in
Provides
Agent access to your systemsABAPAgent access to your systemscapabilityGiving an AI agent access to the business data, configuration or operations of systems you run through an MCP server. [Serving your application over MCP](capability:mcp-servers) exposes your own service contract; system access reaches the systems behind it, and one implementation may do both. Development assistance belongs to [agent access to your code](capability:agent-code-access).
Requires
open-rfcopen-rfcartifactto implement the RFC protocol for the RFC tools without the SAP NetWeaver RFC SDK
Optional
Node.jsNode.jsoutside the atlasThe RFC half runs through a Node bridge on the open-rfc package; the OData and TED tools run on Python alone.

Who is behind it

romankorimromankorimPersonMaintains this
In the atlas: maintains 1, contributes to 1
@romankorim
maintainer

Before choosing this

Conditions

PracticalFunctional boundary

On ECC the S/4HANA API_* services that the three convenience readers default to do not exist, so each one has to be pointed at a Z service of your own or replaced by the RFC tools. read_table inherits RFC_READ_TABLE's 512-byte row, so a wide table needs an explicit field list and some fields cannot be selected at all, and the bridge starts a Node process and a fresh logon per call, with no pooling. The audit log is one line per call that includes the call arguments, so every filter and WHERE clause sent to SAP is written to a file that then has to be handled as sensitive.

PolicySAP API Policy 4.2026a§ 1.1, 1.2, 2.2.2from Agent access to your systemsAn MCP server uses SAP APIs to supply tools, resources or data to an agent.
  • § 1.1 Published APIs. Published APIs are made available for the documented purposes identified by SAP, including integration, extensions and data exchange.
  • § 1.2 Non-Published APIs. Customer and third-party applications must not access non-published APIs except where documentation permits it or SAP otherwise authorizes it.
  • § 2.2.2 AI call sequences and data extraction. Outside SAP-endorsed architectures, data services or expressly identified pathways, the policy prohibits specified agentic API use and systematic or large-scale extraction.

MCP does not replace the API's documented-use boundary. Check that every endpoint is published for the intended use and whether the policy's AI-call or extraction provisions apply to the design.

SAP API Policy 4.2026a →

What it declares

Every artifact

Type
MCP server
Origin
Independently maintained

As an MCP server

Runs as
local process
Transport
stdio
Authentication
user and password
Read-only
nostates it is not
Guardrails
7 quoted from README, Security model show all
  • Read-only by default. All OData tools use GET. All RFC tools call read-only function modules.

  • bapi_call accepts only names in the READ_BAPIS set in rfc_tools.py. Extending the list is a code change, not a runtime option.

  • read_table reads whatever the RFC user is authorized to read, except tables that hold credentials, secrets or personal data: USR*, USH*, RSEC*, SEC*, PA0*, PA9*, HRP*, T77*, RFCDES, USRBAPI, SECSTORE and the SSF_PSE tables are refused unless SAP_ALLOW_SENSITIVE_TABLES=1 is set for an audited admin session.

  • Writes are two-step. create_purchase_requisition returns a proposal unless confirm=True is passed; the intended flow is that a person reviews the proposal and the client calls again with confirm=True. The SAP write itself is not implemented yet.

  • Credentials come from .env or the environment; the server never logs them. The audit record stores the SAP user name, not the password.

  • TLS certificate verification is on by default.

  • Treat the file as sensitive: it contains every query sent to SAP.

Connections5

Your machineOn-premiseromankorim/sap-mcp-server — README, Running, checked 2026-10-15: “starts `server.py` on stdio”stdiodocumentedmay needif the RFC tools are useddocumentedrequiresdocumentedOData V2, RFC, outbounddocumentedOData V2, RFC, outbounddocumentedRFC, outboundYour MCP client, actorYour MCP clientNode.js, systemNode.jssystemSAP S/4HANA, SAP solutionSAP S/4HANASAP solutionsap-mcp-server, modulesap-mcp-serveropen-rfc, moduleopen-rfcSAP ERP (ECC), SAP solutionSAP ERP (ECC)SAP solution
SAPnot SAP's, or the project's ownstated in the documentdocumented onlyunder a condition

README

quoted from romankorim/sap-mcp-server under MIT, read
romankorim/sap-mcp-server/README.mdOn GitHub

sap-mcp-server

An MCP server that gives Claude (Desktop, Code, API) read access and approval-gated write access to SAP ECC and S/4HANA through OData and RFC/BAPI, without the proprietary SAP NetWeaver RFC SDK. The OData side talks to the SAP Gateway over HTTP. The RFC side runs through a small Node bridge on open-rfc, an Apache-2.0 licensed package that implements the RFC protocol without the SAP SDK. Every call is written to an audit log.

Why

SAP Joule ships with S/4HANA Cloud and with recent S/4HANA on-premise releases connected to BTP. ECC 6.0 has no Joule, and the only supported route to one is a migration. This server is the sidecar pattern: SAP stays as it is, the model runs where you choose (Claude Desktop, Claude Code, the Claude API, Amazon Bedrock), and the only thing between them is this process. It uses the two interfaces most SAP systems already expose, OData on the Gateway and RFC on the application server, and writes every call to an audit log.

Tools

ToolPathWhat it does
sap_ping()ODataReads the Gateway service catalog; connection test
list_services(filter_text)ODataLists OData services registered on the Gateway, optionally filtered by substring
odata_query(service, entity_set, filter, select, top, orderby)ODataReads any entity set ($filter, $select, $top capped at 200, $orderby)
get_material(material)ODataMaterial master. S/4HANA API_PRODUCT_SRV by default; on ECC point SAP_SVC_MATERIAL to a Z service
list_production_orders(plant, top)ODataProduction orders. S/4HANA API_PRODUCTION_ORDER_2_SRV by default; on ECC a Z service
list_purchase_orders(supplier, top)ODataPurchase orders. S/4HANA API_PURCHASEORDER_PROCESS_SRV by default; on ECC a Z service
create_purchase_requisition(material, quantity, plant, confirm)writeWithout confirm=True returns a proposal only. The SAP write itself (BAPI_PR_CREATE) is not implemented yet
rfc_ping()RFCRFC_SYSTEM_INFO: SID, host, release, database
read_table(table, fields, where, max_rows, skip_rows)RFCRFC_READ_TABLE on any table the RFC user is authorized to read. One row is limited to 512 bytes, so pass a field list on wide tables
table_fields(table)RFCDDIF_FIELDINFO_GET: field names, types, lengths, descriptions
bapi_call(name, params)RFCCalls a BAPI or function module from the read-only allowlist in rfc_tools.py (GETLIST, GETDETAIL, GETOPENITEMS and similar). The server rejects names outside the list
ted_search(preset, cpv, days, country, only_open, limit)TEDSearches EU public tenders on Tenders Electronic Daily by CPV code. Needs no SAP connection
ted_notice(publication_number)TEDDetails of one TED notice: lots, deadlines, estimated values, CPV codes, place of performance

Requirements

  • Python 3.10 or newer
  • Node.js 22.14 or newer for the RFC tools (open-rfc requires it). The OData and TED tools work without Node
  • An SAP user with the authorizations you intend to grant: Gateway service access for OData; S_RFC plus S_TABU_DIS or S_TABU_NAM for read_table
  • Network access from the machine running this server to the Gateway HTTP(S) port and to the application server RFC port (33NN, where NN is the system number)

Install

Clone the repository (git clone https://github.com/romankorim/sap-mcp-server.git), then:

cd sap-mcp-server
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
cd rfc-bridge && npm install && cd ..
chmod +x run.sh

Configure

cp .env.example .env

Edit .env:

VariableMeaning
SAP_BASE_URLOData root on the Gateway, usually https://<host>:<port>/sap/opu/odata/sap
SAP_CLIENTSAP client number
SAP_USER, SAP_PASSWORDSAP user for OData and, unless SAP_RFC_USER is set, for RFC
SAP_VERIFY_TLS1 (default) verifies the server certificate; 0 only for test systems with self-signed certificates
SAP_ASHOST, SAP_SYSNRApplication server host and system number for RFC
SAP_LANGRFC logon language, default EN
SAP_RFC_CLIENT, SAP_RFC_USER, SAP_RFC_PASSWORDOptional separate technical user for RFC
AUDIT_LOG_PATHAudit log file; a relative path is resolved next to server.py. Default audit.jsonl
NODE_BINPath to the node binary when it is not on PATH. Claude Desktop starts servers with a minimal PATH, so on macOS this is usually needed
TED_LANGPreferred language of multilingual TED fields, default eng
SAP_ALLOW_SENSITIVE_TABLES1 disables the sensitive-table denylist in read_table; leave unset in production
SAP_SVC_*, SAP_ES_*OData service and entity set names behind the three convenience tools; see .env.example

.env is re-read on every tool call, so a changed host or password takes effect without restarting the client. Values in .env take precedence over the process environment. Single-quote values that contain spaces or shell characters.

Run

./run.sh

run.sh loads .env, picks .venv/bin/python when it exists (otherwise $PYTHON or python3) and starts server.py on stdio. MCP clients start it the same way; you only run it by hand to see startup errors. On Windows call the venv interpreter directly with server.py as the argument; the server reads .env itself.

Claude Desktop

Quit Claude Desktop completely before editing the config file. The app rewrites claude_desktop_config.json from memory when it quits, so it overwrites any edit made while it is running.

File location: macOS ~/Library/Application Support/Claude/claude_desktop_config.json, Windows %APPDATA%\Claude\claude_desktop_config.json.

{
  "mcpServers": {
    "sap": {
      "command": "/absolute/path/to/sap-mcp-server/run.sh",
      "args": []
    }
  }
}

Start the app again. The sap tools appear in the tools list; sap_ping and rfc_ping are the first calls to try.

Claude Code

claude mcp add sap -- /absolute/path/to/sap-mcp-server/run.sh

Security model

  • Read-only by default. All OData tools use GET. All RFC tools call read-only function modules.
  • bapi_call accepts only names in the READ_BAPIS set in rfc_tools.py. Extending the list is a code change, not a runtime option.
  • read_table reads whatever the RFC user is authorized to read, except tables that hold credentials, secrets or personal data: USR*, USH*, RSEC*, SEC*, PA0*, PA9*, HRP*, T77*, RFCDES, USRBAPI, SECSTORE and the SSF_PSE tables are refused unless SAP_ALLOW_SENSITIVE_TABLES=1 is set for an audited admin session. Restrict the user with S_TABU_DIS or S_TABU_NAM on the SAP side as well.
  • Writes are two-step. create_purchase_requisition returns a proposal unless confirm=True is passed; the intended flow is that a person reviews the proposal and the client calls again with confirm=True. The SAP write itself is not implemented yet.
  • Credentials come from .env or the environment; the server never logs them. The audit record stores the SAP user name, not the password.
  • TLS certificate verification is on by default.
  • The audit log is one JSON line per call, appended to AUDIT_LOG_PATH:
{"ts": "2026-10-01T09:12:44+00:00", "user": "SAPUSER", "tool": "read_table", "args": {"table": "MARA", "fields": "MATNR,MTART,MATKL", "where": "MTART = 'FERT'", "max_rows": 20, "skip_rows": 0}, "status": "ok", "ms": 412, "note": "rfc_user=SAPUSER"}

Fields: ts (UTC), user (SAP_USER), tool, args (the call arguments, so filters and WHERE clauses end up in the log), status (ok, error, proposed, not_implemented, or http_<code> for failed OData requests), ms, note. Treat the file as sensitive: it contains every query sent to SAP.

Known limits

  • RFC_READ_TABLE returns each row as one character line of at most 512 bytes. Wide tables need an explicit field list. Selecting RPRCTR from FAGLFLEXT fails on the systems we tested.
  • The where argument is split into 72-character OPTIONS lines on whitespace. A single token longer than 72 characters is rejected.
  • odata_query caps top at 200.
  • On ECC the S/4HANA API_* OData services do not exist. Point SAP_SVC_* and SAP_ES_* to your own Z services, or use the RFC tools.
  • create_purchase_requisition does not write to SAP yet.
  • The TED API answers with HTTP 429 above roughly 10 requests per minute.
  • OData V2 only.
  • The RFC bridge starts a Node process per call, with no connection pooling. Each call opens a new logon, which adds latency.

Roadmap

  • BAPI_PR_CREATE write path behind the existing confirm=True gate
  • S/4HANA API_* style read services on ECC through Z Gateway services
  • OData V4

Pinned install and SBOM

requirements.txt states the ranges; requirements.lock is the exact set the maintainers tested (Python 3.12, pip install -r requirements.lock). sbom.cdx.json is the CycloneDX 1.6 software bill of materials for that lock, regenerated with every tagged release. The Node bridge pins its dependencies in rfc-bridge/package-lock.json.

Further reading

Maintainer

Maintained by iteractive.ai, AI implementation for SAP and enterprise systems, remote and end to end for companies in Europe and North America. Commercial support and production deployments: https://iteractive.ai/services/claude-sap-mcp

License

MIT, see LICENSE.

MIT, read

History

Latest

v0.1.0

Other 5

Notes

First tagged release of sap-mcp-server.

  • Read-only MCP server for SAP ECC 6.0 and S/4HANA: OData, RFC/BAPI (allowlisted read BAPIs), RFC_READ_TABLE with a sensitive-table denylist, one JSON audit line per call.
  • Pinned dependencies: requirements.lock (Python 3.12, mcp 1.30.0, httpx 0.28.1) and rfc-bridge/package-lock.json.
  • CycloneDX 1.6 SBOM: sbom.cdx.json (29 components).
  • Known limits are listed in the README (512-byte rows in RFC_READ_TABLE, OData V2 only, no connection pooling, open-rfc is not supported by SAP).
  • No write path in this release; create_purchase_requisition returns a proposal only.

Context: https://iteractive.ai/services/claude-sap-mcp

Agent access to your systems
  1. mcp-integration-suiteMCP server for the general Integration Suite functionsfrom BTP/BAIP
  2. mcp-is-tpmJava MCP server for Integration Suite Trading Partner Managementfrom BTP/BAIP
  3. @abap2ui5/mcp-serverMCP server for the abap2UI5 check, deploy and run loopfrom ABAP
  4. abap2UI5 for VS CodeVS Code extension to preview, activate and lint abap2UI5 appsfrom ABAP
  5. SF-MCPMCP server with 62 tools over SAP SuccessFactors OData APIsfrom SAP SuccessFactors
  6. hybris-mcp-liteRead-only MCP server over a local SAP Commerce Cloud's HACfrom SAP Commerce
  7. calmcpMCP server with read tools over the SAP Cloud ALM APIsfrom BTP/BAIP
  8. CostingGeek/sap-mcpPython MCP server fetching sales orders from SAP's business data graphfrom BTP/BAIP
  9. mcp-sap-focusedrunMCP tools over SAP Focused Run's Landscape Management Databasefrom BTP/BAIP
  10. abapsmithABAP MCP server over ADT with a local journal that can undo writesfrom ABAP
  11. cloud-alm-itsm-mcpMCP server querying installations via the SAP Cloud ALM ITSM APIfrom BTP/BAIP
  12. hana-mcp-serverMCP server for schema discovery and guarded SQL on SAP HANAfrom BTP/BAIP
  13. sap_analytics_cloud_mcpMCP server for the SAP Analytics Cloud REST APIfrom BTP/BAIP
  14. mcp-sap-cpiMCP server for Cloud Integration runtime: messages, logs, deploymentfrom BTP/BAIP
  15. AI Core MCP ServerSAP AI Core APIs as MCP tools from one JSON config filefrom BTP/BAIP
  16. BTP CF MCP ServerCloud Foundry V3 API on SAP BTP as MCP toolsfrom BTP/BAIP
  17. BTP MCP ServerBTP Core Services as MCP tools with in-chat dashboardsfrom BTP/BAIP
  18. btp-sap-odata-to-mcp-serverExposes S/4HANA or ECC OData services as MCP toolsfrom BTP/BAIP
  19. CI MCP ServerSAP Cloud Integration OData APIs as MCP toolsfrom BTP/BAIP
  20. odata-mcp-proxyConfig-driven proxy turning OData and REST endpoints into MCP toolsfrom BTP/BAIP
  21. sap-pi-mcp-serverMCP server for SAP PI and PO monitoring and directory metadatafrom BTP/BAIP
  22. sap-bdc-mcp-serverMCP server managing Delta shares in SAP Business Data Cloudfrom BTP/BAIP
  23. @mariodefe/sap-datasphere-mcpMCP server with forty-five tools across a Datasphere tenantfrom BTP/BAIP
  24. midasol/sap-mcp-serverPython MCP server for SAP Gateway OData operationsfrom BTP/BAIP
  25. odata_mcp_goGo binary bridging any OData v2 or v4 service to MCPfrom BTP/BAIP
  26. odata_mcpPython bridge generating MCP tools from OData v2 metadatafrom BTP/BAIP
  27. sap-bdc-mcpMCP tooling for SAP Business Data Cloud discovery and contractsfrom BTP/BAIP
  28. mcp-sap-datasphere-serverRead-only MCP server for exploring SAP Dataspherefrom BTP/BAIP
  29. cap-mcp-bridgeMCP server generating tools from a CAP or OData V4 service's metadatafrom CAP
  30. MCP Server for SAP BTP AdministrationSAP-hosted MCP endpoint for BTP account administrationfrom BTP/BAIP
  31. SAP LeanIX MCP ServerHosted MCP endpoint onto an SAP LeanIX instancefrom BTP/BAIP
  32. SAP-samples/hana-cli-claude-pluginClaude Code plugin registering hana-cli's MCP serverfrom BTP/BAIP
  33. SAP-samples/hana-developer-cli-tool-exampleDeveloper-centric command line for SAP HANAfrom BTP/BAIP
  34. Skybuffer AI MCP serverABAP add-on serving business data and transactions as MCP toolsfrom ABAP
  35. sap-security-mcpRead-only security analysis MCP server for SAP audits and SoD reviewfrom ABAP
  36. cpi-mcp-serverGo MCP server over Cloud Integration packages and integration flowsfrom BTP/BAIP
  37. KlystronMCP server in ABAP inside the application server, with agent skillsfrom ABAP
  38. pyrfc-mcpMCP server calling RFC-enabled function modules behind an allowlistfrom ABAP

Details

Sources3
Added by handdiscovered herechecked
github.com/romankorim/sap-mcp-servertree, pushes, contributors, CIchecked
README.mdquoted, and what the entry declareschecked

Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.

Compatibility and provenance
discovered viaAdded by hand
first seen in the atlas
ecosystem and domainabap, ai-and-agents
History in the atlas2
  1. Handed over in a chat as one address and written from the repository's own README, read raw. Placed on the ABAP door and on agent access to your systems, the concern split out of MCP servers on 2026-10-09: it reaches into a system you run from outside, as the door's two existing providers of that capability do. The README never says ABAP, so the placement rests on the system it reaches and the protocols it names — Gateway OData services, RFC/BAPI, RFC_READ_TABLE and DDIF_FIELDINFO_GET — rather than on a development model it states. Not umbrella: it names ECC and S/4HANA and reaches them through one stack's own protocols, so a door holds it. No tool_count: the README lists its tools in a table and states no count. No flavors: nothing read states standard ABAP or ABAP Cloud. No compat.runtimes: the server is Python with an optional Node bridge, which that enum cannot say.
  2. First seen.
For your agent
Ref
artifact:romankorim-sap-mcp-server
JSON
/artifacts/romankorim-sap-mcp-server.json
MCP
Connecting an agent