DoZimple MCP server for SAP ABAP: multi-system, secure by design — code review, ATC, diagnosis and documentation for ECC and S/4HANA
Server has 51 tools with generally clear names and descriptions. Most tools follow verb_noun naming (transport_diff, get_source, search_objects). Descriptions are substantive (avg ~150 chars) and explain WHAT and WHEN. However, critical gaps exist: NO visible input schemas in the provided source code, tool definitions reference `input: S` but actual Zod schemas are not shown. Parameter descriptions are absent from the visible code. Output schemas are not documented. Error handling guidance is minimal. The server appears well-architected (ToolDef interface is sound, access control is explicit), but without seeing the actual schema implementations, schema scoring must be conservative. Tools are READ_ONLY or WRITE with clear risk labels, which is good for security. Composition is strong, tools are single-purpose and chainable (e.g., search_objects → get_source → write_source).
**Since which release does this syntax exist?** Availability of each ABAP language feature per release (7.40 … 7.58, 2025).
**abaplint on a snippet.** Runs abaplint locally (code never leaves the machine) on an ABAP snippet or source.
**Activate object.** Activates an object and returns SAP's messages as they are (errors with line, warnings, objects left inactive).
**Transport risk.** Tells whether a transport (or a release of several, comma-separated) is safe to move to QA or production: unreleased tasks, import status, dependencies that don't travel, positional access, CTS locks, import queue.
**Is this API released? What is its successor?** Release state of an SAP object (class, function module/BAPI, table, CDS…) by contract C0–C4 and its released successor, read from the system itself.
NO input schemas visible in source code. All 51 tools reference `input: S` but actual Zod schema definitions are not provided. Cannot verify parameter types, constraints, or descriptions. This is a CRITICAL blocker for LLM tool selection and validation.
No output schemas documented. ToolDef interface declares optional `output?: ZodRawShape` but no tools show structured output definitions. LLMs cannot infer what fields to expect from tool results, forcing unstructured text parsing.
sap_systems tool has minimal description ('Estado de la configuración de sistemas SAP', 47 chars, in Spanish). Insufficient for LLM to determine when/why to call it. Violates 10 - 1024 char guideline and lacks English context.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2025-06-18+ | v2 |
**Application log (SLG1) headers.** Application log headers (BALHDR) by object/subobject, external number, user and date, with error and warning counts.
**SAP-proposed fixes.** The fixes SAP offers (the same as Ctrl+1 in Eclipse) for an ATC finding or a line: create text symbol, extract constant, etc.
**Change audit evidence.** Evidence for a change management audit on a target: what went in, with which ticket, initiative and origin.
**Clean Core state of an SAP object.** Release state, Clean Core level and successor of an SAP object according to the public catalog (local).
**Released objects catalog (Clean Core).** Searches SAP's public catalog (abap-atc-cr-cv-s4hc, local) for released/deprecated objects by name or topic, with Clean Core level (A released … D all) and successors.
Close identified gaps in tool coverage or system configuration.
**What usually travels with this object?** Looks at the transports that touched an object and counts which other objects travelled with it, most frequent first.
**Create transport request.** Creates a workbench request for an object's package BEFORE the first edit, so the change lands in the ticket's transport and not in a reused task.
**Data element, domain or table type.** Definition of a DDIC type: data element (domain, type, length, texts), domain (type, length, fixed values, value table) or table type (line type, key).
**Search SAP Community.** Searches SAP Community (blogs and questions) by error message, class or concept.
**Read a documentation page.** Returns the full content of a document by the id docs_search gives.
**Search ABAP documentation.** Searches the official ABAP keyword documentation (standard and cloud), Clean ABAP, the DSAG guide, ABAP cheat sheets and RAP samples, locally.
**Dumps (ST22).** Lists runtime dumps: date, error, program, user and short text.
**Before editing: which transport will it land in?** Tells, BEFORE changing an object, which transport the change will end up in and why: CTS lock by another transport, local object ($TMP), repair (different original system), or free with your open transports.
**Enhancements and BAdIs.** Implementations of a BAdI (new and classic, active or not), source code enhancements implemented inside a program, class or function group (flagging those that overwrite standard code), or all enhancement implementations of a namespace by type.
**Objects that fail most on import.** Ranking of objects by import failure history in a target.
**Function modules of a group.** Lists the function modules of a function group with their text and whether they are RFC or update modules; given a module, finds its group and siblings. Works with /XXX/ namespaces.
**SAP Gateway errors (/IWFND/ERROR_LOG).** Lists SAP Gateway (OData) errors: service, error, user, date.
**Read ABAP source.** Reads the source of any object: program, include, class (and its includes), interface, function module (without knowing its group), CDS, table/structure, etc.
**Import health.** Health of the imports into a target (QA or production): answers "how are the releases to production going?".
**Inactive objects.** Objects saved but not activated by the connection user, with their transport.
**Background jobs (SM37).** Background jobs by name (supports *), user, status and date, with their steps (program and variant).
**Transport history of an object.** Which transports touched an object, when, and which already reached the target.
**Object versions.** Version history of an object (date, author, transport).
**Package contents.** Objects of a development package grouped by type, with subpackages (TADIR/TDEVC, any release).
**Source on the target.** The source of an object AS IT IS in QA or production, read through TMS (like "Retrieve remote versions").
Report on gaps in tool coverage or system configuration.
**Revert to an earlier version.** Writes back an earlier version of an object (the last active one, the one before it, or a numbered one from object_versions) through the same preview, fingerprint, lock and transport as write_source; never reverts on its own.
**Run ATC.** Runs the ABAP Test Cockpit on an object or a transport and lists numbered findings (priority, line, check, message) with SAP's P1/P2/P3 totals.
**Run ABAP Unit.** Runs the ABAP Unit tests of a class or program (harmless and short only) and returns the result per method, with each failure in detail.
**SAP notes in the system (SNOTE).** Whether a note is downloaded in this system, its implementation and processing status, version, component and title, per note or filtered by status/component; no SAP portal or S-user needed.
**SAP systems.** Estado de la configuración de sistemas SAP.
**Search ABAP objects.** Searches repository objects by name (supports * wildcards).
**Search text in source code.** Searches a text or regex in the source of a package (with subpackages), a transport or a list of objects, and returns object, include, line and the matching line; reaches what where-used misses (dynamic calls, literals, Z code outside the reference index).
**ABAP SQL query.** Runs an ABAP SQL SELECT (WHERE, JOIN, ORDER BY, subqueries) through ADT data preview, with personal columns masked and row caps on production-data systems.
**SAP syntax check.** SAP's real syntax check (not abaplint), also on code not saved yet.
**Table contents.** Rows of a table, view or CDS, with optional columns and filter.
**Text symbols and selection texts.** Reads the text symbols (TEXT-001…), selection texts or headings of a program, class or function group.
**What a transaction runs.** Program, screen and parameters of a transaction (TSTC/TSTCP), with its text.
**Transport contents.** Header, tasks (owner and status) and objects of a transport request, read from E070/E07T/E071.
**What a transport changed (code diff).** Code review of a transport: for each source object (programs, includes, classes, interfaces, function modules, CDS) compares the version recorded with that transport against the previous one and shows a unified diff.
**Transport code against the target.** Compares the code of a transport's objects with the target: objects missing there (R3.4) and version drift — signatures, fields or parameters that differ and don't travel in the transport (R3.5).
Usage statistics and analytics for tool invocations and system operations.
**Where used.** Where-used list of an object: who references it, with package and owner.
**Save source to SAP.** Replaces the FULL source of an existing object (or class include) in the given transport, after a preview with syntax check and diff and a human confirmation.
**Create or change text symbols.** Adds or changes text symbols (or selection texts) of a program/class/group, merging with the existing ones: nothing not mentioned is deleted.
Error handling guidance is absent. Tools declare `run()` but no visible error recovery patterns (retryable vs fatal, actionable messages, recovery suggestions). LLMs will not know how to respond to failures.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are not used. Risk labels (READ_ONLY, WRITE, REVERSIBLE) exist in metadata but are not exposed as MCP tool annotations for client UI/safety.