<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Cap on Marian Zeis Blog</title>
    <link>https://blog.zeis.de/tags/cap/</link>
    <description>Recent content in Cap on Marian Zeis Blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 10 Aug 2026 09:30:00 +0200</lastBuildDate>
    <atom:link href="https://blog.zeis.de/tags/cap/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Introducing open-rfc: Calling SAP RFC from Node.js Without the SDK</title>
      <link>https://blog.zeis.de/posts/2026-08-10-open-rfc/</link>
      <pubDate>Mon, 10 Aug 2026 09:30:00 +0200</pubDate>
      <guid>https://blog.zeis.de/posts/2026-08-10-open-rfc/</guid>
      <description>&lt;p&gt;If you ever wanted to call a remote-enabled ABAP function module from JavaScript or Node.js, you probably discovered quite quickly that this is not as easy as it sounds.&lt;/p&gt;&#xA;&lt;p&gt;There is an RFC protocol. There are remote-enabled function modules. There is an npm package called &lt;a href=&#34;https://github.com/SAP-archive/node-rfc&#34;&gt;&lt;code&gt;node-rfc&lt;/code&gt;&lt;/a&gt;. So you would expect to install the package, add the connection details, and make the call.&lt;/p&gt;&#xA;&lt;p&gt;But &lt;code&gt;npm install node-rfc&lt;/code&gt; was never the complete setup.&lt;/p&gt;&#xA;&lt;p&gt;You also need the SAP NetWeaver RFC SDK. You need the right authorization to download it from the SAP Support Portal, the correct build for your operating system and architecture, and the current supported patch level. The native libraries must be installed where the runtime can find them. On Linux that usually means configuring &lt;code&gt;SAPNWRFC_HOME&lt;/code&gt; and the library search path. If no suitable prebuilt addon exists, you also need the C++ build toolchain, Python, &lt;code&gt;node-gyp&lt;/code&gt;, and headers to compile the Node.js addon.&lt;/p&gt;&#xA;&lt;p&gt;Then this has to work again in Docker, CI/CD, Cloud Foundry, Kyma, or wherever the application is deployed. The SDK cannot simply be bundled into a public npm package because SAP is its distribution channel. Even SAP&amp;rsquo;s own &lt;a href=&#34;https://community.sap.com/t5/technology-blog-posts-by-sap/abap-rfc-connectivity-from-btp-node-js-buildpack-and-kyma/ba-p/13573993&#34;&gt;BTP and Kyma example&lt;/a&gt; has to copy the SDK into the buildpack application, rebuild the native module, and configure the library path for runtime.&lt;/p&gt;&#xA;&lt;p&gt;This is all possible. Many projects have done it successfully for years. But it is quite a lot of setup for what starts as: I only want to call one function module.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-short-history-of-rfc-outside-abap&#34;&gt;A short history of RFC outside ABAP&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://support.sap.com/en/product/connectors/nwrfcsdk.html&#34;&gt;SAP NetWeaver RFC SDK&lt;/a&gt; is the native C and C++ foundation for RFC clients and servers. Projects such as &lt;a href=&#34;https://github.com/SAP-archive/PyRFC&#34;&gt;PyRFC&lt;/a&gt; and &lt;a href=&#34;https://github.com/SAP-archive/node-rfc&#34;&gt;&lt;code&gt;node-rfc&lt;/code&gt;&lt;/a&gt; made it usable from Python and Node.js, but both remained language bindings around this separately installed SDK.&lt;/p&gt;&#xA;&lt;p&gt;These projects were valuable and gave both ecosystems practical APIs. Their shared problem was the native dependency, followed by the end of maintenance. The last &lt;code&gt;node-rfc&lt;/code&gt; release was published in November 2023, followed by PyRFC 3.3.1 in January 2024. In July 2024 SAP published the same announcement for &lt;a href=&#34;https://github.com/SAP-archive/node-rfc/issues/329&#34;&gt;&lt;code&gt;node-rfc&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;https://github.com/SAP-archive/PyRFC/issues/372&#34;&gt;PyRFC&lt;/a&gt;: changed priorities meant it could no longer maintain the projects. The bindings used an SDK patch no longer supported by SAP, with no planned update. After ownership could not be transferred to new maintainers, as explained in the final updates for &lt;a href=&#34;https://github.com/SAP-archive/node-rfc/issues/329#issuecomment-2541486229&#34;&gt;&lt;code&gt;node-rfc&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;https://github.com/SAP-archive/PyRFC/issues/372#issuecomment-2541490558&#34;&gt;PyRFC&lt;/a&gt;, both repositories were eventually archived on May 28, 2026. The &lt;code&gt;node-rfc&lt;/code&gt; package on npm is deprecated too.&lt;/p&gt;&#xA;&lt;p&gt;There are forks, but they keep the same basic architecture. You still need the native SDK, platform-specific binaries, and somebody able to follow SDK changes.&lt;/p&gt;&#xA;&lt;p&gt;There is also a newer SAP path for CAP. The public &lt;a href=&#34;https://www.npmjs.com/package/@sap/cds-rfc&#34;&gt;&lt;code&gt;@sap/cds-rfc&lt;/code&gt;&lt;/a&gt; plugin uses &lt;code&gt;@sap-rfc/node-rfc-library&lt;/code&gt; for low-level RFC communication. That connector is not available on the standard npm registry. According to the plugin documentation, it is available only for Linux and Windows, and SAP customers need an S-user, an SAP Build Code license, and credentials for SAP&amp;rsquo;s Repository-Based Shipment Channel. macOS users have to use a container.&lt;/p&gt;&#xA;&lt;p&gt;So the old open-source binding is archived, while the newer supported connector adds an entitlement, a private registry, and platform-specific deployment requirements. I would expect an easier answer from SAP for such a fundamental integration protocol.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-conversation-that-started-open-rfc&#34;&gt;The conversation that started open-rfc&lt;/h2&gt;&#xA;&lt;p&gt;For a long time I was not very concerned about this. Most of my RFC contact is inside ABAP, not outside it. When I had a small Node.js use case, the setup was complicated enough that I simply did not continue. With AI it may be a bit easier to fight through native build errors and deployment files, but the underlying dependencies are still there.&lt;/p&gt;&#xA;&lt;p&gt;Then the topic came up during the evening events at &lt;a href=&#34;https://code-connect.dev/&#34;&gt;Code Connect 2026&lt;/a&gt;. Even SAP employees were annoyed by the current situation. The discussion was more or less: this should be rewritten without those dependencies, and in the world of AI it cannot be that hard.&lt;/p&gt;&#xA;&lt;p&gt;I started an AI coding session the same night.&lt;/p&gt;&#xA;&lt;p&gt;Spoiler: even with AI, it is hard.&lt;/p&gt;&#xA;&lt;p&gt;I have been working on it since that evening, with AI helping across research, implementation, tests, and review. The deeper I went, the clearer it became that writing something that works once is not the hard part. The hard part is proving that it behaves correctly across SAP releases and also in failures.&lt;/p&gt;&#xA;&lt;p&gt;Once you go deeper into RFC, a much larger world opens up. The client first has to log on, understand the function module and its parameters, translate JavaScript values into ABAP values, send and receive sometimes large structures and tables, and keep the connection in a safe state when something fails. Timeouts are especially tricky: the application may not know whether SAP already executed the call. Retrying a write automatically could therefore execute it twice.&lt;/p&gt;&#xA;&lt;p&gt;The good news is that RFC is documented better than I first expected. I used the official &lt;a href=&#34;https://support.sap.com/content/dam/support/en_us/library/ssp/products/connectors/nwrfcsdk/NW_RFC_750_ProgrammingGuide.pdf&#34;&gt;SAP NW RFC SDK 7.50 Programming Guide&lt;/a&gt;, the current SDK Doxygen documentation, the ABAP Keyword Documentation for the &lt;a href=&#34;https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/ABENRFC_PROTOCOL.html&#34;&gt;RFC protocol&lt;/a&gt;, interfaces, restrictions, and session context, plus SAP&amp;rsquo;s Network Interface documentation and relevant SAP Notes. The archived &lt;code&gt;node-rfc&lt;/code&gt; and PyRFC APIs and tests are also important compatibility references.&lt;/p&gt;&#xA;&lt;p&gt;I also used &lt;a href=&#34;https://github.com/OWASP/pysap&#34;&gt;OWASP pysap&lt;/a&gt; and its &lt;a href=&#34;https://pysap.readthedocs.io/en/latest/&#34;&gt;documentation&lt;/a&gt; as a low-level reference for SAP network protocols. pysap, initially designed and developed by Martin Gallo, is a Python and Scapy packet-crafting and protocol-research toolkit, while open-rfc is an application-facing Node.js RFC client. Thank you to Martin and all pysap contributors for making this research available.&lt;/p&gt;&#xA;&lt;p&gt;Most importantly, I do not only test against mocks. Because of &lt;a href=&#34;https://github.com/arc-mcp/arc-1&#34;&gt;ARC-1&lt;/a&gt;, I already have three ABAP trial systems for SAP NetWeaver 7.50, SAP S/4HANA 2023, and SAP S/4HANA 2025. Development tests run against all three. The formal first-beta support contract is intentionally smaller and qualifies NetWeaver 7.50 and S/4HANA 2023 with the exact packaged artifact.&lt;/p&gt;&#xA;&lt;p&gt;I keep offline protocol, property, fault, resource, and compatibility tests separate from live SAP evidence. The supported &lt;code&gt;node-rfc&lt;/code&gt; facade is exercised against a pinned corpus from the archived project. For a beta release, the same exact tarball must pass as a standalone dependency, as the &lt;code&gt;node-rfc&lt;/code&gt; npm alias, and below unchanged &lt;code&gt;@sap/cds-rfc&lt;/code&gt;. A green test from some earlier source checkout does not promote a different package.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-the-first-beta-includes&#34;&gt;What the first beta includes&lt;/h2&gt;&#xA;&lt;p&gt;The result is &lt;a href=&#34;https://github.com/marianfoo/open-rfc&#34;&gt;open-rfc&lt;/a&gt;, an SDK-free TypeScript and JavaScript RFC client for Node.js. The current beta is &lt;a href=&#34;https://www.npmjs.com/package/open-rfc&#34;&gt;open-rfc on npm&lt;/a&gt;, licensed under Apache 2.0.&lt;/p&gt;&#xA;&lt;p&gt;The installed package has zero runtime dependencies. It contains portable JavaScript and TypeScript declarations, with no native addon, no SAP NW RFC SDK, no post-install download, and no runtime framework. It supports ESM and CommonJS and the same package is used in three ways:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;directly through the &lt;code&gt;open-rfc&lt;/code&gt; API;&lt;/li&gt;&#xA;&lt;li&gt;as an npm alias for existing &lt;code&gt;node-rfc&lt;/code&gt; client and pool consumers; and&lt;/li&gt;&#xA;&lt;li&gt;as the low-level connector below an unchanged &lt;code&gt;@sap/cds-rfc&lt;/code&gt; installation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The first beta focuses on direct application-server connections with password authentication and classic Unicode RFC. It includes metadata lookup and caching, synchronous function calls, common scalar values, exact decimals, date and time values, binary data, STRING and XSTRING, structures, tables, timeouts, cancellation, reset, bounded connection pooling, and representative commit and rollback paths.&lt;/p&gt;&#xA;&lt;p&gt;It also includes &lt;code&gt;Client&lt;/code&gt; and &lt;code&gt;Pool&lt;/code&gt; facades for the common archived &lt;code&gt;node-rfc&lt;/code&gt; API and the modern &lt;code&gt;RFCClient&lt;/code&gt; and &lt;code&gt;RFCConnection&lt;/code&gt; facade expected by SAP&amp;rsquo;s CAP connector. Unsupported security or serializer options fail before business I/O. A timeout, cancellation, malformed response, or uncertain send retires the physical connection, and open-rfc never automatically replays the call.&lt;/p&gt;&#xA;&lt;p&gt;The official 0.2.3 release matrix currently qualifies Ubuntu 24.04 x64 with Node.js 22.14 or newer, or Node.js 24. Because the package is portable JavaScript with no native addon, it is expected to work on other Node.js platforms too. macOS, Windows, and other Linux versions are not official release claims yet, so I especially want users to report what they try there.&lt;/p&gt;&#xA;&lt;p&gt;The 0.x line has no production SLA. Direct classic RFC also has no transport encryption or peer authentication by itself. It belongs on a trusted private network or inside a separately managed protected tunnel, not openly across the internet.&lt;/p&gt;&#xA;&lt;h2 id=&#34;btp-cloud-connector-and-an-arc-1-extension&#34;&gt;BTP, Cloud Connector, and an ARC-1 extension&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;open-rfc&lt;/code&gt; 0.2.3 also makes it possible to call an on-premise SAP system from BTP Cloud Foundry through SAP Cloud Connector. The &lt;a href=&#34;https://marianfoo.github.io/open-rfc/routes/&#34;&gt;documented route&lt;/a&gt; uses the BTP Connectivity service and Cloud Connector to reach the SAP system. I tested the exact published package end to end from Cloud Foundry to SAP S/4HANA 2023. This proves the path works, but it has not yet been tested broadly enough to be part of the release&amp;rsquo;s qualified scope.&lt;/p&gt;&#xA;&lt;p&gt;I added the same setup to the &lt;a href=&#34;https://github.com/arc-mcp/arc-1-extension-sample&#34;&gt;ARC-1 extension sample&lt;/a&gt;. Its &lt;code&gt;Custom_RfcSystemInfo&lt;/code&gt; tool calls the read-only &lt;code&gt;RFC_SYSTEM_INFO&lt;/code&gt; function, accepts no user input, is off by default, uses a dedicated RFC user, and only returns selected fields. It shows how an ARC-1 extension can add an RFC tool beside ADT and OData without installing the SDK.&lt;/p&gt;&#xA;&lt;p&gt;My tested setup uses a dedicated technical SAP user. Cloud Connector protects the connection between BTP and the company network. Inside the company network, RFC still needs a trusted network, and the technical user should only be allowed to call the exact function modules needed.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-beta-does-not-mean-almost-10&#34;&gt;Why beta does not mean almost 1.0&lt;/h2&gt;&#xA;&lt;p&gt;This first beta is not a release candidate for 1.0. RFC has too many paths for that claim.&lt;/p&gt;&#xA;&lt;p&gt;The default target for 1.0 is intentionally smaller: direct application-server RFC with password authentication, the standalone API, the &lt;code&gt;node-rfc&lt;/code&gt; compatibility layer, and unchanged &lt;code&gt;@sap/cds-rfc&lt;/code&gt; through the npm override. Before 1.0, this still needs deeper testing of failures, isolation, large values, transactions, pool contention, repeated runs, and long-running use. It also needs a frozen API and support policy, real adopters, operational readiness, and another independent security and correctness review.&lt;/p&gt;&#xA;&lt;p&gt;Message-server load balancing, SAProuter, WebSocket RFC, and passing individual user identities through Cloud Connector are conditional candidates. They enter 1.0 only if the scope decision includes them and live tests can prove them. Otherwise they remain later work.&lt;/p&gt;&#xA;&lt;p&gt;Other features are later work, not promises for 1.0: registered RFC server mode and ABAP callbacks, tRFC, qRFC, bgRFC, Throughput APIs, SNC, X.509, non-Unicode and MDMP systems, basXML, and complete SAP NW RFC SDK parity.&lt;/p&gt;&#xA;&lt;p&gt;I prefer to make this boundary explicit. A package that accepts every option and silently ignores half of them looks compatible until the day it causes a production problem.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-cap-replacement-i-wanted-from-the-beginning&#34;&gt;The CAP replacement I wanted from the beginning&lt;/h2&gt;&#xA;&lt;p&gt;One especially important goal was a drop-in replacement for &lt;code&gt;@sap-rfc/node-rfc-library&lt;/code&gt; below SAP&amp;rsquo;s &lt;code&gt;@sap/cds-rfc&lt;/code&gt; CAP plugin. I do not want to fork or rebuild the CAP layer. SAP&amp;rsquo;s unchanged package should continue to own RFC imports, destination lookup, Cloud SDK integration, multitenancy, and the CAP lifecycle. open-rfc should replace only the low-level connector.&lt;/p&gt;&#xA;&lt;p&gt;With npm 11, the application can declare a nested override:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;@sap/cds-rfc&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;2.2.1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;open-rfc&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0.2.3&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;overrides&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;@sap/cds-rfc&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;@sap-rfc/node-rfc-library&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;$open-rfc&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Your CAP service code stays unchanged. The normal &lt;code&gt;cds import --from rfc&lt;/code&gt; flow stays with &lt;code&gt;@sap/cds-rfc&lt;/code&gt;, and existing &lt;code&gt;cds.connect.to()&lt;/code&gt; calls still go through the SAP plugin. After installation, &lt;code&gt;npm explain @sap-rfc/node-rfc-library&lt;/code&gt; shows whether the override resolved to open-rfc.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://marianfoo.github.io/open-rfc/cap/&#34;&gt;dedicated CAP guide&lt;/a&gt; explains the full setup, importer boundary, local credentials, destination boundary, transactions, and shutdown behavior. This should make local development and CI/CD much simpler because the application installs an ordinary npm artifact. There is no SDK archive to copy, no native addon to compile, and no extra SAP npm registry credential for this connector.&lt;/p&gt;&#xA;&lt;p&gt;The qualified beta scope still covers only the direct application-server route with password authentication. An easier installation does not magically qualify every destination and authentication mode, so please read the &lt;a href=&#34;https://marianfoo.github.io/open-rfc/status/&#34;&gt;release status&lt;/a&gt; for the exact version you install.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-need-your-help&#34;&gt;I need your help&lt;/h2&gt;&#xA;&lt;p&gt;Now comes the most important part. I can build a lot and I am willing to put in the work, but I cannot reproduce every SAP system, function module, network route, value shape, and deployment environment alone.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://marianfoo.github.io/open-rfc/&#34;&gt;documentation&lt;/a&gt; is also part of the project, not a finished manual that users can only consume. It already covers the quick start, standalone and &lt;code&gt;node-rfc&lt;/code&gt; use, CAP, Cloud Connector, configuration, safety, operations, troubleshooting, release status, and the road to 1.0. The sources live in the public &lt;a href=&#34;https://github.com/marianfoo/open-rfc/tree/main/docs_page&#34;&gt;&lt;code&gt;docs_page&lt;/code&gt; folder&lt;/a&gt;. If something is unclear, wrong for your environment, or missing a useful example, please open an issue or improve the page. A clearer explanation or a correction from a real setup can be as valuable as a code change.&lt;/p&gt;&#xA;&lt;p&gt;The public repository now also contains a broad offline test suite, and its documentation links and examples are checked automatically. The &lt;a href=&#34;https://github.com/marianfoo/open-rfc/blob/main/CONTRIBUTING.md&#34;&gt;contribution guide&lt;/a&gt; explains how to prepare code and documentation changes safely.&lt;/p&gt;&#xA;&lt;p&gt;Please test the beta with your real use cases, starting with a read-only function on a non-production system. Try the data types your application really uses. Test errors, cancellation, pools, and transactions, not only one successful &lt;code&gt;RFC_PING&lt;/code&gt;. If you find a problem, open an issue with the open-rfc version, Node.js version, operating system, SAP release family, route type, function interface shape, and the smallest safe reproducer you can create.&lt;/p&gt;&#xA;&lt;p&gt;Do not attach credentials, endpoints, system identities, business data, returned tables, raw traces, or packet captures to a public issue. If the problem needs private information, first describe the redacted shape so we can find a safe way to reproduce it.&lt;/p&gt;&#xA;&lt;p&gt;If you prefer to throw tokens at the problem, do that as well. The repository ships a prompt written for exactly this situation: &lt;a href=&#34;https://github.com/marianfoo/open-rfc/blob/main/.claude/commands/report-rfc-failure.md&#34;&gt;report an RFC failure&lt;/a&gt;. You do not need a checkout of the repository to use it. It has an agent first check whether your case is inside the documented boundary, then reduce the failure to a synthetic reproducer that keeps the real ABAP types and invents everything else, and finally fill in every field of the bug template. The redaction rules are part of the prompt, so an agent following it will not put your system identities, credentials, or business data into a public issue.&lt;/p&gt;&#xA;&lt;p&gt;If you want to go further than reporting, the &lt;a href=&#34;https://github.com/marianfoo/open-rfc/blob/main/.claude/commands/deep-bug.md&#34;&gt;deep bug workflow&lt;/a&gt; picks up from there: root cause before any change, then a test that was seen to fail without the fix, then a focused pull request. External contributors will not have my private live-system evidence, so give the agent only a synthetic reproducer and public information. I can run the necessary SAP checks after the issue is reduced safely.&lt;/p&gt;&#xA;&lt;p&gt;And of course, contributions are welcome. This project should not become one person&amp;rsquo;s private RFC implementation with a public repository around it. I want it to become truly open, understandable, testable, and useful for different scenarios.&lt;/p&gt;&#xA;&lt;p&gt;That takes more work. I am ready to do it, but I need your systems, your use cases, your bug reports, and your review.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s make this work.&lt;/p&gt;&#xA;&lt;h2 id=&#34;references-and-links&#34;&gt;References and links&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/marianfoo/open-rfc&#34;&gt;open-rfc repository&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://marianfoo.github.io/open-rfc/&#34;&gt;open-rfc documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://marianfoo.github.io/open-rfc/cap/&#34;&gt;open-rfc CAP integration guide&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://marianfoo.github.io/open-rfc/status/&#34;&gt;open-rfc release status&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/marianfoo/open-rfc/blob/main/CONTRIBUTING.md&#34;&gt;open-rfc contribution guide&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://marianfoo.github.io/open-rfc/roadmap/&#34;&gt;open-rfc road to 1.0&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/marianfoo/open-rfc/releases/tag/v0.2.3&#34;&gt;open-rfc 0.2.3 release&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/arc-mcp/arc-1-extension-sample&#34;&gt;ARC-1 extension sample&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://support.sap.com/en/product/connectors/nwrfcsdk.html&#34;&gt;SAP NetWeaver RFC SDK&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://support.sap.com/content/dam/support/en_us/library/ssp/products/connectors/nwrfcsdk/NW_RFC_750_ProgrammingGuide.pdf&#34;&gt;SAP NW RFC SDK 7.50 Programming Guide&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/SAP-archive/node-rfc&#34;&gt;Archived SAP node-rfc project&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/SAP-archive/node-rfc/issues/329&#34;&gt;node-rfc maintenance announcement&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/SAP-archive/PyRFC&#34;&gt;Archived SAP PyRFC project&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/SAP-archive/PyRFC/issues/372&#34;&gt;PyRFC maintenance announcement&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/OWASP/pysap&#34;&gt;OWASP pysap&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.npmjs.com/package/@sap/cds-rfc&#34;&gt;SAP CAP RFC plugin&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://code-connect.dev/&#34;&gt;Code Connect 2026&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>ABAP and Agentic AI: The Hidden Problem in Real Projects</title>
      <link>https://blog.zeis.de/posts/2026-04-22-ai-abap-development/</link>
      <pubDate>Wed, 22 Apr 2026 09:00:00 +0200</pubDate>
      <guid>https://blog.zeis.de/posts/2026-04-22-ai-abap-development/</guid>
      <description>&lt;p&gt;Series note: This post is part of my &lt;a href=&#34;https://blog.zeis.de/tags/ai-abap-development-series/&#34;&gt;AI ABAP development series&lt;/a&gt;, where I go from AI development in general, to ABAP-specific problems, and then to ARC-1.&lt;/p&gt;&#xA;&lt;p&gt;In the &lt;a href=&#34;https://blog.zeis.de/posts/2026-04-20-how-i-use-ai/&#34;&gt;first post of this series&lt;/a&gt;, I wrote more generally about how I use AI today, why context matters so much, and why I am still not fully convinced by the more maximalist agentic hype.&lt;/p&gt;&#xA;&lt;p&gt;Here I want to get more concrete.&#xA;Because SAP development is not one thing, and that matters a lot for AI.&lt;/p&gt;&#xA;&lt;p&gt;There is a big difference between UI5 or CAP development with AI and ABAP development with AI. If I mix those together, then the whole discussion becomes too vague very quickly.&lt;/p&gt;&#xA;&lt;p&gt;For me this comes down to three questions:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;How does the model get the needed context?&lt;/li&gt;&#xA;&lt;li&gt;Where does the writing happen?&lt;/li&gt;&#xA;&lt;li&gt;Who is actually in control of that setup?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I want to answer those questions in this post.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sap-development-is-not-one-thing&#34;&gt;SAP development is not one thing&lt;/h2&gt;&#xA;&lt;p&gt;When people talk about &amp;ldquo;AI in SAP development&amp;rdquo;, a lot of very different things get mixed together.&lt;/p&gt;&#xA;&lt;p&gt;UI5, Fiori, CAP, BTP extensions, ABAP Cloud, ABAP on a shared dev system, Joule in Eclipse, MCP servers, local git workflows, sandbox systems, custom code migration. All of that gets thrown into one big AI bucket.&lt;/p&gt;&#xA;&lt;p&gt;But these are not the same problem.&#xA;The reason I want to split this early is simple: some SAP development areas already fit quite naturally into AI assisted workflows, and some really do not.&lt;/p&gt;&#xA;&lt;p&gt;If I do not separate that clearly, then the discussion becomes too vague very quickly.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-ui5-and-cap-already-feel-much-more-natural&#34;&gt;Why UI5 and CAP already feel much more natural&lt;/h2&gt;&#xA;&lt;p&gt;For frontend work like UI5, Fiori, CAP, or generally JS and TS based development, AI usage already feels much more normal. The development is usually off stack. You work in local files, use git, open pull requests, run CI/CD pipelines, let tests run, get peer review, and only then move the change further. If AI does something weird, it is annoying, but usually not catastrophic, because there are already good gates in this ideal process.&lt;/p&gt;&#xA;&lt;p&gt;That is also why GitHub Copilot in VS Code became pretty normal in a lot of companies. If you combine that with good context, for example docs from SAP Help or SAP Docs through MCP, then you can already move quite fast today. I use my own &lt;a href=&#34;https://github.com/marianfoo/mcp-sap-docs&#34;&gt;sap-mcp-docs server&lt;/a&gt; a lot for exactly that. SAP also moved in that direction with MCP servers for &lt;a href=&#34;https://community.sap.com/t5/technology-blog-posts-by-sap/give-your-ai-agent-some-tools-introducing-the-ui5-mcp-server/bc-p/14206959&#34;&gt;UI5&lt;/a&gt;, &lt;a href=&#34;https://community.sap.com/t5/technology-blog-posts-by-sap/boost-your-cap-development-with-ai-introducing-the-mcp-server-for-cap/ba-p/14202849&#34;&gt;CAP&lt;/a&gt;, and &lt;a href=&#34;https://community.sap.com/t5/technology-blog-posts-by-sap/sap-fiori-tools-update-first-release-of-the-sap-fiori-mcp-server-for/ba-p/14204694&#34;&gt;Fiori&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In that environment the three questions above are much easier to answer:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Context comes from local files, documentation, and existing dev tooling.&lt;/li&gt;&#xA;&lt;li&gt;Writing happens locally, not directly in a shared SAP system.&lt;/li&gt;&#xA;&lt;li&gt;Control already exists through git, reviews, tests, and pipelines.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So the main question there is often more about workflow quality than about technical possibility.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-abap-is-structurally-harder&#34;&gt;Why ABAP is structurally harder&lt;/h2&gt;&#xA;&lt;p&gt;In the ABAP world things look different. The two main problems are the architecture and the tooling.&lt;/p&gt;&#xA;&lt;p&gt;ABAP development is usually on stack. That means if you develop on the dev system, every change is directly applied to that shared system and can affect other developers as well. Even without AI that is already something you have to be careful with. With AI it becomes more sensitive, because a wrong write action is not just a wrong local file edit.&lt;/p&gt;&#xA;&lt;p&gt;The second problem is tooling. A lot of ABAP developers still use SE80. Eclipse has been there for a long time, but if you were never forced into newer development models like RAP, a lot of people just stayed where they were. And if your main world is still SE80, then there is not really much serious AI support there.&lt;/p&gt;&#xA;&lt;p&gt;So if I compare UI5 and ABAP, the problem is not only &amp;ldquo;does the model know ABAP&amp;rdquo;. The bigger question is in which environment this happens at all, and what happens if the model is wrong.&lt;/p&gt;&#xA;&lt;p&gt;That is also why I think the SAP Community post &lt;a href=&#34;https://community.sap.com/t5/technology-blog-posts-by-sap/the-agentic-revolution-is-here-and-your-abap-code-is-the-foundation/ba-p/14358726&#34;&gt;The agentic revolution is here, and your ABAP code is the foundation&lt;/a&gt; fits quite well here.&lt;/p&gt;&#xA;&lt;p&gt;The point there is not really that agents replace ABAP. It is more that if agents are going to call into SAP systems, then your ABAP foundation matters even more. Interfaces, CDS views, checks, naming, error handling, package structure, all of that becomes important.&lt;/p&gt;&#xA;&lt;p&gt;The better and clearer your ABAP foundation is, the more useful and safer the agent layer on top can become, because  they use your ABAP code as the foundation for their work.&lt;/p&gt;&#xA;&lt;p&gt;Model choice still matters, of course. I already wrote two separate posts around &lt;a href=&#34;https://blog.zeis.de/posts/2026-02-09-abap-llm-benchmark/&#34;&gt;ABAP code generation&lt;/a&gt; and &lt;a href=&#34;https://blog.zeis.de/posts/2026-03-05-abap-llm-benchmark-understanding/&#34;&gt;ABAP understanding&lt;/a&gt;, and my practical takeaway is still that strong general models together with better tooling and grounding are currently the better path than hoping one SAP specific model alone solves the problem. But even with a better model, the structural ABAP problem stays the same: on stack writes, shared systems, and weak control do not disappear. Frontier models are just better to handle more complex problems as with complexity comes usually a larger context to handle, and frontier models are usually better at that.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-three-questions-matter-more-than-the-hype&#34;&gt;The three questions matter more than the hype&lt;/h2&gt;&#xA;&lt;p&gt;I think this is also why &lt;a href=&#34;https://simonwillison.net/guides/agentic-engineering-patterns/&#34;&gt;Agentic Engineering Patterns&lt;/a&gt; from Simon Willison fits so well here.&lt;/p&gt;&#xA;&lt;p&gt;What I like there is that &amp;ldquo;agentic&amp;rdquo; is not treated like some magical category. It is more a set of working patterns: tools in a loop, tests, boundaries, anti-patterns, habits, and when not to let the loop run too far. For ABAP this matters even more, because the question is not only if an agent can do something, but what kind of loop you actually allow it to run against a real SAP system.&lt;/p&gt;&#xA;&lt;p&gt;So for every pattern below I want to keep asking the same three questions:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How does the model get context?&lt;/li&gt;&#xA;&lt;li&gt;Where does writing happen?&lt;/li&gt;&#xA;&lt;li&gt;Who controls that setup?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;current-patterns-for-ai-assisted-abap-development&#34;&gt;Current patterns for AI assisted ABAP development&lt;/h2&gt;&#xA;&lt;p&gt;Lars Hvam wrote a very useful paper on the &lt;a href=&#34;https://github.com/heliconialabs/patterns-for-using-llms-in-abap-development&#34;&gt;patterns for using LLMs in ABAP development&lt;/a&gt;. You can read more details and see diagrams there.&lt;/p&gt;&#xA;&lt;p&gt;I like that framing because it avoids the fake discussion of &amp;ldquo;one right way&amp;rdquo;. There is not one right way. There are different patterns with different tradeoffs depending on your landsacpe, knowledge, and setup.&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-ide-integrated-ai-in-eclipse&#34;&gt;1. IDE integrated AI in Eclipse&lt;/h3&gt;&#xA;&lt;p&gt;This is the most obvious option. You stay where you already work and let the built in AI features help with explanations, code suggestions, tests, and smaller implementation tasks. Depending on landscape and setup, that could mean &lt;a href=&#34;https://www.sap.com/products/artificial-intelligence/joule-for-developers.html&#34;&gt;Joule for Developers&lt;/a&gt;, &lt;a href=&#34;https://marketplace.eclipse.org/content/github-copilot&#34;&gt;GitHub Copilot in Eclipse&lt;/a&gt;, or &lt;a href=&#34;https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/q-in-IDE-setup.html&#34;&gt;Amazon Q Developer for Eclipse&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Context:&lt;/strong&gt; Mostly the currently selected SAP object plus what the IDE integration can access or what you add manually.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Writing:&lt;/strong&gt; Directly to the SAP system.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Control:&lt;/strong&gt; Mostly on the developer side, not much central boundary around the agent loop itself.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This is easy to adopt as &amp;ldquo;quick win&amp;rdquo;, but it does not solve the core architecture problem.&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-vs-code-today-mostly-with-abap-remote-fs-and-soon-also-with-saps-own-extension&#34;&gt;2. VS Code, today mostly with ABAP Remote FS and soon also with SAP&amp;rsquo;s own extension&lt;/h3&gt;&#xA;&lt;p&gt;This gives a much better AI developer experience because VS Code is simply ahead in that area compared to Eclipse. Today that usually means community tooling like ABAP Remote FS. But SAP&amp;rsquo;s own &lt;a href=&#34;https://community.sap.com/t5/technology-blog-posts-by-sap/introducing-the-next-era-of-abap-development/ba-p/14260522&#34;&gt;ABAP Cloud Extension for VS Code&lt;/a&gt; is planned for Q2 2026, so likely around May if that timeline holds. That means ABAP Remote FS is probably more of a bridge than the long term answer, at least for the scenarios SAP will cover first.&lt;/p&gt;&#xA;&lt;p&gt;The problem stays similar though. If the setup writes back directly through ADT APIs, then the nicer editor experience still does not remove the main risk.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Context:&lt;/strong&gt; Better local editor experience, but still tied to what the tool can read from the system.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Writing:&lt;/strong&gt; Still directly to the SAP system.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Control:&lt;/strong&gt; Still relatively weak if the whole setup sits with the individual developer.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So the nicer developer experience does not remove the main risk.&lt;/p&gt;&#xA;&lt;h3 id=&#34;3-adt-mcp-server&#34;&gt;3. ADT MCP Server&lt;/h3&gt;&#xA;&lt;p&gt;This is where things get really interesting.&lt;/p&gt;&#xA;&lt;p&gt;With an ADT MCP server the AI does not just see files. It gets structured tools. It can read objects, search code, inspect context, run checks, navigate references, write changes, etc., depending on what the server allows.&lt;/p&gt;&#xA;&lt;p&gt;This is also currently one of the best ways to solve the context problem.&lt;/p&gt;&#xA;&lt;p&gt;I already wrote earlier about this direction in &lt;a href=&#34;https://blog.zeis.de/posts/2026-02-04-abap-mcp-server/&#34;&gt;Finally: An MCP Server for ABAP&lt;/a&gt;, and since then the space has grown a lot. That is also why I keep &lt;a href=&#34;https://blog.zeis.de/posts/2026-03-05-sap-ai-mcp-servers-overview/&#34;&gt;SAP MCP Servers: The Missing Overview&lt;/a&gt; around, because the number of SAP MCP servers and adjacent tools is growing quickly enough that it is easy to lose track.&lt;/p&gt;&#xA;&lt;p&gt;The AI can say: I have a problem in this class, now get me the class, then maybe read the related table, check another class, search similar code, maybe combine that with SAP documentation from another MCP server like &lt;a href=&#34;https://github.com/marianfoo/mcp-sap-docs&#34;&gt;sap-mcp-docs&lt;/a&gt;, and build up the context automatically. That is really useful.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Context:&lt;/strong&gt; Very strong, because tools can gather much richer SAP context such as objects, data, and logs.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Writing:&lt;/strong&gt; Potentially directly to the SAP system.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Control:&lt;/strong&gt; Depends entirely on how the MCP server is designed, configured, and deployed.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This is exactly why the MCP path is so interesting and so dangerous at the same time.&lt;/p&gt;&#xA;&lt;p&gt;It solves a real problem, but it also raises the control question much more sharply. It is also why SAP&amp;rsquo;s post on &lt;a href=&#34;https://community.sap.com/t5/technology-blog-posts-by-sap/standardizing-ai-tool-integration-with-mcp-part-2-implementing-mcp-with-sap/ba-p/14359181&#34;&gt;Standardizing AI Tool Integration with MCP&lt;/a&gt; matters. MCP in SAP is not just some hobby side path anymore. It is becoming part of the real architectural conversation.&lt;/p&gt;&#xA;&lt;h3 id=&#34;4-sandbox-systems&#34;&gt;4. Sandbox systems&lt;/h3&gt;&#xA;&lt;p&gt;In my opinion this is one of the safest options.&lt;/p&gt;&#xA;&lt;p&gt;Give the AI a sandbox system that can be isolated, reset, or recreated, and suddenly much more becomes possible without damaging the shared dev system.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Context:&lt;/strong&gt; Very strong, because the AI can still inspect and work against a real SAP system.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Writing:&lt;/strong&gt; Direct, but only into an isolated system.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Control:&lt;/strong&gt; Much better than shared-system direct access, but with infrastructure cost and operational overhead.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This is a very good pattern if you can afford it. The problem is that most teams do not have this luxury.&lt;/p&gt;&#xA;&lt;h3 id=&#34;5-git-or-off-stack-development-with-abapgit-and-cicd&#34;&gt;5. Git or off stack development with abapGit and CI/CD&lt;/h3&gt;&#xA;&lt;p&gt;In many ways this is the cleanest approach.&lt;/p&gt;&#xA;&lt;p&gt;The AI never writes to the SAP system directly. It writes local files, then git, review, checks, and pipeline steps become the gate.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Context:&lt;/strong&gt; Depends on what additional read access you give the AI.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Writing:&lt;/strong&gt; Local first, not directly on the SAP system.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Control:&lt;/strong&gt; Much stronger, because review and automation become the boundary.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This is how a lot of frontend development already works, and it is much easier to trust.&lt;/p&gt;&#xA;&lt;p&gt;The problem is that many ABAP teams are simply not there yet. If there is no clear package separation, no git workflow, and no pipeline culture, then introducing this only for AI becomes a bigger transformation project.&lt;/p&gt;&#xA;&lt;h3 id=&#34;6-hybrid-approach&#34;&gt;6. Hybrid approach&lt;/h3&gt;&#xA;&lt;p&gt;This is the pattern I find currently the most practical long term.&lt;/p&gt;&#xA;&lt;p&gt;The AI works locally or off stack, but still gets read access to the SAP system through ADT or MCP for context.&lt;/p&gt;&#xA;&lt;p&gt;That means it can understand the actual system better, but the writing still happens in a gated git flow.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Context:&lt;/strong&gt; Strong.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Writing:&lt;/strong&gt; Gated.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Control:&lt;/strong&gt; Much better than direct write access, while still preserving real system context.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For me this is one of the most promising directions.&lt;/p&gt;&#xA;&lt;h2 id=&#34;read-access-already-gives-a-lot-of-value&#34;&gt;Read access already gives a lot of value&lt;/h2&gt;&#xA;&lt;p&gt;One thing I find important here is that AI does not need direct write access to be useful. For many real problems, reading and analysis can already take away maybe 80 percent of the work. If an issue comes in, the first question is usually not &amp;ldquo;who writes the line of code&amp;rdquo;, but &amp;ldquo;where is the actual problem&amp;rdquo;. If the AI can analyse the system, narrow it down, read code, data and logs, suggest where the bug is, and maybe propose the one line change, then the developer can still do that actual line manually. Or the AI writes the proposed fix and the developer still copy pastes it, reviews it properly, and tests it. That alone is already a lot of support.&lt;/p&gt;&#xA;&lt;p&gt;And this read access is not only useful for developers who want to code faster. It can also help people working more on architecture, specifications, analysis, testing, and migration. If they can read how the system works, where logic is implemented, how much something is used, or what the dependencies are, then that already helps a lot, for changes, fixes and the transformation from ECC to S/4HANA.&lt;/p&gt;&#xA;&lt;p&gt;That is also why I do not really buy the simple management idea that you just give everyone Copilot or an Agentic AI coding tool and suddenly everyone codes much faster. That is not the real point.&lt;/p&gt;&#xA;&lt;p&gt;The bigger question for me is how to help ABAP developers and SAP teams in their daily work with things like:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;faster problem analysis&lt;/li&gt;&#xA;&lt;li&gt;less wasted time searching for the right place&lt;/li&gt;&#xA;&lt;li&gt;easier access to relevant documentation, logs, and data&lt;/li&gt;&#xA;&lt;li&gt;faster understanding of old logic&lt;/li&gt;&#xA;&lt;li&gt;better support while writing specs and tests&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;An MCP server for documentation, an MCP server for SAP access, and access to more internal documentation can already help a lot here without giving full write access to everything.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-current-setups-still-do-not-solve&#34;&gt;What current setups still do not solve&lt;/h2&gt;&#xA;&lt;p&gt;So where is the actual gap today?&lt;/p&gt;&#xA;&lt;p&gt;For me it is not that AI cannot write ABAP. It can. It is also not that AI has no SAP context at all anymore. That situation is improving a lot through ADT tooling, MCP servers, documentation access, and better models.&lt;/p&gt;&#xA;&lt;p&gt;The real gap is that context access, write access, and control are tied much more closely together in ABAP than in off stack development, and that becomes an enterprise problem very quickly.&lt;/p&gt;&#xA;&lt;p&gt;What is often still missing is some combination of proper read-only defaults, operation boundaries, package restrictions, blocking dangerous features like free SQL, per-user identity instead of shared technical access, auditing, and a setup that security, basis, and development can all still trust.&lt;/p&gt;&#xA;&lt;p&gt;That is also why I am skeptical of setups where powerful ADT MCP servers simply run locally on the laptop of an individual user. If someone can set it up, and usually that is not even that hard, then suddenly you have a very powerful bridge from the model into the SAP system, but without much admin oversight around it. In an enterprise landscape that is not ideal at all.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-an-ideal-setup-would-look-like&#34;&gt;What an ideal setup would look like&lt;/h2&gt;&#xA;&lt;p&gt;So for me the question is not if agentic ABAP development is possible. It already is.&lt;/p&gt;&#xA;&lt;p&gt;The more important question is what a setup would need to look like if it should actually work in enterprise reality.&lt;/p&gt;&#xA;&lt;p&gt;For me that ideal direction is something like this: strong read access to real SAP context, useful structured tools instead of blind file edits, write access that is either gated or at least strongly restricted, central deployment instead of every user doing their own thing locally, clear identity handling, auditability, and enough safety boundaries that basis, security, and development can all live with it.&lt;/p&gt;&#xA;&lt;p&gt;That does not mean every team needs the exact same architecture. But it does mean the next step cannot just be &amp;ldquo;give the model more power and hope for the best&amp;rdquo;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-this-matters-for-the-next-post&#34;&gt;Why this matters for the next post&lt;/h2&gt;&#xA;&lt;p&gt;The next post is where I want to look at what a more enterprise-ready ADT MCP setup should actually provide if you take those problems seriously from the beginning.&lt;/p&gt;&#xA;&lt;h2 id=&#34;discuss-this-post&#34;&gt;Discuss this post&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://saptodon.org/@Mianbsp/116450582013903540&#34;&gt;Saptodon&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://bsky.app/profile/marian.zeis.de/post/3mk4idkeoi224&#34;&gt;Bluesky&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.linkedin.com/posts/marianzeis_abap-and-agentic-ai-the-hidden-problem-in-activity-7452940568571232256-GF_S&#34;&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;related-posts&#34;&gt;Related posts&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.zeis.de/posts/2026-04-20-how-i-use-ai/&#34;&gt;How I Use AI for Development and Why Context Matters&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.zeis.de/posts/2026-02-04-abap-mcp-server/&#34;&gt;Finally: An MCP Server for ABAP&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.zeis.de/posts/2026-03-05-sap-ai-mcp-servers-overview/&#34;&gt;SAP MCP Servers: The Missing Overview&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>SAP MCP Servers: The Missing Overview</title>
      <link>https://blog.zeis.de/posts/2026-03-05-sap-ai-mcp-servers-overview/</link>
      <pubDate>Thu, 05 Mar 2026 09:00:00 +0100</pubDate>
      <guid>https://blog.zeis.de/posts/2026-03-05-sap-ai-mcp-servers-overview/</guid>
      <description>&lt;p&gt;If you are searching for &lt;strong&gt;SAP MCP Servers&lt;/strong&gt; (Model Context Protocol), you quickly run into the same problem:&lt;/p&gt;&#xA;&lt;p&gt;Which SAP MCP servers exist (official and community), and what other SAP AI tooling should you know about?&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Screenshot of the sap-ai-mcp-servers README showing the overview tables and categories.&#34; loading=&#34;lazy&#34; src=&#34;https://blog.zeis.de/posts/2026-03-05-sap-ai-mcp-servers-overview/readme.jpg&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;That is why I like this new repo:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;marianfoo/sap-ai-mcp-servers&lt;/code&gt;&lt;/strong&gt;: &lt;a href=&#34;https://github.com/marianfoo/sap-ai-mcp-servers&#34;&gt;SAP MCP Servers and SAP AI Skills list&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It is a curated list of &lt;strong&gt;SAP MCP servers&lt;/strong&gt;, &lt;strong&gt;SAP AI skills&lt;/strong&gt;, and &lt;strong&gt;adjacent developer tools&lt;/strong&gt;. The README is structured as tables so you can scan by category, compare licenses, and see what is actively maintained.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-you-will-find-inside&#34;&gt;What you will find inside&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Official SAP MCP servers&lt;/strong&gt;: for example &lt;strong&gt;SAP Fiori&lt;/strong&gt;, &lt;strong&gt;CAP&lt;/strong&gt;, &lt;strong&gt;UI5&lt;/strong&gt;, and &lt;strong&gt;MDK&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Community SAP MCP servers&lt;/strong&gt;: docs, &lt;strong&gt;ABAP and ADT&lt;/strong&gt;, integration, Datasphere, &lt;strong&gt;OData&lt;/strong&gt;, SAP GUI, HANA.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Skills and adjacent tools&lt;/strong&gt;: skill repos plus “helper” tooling (plugins, samples, IDE integrations) that often matters just as much as the server itself.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;why-this-matters-for-sap-ai&#34;&gt;Why this matters for SAP AI&lt;/h2&gt;&#xA;&lt;p&gt;If you are building an AI assistant for SAP development, MCP servers are the “connectors” that let your agent reliably pull context from documentation and systems. Having a single overview makes it much easier to choose the right building blocks.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-to-contribute&#34;&gt;How to contribute&lt;/h2&gt;&#xA;&lt;p&gt;If you know a project that belongs there, you can add it by opening an issue using the &lt;a href=&#34;https://github.com/marianfoo/sap-ai-mcp-servers/issues/new?template=add-entry.yml&#34;&gt;“Add new entry”&lt;/a&gt; template in the repo.&lt;/p&gt;&#xA;&lt;p&gt;If you build anything SAP plus MCP related, this is the list I would want to keep open in a browser tab.&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>
