Mmcp.market

Sap Adt MCP server

by yzonur·io.github.yzonur/sap-adt-mcp·v0.8.57

Give Claude live access to SAP ABAP via ADT: read, search, check, test, and edit objects.

B74/100grade B
What users say
No reviews yet
Be the first
Safety scan
B74/100

full report

Adoption
Growing

16 stars54 downloads/wk

Reviews

Write one

Nobody has reviewed Sap Adt yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

Sap Adt tools (58, 12 write)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • adt_activate

    Activate one or more ABAP objects. In multi-developer scenarios where the object's components are locked in a separate task under the same transport, set processRedoneOOSourceVersionOnly=true to ask SAP to re-activate only the redone OO source versions (bypasses the 'Object components locked in request and separate task' 403).

  • adt_browse_package

    List the immediate contents (one level) of an ABAP package. Use adt_list_packages for recursive walks.

  • adt_cds_data_preview

    Preview the data exposed by a CDS view (DDL source) via the ADT CDS Data Preview endpoint. Read-only. Returns structured { columns, rows } just like adt_read_table, but you only pass the CDS entity / DDL source name — no SQL. Requires a system with CDS support (NetWeaver 7.5x+ / S/4HANA).

  • adt_cds_dependencies

    Return the dependency graph of a CDS view — the entities it consumes (and, where the system exposes it, related objects). Uses the ADT DDL dependency graphdata endpoint. Returns the parsed object references plus the raw graph payload. Requires CDS support.

  • adt_check_note_status

    Report the implementation status of a SAP Note in the system (e.g. can be implemented / obsolete / fully implemented / partially implemented). EXPERIMENTAL — see adt_get_note for availability constraints.

  • adt_close_panel

    Stop the local control panel started by adt_open_panel. (It also stops on its own when this MCP session ends.)

  • adt_compare_source

    Compare the source of the same object across two systems. Returns a unified-diff plus added/removed line counts.

  • adt_compare_versions

    Diff two versions of the SAME object's source within one system. Defaults to active-vs-inactive (the daily 'what did I change but not yet activate' question). Pass from/to to compare specific version identifiers understood by the ADT ?version= query (e.g. 'active', 'inactive', or a numeric version number where supported). Returns a unified diff plus added/removed line counts, reusing the same diff

  • adt_create_objectwrite action

    Create a new ABAP object in a package. Supported types: program, class, interface, include, functiongroup, function, cds, accesscontrol, metadataext, behaviordef, messageclass. Refused under read-only mode.

  • adt_create_transportwrite action

    Create a new transport request. Returns the new TR number. Subject to read-only mode. Note: on some systems TR *creation* routes through a SAP GUI dialog and fails headless with a 500 (SAPLSTRD/SAPLSPO4 'No window system type'). Assigning changes to an EXISTING request works headless — pass that TR id as `transport` to adt_lock / adt_set_source instead.

  • adt_debug_delete_breakpointwrite action

    Delete an external debugger breakpoint by its id (from adt_debug_set_breakpoint).

  • adt_debug_delete_watchpointwrite action

    Delete a watchpoint by id (from adt_debug_set_watchpoint). Phase 3, WRITE — refused under read-only mode. Best-effort until validated live.

  • adt_debug_goto_stack

    Move the active stack frame of the attached debuggee (Phase 2). Pass either `stackUri` (a /sap/bc/adt/debugger/stack/type/<t>/position/<n> URI from adt_debug_stack) or a 0-based `position`. WRITE — refused under read-only mode.

  • adt_debug_listen

    Wait (bounded long-poll) for a debuggee to hit a breakpoint set with adt_debug_set_breakpoint. Returns { caught: true, … } with a summary (and auto-attaches) when a session is trapped, or { caught: false } if none arrived within the timeout — in which case call it again. One listener per process; set breakpoints first.

  • adt_debug_set_breakpoint

    Set an external ABAP debugger breakpoint at a line of an object. Pair with adt_debug_listen to catch a session that reaches it. Returns the breakpoint id (needed to delete it). Give either `uri` (a full ADT source URI) or `object`+`type` (+`include` for classes) with `line`.

  • adt_debug_set_variable

    Set a variable's value in the attached debuggee (Phase 3). WRITE — refused under read-only mode. Changes live session state; use with care on shared/production-adjacent systems.

  • adt_debug_set_watchpoint

    Set a debugger watchpoint that breaks when a variable changes (or a condition holds). Phase 3, WRITE — refused under read-only mode. NOTE: the watchpoint request/response contract has no reference implementation and is best-effort until validated on a live system; check `raw`.

  • adt_debug_stack

    Return the call stack of the currently attached debuggee (after adt_debug_listen caught one).

  • adt_debug_step

    Advance the attached debuggee (Phase 2, flow control). `kind`: into (step into), over (step over), return (step out), continue (resume until the next breakpoint), runToLine / jumpToLine (need `uri`), terminate (stop the debuggee). WRITE — refused under read-only mode. Returns the new state (position, reached breakpoints) plus raw XML. A `continue` that lets the run finish answers `status: "debugge

  • adt_debug_stop

    End the debug session: release the attached debuggee (stepContinue), then delete this process's listener and every breakpoint it set. Call when finished (or to reset after an error) so no dangling breakpoints/listeners are left on the system and no suspended request is left hanging.

  • adt_debug_variables

    Read variable values from the currently attached debuggee. Pass `names` (variable names/ids in scope, e.g. ['sy-subrc','lv_total']); omit to read the top-level scope roots.

  • adt_delete_objectwrite action

    Delete an ABAP object. Acquires a lock and issues DELETE. Refused under read-only mode.

  • adt_get_dump

    Fetch the full detail of one ABAP short dump by id. Performs two requests: a metadata XML lookup (runtime error, program, links to dump text) followed by a fetch of the formatted dump text from the link returned by SAP. Returns the metadata plus a chapter map (shortText, whatHappened, errorAnalysis, howToCorrect, whereTerminated, sourceCodeExtract, …). Pass chapters: ['key', …] to limit the respon

  • adt_get_note

    Fetch SAP Note metadata (title, component, version, type, implementation prerequisites) via the Note Assistant ADT API. EXPERIMENTAL — only available on systems shipping the SNOTE ADT plug-in (modern S/4HANA). On systems without it the response carries available:false and a hint to use GUI SNOTE.

  • adt_get_source

    Fetch the ABAP source of an object (program, class, interface, function module, include, CDS, table). Returns plain text. DDIC primitives without plain-text source (data element, domain, message class) return their ADT XML metadata instead (format: 'xml'). For sources larger than the MCP per-call output cap (~64 KB), use firstLine/lastLine to paginate or onlyMethod to slice a single method body —

  • adt_get_transport

    Fetch detail of a single transport request (header + included objects).

  • adt_grep_source

    Full-text regex search across ABAP source. Complements adt_search_objects (which only matches names). Scope the search to a package (optionally recursive), a transport request, or an explicit object list. Fetches /source/main for each source-bearing object (programs, classes, interfaces, includes, CDS/DDLS, DCLS, DDLX, behavior definitions) and returns matching lines as object + line + text. DDIC

  • adt_implement_note

    Implement (download + apply) a SAP Note via the Note Assistant ADT API. WRITE operation — subject to read-only mode and requires a transport. EXPERIMENTAL and potentially disruptive: implementing a note changes system objects. Only available on systems shipping the SNOTE ADT plug-in. Prefer GUI SNOTE for anything non-trivial.

  • adt_list_dumps

    List ABAP short dumps (ST22) from the runtime-dumps Atom feed. Each entry exposes id, runtime error name, terminated program, timestamp, user, and any release-specific rba:*/dump:* fields surfaced by the system. The server-side row cap is unreliable across releases (some ignore it) — adt_list_dumps trims to maxResults on the client too. Use adt_get_dump with an id for the full dump text.

  • adt_list_inactive_objects

    List the inactive objects worklist for the connected user (the ADT 'Inactive Objects' view — what has been edited but not yet activated). Returns each object with its type and, where available, the transport it sits in. An empty list means everything is activated.

  • adt_list_locks

    List runtime enqueue locks (the SM12 analog). NOTE: most ABAP systems do NOT expose SM12 runtime enqueues over ADT REST — in that case the response carries available:false and a hint to use SM12. This is distinct from the editing lock acquired by adt_lock (a single object) and from DDIC lock-object definitions.

  • adt_list_packages

    Recursively walk subpackages from a root package. Returns a flattened map of package → contents (counts and entries grouped by type).

  • adt_list_released_apis

    List the API release-state contracts the system defines — the catalog used to classify released objects (e.g. USE_IN_KEY_USER_APPS = C1, ADD_CUSTOM_FIELDS = C0), each with its compatibility-contract description. This is the released-API classification catalog, not a per-object enumeration (object-level released-API listing requires the release-dependent RIS search facet). Backed by repository/info

  • adt_list_systems

    List configured SAP systems available for ADT calls, the default system, and read-only flags.

  • adt_list_transports

    List transport requests visible to the configured user. Filter by user (requestor) and / or status (modifiable / released). Endpoint shape may vary across NetWeaver releases — falls back to adt_request if your system uses a different path.

  • adt_list_versions

    List the version history of an object via the ADT versions sub-resource ({objectUri}/versions). NOTE: many on-prem NetWeaver releases do not expose a version-history REST endpoint and return 404 — in that case use adt_compare_versions to diff active vs inactive instead. The response carries available:false with a hint when the endpoint is absent.

  • adt_lock

    Acquire a stateful lock on an ABAP object. Returns a lockHandle to reuse across multiple adt_set_source calls. On CTS conflicts the error includes longText and t100 details (which TR is blocking, who owns it) so the caller can recover.

  • adt_open_panel

    Open the local, read-only SAP control panel: an HTML page with buttons for the read-only tools (search, grep source, get source, read table, ATC, where-used, packages, transports, dumps, inactive objects). Returns the URL to open. The panel is served from inside THIS MCP process, so it works only while this session keeps the MCP connected and dies when the session ends. Bound to 127.0.0.1, gated b

  • adt_ping

    Ping a configured SAP system by calling the ADT discovery endpoint. Use to verify credentials and network reachability.

  • adt_pretty_printwrite action

    Run the ABAP pretty printer on supplied source code (stateless — no object lookup, no lock).

  • adt_rap_scaffold

    Generate a complete RAP stack from a short spec: CDS root view entity → behavior definition (managed) → behavior implementation class → service definition → service binding. DEFAULTS TO dryRun:true — returns the planned object names and generated source for review WITHOUT creating anything. Set dryRun:false to actually create them in dependency order (subject to read-only mode; requires a transpor

  • adt_read_spool

    Read the output (spool list) of a background job / spool request (SP01 analog). EXPERIMENTAL — see adt_schedule_job for availability constraints; returns available:false on systems without an ADT spool service.

  • adt_read_tablewrite action

    Execute an OpenSQL SELECT against the SAP database via the ADT Data Preview endpoint. Read-only by design (SELECT only — INSERT/UPDATE/DELETE rejected client- and server-side). Returns structured { columns, rows }. Use ABAP OpenSQL syntax: 'SELECT matnr matkl FROM mara WHERE matnr LIKE \'M%\''. Row count capped at maxRows (default 100, hard cap 5000). Requires NetWeaver 7.55+ or S/4HANA — older sy

  • adt_release_transport

    Release a transport request. Subject to read-only mode.

  • adt_report_issue

    File a bug or enhancement about a sap-adt-mcp TOOL back to the maintainer. The report is redacted (hosts, users, passwords, IPs, emails stripped), de-duplicated, and becomes a GitHub issue. Use this for defects the automatic crash reporter cannot see: wrong data in an otherwise-successful response, a parameter that is silently ignored, or a missing capability. Do NOT use it for problems in the use

  • adt_request

    Generic ADT REST call — escape hatch for endpoints not covered by a high-level tool. Handles Basic auth, sap-client, cookies, CSRF token automatically. Path is confined to the /sap/bc/adt/ namespace.

  • adt_run_atcwrite action

    Run ABAP Test Cockpit (ATC) on one or more objects. ATC endpoint shape varies across NetWeaver releases.

  • adt_run_atc_packagewrite action

    Run ABAP Test Cockpit (ATC) over an ENTIRE package via the full ADT worklist flow (create worklist → run → fetch results). Returns parsed findings (check, message, priority, location) plus a priority histogram and the worklist id. When checkVariant is omitted, the system default check variant from ATC customizing is used. This is the bulk counterpart to adt_run_atc (single object).

  • adt_run_atc_transportwrite action

    Run ABAP Test Cockpit (ATC) over every object in a transport request via the full ADT worklist flow. Resolves the transport's object references, runs ATC against them, and returns parsed findings + priority histogram + worklist id. When checkVariant is omitted, the system default check variant is used.

  • adt_run_unit_testswrite action

    Run ABAP Unit tests for one or more objects (typically test container classes).

  • adt_schedule_job

    Schedule an ABAP background job (SM36 analog) that runs a report with a variant. WRITE operation — subject to read-only mode. EXPERIMENTAL: no standardized ADT job-scheduling API exists on classic NetWeaver; on systems without an extension service the response carries available:false. Prefer SM36 for anything important.

  • adt_search_objects

    Quick-search the ABAP repository for objects whose name matches a pattern. Use '*' as wildcard.

  • adt_set_source

    Replace the ABAP source of an object. The new source is the FULL text of the include — it ATOMICALLY REPLACES the entire include on the server. Passing a partial chunk or diff will delete the rest of the include. Supply the source inline via `source`, OR — for a large object that would blow the per-call I/O cap — via `sourceFile` (a local path the MCP process reads itself). Orchestrates lock → PUT

  • adt_set_source_chunked

    Replace ABAP source incrementally for files larger than the MCP per-call I/O cap. Caller acquires a lock with adt_lock, then sends the source in N chunks (chunkIndex 0..N-1) under a stable bufferId, and finally commits with commit=true to trigger the actual PUT. The chunks accumulate in server-side memory (10-minute TTL, 4 MB total cap per buffer). Same partial-source guard as adt_set_source appli

  • adt_syntax_checkwrite action

    Run an ADT syntax check on an object. Returns the raw <chkrun:reports> XML. Includes only compile in the context of a main program: for type=include, pass `context` (the main program / function group), otherwise the check returns status='notProcessed'. When omitted for an include, the tool tries to auto-resolve the include's first main program.

  • adt_transport_diff

    Diff every object listed in a transport between two systems. Capped at maxObjects (default 50).

  • adt_unlock

    Release a stateful lock previously acquired with adt_lock.

  • adt_where_used

    Where-used list for an object. Returns the references that point to it. Widely-used objects can have thousands of references, so the list is capped at `maxResults` (default 200) — `numberOfResults` always reports the backend's full count and `truncated` says whether the list was cut.

Public scan report

scanner v0.1.9 · 2026-09-24 · same rubric, same numbers if you re-run it

1 high
  • Code scan40 source files scanned13/25
  • –Live reliabilityno gateway calls yet and no remote to proben/a
  • –Tool poisoningtools not inspected (local package is not executed); not countedn/a
  • Auth qualitylocal package, no credentials required12/15
  • Maintenancelast push 2 days ago15/15
  • Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10

Findings (1)

  • highShell command built from a string (injection risk)exec.shell-concat
    src/tools/panel.js: … Promise((resolve) => { try { exec(`${cmd} "${url}"`, (err) => resolve(!err)); } c…
Overall 74/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

What the publisher says

From the Sap Adt repository's README, as published. We do not edit it. Read it on GitHub

sap-adt-mcp

MCP server giving Claude (and any MCP-compatible client) live access to SAP systems via ADT.

Read source, search the repository, run syntax checks, run unit tests, run

ATC, diff the same object across landscapes, edit and activate ABAP — all

from a chat window or an autonomous agent. No add-on installation on the SAP

stack required.

Why

SAP development is full of repetitive read-the-source / check-the-callers / diff-the-system work. AI assistants are great at exactly that kind of task — but only if they can reach the system. ADT (ABAP Development Tools) is the HTTP API that Eclipse uses; it ships with every modern NetWeaver and S/4 system. This server speaks ADT on behalf of the agent so the agent can do real work against your real systems, with the same auth and scoping you'd give a developer in Eclipse.

What's in the box

27 high-level tools wrapped around the most common ADT endpoints, plus a generic escape hatch for anything else, plus 5 user-invokable Clean Core prompts that turn the tool surface into outcome-shaped slash commands (see Clean Core prompts below).

¹ Experimental tools target ADT endpoints (SNOTE, SM12 enqueues, SM36/SP01) that classic NetWeaver does not expose; on such systems they return available:false with a fall-back hint rather than failing. They work where the backing service exists (typically S/4HANA).

Multi-system aware. One config, many SAP systems (DEV / QAS / PRD or landscape-wide); switch with the system argument or compare across two with adtcomparesource / adttransportdiff.

Safe by default. A readOnly flag (global or per-system) blocks every write method. Read-only POST queries (search, where-used, package tree) remain allowed so agents can still discover.

Robust. Per-request timeout. CSRF token negotiation with auto-retry on

  1. Self-signed cert opt-out. Optional debug tracing to stderr.

Structured errors. ADT's envelopes are parsed into { type, message, namespace } so failed calls don't dump XML into the agent's context window.

Install

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

Install directly

Runs npx -y sap-adt-mcp on your machine. Read the scan report first; the gateway never runs local packages.

claude mcp add sap-adt-mcp -- npx -y sap-adt-mcp
Add to Cursor

Sap Adt: common questions

Is Sap Adt MCP server safe?
Mostly: it is graded B (74/100). Read the Sap Adt safety report
How do I install Sap Adt?
It runs on your machine. Copy the Claude Code, Claude Desktop or Cursor config from the install section.
Does Sap Adt need an API key?
No secret keys are declared. It reads 1 setting from the environment.
Is Sap Adt maintained?
The last commit was 2 days ago (2026-09-22). The latest release is v0.8.57.
What can I use instead of Sap Adt?
Servers from other publishers that do the same job: Domain Search MCP server, Cronus UI MCP server and Smithsonian MCP server. Compare all Sap Adt alternatives.

Alternatives to Sap Adt

Same job from other publishers: the closest match first, then the best rated.

All Sap Adt alternatives →
  • Domain Search
    Naming engine with availability intelligence: score names, check domains, socials and registries.
    B
  • Cronus UI
    Search, install, compose, add-page, and theme Cronus UI from the live registry.
    A
  • Smithsonian
    Search 14.5M Smithsonian Open Access objects, get CC0 images, find cross-collection connections.
    A
  • Paperless-ngx
    Full Paperless-ngx API for AI assistants: search, tag, edit and upload documents, workflows and more
    B

More from yzonur →