ARC-1 is an enterprise-ready MCP server that connects AI assistants to SAP ABAP systems via the ADT REST API, enabling AI-assisted SAP development with strong security defaults.
Read SAP Objects — Read ABAP source code (programs, classes, interfaces, function modules, includes, CDS views, BDEFs, service definitions/bindings, UI5/Fiori apps), DDIC objects (tables, domains, data elements, structures, views, message classes), BOR objects, revision history, and inactive/draft states. Supports active/inactive versions, method-level reads, and grep-based token-efficient search.
Search & Navigate — Search by object name (wildcards) or TADIR cross-package lookups, source code search, go-to-definition, find references/where-used, code completion, and class hierarchy lookup.
Write ABAP Objects — Create, update, or delete programs, classes, interfaces, function modules, CDS views, DDIC objects, and more. Supports surgical class edits (add/edit/delete methods, target specific class sections), RAP behavior pool skeleton generation, batch creation with activation, and automatic lock/unlock. Gated by explicit write enablement and package allowlists.
Activate Objects — Activate single or batch ABAP objects (with retry for S/4HANA quirks), publish/unpublish OData service bindings.
Diagnostics & Quality — Syntax check (with dry-run on supplied source), ABAP Unit tests, ATC code quality checks, CDS test case suggestions, compare active/inactive states, apply ADT quick fixes, inspect ABAP short dumps (ST22), profiler traces (hitlist, call tree, DB stats), SM02 system messages, and SAP Gateway error logs.
Lint & Formatting — Local abaplint with auto-fix (cloud/on-prem presets), server-side ADT PrettyPrinter formatting, and PrettyPrinter settings management.
Dependency & Impact Analysis — Compressed dependency context (public API contracts of all dependencies, 7–30x fewer tokens), CDS blast-radius impact analysis (upstream/downstream with RAP-aware classification), and reverse dependency lookup.
Transport Management — List, create, release, delete, and reassign CTS transport requests; check transport requirements; view object transport history; list transport layers and targets.
Git Operations (opt-in) — gCTS and abapGit support: list, clone, pull, push, commit, branch, and unlink repositories. Gated behind an explicit flag.
Data Access (opt-in) — Preview table contents and execute freestyle ABAP SQL queries, both gated by explicit environment variables.
System Management — Probe SAP system capabilities (HANA, RAP/CDS, BTP vs. on-prem, etc.), manage packages (create/delete/change), manage FLP catalogs/groups/tiles, and view object cache statistics.
Security & Authentication — Read-only by default; writes, data preview, free SQL, transport writes, and git writes each require explicit opt-in. Supports API key profiles, OIDC/JWT, OAuth 2.0, XSUAA, per-user SAP identity propagation, package allowlists, action deny lists, HTTP security headers, and multi-layer rate limiting.
Deployable as a Cloud Foundry app on SAP BTP with full platform integration including Destination Service, Cloud Connector, Principal Propagation, XSUAA OAuth proxy, and BTP Audit Log Service.
Available as a Docker image for containerized deployment, supporting various authentication methods and enterprise security configurations.
Connects AI assistants including GitHub Copilot to SAP systems via the ADT REST API, enabling AI-assisted SAP development with enterprise security controls and guardrails.
Supports OIDC/JWT authentication via Keycloak or any OpenID Connect provider for secure enterprise authentication to SAP systems.
Supports OIDC/JWT authentication via Entra ID, Keycloak, or any OpenID Connect provider for secure enterprise authentication to SAP systems.
Enterprise-ready MCP server for SAP ABAP systems connecting to SAP via the ADT REST API, providing 11 intent-based tools for reading/writing ABAP source, table data, CDS views, executing SQL, managing transports, and performing code analysis with enterprise security controls.
Uses SQLite for object caching in http-streamable deployments, enabling automatic source caching and dependency graph caching for improved performance.
ARC-1 — SAP ADT MCP Server
ARC-1 (pronounced arc one [ɑːrk wʌn]) — Enterprise-ready MCP server for SAP ABAP systems. Secure by default, deployable to BTP or on-premise, and hardened with large unit/integration/E2E test coverage.
ARC-1 connects AI assistants (Claude, GitHub Copilot, Copilot Studio, and any MCP client) to SAP systems via the ADT REST API. It ships as an npm package and Docker image.
👁 Test
👁 CodeQL
👁 Dependency Review
Full Documentation | Quickstart | Tool Reference | Blog Series
📖 New: AI ABAP Development blog series — long-form posts on AI for ABAP, ARC-1 design, and real-world BTP / Copilot Studio / Joule walkthroughs. Read the series →
Why ARC-1?
Built for organizations that need AI-assisted SAP development with guardrails. Inspired by the pioneering work of abap-adt-api, mcp-abap-adt, and vibing-steampunk — ARC-1 adds what's needed to run in production:
Security & Admin Controls
Safe by default — read-only, no free SQL, no table preview, no transport writes, no Git writes. Enable each capability with explicit
SAP_ALLOW_*flagsAction deny list — block specific tool actions with
SAP_DENY_ACTIONS(for exampleSAPWrite.delete), without exposing low-level operation codes to adminsPackage restrictions — limit AI write operations (create, update, delete) to specific packages with wildcards (
--allowed-packages "Z*,$TMP"). Read operations are not restricted by package — use SAP's native authorization for read-level access controlData access control (off by default) —
SAPRead(type=TABLE_CONTENTS)andSAPQueryare gated behind explicit env vars (SAP_ALLOW_DATA_PREVIEW=true,SAP_ALLOW_FREE_SQL=true). These capabilities can expose application data or run ad-hoc SQL, so they are intentionally separated from the default development-tooling surface. They can be enabled for governed use cases, but should be reviewed against the current SAP API Policy, your SAP agreement, and internal data-governance rulesTransport safety — transport reads are available for review, while transport mutations require both
--allow-writesand--allow-transport-writes. Update/delete operations auto-use the lock correction number when no explicit transport is providedGit workflow safety — Git operations are disabled by default. Enable explicitly with
--allow-git-writes/SAP_ALLOW_GIT_WRITES=trueAPI-key profiles — multi-key HTTP deployments can assign
viewer,viewer-data,viewer-sql,developer,developer-data,developer-sql, oradminper keyWrites restricted to
$TMPwhen enabled — only local/throwaway objects; writing to transportable packages requires explicit--allowed-packagesHTTP security headers (helmet) on by default — HSTS, CSP, X-Frame-Options, CORP, X-Content-Type-Options. COOP is deliberately not set so popup-based OAuth flows (Copilot Studio) keep working. No flag to disable.
Opt-in CORS for browser MCP clients —
ARC1_ALLOWED_ORIGINS(comma-separated, exact match). Off by default; native MCP clients don't need itLayered rate limiting — three layers out of the box: per-IP OAuth/
/mcpedge (Layer 1, default 20/min/IP, on), per-user MCP quota (Layer 2, off by default — multi-user deployments opt in viaARC1_RATE_LIMIT=60), server-wide SAP-bound semaphore (Layer 3, default 10, on). HonorsRetry-Afteron 429/503 from SAP / BTP gateways. Two operator env vars; per-endpoint OAuth ceilings are constants in code. Closes CodeQL alertjs/missing-rate-limiting. See the Rate Limiting GuideSupply-chain security — Dependabot (npm + GitHub Actions + Docker, weekly + same-day security advisories),
npm audit --audit-level=highPR gate, GitHub Dependency Review on every PR, CodeQL SAST, Trivy container scanning (gating on release, advisory on dev), all third-party GitHub Actions pinned to commit SHA,SECURITY.mdpolicy with severity-tiered SLAs. Image and npm package both ship with provenance attestations. See the security guide §13
Authentication
API key — simple Bearer token for internal deployments
OIDC / JWT — Entra ID, Keycloak, or any OpenID Connect provider
OAuth 2.0 — local browser-based login for BTP ABAP Environment service-key development
XSUAA — SAP BTP native auth with automatic token proxy for MCP clients
Per-user SAP identity — BTP Destination Service forwards the MCP user to SAP: Cloud Connector principal propagation for on-premise SAP, or
OAuth2UserTokenExchangefor BTP ABAP Environment
BTP Cloud Foundry Deployment
Deploy ARC-1 as a Cloud Foundry app on SAP BTP with full platform integration:
Destination Service — connect to SAP systems via managed destinations
Cloud Connector — reach on-premise systems through the connectivity proxy
Per-user destinations — user identity forwarded end-to-end via X.509 certificates for on-premise SAP, or exchanged for an ABAP bearer token for BTP ABAP Environment
XSUAA OAuth proxy — MCP clients authenticate via standard OAuth, ARC-1 handles the BTP token exchange
Audit logging — structured events to stderr, file, or BTP Audit Log Service
Token Efficiency
12 intent-based tools (~5K schema tokens) instead of 200+ individual tools — keeps the LLM's context window small
Method-level read/edit — read or update a single class method, not the whole source (up to 20x fewer tokens)
Context compression —
SAPContextreturns public API contracts of all dependencies in one call (7-30x compression)
Built-in Object Caching
Server-validated source caching — every SAP object read is cached in memory (stdio) or SQLite (http-streamable). Repeated reads use
If-None-Match/ETag conditional GET, so unchanged objects return from cache after SAP confirms304 Not Modified.Dependency graph caching —
SAPContextdep resolution keyed by source hash; unchanged objects skip all ADT calls on subsequent runs.Pre-warmer — start with
ARC1_CACHE_WARMUP=trueto pre-index all custom objects at startup, enabling reverse dependency lookup (SAPContext(action="usages")) and fast CDS impact workflows (SAPContext(action="impact", type="DDLS")).Active/inactive source views —
SAPReadacceptsversion="active" | "inactive" | "auto"and warns when the active source has an unactivated draft.Write invalidation — when
SAPWriteorSAPActivatemutates an object, both active and inactive source cache entries are dropped; next read revalidates or fetches fresh source.
See docs/caching.md for full documentation.
Testing
3,474 unit tests (
104unit test files, mocked HTTP)262-test default integration profile against live SAP systems, with explicit skip reasons when credentials or fixtures are missing
141-test default E2E profile that executes real MCP tool calls against a running ARC-1 server and live SAP system
Manual slow SAP profiles keep expensive cache warmup, broad where-used, RAP full-stack, and recursive CTS release coverage out of the PR path (
test:integration:slow,test:e2e:slow, GitHub SAP Slow Tests workflow)CRUD lifecycle and BTP smoke lanes included (
test:integration:crud,test:integration:btp:smoke)CI matrix on Node
22and24; live SAP integration + E2E run on internal PRs and manual dispatch, with SAP jobs gated off for docs/chore PRs and external forksReliability telemetry + coverage published as informational CI signals (non-blocking)
Tools Refined for Real-World Usage
The 12 tools are designed from real LLM interaction feedback:
Tool | What it does |
SAPRead | Read ABAP source, table data, CDS views, access controls ( |
SAPSearch | Object search + full-text source code search across the system |
SAPWrite | Create/update/delete ABAP source and DDIC metadata with automatic lock/unlock (PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, DDLX, BDEF, SRVD, SRVB, SKTD, TABL, DOMA, DTEL, MSAG; availability adapts for BTP). Class updates can target local includes ( |
SAPActivate | Activate ABAP objects — single or batch (essential for RAP stacks), with guarded retry for the S/4HANA ED064 batch quirk. Publish/unpublish OData service bindings (SRVB) |
SAPNavigate | Go-to-definition, find references, code completion |
SAPQuery | Execute ABAP SQL with table-not-found suggestions and automatic chunking for simple long literal |
SAPTransport | CTS transport management (list/get/create/release/delete/reassign/release-recursive), transport layer/target lookup, package transport requirement checks, and reverse lookup history ( |
SAPGit | Git-based ABAP workflows across gCTS and abapGit (list/clone/pull/push/commit/branch/unlink) with backend auto-selection and safety gating ( |
SAPContext | Compressed dependency context ( |
SAPLint | Local ABAP lint (system/release-aware presets, auto-fix, pre-write validation) + ADT PrettyPrint (server-side formatting) |
SAPDiagnose | Syntax check, ABAP Unit tests, ATC code quality, CDS test-case suggestions, active/inactive object-state comparison, generic ADT quickfix proposals/application deltas, gateway/system message diagnostics, short dumps, and profiler traces |
SAPManage | Feature probing, cache statistics, package lifecycle/change-package operations, and FLP catalog/group/tile helpers |
Tool definitions automatically adapt to the target system (BTP vs on-premise), removing unavailable types and adjusting descriptions so the LLM never attempts unsupported operations.
Feature Detection
ARC-1 probes the SAP system at startup and adapts its behavior:
Detects HANA, gCTS, abapGit, RAP/CDS, AMDP, UI5, and transport availability
Auto-detects BTP vs on-premise systems
Maps SAP_BASIS release to the correct ABAP language version
Each feature can be forced on/off or left on auto-detect
In shared-credential mode (technical user), runs a startup auth preflight once and blocks SAP tool calls with a clear error on 401/403 to avoid repeated failed logins and potential user lockout
Related MCP server: SAP ERP MCP Server by CData
ADT API Status and Strategy
SAP's current SAP API Policy is v.4.2026a. It allows published/documented APIs for the purposes described in SAP documentation, while restricting unsupported internal APIs, misuse, unmanaged autonomous AI call patterns, and large-scale extraction outside endorsed paths. ARC-1 is designed as a governed development-tooling proxy around ADT behavior, not as a bulk data-extraction product.
For typical internal developer workflows, ARC-1 should be treated as generally usable when it stays close to documented/discoverable ADT behavior, runs with real user identity, respects SAP authorization, and keeps audit and rate controls in place. Customers should still review their exact landscape, SAP agreement, and AI governance rules, especially when the MCP client can plan or execute sequences of tool calls.
Concretely, ARC-1 is positioned as a custom developer utility for internal development automation: code checks, build/activate, transport management, AI-assisted ABAP authoring, and Git workflows.
Two ARC-1 capabilities can expose business data or execute ad-hoc SQL. Both are off by default and require explicit opt-in env vars, so the operator makes a deliberate decision before they are reachable:
Capability | Env var | Default | Policy note |
Named table content preview ( |
|
| Can expose application-table data; keep off unless the use case is approved. |
Freestyle ABAP SQL ( |
|
| Executes ad-hoc ABAP SQL; keep off unless the use case is approved. |
With both flags at their defaults, ARC-1's data/sql rows are unreachable. Turning either flag on is a valid operational choice for approved scenarios, but it should be deliberate: check the current SAP API Policy, the customer's SAP agreement, SAP authorizations, and internal data-protection rules before enabling it on a productive system.
Beyond the policy, the public signals for ADT remain consistent: SAP publishes an ADT SDK, a guide for creating and consuming RESTful APIs in ADT, and has described the ABAP language server direction as an "ADT SDK 2.0".
ARC-1's strategy is to stay close to documented and discoverable ADT behavior, probe system capabilities before exposing tools, keep conservative security defaults (writes off, data preview off, free SQL off, package allowlist $TMP), and continuously review SAP's guidance as it evolves. This README is not a compliance decision for any specific customer landscape, but the default posture is intended to support normal governed development use rather than block it.
Quick Start
npx arc-1@latest --url https://your-sap-host:44300 --user YOUR_USERTrying it out on your laptop? → Quickstart
Full local dev setup (Docker, cookie extractor, client configs)? → Local Development
Deploying for a team / BTP? → Deployment
Blog Series — AI ABAP Development
A long-form series on blog.zeis.de covering AI for ABAP development, ARC-1's design, and real-world walkthroughs:
Introducing ARC-1: A Secure ADT MCP Server for Enterprise SAP Development
ARC-1 on SAP BTP: Secure ABAP Agentic Development Beyond the Laptop
ARC-1 with Copilot Studio: SAP System Context Beyond Developers
ARC-1 with Joule Studio: Bringing Real ABAP System Context into Joule
Full list and new posts → blog.zeis.de/tags/ai-abap-development-series.
Documentation
Full documentation is available at marianfoo.github.io/arc-1.
Guide | Description |
5-minute npx + Claude Desktop setup | |
Full local dev — all install methods, MCP client configs, SSO cookie extractor | |
Multi-user deployment — Docker, BTP Cloud Foundry, BTP ABAP | |
Every flag and env var, one table | |
Update procedures per install method | |
Layer A / Layer B auth internals, coexistence matrix | |
Complete reference for all 12 tools | |
System architecture with diagrams | |
Agent workflow patterns and best practices | |
Long-form posts on AI for ABAP development, ARC-1 internals, and real-world walkthroughs |
Development
npm ci && npm run build && npm testSee CLAUDE.md for codebase structure, testing commands, and contribution guidelines.
Credits
Project | Author | Contribution |
oisee | Original Go MCP server — ARC-1's starting point | |
Marcello Urbani | TypeScript ADT library, definitive API reference | |
Mario Andreschak | First MCP server for ABAP ADT | |
Lars Hvam | ABAP parser/linter (used via @abaplint/core) |
License
MIT
Maintenance
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/marianfoo/arc-1'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
