ARC-1 — Primary ADT MCP for Agentic ABAP Development
arc-1 is the PRIMARY ADT MCP of this orchestrator. All ADT-class operations (read source,
edit, activate, lint, transport) route to arc-1 first, then aibap (secondary), then
mcp-sap-gui (fallback). See scripts/sap_router.py (SapRouter.get_route()).
1. Tool Map — When to Use Which
| Tool |
Use for |
| SAPContext |
System/session context — SID, client, user, release. Call first in a new session |
| SAPSearch |
Find objects by name/type when you do not know the exact object name |
| SAPNavigate |
Jump between related objects — includes, super/subclasses, where-used |
| SAPRead |
Read source code and metadata of a known object (class, program, CDS, table) |
| SAPLint |
Static checks (syntax, ATC-style) on source BEFORE activation |
| SAPManage |
Create / modify / activate / delete objects — all write operations |
| SAPDiagnose |
Short dumps (ST22-style), traces, runtime diagnostics after failures |
| SAPTransport |
List / create / assign / release transport requests |
Rule of thumb: read-only questions -> SAPSearch/SAPRead/SAPNavigate.
Changes -> SAPLint -> SAPManage -> SAPTransport. Failures -> SAPDiagnose.
2. Route Through the Orchestrator
# Let the router pick arc-1 (ADT-first) for the action:
npm run router -- --action ADT_READ_SOURCE
python scripts/sap_router.py route --action ADT_EDIT_CLASS
# Force GUI fallback only when ADT cannot do it (SPRO, dynpro):
npm run router:gui -- --action SPRO_CONFIG
If arc-1 is down, the TieredFallback engine (scripts/fallback_engine.py) cascades
ADT -> RFC -> GUI -> BDC -> Offline -> Manual. Do not hand-code fallbacks.
3. Typical Flow: Read -> Edit -> Activate -> Transport
- Context —
SAPContext to confirm system/client (never assume DEV).
- Locate —
SAPSearch for the object; SAPNavigate to find the exact include/method.
- Read —
SAPRead to get current source. Edit surgically (Karpathy: touch only what's needed).
- Lint —
SAPLint on the modified source. Fix findings before writing.
- Write —
SAPManage to save the change (object goes INACTIVE).
- Activate —
SAPManage activate. An inactive object is invisible to runtime.
- Transport —
SAPTransport to assign the object to a modifiable request. Release only at gate (npm run abap:review:transport).
- Verify —
SAPRead the active version back; SAPDiagnose if execution dumps.
4. Health and Learning
# Probe arc-1 (HIGH criticality) + .env completeness:
npm run hc
npm run hc:prompt # interactive fix for missing SAP_HOST/SAP_USER/SAP_PASSWORD
# Feed routing telemetry so self_learn.py keeps arc-1 primary:
npm run learn:mcp -- --mcp arc-1 --latency 245 --success true
npm run learn:route -- --action ADT_EDIT_CLASS --success true
Pitfalls
- 401/403 on every arc-1 call → Cause: SAP credentials missing or wrong in .env, or user lacks S_DEVELOP. Solution: run
npm run hc:prompt to fill SAP host/user/password; confirm developer role with Basis.
- "Object locked by user X" → Cause: object is edit-locked in SE80/ADT by another session (or a stale lock of your own). Solution: retry later or ask the lock owner to release (SM12); never force-delete locks on shared objects.
- Change saved but behavior unchanged → Cause: object left INACTIVE — SAPManage save without activate. Solution: always activate after write and re-read the active version to confirm.
- Activation fails with syntax errors → Cause: edit broke dependent objects or lint step was skipped. Solution: run
SAPLint before SAPManage write; use SAPNavigate where-used to check dependents; SAPDiagnose for details.
- "Not assigned to a transport" on save → Cause: object in a transportable package but no modifiable request. Solution:
SAPTransport create/assign a workbench request first, or use $TMP for throwaway objects.
- arc-1 timeout / connection refused → Cause: MCP server down or SAP host unreachable. Solution:
npm run hc to confirm; router auto-falls back to aibap then GUI — do not bypass the fallback engine.
Verification
# 1. arc-1 healthy and env complete:
npm run hc
# 2. Router resolves an ADT action to arc-1 (primary):
python scripts/sap_router.py route --action ADT_READ_SOURCE
# 3. After an edit: SAPRead the object and confirm version = active,
# then gate before release:
npm run abap:review:transport
Related
- sap-router-skill — master routing tree (ADT -> arc-1 first, GUI fallback)
- abap-code-review — 9-dimension GO/NO-GO gate before SAPTransport release
- sap-transport-gate / sap-transport-management — transport landscape rules
- karpathy-guidelines — Think, Simplify, Surgical, Goal-Verify wrapper for every edit
1---2name: arc-1-skills3description: ARC-1 agentic SAP development skills (arc-mcp/arc-1/skills). Reference for ADT tools, code activation, and automated ABAP editing. Covers the 8 arc-1 MCP tools (SAPContext, SAPDiagnose, SAPLint, SAPManage, SAPNavigate, SAPRead, SAPSearch, SAPTransport), the read-edit-activate-transport flow, and arc-1's role as PRIMARY ADT MCP in the routing tree.4---56# ARC-1 — Primary ADT MCP for Agentic ABAP Development78arc-1 is the PRIMARY ADT MCP of this orchestrator. All ADT-class operations (read source,9edit, activate, lint, transport) route to arc-1 first, then aibap (secondary), then10mcp-sap-gui (fallback). See `scripts/sap_router.py` (`SapRouter.get_route()`).1112## 1. Tool Map — When to Use Which1314| Tool | Use for |15| --- | --- |16| **SAPContext** | System/session context — SID, client, user, release. Call first in a new session |17| **SAPSearch** | Find objects by name/type when you do not know the exact object name |18| **SAPNavigate** | Jump between related objects — includes, super/subclasses, where-used |19| **SAPRead** | Read source code and metadata of a known object (class, program, CDS, table) |20| **SAPLint** | Static checks (syntax, ATC-style) on source BEFORE activation |21| **SAPManage** | Create / modify / activate / delete objects — all write operations |22| **SAPDiagnose** | Short dumps (ST22-style), traces, runtime diagnostics after failures |23| **SAPTransport** | List / create / assign / release transport requests |2425Rule of thumb: read-only questions -> SAPSearch/SAPRead/SAPNavigate.26Changes -> SAPLint -> SAPManage -> SAPTransport. Failures -> SAPDiagnose.2728## 2. Route Through the Orchestrator2930```bash31# Let the router pick arc-1 (ADT-first) for the action:32npm run router -- --action ADT_READ_SOURCE33python scripts/sap_router.py route --action ADT_EDIT_CLASS3435# Force GUI fallback only when ADT cannot do it (SPRO, dynpro):36npm run router:gui -- --action SPRO_CONFIG37```3839If arc-1 is down, the TieredFallback engine (`scripts/fallback_engine.py`) cascades40ADT -> RFC -> GUI -> BDC -> Offline -> Manual. Do not hand-code fallbacks.4142## 3. Typical Flow: Read -> Edit -> Activate -> Transport43441. **Context** — `SAPContext` to confirm system/client (never assume DEV).452. **Locate** — `SAPSearch` for the object; `SAPNavigate` to find the exact include/method.463. **Read** — `SAPRead` to get current source. Edit surgically (Karpathy: touch only what's needed).474. **Lint** — `SAPLint` on the modified source. Fix findings before writing.485. **Write** — `SAPManage` to save the change (object goes INACTIVE).496. **Activate** — `SAPManage` activate. An inactive object is invisible to runtime.507. **Transport** — `SAPTransport` to assign the object to a modifiable request. Release only at gate (`npm run abap:review:transport`).518. **Verify** — `SAPRead` the active version back; `SAPDiagnose` if execution dumps.5253## 4. Health and Learning5455```bash56# Probe arc-1 (HIGH criticality) + .env completeness:57npm run hc58npm run hc:prompt # interactive fix for missing SAP_HOST/SAP_USER/SAP_PASSWORD5960# Feed routing telemetry so self_learn.py keeps arc-1 primary:61npm run learn:mcp -- --mcp arc-1 --latency 245 --success true62npm run learn:route -- --action ADT_EDIT_CLASS --success true63```6465## Pitfalls6667- **401/403 on every arc-1 call** → Cause: SAP credentials missing or wrong in .env, or user lacks S_DEVELOP. Solution: run `npm run hc:prompt` to fill SAP host/user/password; confirm developer role with Basis.68- **"Object locked by user X"** → Cause: object is edit-locked in SE80/ADT by another session (or a stale lock of your own). Solution: retry later or ask the lock owner to release (SM12); never force-delete locks on shared objects.69- **Change saved but behavior unchanged** → Cause: object left INACTIVE — SAPManage save without activate. Solution: always activate after write and re-read the active version to confirm.70- **Activation fails with syntax errors** → Cause: edit broke dependent objects or lint step was skipped. Solution: run `SAPLint` before `SAPManage` write; use `SAPNavigate` where-used to check dependents; `SAPDiagnose` for details.71- **"Not assigned to a transport" on save** → Cause: object in a transportable package but no modifiable request. Solution: `SAPTransport` create/assign a workbench request first, or use $TMP for throwaway objects.72- **arc-1 timeout / connection refused** → Cause: MCP server down or SAP host unreachable. Solution: `npm run hc` to confirm; router auto-falls back to aibap then GUI — do not bypass the fallback engine.7374## Verification7576```bash77# 1. arc-1 healthy and env complete:78npm run hc7980# 2. Router resolves an ADT action to arc-1 (primary):81python scripts/sap_router.py route --action ADT_READ_SOURCE8283# 3. After an edit: SAPRead the object and confirm version = active,84# then gate before release:85npm run abap:review:transport86```8788## Related8990- **sap-router-skill** — master routing tree (ADT -> arc-1 first, GUI fallback)91- **abap-code-review** — 9-dimension GO/NO-GO gate before SAPTransport release92- **sap-transport-gate / sap-transport-management** — transport landscape rules93- **karpathy-guidelines** — Think, Simplify, Surgical, Goal-Verify wrapper for every edit