MCP server providing tools for ABAP development via SAP ADT (ABAP Development Tools) REST API. Enables syntax checking, static analysis, object navigation, transport management, and repository inspection.
Arc1 ADT ABAP MCP provides 10 well-structured tools with complete input schemas and clear descriptions. All tools have explicit JSON Schema definitions with required fields and type constraints. Descriptions are detailed (100 - 250 chars) and explain WHAT the tool does and WHEN to use it. However, output schemas are not formally documented, responses are described narratively or as 'best-effort parse' with fallback to rawXml. Error handling is present but generic (step failures surface raw HTTP bodies rather than actionable recovery guidance). Tool naming follows verb_noun convention (arc1_sap_*) and is consistent. Parameters are well-described with examples. No security issues detected (no credentials in params). Composition is sound, tools chain naturally (find_definition → object_info → object_structure). Main gaps: missing output schema documentation, limited error classification, and no tool annotations (readOnlyHint/destructiveHint).
Run ABAP Test Cockpit (ATC) static analysis on an object and return findings (priority, check title, message, uri). Uses the system default check variant unless checkVariant is given. EXECUTES checks server-side; changes nothing. Best-effort parse; raw response surfaced on step failure.
Run an ABAP syntax check (no activation, changes nothing). Pass objectUri to check the saved object, or also pass source to syntax-check PROPOSED code server-side (transient — nothing is written). Returns messages with line, column, severity and text. Best-effort parse; rawXml when parsing is empty.
Go-to-definition for an identifier appearing in an ABAP source. Pass the URI of the source file you are reading and an identifier inside it (class name, method, type, function, etc.). Returns the URI of the definition.
Generic HTTP GET to any ADT endpoint, e.g. /sap/bc/adt/discovery, /sap/bc/adt/oo/classes/CL_FOO, /sap/bc/adt/repository/informationsystem/search?... Reuses Eclipse's destination auth so no credentials are needed. Use for endpoints that don't yet have a typed arc1_sap_* wrapper. Response body is capped at 256 KB; oversized responses set truncated=true.
Generic HTTP POST to any ADT endpoint. Body is sent as UTF-8 text with the given Content-Type. Use for any POST endpoint that doesn't yet have a typed arc1_sap_* wrapper. CSRF tokens are handled by Eclipse's session machinery. Response body capped at 256 KB.
Output schemas not formally documented. Tools return JSON with fields like 'findings', 'count', 'rawXml', 'parseError' but no schema definition. LLMs cannot reliably extract structured data without knowing expected fields, types, and presence guarantees.
Error handling returns raw HTTP bodies and generic step failure messages. No actionable recovery guidance. E.g., 'run checks failed: 400' tells LLM nothing about retry eligibility, user-fixable issues, or next steps.
Generic HTTP tools (arc1_sap_http_get, arc1_sap_http_post) lack parameter constraints. 'uri' accepts any string; no validation that it starts with /sap/bc/adt/. 'accept' and 'contentType' are free-form strings with no enum guidance. LLMs may pass invalid MIME types.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2025-06-18+ | v2 |
List inactive (not-yet-activated) ABAP objects on the system. Returns name, type and URI per object. Read-only. Best-effort structured parse; rawXml is included when parsing yields nothing.
List Eclipse ABAP projects in the current workspace with login state. Returns project name, destination ID, system ID, accessibility, and whether the destination is currently logged in. Use this to decide whether to prompt the user to log on before running backend-dependent tools.
List ABAP transport requests via the transport organizer. Filters: username (default = current user), status (Modifiable | Released), requestType (Task | etc.). Distinct from SAP's abap_transport-get which only returns transports for one specific ABAP object. Set parse=true for a minimal structured extraction; default returns the raw XML for the LLM to read directly.
Fetch metadata for one ABAP object identified by its ADT URI. Returns name, type, package, description, and version. Pair with arc1_sap_search to hydrate hits, or use after find_definition.
Outline of an ABAP object: its components (methods, attributes, events, includes) with name, type and URI. Pass objectUri (e.g. an OO class). Read-only. Best-effort structured parse; rawXml returned when parsing is empty.
Tool annotations missing. No readOnlyHint, destructiveHint, or idempotentHint declared. arc1_sap_http_post is marked WRITE risk but tool definition lacks destructiveHint annotation. Agents cannot infer safety properties from metadata.
arc1_sap_list_projects has empty input schema (no properties). Description says 'List Eclipse ABAP projects' but no parameters to filter or control output. Unclear if this is intentional or incomplete.