ARC-1 MCP Server
io.github.arc-mcp/arc-1
Enterprise-ready MCP server for SAP ABAP systems via ADT REST API, secure by default with read-only mode and granular access controls.
What is the ARC-1 MCP server?
ARC-1 is an enterprise-grade MCP server that connects AI assistants (Claude, GitHub Copilot, Copilot Studio) to SAP ABAP systems through the ADT REST API. It provides 12 intent-based tools for ABAP development, source code management, transport handling, and diagnostics, with security-first design including read-only defaults, package restrictions, and explicit capability gating. Deployable as npm package or Docker image on BTP Cloud Foundry or on-premise SAP systems.
ARC-1 enables AI-assisted SAP ABAP development with production-grade security controls. It exposes capabilities for reading/writing ABAP source, managing transports, executing queries, running diagnostics, and understanding code context—all while enforcing read-only defaults, package-level write restrictions, and data-access gating. Built for organizations needing guardrails around AI-driven SAP development, with support for OIDC/OAuth/XSUAA authentication, BTP Destination Service integration, and per-user identity propagation.
How to install ARC-1
Copy-paste configuration for popular MCP clients.
SAP_URLrequiredSAP system URL (e.g., http://host:50000)
SAP_USERrequiredSAP username
SAP_PASSWORDrequiredsecretSAP password
SAP_CLIENTSAP client number
SAP_LANGUAGESAP logon language
SAP_INSECURESkip TLS certificate verification
SAP_ALLOW_WRITESAllow ABAP object mutations (safe default: false)
SAP_TRANSPORTMCP transport (Docker defaults to http-streamable, set to stdio for local MCP clients)
Tools & capabilities
Tools this server exposes to the agent.
SAPRead— Read ABAP source, method bodies, grep matches, table data, CDS views, access controls, metadata extensions, service bindings, knowledge-transfer docs, message classes, revision history, inactive object state, and deployed UI5/Fiori apps. Supports optional grep regex for token-efficient search.SAPSearch— Object search and full-text source code search across the SAP system.SAPWrite— Create, update, or delete ABAP source and DDIC metadata (PROG, CLAS, INTF, FUNC, FUGR, INCL, DDLS, DCLS, DDLX, BDEF, SRVD, SRVB, SKTD, TABL, DOMA, DTEL, MSAG) with automatic lock/unlock. Supports class-section surgery and RAP behavior-pool scaffolding.SAPActivate— Activate ABAP objects (single or batch) and publish/unpublish OData service bindings (SRVB).SAPNavigate— Go-to-definition, find references, and code completion.SAPQuery— Execute ABAP SQL with table-not-found suggestions and automatic chunking for long literal IN lists. Gated behind SAP_ALLOW_FREE_SQL flag by default.SAPTransport— CTS transport management: list, get, create, release, delete, reassign, and release-recursive operations. Includes transport layer/target lookup and package transport requirement checks.SAPGit— Git-based ABAP workflows across gCTS and abapGit: list, clone, pull, push, commit, branch, and unlink with backend auto-selection.SAPContext— Context-first object understanding: returns Knowledge Transfer Documents (KTD/SKTD) and compressed dependency contracts. Supports reverse dependency lookup (usages) and CDS upstream/downstream impact analysis.SAPLint— Local ABAP lint with system/release-aware presets, auto-fix, pre-write validation, and ADT PrettyPrint server-side formatting.SAPDiagnose— Syntax check, ABAP Unit tests, ATC code quality, CDS test-case suggestions, active/inactive object-state comparison, ADT quickfix proposals, 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.
Use cases
- AI-assisted ABAP development with method-level editing and automatic activation of interdependent objects (e.g., RAP stacks).
- Context-aware code understanding via Knowledge Transfer Documents and dependency analysis before writing or refactoring.
- Transport management and CTS workflows integrated into AI-driven development pipelines.
- Secure multi-user deployments on BTP with per-user SAP identity and role-based API-key profiles (viewer, developer, admin).
- Syntax checking, ATC quality analysis, and ABAP Unit test execution within the AI development loop.
ARC-1 MCP server FAQ
ARC-1 is an MCP server that connects AI assistants to SAP ABAP systems via the ADT REST API. It provides 12 intent-based tools for reading/writing ABAP source, managing transports, executing queries, and running diagnostics, with enterprise security controls including read-only defaults, package restrictions, and data-access gating.
ARC-1 is open-source (available on npm and as a Docker image). However, it requires a valid SAP system (BTP ABAP Environment or on-premise) and appropriate SAP licensing. Some capabilities (table-content preview, freestyle SQL) are off by default and require explicit opt-in.
Install via npm (`npm install arc-1`) or use the Docker image (`ghcr.io/arc-1:1.1.0`). Configure authentication (API key, OIDC, OAuth, or XSUAA) and SAP system connection details via environment variables. For BTP, use the Destination Service integration. See the quickstart at https://docs.arc-1-mcp.com/quickstart/ for detailed setup.
ARC-1 supports API key (Bearer token), OIDC/JWT (Entra ID, Keycloak), OAuth 2.0 (browser-based BTP login), XSUAA (SAP BTP native), and per-user SAP identity via Cloud Connector or OAuth2UserTokenExchange.
Yes. ARC-1 is enterprise-ready with 3,474 unit tests, 262-test integration profile, 141-test E2E profile, supply-chain security (Dependabot, CodeQL, Trivy), and security headers (helmet) enabled by default. However, ADT is an undocumented API; review the SAP API Policy alignment document and consult your SAP contact before production use.
ARC-1 is read-only by default. Writes, transport mutations, Git operations, table-content preview, and freestyle SQL are all disabled until explicitly enabled via flags or environment variables. Package restrictions limit writes to $TMP or specified packages. Action deny lists, rate limiting (three layers), and per-user quotas provide additional guardrails.
README (reference)
Source of truth, from the repository.
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.
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_*flags - Action deny list — block specific tool actions with
SAP_DENY_ACTIONS(for exampleSAPWrite.delete), without exposing low-level operation codes to admins - Package 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 control - Data 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 SAP API Policy, your SAP agreement, and internal data-governance rules - Transport 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 provided - Git workflow safety — Git operations are disabled by default. Enable explicitly with
--allow-git-writes/SAP_ALLOW_GIT_WRITES=true - API-key profiles — multi-key HTTP deployments can assign
viewer,viewer-data,viewer-sql,developer,developer-data,developer-sql, oradminper key - Writes restricted to
$TMPwhen enabled — only local/throwaway objects; writing to transportable packages requires explicit--allowed-packages - HTTP 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 it - Layered rate limiting — three layers out of the box: per-IP OAuth and shared MCP HTTP edge limits (Layer 1; MCP inherits the historical derived cap unless
ARC1_MCP_HTTP_RATE_LIMIToverrides it), per-user MCP quota (Layer 2, off by default — multi-user deployments opt in viaARC1_RATE_LIMIT=60), and a server-wide SAP-bound semaphore (Layer 3, default 10, on). HonorsRetry-Afteron 429/503 from SAP / BTP gateways. See the Rate Limiting Guide - Supply-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, and the release workflow publishes a best-effort CycloneDX SBOM for the production npm dependency graph. 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
- Experimental multi-target mode — the default-off, mutation-free BTP mode discovers
destinations marked
arc1.enabled=trueand exposes pinned SID/client plus aggregate endpoints (setup, administration) - 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 instead of 200+ individual tools — keeps tool selection simple, with the schema payload guarded by CI budgets and a hyperfocused 1-tool mode for tight context windows
- Method-level read/edit — read or update a single class method, not the whole source (up to 20x fewer tokens)
- Context-first understanding —
SAPContext(action="deps")is the first call for "what does this object do?": it returns the object's Knowledge Transfer Document (SKTD/KTD) when available plus public API contracts of 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. - KTD-aware context — Knowledge Transfer Documents are cached as source entries and composed into
SAPContext(action="deps")separately from the dependency graph, so cached dependency context can still include revalidated documentation. - Live where-used —
SAPContext(action="usages")and CDS impact analysis query SAP's current repository index with the caller's identity; no startup repository scan is required. - 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 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 forks - Reliability 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 exact ABAP source, method bodies, grep matches, table data, CDS views, access controls (DCLS), metadata extensions (DDLX), service bindings (SRVB), knowledge-transfer docs (SKTD or friendly alias KTD), message classes (MSAG), revision history (VERSIONS/VERSION_SOURCE), inactive object state, BOR objects, deployed UI5/Fiori apps (BSP, BSP_DEPLOY), and ABAP Platform 2025 server-driven objects (DESD, EVTB, EVTO, DTSC, CSNM, COTA). For "what does this object do?" use SAPContext first, then SAPRead for precise source. On-prem metadata reads include authorization fields (AUTH), feature toggles (FEATURE_TOGGLE), and enhancement implementations (ENHO). Structured format for classes returns metadata + decomposed includes as JSON. Optional grep regex returns only matching source lines (+context, method-annotated for classes) for token-efficient search. (Deprecated aliases MESSAGES/FTG2 accepted for one minor.) |
| 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/KTD, TABL, DOMA, DTEL, MSAG; availability adapts for BTP). Class updates can target local includes (definitions, implementations, macros, testclasses); class-section surgery (edit_class_definition, add_method, edit_method_signature, delete_method, change_method_visibility) lets an LLM edit a global class signature without re-sending /source/main; RAP behavior-pool scaffolding can auto-create lhc_* skeletons before injecting signatures/stubs. Batch creation supports terminal activation for interdependent multi-object workflows (e.g., RAP stack or domain+data element in one call) |
| 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 IN (...) lists |
| SAPTransport | CTS transport management (list/get/create/release/delete/reassign/release-recursive), transport layer/target lookup, package transport requirement checks, and reverse lookup history (action="history") |
| SAPGit | Git-based ABAP workflows across gCTS and abapGit (list/clone/pull/push/commit/branch/unlink) with backend auto-selection and safety gating (--allow-git-writes) |
| SAPContext | Context-first object understanding (action="deps"): prepends the object's KTD when available and returns compressed dependency contracts. Also supports reverse dependency lookup (action="usages") and CDS upstream/downstream impact analysis (action="impact" for DDLS) |
| 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, profiler traces, and the on-prem authorization trace (SUAUTHVALTRC, data-preview gated) |
| 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
ADT API Status and Strategy
ARC-1 is a governed development-tooling proxy around ADT behavior — code checks, build/activate, transport management, AI-assisted ABAP authoring, Git workflows — not a bulk data-extraction product. It runs with real user identity, respects SAP authorization, and keeps audit and rate controls in place.
Where this stands under SAP's API Policy is covered in full in SAP API Policy & Architecture Alignment — what API Policy v.4.2026a says clause by clause, why the ADT question is more nuanced than "undocumented API", where ARC-1 sits against SAP's reference architecture for third-party MCP access, and the specific questions to put to your SAP contact. Short version: usable at your own risk, and worth asking SAP before production.
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 (SAPRead(type=TABLE_CONTENTS)) | SAP_ALLOW_DATA_PREVIEW=true | false (off) | Can expose application-table data; keep off unless the use case is approved. |
Freestyle ABAP SQL (SAPQuery) | SAP_ALLOW_FREE_SQL=true | false (off) | 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.
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.
Versioning & Stability
From 1.0 onward ARC-1 follows semantic versioning: patch releases fix bugs, minor releases add backward-compatible capability, and breaking changes to the MCP tool surface, configuration, or auth contract bump the major version.
Experimental, default-off features are excluded from this guarantee until they are promoted — they are clearly labeled and their surface may still change in a minor release. Today this covers the multi-target BTP mode (ADR-0006 / ADR-0007): a mutation-free, read-only exception to the single-target default.
What changed per release: the annotated Release Notes give each release its impact and upgrade action; CHANGELOG.md lists every merged PR.
Quick Start
Install in Claude — pick your surface (full guide: Install in Claude):
-
Claude Desktop — download the latest
arc-1-*.mcpbfrom Releases and double-click it (or Settings → Extensions). Claude prompts for your SAP connection. (The.mcpbis attached to releases automatically; if the newest one doesn't have it yet, see Install in Claude.) -
Claude Code — one install for the MCP server and all SAP skills:
/plugin marketplace add arc-mcp/arc-1 /plugin install arc-1@arc-1 -
Any MCP client / manual — run it directly:
npx arc-1@latest --url https://your-sap-host:44300 --user YOUR_USER -
Trying 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:
- How I Use AI for Development and Why Context Matters
- ABAP and Agentic AI: The Hidden Problem in Real Projects
- 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
- From SEGW and Legacy UI5 to RAP with ARC-1
Full list and new posts → blog.zeis.de/tags/ai-abap-development-series.
Documentation
Full documentation is available at docs.arc-1-mcp.com.
| Guide | Description |
|---|---|
| Quickstart | 5-minute npx + Claude Desktop setup |
| Install in Claude | Desktop .mcpb, Claude Code plugin (server + skills), and remote BTP connector |
| Local Development | Full local dev — all install methods, MCP client configs, SSO cookie extractor |
| Deployment | Multi-user deployment — Docker, BTP Cloud Foundry, BTP ABAP |
| SAP BTP: Start Here | Choose the BTP topology and follow the correct deployment, auth, destination, and operations guides |
| BTP Cloud Foundry | MTA deployment, topology decision, role handoffs, and safe acceptance |
| BTP Administration | Changes, roles, secrets, scaling, upgrades, rollback, and customer handover |
| Multi-System Setup | Experimental read-only BTP multi-target deployment, destinations, roles, and client configuration |
| Configuration | Every flag and env var, one table |
| Updating | Update procedures per install method |
| Enterprise Auth | Layer A / Layer B auth internals, coexistence matrix |
| Tool Reference | Complete reference for all 12 tools |
| Extensions (Custom Tools) | Add your own Custom_* tools without forking (FEAT-61) — reads, gated non-ADT writes, console-class execute |
| Architecture | System architecture with diagrams |
| AI Usage Patterns | Agent workflow patterns and best practices |
| Skills | Reusable ARC-1 agent skills, including GitHub Copilot in Eclipse and VS Code ADT setup |
| Blog Series | Long-form posts on AI for ABAP development, ARC-1 internals, and real-world walkthroughs |
Development
npm ci && npm run build && npm test
See CLAUDE.md for codebase structure, testing commands, and contribution guidelines.
Credits
| Project | Author | Contribution |
|---|---|---|
| vibing-steampunk | oisee | Original Go MCP server — ARC-1's starting point |
| abap-adt-api | Marcello Urbani | TypeScript ADT library, definitive API reference |
| mcp-abap-adt | Mario Andreschak | First MCP server for ABAP ADT |
| abaplint | Lars Hvam | ABAP parser/linter (used via @abaplint/core) |
License
MIT
Related MCP servers

Arcadia Finance
Concentrated liquidity on Uniswap/Aerodrome (rebalance, compound, leverage) or single-sided lending.
Servidor MCP para integraciones con arcar.org
Servidor MCP para integraciones con arcar.org

io.github.archetypal-ai/archetypal-ai
Persistent memory for AI agents. recall, remember, checkpoint — soul preservation.

Read and edit GA4, Search Console and Google Tag Manager from any MCP client. 29 tools.
