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 →

pyrfc-mcp

An MCP server for calling an SAP system's RFC-enabled function modules from an agent, built so that discovering a function does not authorise calling it: a read or a write is denied unless the function name matches an allowlist the server is configured with.

Six tools sit over PyRFC: search_rfc_functions finds a function by pattern or group, get_rfc_function_interface returns its parameters, call_rfc_function executes it in read or write mode, commit_rfc_transaction and rollback_rfc_transaction close what a write opens, and read_abap_source fetches a program's source over ADT where that is reachable and over RFC otherwise, with no transport choice handed to the caller. The policy layer is the part that is not a thin wrapper: a read or a write needs the function name to match an explicit allowlist, mutating names are denied by rule, the generic table readers are guarded at table level, and a result is rejected rather than truncated when its nested table rows or serialised bytes exceed the configured limit, with every policy decision and call outcome written to an audit log. A write returns an opaque transaction_id to reuse for related writes and then hand to commit or rollback, which pins the whole SAP LUW to one RFC connection, and an abandoned transaction expires and rolls back on its own. It runs as a stdio process from a local install, with connection and policy settings in a .env file and a doctor command that checks both those and the native dependencies without contacting SAP unless --connect is passed. A demo backend answers with synthetic RFC metadata and business records through the same discovery, validation, authorisation and limiting layers, so the tools can be exercised before any SAP prerequisite is in place.

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).Agent access to your codeABAPAgent access to your codecapabilityLetting a coding agent read the project or the system you actually have, reach its model, its objects and its checks, and act on it. In file-based environments that works out of the box; complex systems need dedicated access capabilities. Whatever the environment, the agent also needs project- and framework-specific context, so it understands the thing in front of it rather than guessing from what it remembers of its training data. The transport is incidental: an MCP server, a language server or a CLI answer the same question, and what differs between them is how much of the real thing the agent can see. Distinct from [MCP servers](capability:mcp-servers), which is a protocol adapter on your own running service, and from [agent guidance](capability:agent-guidance), which is knowledge handed over as files rather than read from the thing itself.Tool governanceABAPTool governancecapabilityControlling what an agent may call, with which authorisations, and leaving an audit trail of what it did. The authorisation question that MCP exposure raises but does not answer.
Optional
SAP NetWeaver RFC SDKSAP NetWeaver RFC SDKoutside the atlasthe native library PyRFC binds to, and the prerequisite the README sends a reader to its setup document for before any live callPyRFCPyRFCoutside the atlasthe RFC client every live call goes through, pinned to the 3.3.1 release the README calls archived and yanked

Who is behind it

Yassin BahriYassin BahriPersonMaintains this
In the atlas: maintains 2, contributes to 2
@yassinbahri
maintainer

Before choosing this

Conditions

PracticalFunctional boundary

Real SAP calls need the proprietary SAP NetWeaver RFC SDK and the pyrfc==3.3.1 release the README calls archived and yanked, on Python 3.11, so without those only the demo backend answers. Not over HTTP as it stands: credentials are read from the environment for stdio, and the README says not to expose the server over HTTP without implementing the MCP authorization specification and deployment-level rate limiting. Multi-tenant auth and RBAC beyond the one server-wide policy, rate limiting, metrics and tracing, and deployment packaging are listed as not built. The result limits protect the client and not the system, since the README states they cannot reduce work already performed inside SAP, and the MCP tool annotations that describe read and write risk are advisory metadata rather than an authorisation boundary, so the service account's S_RFC and table authorisations are still what decides.

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 →
PolicySAP API Policy 4.2026a§ 1.1, 1.2, 2.2.2from Agent access to your codeAn MCP server calls ADT or another SAP API of a running system for 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.

An agent that plans and executes ADT calls is the case section 2.2.2 names. Check that the endpoints are published for the intended use, and that the design runs within a pathway SAP identifies for it.

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
Read-only
nostates it is not
Guardrails
6 quoted from README show all
  • It is deny-by-default: discovering an RFC does not authorize calling it.

  • Function allowlists, mutating-name deny rules, sensitive-table guards, result limits, and connection-affine transactions remain enforced at the server.

  • Reads and writes are denied unless their function names match explicit allowlists.

  • MCP tool annotations describe read/write risk for capable clients, but are advisory metadata—not an authorization boundary.

  • Do not expose the server over HTTP without implementing the MCP authorization specification and deployment-level rate limiting.

  • they cannot reduce work already performed inside SAP

For agent access to ABAP code

Read
sourcesearchwhere-usedDDICCDStable data
Change
writecreateactivatetransportsgit
Check
syntaxATCABAP Unit
Run
run codedumps
property statedstated nonot said

Connections6

pyrfc-mcp connectionspyrfc-mcpPROVIDES→ provides3provides stated Reads ABAP program source out of the system for the agent through one tool, over ADT where that is reachable and over RFC otherwise. yassinbahri/pyrfc-mcp — README: https://raw.githubusercontent.com/yassinbahri/pyrfc-mcp/main/README.md yassinbahri/pyrfc-mcp — README, Tools: https://raw.githubusercontent.com/yassinbahri/pyrfc-mcp/main/README.mdAgent access to your codeprovides stated Puts an SAP system's RFC-enabled function modules in front of an agent as tools, with finding a function and reading its interface kept apart from calling it, and a policy layer deciding which names may be called at all. yassinbahri/pyrfc-mcp — README: https://raw.githubusercontent.com/yassinbahri/pyrfc-mcp/main/README.md pyrfc-mcp — PyPI: https://pypi.org/project/pyrfc-mcp/Agent access to your systemsprovides stated Decides what an agent may call before the call happens: read and write allowlists of function names, a deny rule for mutating names, a table-level guard on the generic table readers, fail-closed limits on what a result may return, and an audit log of every policy decision and call outcome. yassinbahri/pyrfc-mcp — README, Scope: https://raw.githubusercontent.com/yassinbahri/pyrfc-mcp/main/README.md yassinbahri/pyrfc-mcp — README: https://raw.githubusercontent.com/yassinbahri/pyrfc-mcp/main/README.mdTool governanceNEEDS→ connects to1connects to stated Calls remote-enabled function modules in the system and reads program source from it; a write holds the whole SAP unit of work on one RFC connection until it is committed or rolled back. yassinbahri/pyrfc-mcp — README: https://raw.githubusercontent.com/yassinbahri/pyrfc-mcp/main/README.md yassinbahri/pyrfc-mcp — README, Scope: https://raw.githubusercontent.com/yassinbahri/pyrfc-mcp/main/README.mdABAP platformInterface: Remote Function Call(RFC) · rfc→ optionally needs2optionally needs stated If: a real SAP system is called; demo mode replaces the SAP transport with a synthetic backend the RFC client every live call goes through, pinned to the 3.3.1 release the README calls archived and yanked yassinbahri/pyrfc-mcp — README, Setup: https://raw.githubusercontent.com/yassinbahri/pyrfc-mcp/main/README.md yassinbahri/pyrfc-mcp — README, Try it without SAP: https://raw.githubusercontent.com/yassinbahri/pyrfc-mcp/main/README.mdPyRFCifoptionally needs stated If: a real SAP system is called; demo mode replaces the SAP transport with a synthetic backend the native library PyRFC binds to, and the prerequisite the README sends a reader to its setup document for before any live call yassinbahri/pyrfc-mcp — README, Setup: https://raw.githubusercontent.com/yassinbahri/pyrfc-mcp/main/README.md yassinbahri/pyrfc-mcp — README, Try it without SAP: https://raw.githubusercontent.com/yassinbahri/pyrfc-mcp/main/README.mdSAP NetWeaver RFC SDKif

Install

python -m pip install pyrfc-mcp
rfc-mcp doctor --demo --connect
rfc-mcp --demo

Copied from yassinbahri/pyrfc-mcp — README, Try it without SAP, read . Not run by the atlas.

Your machineyassinbahri/pyrfc-mcp — README, Security posture, checked 2026-09-29: “Stdio credentials come from the environment and are never placed in MCP tool arguments.”stdiodocumentedmay needif a real SAP system iscalled; demo mode replaces theSAP transport with a synthetic b…documentedmay needif a real SAP system iscalled; demo mode replaces theSAP transport with a synthetic b…documentedRFCoutbound, sync, lands onRemote Function Call (RFC), Remo…Your MCP client, actorYour MCP clientSAP NetWeaver RFC SDK, SoftwareSAP NetWeaver RFC SDKSoftwarePyRFC, SoftwarePyRFCSoftwareABAP platform, SAP solutionABAP platformSAP solutionpyrfc-mcp, modulepyrfc-mcp
SAPnot SAP's, or the project's ownstated in the documentdocumented onlyunder a condition

README

quoted from yassinbahri/pyrfc-mcp under MIT, read
yassinbahri/pyrfc-mcp/README.mdOn GitHub

pyrfc-mcp

CI Python 3.11 License: MIT

MCP server exposing SAP RFC-enabled function modules (BAPIs/RFCs) to AI agents through a discovery-first interface, built on SAP's pyrfc connector — plus automatic ABAP source reading (ADT when reachable, transparent RFC fallback otherwise, see docs/adt_rfc_integration_plan.md).

It is deny-by-default: discovering an RFC does not authorize calling it. Function allowlists, mutating-name deny rules, sensitive-table guards, result limits, and connection-affine transactions remain enforced at the server.

Try it without SAP

The supported demo backend uses deterministic synthetic RFC metadata and business records. It exercises the real discovery, validation, authorization, result-limiting, and MCP tool layers; only the final SAP transport is replaced.

python -m pip install pyrfc-mcp
rfc-mcp doctor --demo --connect
rfc-mcp --demo

No SAP account, PyRFC installation, or SAP NW RFC SDK is needed for demo mode. Configure an MCP client with the included .mcp.json.example to explore it immediately.

Setup

See docs/setup.md for the SAP NW RFC SDK + Python 3.11 prerequisites (required before real SAP calls work) and docs/architecture.md for the layer overview, including the read/write policy model, the generic-table-reader guard, and audit logging.

For a real system, install the proprietary SDK prerequisites, then:

uv sync --extra dev
copy .env.example .env    # fill in connection + policy settings
uv run rfc-mcp doctor     # validates config and native dependencies, no SAP call
uv run rfc-mcp doctor --connect  # explicitly performs a live SAP ping
uv run pytest             # unit tests, synthetic backend, no SAP needed
uv run mcp dev src/rfc_mcp/mcp/server.py

Real SAP connectivity additionally requires the proprietary SAP NW RFC SDK and the archived/yanked pyrfc==3.3.1 connector. Read the support warning and installation steps in docs/setup.md before running uv sync --extra sap or the smoke test.

doctor intentionally redacts connection and credential values. It does not contact SAP unless --connect is present, and it also supports --json for automation.

Tools

  • search_rfc_functions(pattern, group=None, limit=50)
  • get_rfc_function_interface(function_name)
  • call_rfc_function(function_name, parameters, mode="read"|"write", transaction_id=None)
  • commit_rfc_transaction(transaction_id, wait=False)
  • rollback_rfc_transaction(transaction_id)
  • read_abap_source(object_type, object_name, function_group=None) — one tool, no transport choice exposed to the caller; see docs/architecture.md.

ABAP knowledge skill

.claude/skills/sap-abap/ vendors the third-party sap-abap Claude Skill so an agent using this server also has accurate ABAP language knowledge on hand. It's licensed separately (GPL-3.0, its own LICENSE/NOTICE.md) from the rest of this project — see below.

Scope

Foundation, connection layer, discovery, execution, and MCP integration are built and tested, including a deny-by-default read/write policy, a table-level guard against the generic-table-reader injection surface (RFC_READ_TABLE et al.), fail-closed RFC response limits, and audit logging of every policy decision and call outcome. Not built: multi-tenant auth/RBAC beyond the single server-wide policy, rate limiting, metrics/tracing, and deployment packaging — see docs/architecture.md's "Out of scope" section for what’s deliberately deferred and why.

Write calls return an opaque transaction_id. Reuse it for related writes, then pass it to commit or rollback. This pins the entire SAP LUW to one RFC connection; abandoned transactions expire and roll back automatically.

Security posture

  • Reads and writes are denied unless their function names match explicit allowlists. The example configuration only permits discovery, source reading, and the harmless STFC_CONNECTION smoke test.
  • MCP tool annotations describe read/write risk for capable clients, but are advisory metadata—not an authorization boundary. Server policy and the SAP service account's S_RFC/table authorizations remain mandatory.
  • Stdio credentials come from the environment and are never placed in MCP tool arguments. Do not expose the server over HTTP without implementing the MCP authorization specification and deployment-level rate limiting.
  • RFC results are rejected rather than silently truncated when their cumulative nested table rows or serialized UTF-8 JSON size exceed RFC_MCP_RESULT_MAX_TABLE_ROWS or RFC_MCP_RESULT_MAX_SERIALIZED_BYTES. These limits protect MCP consumers; they cannot reduce work already performed inside SAP.
  • See SECURITY.md for reporting and deployment guidance.

License

MIT (see LICENSE), with one carved-out exception: .claude/skills/sap-abap/ is vendored third-party content under GPL-3.0 — see its own LICENSE and NOTICE.md. Including that directory does not place the rest of the project under GPL-3.0.

MIT, read

History

Latest

v0.2.0

Features 4, Changed 3, Fixes 1

Notes
Added
  • A supported synthetic demo backend that exercises the real discovery, policy, validation, result-limit, and MCP layers without SAP or PyRFC.
  • The rfc-mcp --demo first-run path with safe demo allowlist defaults.
  • The rfc-mcp doctor preflight command, optional live connectivity testing, redacted output, and machine-readable JSON reports.
  • Trusted Publishing workflow for secret-free, release-triggered PyPI uploads.
Changed
  • SAP connection settings are loaded only when the SAP backend is selected.
  • Connection consumers now depend on a typed connection-manager protocol, allowing production and synthetic transports to share the same runtime.
  • Package metadata now includes project links and expanded discovery keywords.
Fixed
  • CodeQL initialization and analysis actions now use the same release.
  1. v0.1.0dated in the atlas

    Removed 1, Features 4, Changed 3

    Notes
    Added
    • Connection-affine SAP transactions with opaque IDs, expiry, and shutdown rollback.
    • Bounded connection-pool acquisition timeouts.
    • MCP read/write risk annotations.
    • Locked dependencies, CI, security scanning, contribution guidance, and templates.
    Changed
    • Read access is deny-by-default and must be explicitly allowlisted.
    • PyRFC is an optional, exactly pinned legacy dependency.
    • Local MCP configuration is now supplied as a portable example.
    Removed
    • Generated bytecode, local session files, and runtime logs from the distributable tree.

Others providing52

Agent access to your systems
  1. @abap2ui5/mcp-serverMCP server for the abap2UI5 check, deploy and run loop
  2. abap2UI5 for VS CodeVS Code extension to preview, activate and lint abap2UI5 apps
  3. abapsmithABAP MCP server over ADT with a local journal that can undo writes
  4. btp-sap-odata-to-mcp-serverExposes S/4HANA or ECC OData services as MCP tools
  5. midasol/sap-mcp-serverPython MCP server for SAP Gateway OData operations
  6. odata_mcp_goGo binary bridging any OData v2 or v4 service to MCP
  7. odata_mcpPython bridge generating MCP tools from OData v2 metadata
  8. sap-mcp-serverReads 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.
  9. Skybuffer AI MCP serverABAP add-on serving business data and transactions as MCP tools
  10. sap-security-mcpRead-only security analysis MCP server for SAP audits and SoD review
  11. KlystronMCP server in ABAP inside the application server, with agent skills
Agent access to ABAP code
  1. @abap2ui5/mcp-serverMCP server for the abap2UI5 check, deploy and run loop
  2. arc-1-bopf-enharc-1 extension for reading and maintaining BOPF enhancements
  3. HammerNative macOS code editor for ABAP and CDS
  4. arc-1-lspEdition of ARC-1 that runs ADT calls through adt-ls
  5. arc-1MCP server over the ADT REST API for ABAP objects
  6. arc1-abap-bridgeVS Code bridge between arc-1 and ADT for VS Code
  7. arc1-adt-abap-mcp-extEclipse add-on enabling the ADT MCP server with read-only tools
  8. ABAP Accelerator MCP ServerAWS's ABAP MCP server for Amazon Q Developer and Kiro
  9. Modernization Agents for SAP on AWSAWS agents for ABAP, PI/PO and BW modernisation work
  10. @mcp-abap-adt/coreABAP ADT MCP server published as an npm scope and plugin
  11. chandrashekhar-mahajan/abap-mcp-serverABAP MCP server with ADT tools and five authentication strategies
  12. dassian-adtFork of mcp-abap-abap-adt-api with 25 tools and session recovery
  13. erpl-adtC++ binary speaking the ADT REST API as a CLI and MCP server
  14. bw-modeling-mcpMCP server for BW/4HANA modelling objects
  15. EPOD ADT MCP ServerMCP server for ABAP on the ADT session, in Eclipse or standalone
  16. ZARC1_EXTENSION_FORMSarc-1 extension for SAPscript and Smart Forms objects
  17. fgalastri/MCP_ABAPValidates an ABAP class before it is deployed by converting the global class to a local one and syntax-checking that — plus CDS DDL and table metadata retrieval.
  18. fr0ster/mcp-abap-adtABAP MCP server with full CRUD on on-premise and ABAP Cloud
  19. abapsmithABAP MCP server over ADT with a local journal that can undo writes
  20. sap-ai-dev-toolkitMCP proxy pinning an agent's ABAP tools to one SAP system
  21. aibap.mcpGo MCP server that writes, activates and runs ABAP classes via ADT
  22. BellaEclipse plugin bringing Claude into ABAP Development Tools
  23. Maherd18/sap-mcp-serverPolicy-checked MCP server for ABAP development over ADT
  24. sapdumpmcpMCP server reading ABAP short dumps over ADT
  25. ABAP remote filesystemVS Code extension editing ABAP systems over ADT as a filesystem
  26. mcp-abap-abap-adt-apiWrite-oriented MCP server over abap-adt-api
  27. mcp-abap-adtRead-oriented MCP server fetching ABAP programs, classes, tables
  28. SAP MCP Connection ManagerWindows desktop manager handing SAP connections to assistants over MCP
  29. ABAPilotMCP connector for ECC and on-premise S/4HANA with a licensed SAP side
  30. vibing-steampunkADT-to-MCP bridge in Go reaching past what ADT exposes
  31. ADT MCP ServerLocal HTTP MCP server started from ABAP Development Tools for VS Code
  32. ABAP Development Tools for VS CodeSAP's ABAP tools in VS Code for editing, debugging, ATC and transports
  33. SAP Joule for Developers, ABAP AI capabilitiesSAP's AI for ABAP development in ADT for Eclipse and VS Code
  34. ABAPDocMCPMCP server turning a transport request into a WRICEF specification
  35. claude-sap-kitClaude Code plugin adding Custom_* tools to arc-1
  36. Skybuffer AI MCP serverABAP add-on serving business data and transactions as MCP tools
  37. abap-adt-cliCLI that pulls and pushes ABAP packages as local files over ADT
  38. workskong/mcp-abap-adtLight MCP adapter for ABAP over ADT, documented in Korean
  39. KlystronMCP server in ABAP inside the application server, with agent skills
  40. ABAP-AI-CODE-TOOLSabapGit package adding create, modify and delete tools to ABAP AI Code
  41. ABAP AI CodeAgentic coding assistant in ABAP that runs as an SAP GUI report
  42. VERTEXADT extension for Eclipse and VS Code showing three SAP GUI tools
Tool governance
  1. arc-mcp-hubHub on SAP BTP putting several arc-1 instances behind one login
  2. SuperClaude for SAPClaude Code plugin with an ABAP MCP server and write guards
  3. bw-modeling-mcpMCP server for BW/4HANA modelling objects
  4. Maherd18/sap-mcp-serverPolicy-checked MCP server for ABAP development over ADT
  5. SAP API Policy Evidence SkillSkill assessing API usage against the SAP API Policy

Details

Sources3
Added by handdiscovered herechecked
github.com/yassinbahri/pyrfc-mcptree, 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 atlas3
  1. The concern it answers is reaching into an SAP system from outside, split out of MCP servers on this day; the sentence on the edge is unchanged.
  2. Handed over as a URL. Filed behind the ABAP door because the system it reaches is an ABAP one and the reader who points it at theirs is working on that system, which is the opposite case from [open-rfc](artifact:marianfoo-open-rfc), a client an ABAP developer would never install. Three edges: [MCP servers](capability:mcp-servers) for the tool surface over function modules, [agent access to your code](capability:agent-code-access) for `read_abap_source` alone, and [tool governance](capability:tool-governance) for the allowlists, the table guard, the result limits and the audit log, which the README states as the point of the server rather than as a footnote. [RFC connectivity](capability:rfc-connectivity) was considered and left off: the RFC client here is [PyRFC](external:pyrfc), so nobody installs this to call a function module from their own code. No flavor is stated, since the README names no ABAP release or cloud edition, and `auth` and `tool_count` are left out because the README names neither a mechanism nor a number.
  3. First seen.
For your agent
Ref
artifact:yassinbahri-pyrfc-mcp
JSON
/artifacts/yassinbahri-pyrfc-mcp.json
MCP
Connecting an agent