<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Principal-Propagation on Marian Zeis Blog</title>
    <link>https://blog.zeis.de/tags/principal-propagation/</link>
    <description>Recent content in Principal-Propagation on Marian Zeis Blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 29 Apr 2026 09:00:00 +0200</lastBuildDate>
    <atom:link href="https://blog.zeis.de/tags/principal-propagation/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>ARC-1 on SAP BTP: Secure ABAP Agentic Development Beyond the Laptop</title>
      <link>https://blog.zeis.de/posts/2026-04-29-arc-1-btp/</link>
      <pubDate>Wed, 29 Apr 2026 09:00:00 +0200</pubDate>
      <guid>https://blog.zeis.de/posts/2026-04-29-arc-1-btp/</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-27-arc-1/&#34;&gt;previous post&lt;/a&gt;, I introduced &lt;a href=&#34;https://github.com/marianfoo/arc-1&#34;&gt;ARC-1&lt;/a&gt; as a secure ADT MCP gateway for ABAP systems. The main point was not only that ARC-1 can expose ABAP development functionality to AI clients. The main point was that this access needs a place in the architecture.&lt;/p&gt;&#xA;&lt;p&gt;This post is about that place. If ARC-1 should not run uncontrolled on every developer laptop, then SAP BTP is the most natural enterprise option for me. Not because BTP makes the problem disappear, but because it already has the pieces you need for this kind of setup: XSUAA, destinations, Cloud Connector, role collections, audit logging, and the normal BTP operating model.&lt;/p&gt;&#xA;&lt;p&gt;This is not a full setup guide. The exact commands are in the &lt;a href=&#34;https://marianfoo.github.io/arc-1/deployment/&#34;&gt;ARC-1 deployment docs&lt;/a&gt;, the &lt;a href=&#34;https://marianfoo.github.io/arc-1/phase4-btp-deployment/&#34;&gt;BTP deployment guide&lt;/a&gt;, and the pages for &lt;a href=&#34;https://marianfoo.github.io/arc-1/xsuaa-setup/&#34;&gt;XSUAA&lt;/a&gt;, &lt;a href=&#34;https://marianfoo.github.io/arc-1/btp-destination-setup/&#34;&gt;destinations&lt;/a&gt;, and &lt;a href=&#34;https://marianfoo.github.io/arc-1/principal-propagation-setup/&#34;&gt;Principal Propagation&lt;/a&gt;. Here I want to explain the architecture options and what I would look at first.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-btp&#34;&gt;Why BTP&lt;/h2&gt;&#xA;&lt;p&gt;The problem with agentic ABAP development is not only context. It is controlled context. The AI needs to read real SAP objects, but the company also needs to know who is authenticated, where credentials live, what the effective permission is, and who can later audit what happened.&lt;/p&gt;&#xA;&lt;p&gt;That is where BTP helps. ARC-1 can run as one central Cloud Foundry application instead of many local MCP servers. The SAP connection can use BTP destinations. On-premise and private cloud systems can be reached through Cloud Connector. Users can authenticate through XSUAA. Role collections can decide who gets read, write, data preview, SQL, transport, git, or admin scopes. If the BTP Audit Log Service is bound, ARC-1 can write audit events into the platform instead of only to a local laptop.&lt;/p&gt;&#xA;&lt;p&gt;For me this is the real difference. A local setup is good for testing and for special cases, but it is not the architecture I would want for a real ABAP team. A central BTP deployment gives you one managed MCP endpoint per SAP system, one place for policy, and no need to store SAP passwords in every developer client.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-basic-shape&#34;&gt;The Basic Shape&lt;/h2&gt;&#xA;&lt;p&gt;The architecture still has the same simple shape:&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-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MCP client -&amp;gt; ARC-1 -&amp;gt; SAP system&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But on BTP this becomes two authentication hops:&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-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AI client&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; XSUAA OAuth&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; ARC-1 on SAP BTP Cloud Foundry&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; Destination Service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; Connectivity Service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; Cloud Connector&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -&amp;gt; SAP ABAP system&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The first hop is the MCP client talking to ARC-1. A client like Claude, Cursor, VS Code, GitHub Copilot for Eclipse, MCP Inspector, or Copilot Studio calls the ARC-1 &lt;code&gt;/mcp&lt;/code&gt; endpoint and authenticates through XSUAA. The second hop is ARC-1 talking to SAP. For that hop, ARC-1 can use a BTP destination with a technical user, a BTP destination with Principal Propagation, or a BTP ABAP Environment service key.&lt;/p&gt;&#xA;&lt;p&gt;For human developer usage, Principal Propagation is the most interesting option. ARC-1 receives the user token, passes it to the Destination Service, and BTP plus Cloud Connector can propagate the user identity to the backend. Then SAP sees the real user instead of one shared technical account. That is important for authorization and for audit.&lt;/p&gt;&#xA;&lt;p&gt;ARC-1 uses a dual-destination pattern for this:&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-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SAP_BTP_DESTINATION      = shared BasicAuth destination&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SAP_BTP_PP_DESTINATION   = per-user PrincipalPropagation destination&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SAP_PP_ENABLED           = true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SAP_XSUAA_AUTH           = true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The BasicAuth destination is used for startup work like feature probing and cache warmup, because there is no user JWT at startup. The PrincipalPropagation destination is used for authenticated per-user requests. In production I would also look at &lt;code&gt;SAP_PP_STRICT=true&lt;/code&gt;, because then a Principal Propagation problem fails clearly instead of silently falling back to a shared user.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-three-gates&#34;&gt;The Three Gates&lt;/h2&gt;&#xA;&lt;p&gt;The important part is that ARC-1 does not rely on one big switch. A request has to pass three gates:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The server ceiling: what this ARC-1 instance can ever do, configured with environment variables like &lt;code&gt;SAP_ALLOW_WRITES&lt;/code&gt;, &lt;code&gt;SAP_ALLOW_FREE_SQL&lt;/code&gt;, or &lt;code&gt;SAP_ALLOWED_PACKAGES&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The user permission: what this user can do inside ARC-1, coming from XSUAA role collections, OIDC scopes, or API-key profiles.&lt;/li&gt;&#xA;&lt;li&gt;The SAP authorization: what the SAP backend user can do, for example through &lt;code&gt;S_DEVELOP&lt;/code&gt;, package authorizations, transport authorizations, or ABAP Cloud restrictions.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;That means the effective permission is an AND model:&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-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Effective permission = server ceiling AND user permission AND SAP authorization&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is why BTP role collections and ARC-1 safety flags are not the same thing. If the server has &lt;code&gt;SAP_ALLOW_WRITES=false&lt;/code&gt;, a user with &lt;code&gt;ARC-1 Developer&lt;/code&gt; still cannot write. If &lt;code&gt;SAP_ALLOW_FREE_SQL=false&lt;/code&gt;, a user with SQL scope still cannot run freestyle SQL. And even if both ARC-1 layers allow the action, SAP can still reject it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;deployment-options&#34;&gt;Deployment Options&lt;/h2&gt;&#xA;&lt;p&gt;The recommended option is the MTA deployment. ARC-1 includes an &lt;code&gt;mta.yaml&lt;/code&gt; with the Cloud Foundry app and the required services: XSUAA, Destination Service, and Connectivity Service. This is the most reproducible setup because the application and service bindings are described together, similar to how SAP describes multitarget applications for Cloud Foundry.&lt;/p&gt;&#xA;&lt;p&gt;The rough commands are:&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run btp:build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run btp:deploy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;or combined:&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run btp:build-deploy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Docker on Cloud Foundry is the second option. That can make sense if a company wants to deploy a pinned image from GHCR or an internal registry. You still need the same BTP services, but you manage more yourself with &lt;code&gt;manifest.yml&lt;/code&gt;, &lt;code&gt;cf create-service&lt;/code&gt;, &lt;code&gt;cf bind-service&lt;/code&gt;, and &lt;code&gt;cf set-env&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A direct Node.js buildpack deployment is also possible, especially if you patch or customize the source and push it directly with &lt;code&gt;cf push&lt;/code&gt;. For a stable team setup, I would start with MTA unless there is a concrete reason not to.&lt;/p&gt;&#xA;&lt;p&gt;BTP ABAP Environment is a separate scenario. There is no Cloud Connector involved. ARC-1 can use a service key and OAuth flow to connect to the ABAP environment. In this case &lt;code&gt;SAP_SYSTEM_TYPE=btp&lt;/code&gt; matters, because ARC-1 adapts tool definitions and avoids on-premise-only object types and assumptions.&lt;/p&gt;&#xA;&lt;h2 id=&#34;configuration-that-matters&#34;&gt;Configuration That Matters&lt;/h2&gt;&#xA;&lt;p&gt;This is not the full reference, but these are the variables I would explain first:&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SAP_TRANSPORT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http-streamable&#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;nv&#34;&gt;SAP_XSUAA_AUTH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&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;nv&#34;&gt;SAP_BTP_DESTINATION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;SAP_ECC_DEV&#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;nv&#34;&gt;SAP_BTP_PP_DESTINATION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;SAP_ECC_DEV_PP&#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;nv&#34;&gt;SAP_PP_ENABLED&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&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;nv&#34;&gt;SAP_PP_STRICT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&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;nv&#34;&gt;SAP_ALLOW_WRITES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;false&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;nv&#34;&gt;SAP_ALLOW_DATA_PREVIEW&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;false&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;nv&#34;&gt;SAP_ALLOW_FREE_SQL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;false&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;nv&#34;&gt;SAP_ALLOW_TRANSPORT_WRITES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;false&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;nv&#34;&gt;SAP_ALLOW_GIT_WRITES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;false&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;nv&#34;&gt;SAP_ALLOWED_PACKAGES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;$TMP&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The first group makes ARC-1 a remote MCP server with XSUAA authentication. The second group controls the BTP destination setup and Principal Propagation. The third group is the server ceiling, and I would keep it conservative by default.&lt;/p&gt;&#xA;&lt;p&gt;For a development system, you may open selected writes:&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cf set-env arc1-ecc-dev SAP_ALLOW_WRITES &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cf set-env arc1-ecc-dev SAP_ALLOW_TRANSPORT_WRITES &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cf set-env arc1-ecc-dev SAP_ALLOWED_PACKAGES &lt;span class=&#34;s1&#34;&gt;&amp;#39;Z*,$TMP&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cf restage arc1-ecc-dev&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For production, I would usually keep ARC-1 read-only:&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cf set-env arc1-ecc-prod SAP_ALLOW_WRITES &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cf set-env arc1-ecc-prod SAP_ALLOW_FREE_SQL &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cf set-env arc1-ecc-prod SAP_ALLOW_DATA_PREVIEW &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cf restage arc1-ecc-prod&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The recommended architecture is like the one-instance-per-SAP-system model. A DEV system can allow selected writes, a PROD system can be read-only, and a BTP ABAP system can have its own endpoint and tool behavior. This keeps policies easier to understand than one large multi-backend gateway.&lt;/p&gt;&#xA;&lt;h2 id=&#34;roles-and-technical-users&#34;&gt;Roles And Technical Users&lt;/h2&gt;&#xA;&lt;p&gt;ARC-1 ships XSUAA scopes like &lt;code&gt;read&lt;/code&gt;, &lt;code&gt;write&lt;/code&gt;, &lt;code&gt;data&lt;/code&gt;, &lt;code&gt;sql&lt;/code&gt;, &lt;code&gt;transports&lt;/code&gt;, &lt;code&gt;git&lt;/code&gt;, and &lt;code&gt;admin&lt;/code&gt;. These are grouped into role collections such as &lt;code&gt;ARC-1 Viewer&lt;/code&gt;, &lt;code&gt;ARC-1 Developer&lt;/code&gt;, &lt;code&gt;ARC-1 Developer + Data&lt;/code&gt;, &lt;code&gt;ARC-1 Developer + SQL&lt;/code&gt;, and &lt;code&gt;ARC-1 Admin&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;For human developer usage, I would prefer XSUAA plus Principal Propagation. Then ARC-1 knows the MCP user, and SAP can also see the real SAP user. That gives a much better audit story.&lt;/p&gt;&#xA;&lt;p&gt;But not every use case needs Principal Propagation. For automation, scheduled checks, process agents, or a very controlled BTP Process Automation scenario, a technical user can be fine. The tradeoff just has to be clear: ARC-1 may know which token or client called it, but SAP will see the technical user. With Principal Propagation, SAP sees the real user.&lt;/p&gt;&#xA;&lt;h2 id=&#34;connecting-clients&#34;&gt;Connecting Clients&lt;/h2&gt;&#xA;&lt;p&gt;Once ARC-1 runs centrally, client configuration should become small. Ideally the developer configures only the MCP server URL, not SAP credentials:&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;mcpServers&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;arc1-ecc-dev&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;url&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://arc1-ecc-dev.cfapps.eu10.hana.ondemand.com/mcp&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;Clients with remote MCP and OAuth discovery can follow the XSUAA flow. ARC-1 exposes OAuth metadata and proxies the flow to XSUAA, so this can work for Claude, Cursor, VS Code-style MCP clients, and MCP Inspector.&lt;/p&gt;&#xA;&lt;p&gt;For Eclipse this becomes more concrete with &lt;a href=&#34;https://marketplace.eclipse.org/content/github-copilot&#34;&gt;GitHub Copilot for Eclipse&lt;/a&gt;. Eclipse ADT can stay the normal ABAP development environment, while Copilot can use MCP to call the same central ARC-1 endpoint. GitHub also added MCP OAuth support for Copilot in Eclipse, JetBrains, and Xcode, so this fits the BTP/XSUAA endpoint model much better than a local server on every laptop. ARC-1 still does not replace Eclipse. It gives the AI part a controlled SAP access path.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-i-would-verify-first&#34;&gt;What I Would Verify First&lt;/h2&gt;&#xA;&lt;p&gt;Before I would enable any write access, I would verify the boring things:&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://arc1-ecc-dev.cfapps.eu10.hana.ondemand.com/health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://arc1-ecc-dev.cfapps.eu10.hana.ondemand.com/.well-known/oauth-authorization-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then I would test a read-only MCP call and check the ARC-1 logs. The logs should show which authentication modes are active, for example XSUAA on the MCP side and Principal Propagation on the SAP side.&lt;/p&gt;&#xA;&lt;p&gt;Only after that I would enable writes, and only in steps:&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-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;read-only -&amp;gt; writes to $TMP -&amp;gt; writes to selected packages -&amp;gt; transport writes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is less exciting than a demo where the AI writes everything immediately, but it is much closer to how I think enterprise ABAP AI development should be introduced.&lt;/p&gt;&#xA;&lt;h2 id=&#34;where-to-go-deeper&#34;&gt;Where To Go Deeper&lt;/h2&gt;&#xA;&lt;p&gt;The architecture is the important part first, but the actual setup has many landscape-specific details.&lt;/p&gt;&#xA;&lt;p&gt;For the concrete steps, I would start with the &lt;a href=&#34;https://marianfoo.github.io/arc-1/phase4-btp-deployment/&#34;&gt;BTP Cloud Foundry deployment guide&lt;/a&gt;, then go through &lt;a href=&#34;https://marianfoo.github.io/arc-1/xsuaa-setup/&#34;&gt;XSUAA setup&lt;/a&gt;, &lt;a href=&#34;https://marianfoo.github.io/arc-1/btp-destination-setup/&#34;&gt;BTP destination setup&lt;/a&gt;, and &lt;a href=&#34;https://marianfoo.github.io/arc-1/principal-propagation-setup/&#34;&gt;Principal Propagation setup&lt;/a&gt; depending on the target landscape.&lt;/p&gt;&#xA;&lt;p&gt;For me the main point stays the same: ARC-1 on BTP is not just a nicer place to host a Node.js app. It is where the MCP server can become part of an enterprise SAP development architecture, with central access, controlled permissions, and a real identity story.&lt;/p&gt;&#xA;&lt;h2 id=&#34;references--links&#34;&gt;References &amp;amp; links&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/marianfoo/arc-1&#34;&gt;ARC-1 on GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://marianfoo.github.io/arc-1/&#34;&gt;ARC-1 Documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://marianfoo.github.io/arc-1/deployment/&#34;&gt;ARC-1 Deployment&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://marianfoo.github.io/arc-1/phase4-btp-deployment/&#34;&gt;ARC-1 BTP Cloud Foundry Deployment&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://marianfoo.github.io/arc-1/enterprise-auth/&#34;&gt;ARC-1 Enterprise Authentication&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://marianfoo.github.io/arc-1/xsuaa-setup/&#34;&gt;ARC-1 XSUAA Setup&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://marianfoo.github.io/arc-1/btp-destination-setup/&#34;&gt;ARC-1 BTP Destination Setup&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://marianfoo.github.io/arc-1/principal-propagation-setup/&#34;&gt;ARC-1 Principal Propagation Setup&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://marianfoo.github.io/arc-1/authorization/&#34;&gt;ARC-1 Authorization and Roles&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://marianfoo.github.io/arc-1/btp-abap-environment/&#34;&gt;ARC-1 BTP ABAP Environment Setup&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://help.sap.com/docs/btp/sap-business-technology-platform/multitarget-applications-in-cloud-foundry-environment&#34;&gt;SAP Help: Multitarget Applications in Cloud Foundry&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://help.sap.com/docs/btp/sap-business-technology-platform/what-is-sap-authorization-and-trust-management-service&#34;&gt;SAP Help: Authorization and Trust Management Service&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://help.sap.com/docs/connectivity/sap-btp-connectivity-cf/authenticating-users-against-on-premise-systems&#34;&gt;SAP Help: Authenticating Users Against On-Premise Systems&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://sap.github.io/cloud-sdk/docs/js/features/connectivity/destinations&#34;&gt;SAP Cloud SDK: Destinations&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://marketplace.eclipse.org/content/github-copilot&#34;&gt;GitHub Copilot for Eclipse&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.blog/changelog/2025-11-18-enhanced-mcp-oauth-support-for-github-copilot-in-jetbrains-eclipse-and-xcode&#34;&gt;GitHub Changelog: Enhanced MCP OAuth support for Copilot in Eclipse, JetBrains, and Xcode&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
  </channel>
</rss>
