{"ref":"artifact:romankorim-sap-mcp-server","page":"/artifacts/romankorim-sap-mcp-server","json":"/artifacts/romankorim-sap-mcp-server.json","generated":"2026-10-28","drafted_with_ai":true,"entity":{"id":"romankorim-sap-mcp-server","name":"sap-mcp-server","artifact_type":"mcp-server","ecosystem":"abap","domain":"ai-and-agents","origin_ring":"independent","description":{"one_line":"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.","what_it_solves":"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](artifact:syntaai-sap-security-mcp) reads one subject, a system's security posture, and [MarkWuRY168/SAP_MCP](artifact: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.","when_not_to_use":"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."},"links":{"repo":"https://github.com/romankorim/sap-mcp-server"},"identity":{"author":"iteractive.ai","license":"MIT"},"source_available":true,"provides":[{"capability":"capability:agent-systems-access","what_it_does":"Reads an ECC or S/4HANA system for an agent over two paths at once: entity sets published on the SAP Gateway, and RFC function modules including RFC_READ_TABLE, DDIF_FIELDINFO_GET and a read-only BAPI allowlist.","sources":[{"url":"https://raw.githubusercontent.com/romankorim/sap-mcp-server/main/README.md","title":"romankorim/sap-mcp-server — README","checked":"2026-10-15","quote":"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"}]}],"requires":[{"ref":"external:nodejs","for":"The RFC half runs through a Node bridge on the open-rfc package; the OData and TED tools run on Python alone.","requirement":"conditional","condition":"the RFC tools are used","sources":[{"url":"https://raw.githubusercontent.com/romankorim/sap-mcp-server/main/README.md","title":"romankorim/sap-mcp-server — README, Requirements","checked":"2026-10-15","quote":"Node.js 22.14 or newer for the RFC tools (open-rfc requires it). The OData and TED tools work without Node"}]},{"ref":"artifact:marianfoo-open-rfc","for":"to implement the RFC protocol for the RFC tools without the SAP NetWeaver RFC SDK","requirement":"required","basis":"binding","role":"rfc-protocol","sources":[{"url":"https://github.com/romankorim/sap-mcp-server","title":"sap-mcp-server README","checked":"2026-10-18","quote":"The RFC side runs through a small Node bridge on [open-rfc](https://www.npmjs.com/package/open-rfc), an Apache-2.0 licensed package that implements the RFC protocol without the SAP SDK."}]}],"type_properties":{"runs":{"value":["local-process"],"sources":[{"url":"https://raw.githubusercontent.com/romankorim/sap-mcp-server/main/README.md","title":"romankorim/sap-mcp-server — README, Running","checked":"2026-10-15","quote":"`run.sh` loads `.env`, picks `.venv/bin/python` when it exists (otherwise `$PYTHON` or `python3`) and starts `server.py` on stdio."}]},"transports":{"value":["stdio"],"sources":[{"url":"https://raw.githubusercontent.com/romankorim/sap-mcp-server/main/README.md","title":"romankorim/sap-mcp-server — README, Running","checked":"2026-10-15","quote":"starts `server.py` on stdio"}]},"auth":{"value":["basic"],"sources":[{"url":"https://raw.githubusercontent.com/romankorim/sap-mcp-server/main/README.md","title":"romankorim/sap-mcp-server — README, Configuration","checked":"2026-10-15","quote":"SAP user for OData and, unless `SAP_RFC_USER` is set, for RFC"}]},"read_only":{"value":false,"source":{"url":"https://raw.githubusercontent.com/romankorim/sap-mcp-server/main/README.md","title":"romankorim/sap-mcp-server — README","checked":"2026-10-15","quote":"read access and approval-gated write access to SAP ECC and S/4HANA through OData and RFC/BAPI"}},"guardrails":[{"source":{"url":"https://raw.githubusercontent.com/romankorim/sap-mcp-server/main/README.md","title":"romankorim/sap-mcp-server — README, Security model","checked":"2026-10-15","quote":"Read-only by default. All OData tools use GET. All RFC tools call read-only function modules."}},{"source":{"url":"https://raw.githubusercontent.com/romankorim/sap-mcp-server/main/README.md","title":"romankorim/sap-mcp-server — README, Security model","checked":"2026-10-15","quote":"`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."}},{"source":{"url":"https://raw.githubusercontent.com/romankorim/sap-mcp-server/main/README.md","title":"romankorim/sap-mcp-server — README, Security model","checked":"2026-10-15","quote":"`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."}},{"source":{"url":"https://raw.githubusercontent.com/romankorim/sap-mcp-server/main/README.md","title":"romankorim/sap-mcp-server — README, Security model","checked":"2026-10-15","quote":"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."}},{"source":{"url":"https://raw.githubusercontent.com/romankorim/sap-mcp-server/main/README.md","title":"romankorim/sap-mcp-server — README, Security model","checked":"2026-10-15","quote":"Credentials come from `.env` or the environment; the server never logs them. The audit record stores the SAP user name, not the password."}},{"source":{"url":"https://raw.githubusercontent.com/romankorim/sap-mcp-server/main/README.md","title":"romankorim/sap-mcp-server — README, Security model","checked":"2026-10-15","quote":"TLS certificate verification is on by default."}},{"source":{"url":"https://raw.githubusercontent.com/romankorim/sap-mcp-server/main/README.md","title":"romankorim/sap-mcp-server — README, Security model","checked":"2026-10-15","quote":"Treat the file as sensitive: it contains every query sent to SAP."}}]},"history":[{"date":"2026-10-15","field":"entry","from":null,"to":"created","reason":"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."}],"drafted_with_ai":true,"provenance":{"discovered_via":[{"source":"source:curator"}],"first_seen":"2026-10-15"},"connects":[{"ref":"external:sap-s4hana","kind":"data","for":"reads and, with approval, writes SAP business data on [S/4HANA](external:sap-s4hana)","protocols":["odata-v2","rfc"],"direction":"outbound","sources":[{"url":"https://github.com/romankorim/sap-mcp-server","title":"sap-mcp-server README","checked":"2026-10-18","quote":"MCP server for SAP ECC and S/4HANA: Claude reads SAP data through OData and RFC/BAPI, writes wait for a person to confirm, every call audited."}]},{"ref":"external:sap-erp","kind":"data","for":"reads and, with approval, writes SAP business data on [SAP ECC](external:sap-erp)","protocols":["odata-v2","rfc"],"direction":"outbound","sources":[{"url":"https://github.com/romankorim/sap-mcp-server","title":"sap-mcp-server README","checked":"2026-10-18","quote":"MCP server for SAP ECC and S/4HANA: Claude reads SAP data through OData and RFC/BAPI, writes wait for a person to confirm, every call audited."}]}],"maintainers":["actor:romankorim"],"contributors":["actor:romankorim"]},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"unknown","evidence":"no release data"},{"label":"Continuity","tier":"fair","evidence":"one contributor, personally owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-10, not archived"}],"compatibility":[{"label":"Declared for","tier":"fair","evidence":"nothing declared"},{"label":"Survived majors","tier":"unknown","evidence":"not read on ABAP: its lines run side by side"},{"label":"Maintainer's CI","tier":"fair","evidence":"no CI configured"}],"practice":[{"label":"Tests","tier":"poor","evidence":"none found in the tree"},{"label":"Docs","tier":"good","evidence":"README 10 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":null,"unit":"installs/week"},{"value":2,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-28","npm":"not published under this name","stars":2,"forks":1,"open_issues":0,"archived":false,"pushed_at":"2026-10-24","license_spdx":"MIT","org_owned":false,"default_branch":"main","created_at":"2026-10-01T04:21:18Z","open_prs":0,"tree_truncated":false,"test_files":0,"workflows":0,"other_ci":false,"readme_bytes":10222,"docs_files":0,"changelog":false,"license_file":true,"dts_files":0,"first_commit":"2026-10-01","last_commit":"2026-10-24","commits":3,"contributors":1,"readme_path":"README.md","readme_sha":"e471a35658c30aa63e29031d8b3fd9488fc9adc9","repo_read":"2026-10-28"},"release_notes":{"license":"MIT","quotable":true,"source":{"kind":"github-releases","url":"https://github.com/romankorim/sap-mcp-server/releases"},"format":"github-releases","releases":[{"version":"0.1.0","date":"2026-10-24","date_source":"github","heading":"v0.1.0: pinned dependencies and SBOM","url":"https://github.com/romankorim/sap-mcp-server/releases/tag/v0.1.0","sections":[{"kind":"other","heading":null,"items":5}],"hash":"05f25bebd4d53078"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:romankorim","name":"romankorim","json":"/actors/romankorim.json"}],"contributors":[{"ref":"actor:romankorim","name":"romankorim","json":"/actors/romankorim.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}