Skip to content

ARC-1 — SAP ADT MCP Server

Enterprise-ready proxy between AI clients and SAP systems.

ARC-1 is a TypeScript MCP server (distributed as an npm package and Docker image) that implements the Model Context Protocol (MCP) and translates AI tool calls into SAP ABAP Development Tools (ADT) REST API requests. It works with Claude, GitHub Copilot, VS Code, and any MCP-compatible client.

Stay current with ARC-1

Get major releases, upgrade and security notes, practical guides, and occasional questions where your feedback can shape what comes next. Join ARC-1 Updates →

Why ARC-1?

As an admin, you control what the AI can and cannot do via positive-opt-in flags:

  • Default deny for every mutation; admin explicitly enables writes, transport writes, git writes, data preview, and freestyle SQL separately
  • Package allowlist restricts writes to $TMP, Z*, or any pattern
  • SAP_DENY_ACTIONS blocks individual actions (e.g. SAPWrite.delete) for admins who need a finer scalpel
  • Every tool call audited with user identity; per-user scopes (via XSUAA role collections, OIDC JWTs, or API-key profiles) tighten further
  • Layered rate limiting out of the box — separate per-IP OAuth and MCP HTTP edge buckets, optional per-user MCP quota, and a server-wide SAP-bound semaphore with Retry-After honoring. See the Rate Limiting Guide.

Quick Start

# Run directly with npx (no install needed)
npx arc-1@latest --url https://your-sap-host:44300 --user YOUR_USER --password YOUR_PASSWORD

# Or install globally
npm install -g arc-1
arc1 --url https://your-sap-host:44300 --user YOUR_USER --password YOUR_PASSWORD

# Or use Docker
docker run --rm -i -e SAP_URL=https://host:44300 -e SAP_USER=dev -e SAP_PASSWORD=secret \
  -e SAP_TRANSPORT=stdio ghcr.io/arc-mcp/arc-1

BTP ABAP Environment

For local SAP BTP ABAP (Steampunk) development, use a service key instead of username/password:

SAP_BTP_SERVICE_KEY_FILE=/path/to/service-key.json arc1

A browser opens for login (OAuth 2.0 Authorization Code flow). For deployed BTP Cloud Foundry servers, use a BTP Destination with OAuth2UserTokenExchange instead; it is headless and preserves per-user SAP identity. See btp-abap-environment.md for both paths.

Connect Your Client

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "sap": {
      "command": "npx",
      "args": ["-y", "arc-1@latest"],
      "env": {
        "SAP_URL": "https://your-sap-host:44300",
        "SAP_USER": "your-username",
        "SAP_PASSWORD": "your-password",
        "SAP_CLIENT": "100"
      }
    }
  }
}

ARC-1 is read-only by default — no writes, no free SQL, no table preview, no transport mutations. To change that, edit the same env block that starts ARC-1. For example, SAP_ALLOW_DATA_PREVIEW=true SAP_ALLOW_FREE_SQL=true keeps the server read-only but enables SQL + named table preview. The example below shows a broad-access variant (writes + SQL + transports + all packages):

{
  "mcpServers": {
    "sap": {
      "command": "npx",
      "args": ["-y", "arc-1@latest"],
      "env": {
        "SAP_URL": "https://your-sap-host:44300",
        "SAP_USER": "your-username",
        "SAP_PASSWORD": "your-password",
        "SAP_CLIENT": "100",
        "SAP_ALLOW_WRITES": "true", "SAP_ALLOW_DATA_PREVIEW": "true", "SAP_ALLOW_FREE_SQL": "true", "SAP_ALLOW_TRANSPORT_WRITES": "true",
        "SAP_ALLOWED_PACKAGES": "*"
      }
    }
  }
}

Pick the lightest combination that gets your work done. Common starting points:

  • Read/search only: nothing — defaults are already read-only.
  • Read + data preview + SQL: SAP_ALLOW_DATA_PREVIEW=true, SAP_ALLOW_FREE_SQL=true.
  • **Developer (writes to $TMP/Z*)**: SAP_ALLOW_WRITES=true, SAP_ALLOWED_PACKAGES='$TMP,Z*', optionally SAP_ALLOW_TRANSPORT_WRITES=true for CTS.

See authorization.md for the three-layer model and the full capability requirements.

Claude Code

Add .mcp.json to your project root:

{
  "mcpServers": {
    "sap": {
      "command": "npx",
      "args": ["-y", "arc-1@latest"],
      "env": {
        "SAP_URL": "https://your-sap-host:44300",
        "SAP_USER": "your-username",
        "SAP_PASSWORD": "your-password",
        "SAP_CLIENT": "100"
      }
    }
  }
}

GitHub Copilot / VS Code

For local stdio mode, use the same npx command shape shown above. VS Code's workspace .vscode/mcp.json uses this servers form:

{
  "servers": {
    "sap": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "arc-1@latest"],
      "env": {
        "SAP_URL": "https://your-sap-host:44300",
        "SAP_USER": "your-username",
        "SAP_PASSWORD": "your-password",
        "SAP_CLIENT": "100"
      }
    }
  }
}

For local HTTP Streamable mode, generate an API key, start the server, and configure the same key in the client. For shared access, use HTTPS as described in Deployment.

export ARC1_LOCAL_KEY="$(openssl rand -hex 32)"
export ARC1_API_KEYS="$ARC1_LOCAL_KEY:admin"
SAP_URL=https://host:44300 SAP_USER=dev SAP_PASSWORD=secret \
  npx arc-1@latest --transport http-streamable --http-addr 127.0.0.1:3000

Add to VS Code / Copilot MCP config:

{
  "servers": {
    "sap": {
      "type": "http",
      "url": "http://127.0.0.1:3000/mcp",
      "headers": { "Authorization": "Bearer YOUR_GENERATED_API_KEY" }
    }
  }
}

For VS Code / Copilot HTTP mode, safety flags go on the ARC-1 startup command, not in the MCP JSON. Example: SAP_ALLOW_DATA_PREVIEW=true SAP_ALLOW_FREE_SQL=true npx arc-1@latest --transport http-streamable ...

HTTP Streamable is also the transport for Copilot Studio (Microsoft Power Platform integrations).

Other MCP Clients

All MCP clients that support stdio work out of the box — just point them at npx arc-1.

Tools

ARC-1 exposes 12 intent-based tools via MCP, designed for AI agents like Copilot Studio.

Choose evidence for the question: targeted SAPRead for exact behavior or a known reference. For business purpose, reviews or test design, start with SAPContext(action="deps", type=..., name=...) for available KTD and dependency contracts, then compare documented requirements with source. Without documented requirements, intent is unverified. Neither contracts nor metadata relationships prove runtime behavior. Experimental live relations automatically offer bounded repository neighborhoods where available; no additional database is required.

Full reference: tools.md

Testing & CI

  • Thousands of unit tests run locally without SAP access (npm test); exact frozen-tree counts belong in release/PR evidence rather than this long-lived landing page.
  • Default integration + E2E lanes run against the A4H 2025 SAP target on internal PRs and manual dispatch in GitHub Actions
  • Manual slow SAP profiles cover broad where-used, RAP full-stack, and recursive CTS release checks (test:integration:slow, test:e2e:slow, GitHub SAP Slow Tests workflow)
  • BTP tests are local-only (npm run test:integration:btp, npm run test:integration:btp:smoke)
  • Reliability telemetry + coverage are collected as informational CI signals

Admin Controls (Safety)

Safe by default - read-only, no SQL, no data preview, no transport writes, no Git writes. Writes are restricted to $TMP.

Every capability is a separate positive opt-in flag:

  • Nothing: read / search / navigate / lint / diagnose work out of the box.
  • SAP_ALLOW_DATA_PREVIEW=true + SAP_ALLOW_FREE_SQL=true: enable named table preview and freestyle SQL.
  • SAP_ALLOW_WRITES=true + SAP_ALLOWED_PACKAGES='$TMP,Z*': enable object writes to $TMP and Z* packages.
  • Add SAP_ALLOW_TRANSPORT_WRITES=true for CTS transport mutations. Add SAP_ALLOW_GIT_WRITES=true for gated abapGit mutations and SAP-side Git egress; gCTS reads are available, but every gCTS mutation remains quarantined before HTTP. Some accepted abapGit actions return error/incomplete when no authoritative postcondition exists—inspect state before retrying.

The three-layer model (server flag + user scope + SAP authorization) is described in authorization.md. Full flag reference: configuration-reference.md.

SAP API Policy and data access

For a custom MCP server such as ARC-1, use SAP's Third-Party MCP Access reference architecture as the main design and control baseline. SAP's FAQ allows custom MCP servers under conditions; Integration Suite is not mandatory. Our preferred shared deployment is BTP with strict principal propagation. SAP API Policy & Architecture Alignment explains the path, remaining control gaps and the specific FAQ Q33 clarification needed for ARC-1's direct ADT client. Architecture alignment and BTP hosting alone do not establish full adherence.

ARC-1's defaults are intentionally conservative: no writes, no named table preview, no freestyle SQL, no transport mutations, no Git mutations. Two capabilities are especially sensitive and are off by default behind explicit opt-in env vars:

Capability Env var to enable Default Why it is gated
Table previews, saved SAPscript texts and SLG1 messages SAP_ALLOW_DATA_PREVIEW=true false (off) Reads application data; authenticated callers also need data scope.
Freestyle ABAP SQL (SAPQuery(action=sql)) SAP_ALLOW_FREE_SQL=true false (off) Executes ad-hoc ABAP SQL; authenticated callers also need sql scope.

FAQ Q33 places business-data reads and backend SQL outside ADT's intended development-tooling scope. Keep these flags off unless the specific use has a documented allowance or SAP authorization under the applicable agreements. Technical opt-ins and internal approval do not supply that allowance.

Documentation

Doc Description
quickstart.md Start here — npx + Claude Desktop setup
release-notes.md Released changes and upgrade notes
roadmap.md Parked ideas and future possibilities
local-development.md Full local dev — npx/npm/Docker/git, .env, SSO cookie extractor, MCP client configs
deployment.md Multi-user deployment — Docker on a VM, BTP Cloud Foundry, BTP ABAP
configuration-reference.md Every flag and env var, one table
updating.md Update procedures (npx / Docker / BTP / git)
enterprise-auth.md Auth internals — Layer A / Layer B, coexistence matrix
authorization.md Scopes, roles, safety profiles
tools.md Complete tool reference (12 intent-based tools)
mcp-usage.md AI agent usage guide & workflow patterns
architecture.md System architecture with Mermaid diagrams
caching.md Request-driven object caching — server-validated via ETag/If-None-Match, active/inactive source views, dependency parsing reuse, and live reverse-dependency lookup
security-guide.md Security hardening checklist for production
cli-guide.md CLI commands and configuration
docker.md Full Docker reference
btp-abap-environment.md BTP ABAP Environment — local service-key OAuth and deployed per-user destination setup
btp-cloud-foundry-deployment.md Canonical BTP Cloud Foundry MTA deployment and read-only acceptance runbook
btp-overview.md Start here for SAP BTP topology selection and the correct setup/documentation sequence
btp-administration.md BTP configuration ownership, roles, secrets, lifecycle, scaling, rollback, and handover
multi-target-setup.md Build, deploy, configure, and verify experimental read-only multi-system mode
multi-target-administration.md Multi-target diagnostics, registry lifecycle, capacity, and security operations
operations.md Operational task map for BTP, Docker, updates, logging, limits, caching, auth testing, and incidents
sap-trial-setup.md SAP BTP trial setup
blog-series.md Long-form blog series — AI for ABAP development, ARC-1 design, BTP / Copilot Studio / Joule walkthroughs

License

MIT — GitHub Repository