Skip to main content
Glama

mcp-abap-adt: Your Gateway to ABAP Development Tools (ADT)

Stand With Ukraine

mcp-abap-adt is an MCP server for ABAP ADT in SAP ECC/S/4HANA (on-premise) and SAP BTP ABAP Cloud systems. It gives agents controlled access to real ABAP repositories through ADT, so analysis and changes are grounded in system data instead of assumptions. It is built for AI-assisted pair programming (AIPNV: AI Pairing, Not Vibing), not autopilot vibe coding.

Primary workflows:

  • Deep ABAP analysis: where-used, object metadata, repository navigation, object structure, semantic analysis, dependency and impact exploration.

  • High-level ABAP development: rapid CRUD and iterative updates for RAP and classic ABAP artifacts (classes, interfaces, function groups/modules, programs, DDIC, CDS/view/service artifacts), validated through ADT flows.

Why teams use it:

  • Full CRUD (not read-only): create, read, update, and delete ABAP artifacts

  • Works with On-Premise (ECC/S/4HANA) and ABAP Cloud (BTP) systems

  • Legacy systems (BASIS < 7.50) are not supported at present: that support is parked on the parked/legacy-support branch until it can be tried against a live legacy system

  • Three authentications over stdio: basic (HTTP or RFC), SNC (passwordless, RFC), JWT with browser login (service key, ABAP or XSUAA); a JWT you already hold goes in the x-sap-jwt-token header of mcp-abap-adt-http / mcp-abap-adt-sse

  • Multiple transports: stdio, HTTP, SSE

  • Several installation variants: the full server (@mcp-abap-adt/core) or the compact one (@mcp-abap-adt/compact), each connecting to the system over HTTP, RFC or SNC — see Installation variants

  • Rich tool surface for ABAP objects, metadata, transports, and search

Authorization & Destinations (Important): A destination is the filename of a service key stored locally. You place service keys in the service-keys directory, and use --mcp=<destination> to select which one to use. This is the primary auth model for on‑prem and BTP systems. See Authentication & Destinations.

You can configure MCP clients either manually (JSON/TOML) or via the configurator CLI (@mcp-abap-adt/configurator, repo: mcp-abap-adt-conf).

Table of Contents

  1. Getting Started

  2. Architecture

  3. Quick Start

  4. Use Cases

  5. Target Users

  6. Capabilities (High-Level Focus)

  7. Terminology

  8. Authorization & Destinations

  9. Registries

  10. Features

  11. Documentation

  12. Dependencies

  13. Running the Server

Related MCP server: ABAP-ADT-API MCP-Server

Getting Started

Pick a variant first — full or compact server, and HTTP, RFC or SNC to the system. HTTP needs nothing but Node.js 22 or 24; RFC and SNC need the SAP NW RFC library when the server runs — SAP GUI's 64-bit sapnwrfc.dll on Windows, else the SAP NW RFC SDK; the RFC module comes prebuilt for Linux x64 (glibc), Windows x64 and macOS ARM64, and npm install compiles nothing. Installation variants has the table and the commands; RFC Setup the steps. To run without Node.js on a machine, build your own portable executable — Node.js and your SAP NW RFC SDK inside.

Install the server and configure your client using the configurator:

npm install -g @mcp-abap-adt/core
npm install -g @mcp-abap-adt/configurator

# stdio (destination)
mcp-conf --client cline --name abap --mcp TRIAL

# HTTP (streamable HTTP)
mcp-conf --client copilot --name abap --transport http --url http://localhost:3000/mcp/stream/http

Full configurator usage (separate repo): CLIENT_INSTALLERS.md.

Terminology

Destination: a local service key filename. You store service keys in the standard service-keys directory, and pass the filename (without extension) via --mcp=<destination> to select which system to use.

See docs/user-guide/TERMINOLOGY.md for the full list.

Authorization & Destinations

Destination-based auth is the default. Drop service keys into the standard platform folder and use the filename as your destination:

mcp-abap-adt --mcp=TRIAL --system-type=cloud

Standard service key paths:

  • Unix (Linux/macOS): ~/.config/mcp-abap-adt/service-keys/<destination>.json

  • Windows: %USERPROFILE%\\Documents\\mcp-abap-adt\\service-keys\\<destination>.json

mcp-abap-adt (stdio) supports exactly three authentications, each a destination stated in a service key, a .env, or both; a JWT you hold is sent in headers to the HTTP or SSE server:

Authentication

.env keys

Basic (HTTP or RFC)

SAP_AUTH_TYPE=basic, SAP_USERNAME, SAP_PASSWORD

SNC (RFC only, passwordless)

SAP_AUTH_TYPE=snc, SAP_SNC_PARTNERNAME, optional SAP_SNC_QOP, SAP_SNC_LIB, SAP_SNC_MYNAME — no user, no password

JWT, browser login

SAP_AUTH_TYPE=jwt, SAP_GRANT_TYPE=authorization_code, a service key (ABAP or XSUAA) or SAP_UAA_*

JWT you hold

the x-sap-jwt-token header of mcp-abap-adt-http / mcp-abap-adt-sse (stdio serves none)

A jwt .env must state SAP_GRANT_TYPE. The mcp-auth command that writes such a .env comes from @mcp-abap-adt/auth-broker-cli. The browser login listens on port 61001 unless --browser-auth-port says otherwise.

A created object always carries its responsible person and, where known, its master system. The servers name them once per destination — its credentials and its ABAP system — when its connection is created, by the rules of @mcp-abap-adt/responsible-rules: the system's systeminformation answer (its user, its system id) wins, on-premise and on ABAP Cloud alike; a tool argument that names the value (a transport's owner, say) still states it for that call. When the system gives no information, ABAP Cloud is an error (cloud_without_systeminformation for a 404, else system_lookup_failed); on-premise the responsible is SAP_RESPONSIBLE / x-sap-responsible if stated, else the login (SAP_USERNAME, x-sap-login), and the master system SAP_MASTER_SYSTEM / x-sap-master-system when stated; with no user at all the call is refused system_user_unknown, and a stdio start ends with exit 1. A 401 is answered as it came. The library applies no rules unless an embedder passes them. See Authentication & Destinations. Coming from 22.x? See the 23.0 migration note — CreateProgram no longer offers include (create an include with CreateInclude); an embedder registering the ./handlers groups on its own McpServer states systemType (SAP_SYSTEM_TYPE is not read there), and HandlerExporter serves no background run and no debugger. Coming from 21.x? See the 22.0 migration note — the tools, their enums and the object types each argument accepts are the declared system type's (onprem or cloud), inspection needs --system-type too, function / func are the function module, main types stand for their one code, RunATC on cloud offers no program, and ValidateServiceBinding requires package_name. Coming from 19.x? See the 20.0 migration note — RFC on connection 19 and sap-rfc-lite 0.3.2: nothing compiled on install, a prebuilt binding for Linux x64, Windows x64 and macOS ARM64 only; over Streamable HTTP state_handle is an argument of every tool, and a long session keeps one SAP session across calls. Coming from 18.x? See the 19.0 migration note — the server split into a package per transport and tool set, the system type required, the low set gone, the auth chain on 6.0. Coming from 17.x? See the 18.0 migration note — the debugger's embedder surface moved to adt-clients 29, and a debugger start needs at least one breakpoint. From 16.x, the 17.0 note first.

For full details (paths, .env, direct headers), see Authentication & Destinations.

Architecture

The project ships a library and the servers — and a compact variant of each server — because the two usage patterns want different licences. Embedding the tools in a network service should not drag in the obligations of a server that service never runs.

Package

Licence

What it is

@mcp-abap-adt/lib

Apache-2.0

The ADT tool handlers and the embeddable MCP server. No transport: the host supplies one.

@mcp-abap-adt/core

AGPL-3.0-only

The standalone stdio server, mcp-abap-adt: one destination through the auth broker. Depends on the library.

@mcp-abap-adt/http

AGPL-3.0-only

The Streamable HTTP server, mcp-abap-adt-http: credentials from each request's x-sap-* headers.

@mcp-abap-adt/sse

AGPL-3.0-only

The HTTP+SSE server, mcp-abap-adt-sse: credentials from the x-sap-* headers of each SSE connection's GET.

@mcp-abap-adt/compact

AGPL-3.0-only

The compact server over stdio, mcp-abap-adt-compact: one tool per operation, the object type in the arguments. core's launcher and configuration (from server-runtime) with the compact tool set.

@mcp-abap-adt/compact-http

AGPL-3.0-only

The compact server over Streamable HTTP, mcp-abap-adt-compact-http: http's launcher and configuration (from server-runtime) with the compact tool set.

@mcp-abap-adt/compact-sse

AGPL-3.0-only

The compact server over HTTP+SSE, mcp-abap-adt-compact-sse: sse's launcher and configuration (from server-runtime) with the compact tool set.

@mcp-abap-adt/server-runtime

AGPL-3.0-only

The launch code of every server: the stdio, Streamable HTTP and SSE launchers and servers, and the destination layer. No command of its own: every server package depends on it, so it is installed with each server; you never install it yourself.

@mcp-abap-adt/background-runs-memory

Apache-2.0

The in-memory store of background runs (IBackgroundRuns of the library): the servers' store, for an embedder that keeps runs in its process. Every server package depends on it.

@mcp-abap-adt/responsible-rules

Apache-2.0

The rules that name a call's responsible, user and system from systeminformation (SystemContextRules of the library), and the system type the binaries require. Every server package passes them; the library applies none, so an embedder opts in.

@mcp-abap-adt/core-ro, http-ro, sse-ro

AGPL-3.0-only

The read-only servers, mcp-abap-adt-ro, mcp-abap-adt-http-ro, mcp-abap-adt-sse-ro: core's, http's and sse's launcher with the readonly tools (with system and search), batch mode and, on stdio, the leftover-session list — nothing that changes the system: no high, run, trace-schedule, debugger, leftover-session logoff, background-run or resume tool.

@mcp-abap-adt/compact-ro, compact-http-ro, compact-sse-ro

AGPL-3.0-only

The read-only compact servers, mcp-abap-adt-compact-ro, -compact-http-ro, -compact-sse-ro: the 17 compact tools that change nothing, HandlerBatch and, on stdio, the leftover-session list.

@mcp-abap-adt/compact-readonly-entries, compact-modify

Apache-2.0

The compact tools as libraries, split into the half that changes nothing and the half that writes (compact-readonly-entries was compact-readonly before 19.0.0).

Eighteen packages, twelve binaries: four kinds of binary — core, core-ro, compact, compact-ro — on each transport. The binary fixes the tool set (19.0.0; there is no --exposition): install the one for your transport and the tools you want to run a server — @mcp-abap-adt/core, http or sse (readonly, high, the debugger), their -ro packages (the readonly tools alone), compact, compact-http, compact-sse, or their -ro packages (the compact tools that change nothing). Install @mcp-abap-adt/lib to embed the tools in your own application. Every binary and its tools: Handler sets.

Each server is installed on its own (npm install -g @mcp-abap-adt/compact): a server package brings everything it runs on — server-runtime, lib and the rest — and depends on no other server package, so installing two servers, in one command or in two, is fine and neither needs the other. Since 19.2.0 a process that loads two copies of @mcp-abap-adt/lib anyway does not start: it prints Two copies of @mcp-abap-adt/lib are loaded in this process (…): reinstall <package> (npm install -g <package>). and exits 1 — see One lib per server process.

1. Standalone MCP Server (Default)

Run as a standalone MCP server; a binary is its transport (there is no --transport option):

mcp-abap-adt --mcp=TRIAL --system-type=cloud # stdio (@mcp-abap-adt/core): one destination
mcp-abap-adt-http --system-type=<onprem|cloud> # Streamable HTTP (@mcp-abap-adt/http): x-sap-* headers per request
mcp-abap-adt-sse --system-type=<onprem|cloud> # SSE (@mcp-abap-adt/sse): x-sap-* headers per SSE connection
mcp-abap-adt-compact --mcp=TRIAL --system-type=cloud # the compact tool set over stdio (@mcp-abap-adt/compact)
mcp-abap-adt-compact-http --system-type=<onprem|cloud> # ... over Streamable HTTP (@mcp-abap-adt/compact-http)
mcp-abap-adt-compact-sse --system-type=<onprem|cloud> # ... over SSE (@mcp-abap-adt/compact-sse)
mcp-abap-adt-ro --mcp=TRIAL --system-type=cloud # the readonly tools alone over stdio (@mcp-abap-adt/core-ro)
mcp-abap-adt-compact-ro --mcp=TRIAL --system-type=cloud # the compact tools that change nothing (@mcp-abap-adt/compact-ro)
                                       # (and -http-ro, -sse-ro, -compact-http-ro, -compact-sse-ro)

2. Embeddable Server (For Integration)

Embed MCP server into existing applications (e.g., SAP CAP/CDS, Express). This needs @mcp-abap-adt/lib only — not the AGPL server:

npm install @mcp-abap-adt/lib
import { EmbeddableMcpServer } from '@mcp-abap-adt/lib/embeddable';

const server = new EmbeddableMcpServer({
  connection,              // Your AbapConnection instance
  logger,                  // Optional logger
  exposition: ['readonly', 'high'],  // Handler groups to expose
  // A tool both groups serve under one name (Get<Type>) is listed once.
  // readOnlyDedupStrategy: a custom IReadOnlyDedupStrategy hides more.
});
await server.connect(transport);

See Handlers Management → EmbeddableMcpServer dedup strategies for how readonly tools are deduped against high and how to plug a custom IReadOnlyDedupStrategy for role-based rules.

Quick Start

  1. Install server: pick the installation variant — full or compact, HTTP, RFC or SNC — and follow the Installation Guide

  2. Configure client (auto): Use mcp-conf from @mcp-abap-adt/configurator (repo: mcp-abap-adt-conf, docs: CLIENT_INSTALLERS.md)

  3. Configure client (manual): See Client Configuration

  4. Use:

Use Cases

  • Impact analysis / where-used before changes: map object usage and probable blast radius.

  • Dependency audit: inspect links across classes, interfaces, DDIC, CDS/views, and RAP artifacts.

  • Migration and cleanup prep: extract repository facts to plan refactoring or cloud-readiness work.

  • RAP and ABAP iterative development: create/update artifacts quickly with ADT-backed operations.

  • Automated documentation and RAG ingestion: pull structured facts from ABAP systems for downstream tooling.

Target Users

  • ABAP developers and ABAP architects

  • RAP developers

  • Team leads and tech leads who need fast repository visibility

  • Teams building RAG/agent workflows for SAP landscapes

Capabilities (High-Level Focus)

Key examples of high-value workflows and tools:

  • Repository and impact analysis: GetWhereUsed, DescribeByList, GetObjectStructure, GetObjectInfo, SearchObject, GetPackageTree, GetPackageContents

  • Code and semantic introspection: GetAbapAST, GetAbapSemanticAnalysis, GetIncludesList

  • RAP development: CreateBehaviorDefinition, UpdateBehaviorDefinition, CreateBehaviorImplementation, UpdateBehaviorImplementation, CreateServiceDefinition, UpdateServiceDefinition, CreateMetadataExtension, UpdateMetadataExtension

  • CDS/View development: CreateView, UpdateView, GetView, DeleteView

  • ABAP OO CRUD: CreateClass, UpdateClass, GetClass, DeleteClass, CreateInterface, UpdateInterface, GetInterface, DeleteInterface

  • Function module/group CRUD: CreateFunctionGroup, UpdateFunctionGroup, GetFunctionGroup, DeleteFunctionGroup, CreateFunctionModule, UpdateFunctionModule, GetFunctionModule, DeleteFunctionModule

  • Transport and activation support: CreateTransport, GetTransport, ActivateObject

  • Quality and testing: RunATC, GetATCRunStatus, GetATCFindings (ABAP Test Cockpit — one run over several objects, findings read back by worklist), ABAP Unit per test carrier — CreateUnitTest/UpdateUnitTest/DeleteUnitTest/RunUnitTest for a class, CreateCdsUnitTest/RunCdsUnitTest for a CDS view, CreateProgramUnitTest/RunProgramUnitTest for a report, CreateFunctionGroupUnitTest/RunFunctionGroupUnitTest/RunFunctionModuleUnitTest for a function group (runner: 'async', the default, starts the run; with wait: true, the default, the call reads the run's status once by long polling and answers the result of a run SAP answers finished, lasting as long as the run, or the run_id and SAP's status for a run SAP answers with another status, read on by run_id; with wait: false it answers the run_id right after the start, which GetUnitTestResult reads — the way to start a long run under a client with a request time limit; runner: 'sync' is one request to /abapunit/testruns answering the finished result — for a system that has that endpoint alone; a function module's synchronous run takes function_group_name and covers every test of its group), and RunAbapUnit (with the same wait) for any ABAP Unit run target: an object of any type of the run registry (CLAS/OCL, DDLS/DF, …) or a package, with or without its subpackages; a CDS view's tests are assigned tests and execute with scope.foreign_tests: true — CheckClass and the rest of the Check* family

Long reads take a timeout

The long reads on an approved list (where-used and search, package walks, data preview, the dump feed, profiler traces, … — the list in MIGRATION-19.0) run on an ABAP session of their own and take an optional timeout in seconds, with no default. When it passes the read is cancelled — its session logged off — and nothing was changed. Set it below your MCP client's request limit (the TypeScript SDK's client cancels at 60 s): a tool call cannot be cancelled — a client's cancel aborts nothing, the call runs to its end. No other tool takes a timeout: a unit test, ATC, class or program run goes on to its end.

Batch mode

Calls none of whose requests depends on another's answer can be recorded and sent together, in one ADT batch envelope, instead of one request each: BatchBegin switches the server into batch mode, every such call is then recorded, answers nothing and takes the next number (from 1, in the order made), BatchEnd sends them all and leaves batch mode whatever happens, and BatchAnswers reads each call's answer by its number — the answer the tool gives outside batch mode for what SAP answered. The compact binaries serve the same as one tool, HandlerBatch (action: 'begin' | 'end' | 'answers'). Every binary serves it, the -ro ones included, on every transport.

A tool that builds a request from an earlier answer is refused in batch mode — a high-level create or update, a fallback after a 404, a poll. Run such work as phases, each its own batch, with the single-step tools: create (compact HandlerCreate, one request), lock (HandlerLock; the handles read with BatchAnswers), write (HandlerUpdate with lock_handle, one request; the whole metadata document in source_code for PACKAGE, DOMAIN, DATA_ELEMENT, FUNCTION_GROUP and TABLE_TYPE, and for INCLUDE with part: 'metadata'), unlock (HandlerUnlock), read back (HandlerGet, one request per part: source or metadata), activate (HandlerActivate, one request; a list, an object_adt_type and the types the per-object activation leaves to a run answer { run_id }), and the run's state (HandlerGet part: activation_status, then activation_results, by run_id, as often as you choose); a unit-test run is one request with the synchronous runner (HandlerUnitTestRun with runner: 'sync', answering the finished result) or, with the asynchronous runner (runner: 'async', the default), its start (HandlerUnitTestRun, answering run_id; by tests, or by a run target — an object of any run type or a package — which takes this runner), its status (HandlerUnitTestStatus, as often as you choose, until FINISHED) and its result (HandlerUnitTestResult, one request); a profiled run is its schedule (HandlerProfileSchedule, answering profiler_id), the run under it (HandlerProfileRun with that profiler_id) and its trace (HandlerProfileList, as often as you choose, then HandlerProfileView); a deletion is a deletion check (HandlerDeletionCheck, one request) and then the delete (HandlerDelete, the deletion request alone). A batch holds one kind of request — LOCK, UNLOCK or stateless, as its first recorded call decides — so each batch end sends one envelope; a call of another kind is refused batch_other_kind: record it in the next batch. Every tool's description ends with one sentence saying how it behaves in batch mode: recordable, recordable for the arguments it names, or run outside batch mode. Over Streamable HTTP, send the state_handle BatchBegin answers as the state_handle argument (or in the x-mcp-state-handle request header) on every call of the batch. See Batch Mode, with the list of every recordable call.

Registries

Published in the official MCP Registry and listed on Glama.ai.

Features

  • 🏗️ Domain Management: GetDomain, CreateDomain, UpdateDomain - Create, retrieve, and update ABAP domains

  • 📊 Data Element Management: GetDataElement, CreateDataElement, UpdateDataElement - Create, retrieve, and update ABAP data elements

  • 📦 Table Management: GetTable, CreateTable, GetTableContents - Create and retrieve ABAP database tables with data preview

  • 🏛️ Structure Management: GetStructure, CreateStructure - Create and retrieve ABAP structures

  • 🧾 Table Type Management: GetTableType, CreateTableType, UpdateTableType, DeleteTableType, CheckTableType, ActivateTableType, GetTableTypeVersions - Create, read, change, check, activate and delete ABAP table types (on premise and cloud); the create and the update take the definition (row type, access, key) and answer the definition SAP stored

  • 👁️ View Management: GetView, CreateView, UpdateView - Create and manage CDS Views and Classic Views

  • 🎓 Class Management: GetClass, CreateClass, UpdateClass - Create, retrieve, and update ABAP classes

  • 📝 Program Management: GetProgram, CreateProgram, UpdateProgram - Create, retrieve, and update ABAP programs

  • 🔧 Behavior Definition (BDEF) Management: GetBehaviorDefinition, CreateBehaviorDefinition, UpdateBehaviorDefinition - Create and manage ABAP Behavior Definitions with support for Managed, Unmanaged, Abstract, and Projection types

  • 📋 Metadata Extension (DDLX) Management: CreateMetadataExtension, UpdateMetadataExtension - Create and manage ABAP Metadata Extensions

  • ⚡ Activation: ActivateObject - Universal activation for any ABAP object

  • 🚚 Transport Management: CreateTransport, GetTransport - Create and retrieve transport requests

  • 🔍 Enhancement Analysis: GetEnhancements, GetEnhancementImpl, GetEnhancementSpot - Enhancement discovery and analysis

  • 📋 Include Management: GetInclude (source or metadata), CreateInclude, UpdateInclude, UpdateIncludeMetadata, DeleteInclude, ActivateInclude - Create, read, change and delete program includes (writes on premise); GetIncludesList - Recursive include discovery

  • 🔍 System Tools: GetInactiveObjects - Monitor inactive objects waiting for activation

  • 🌐 Service Binding Preview: GetServiceBindingPreviewUrl - The browser URL that opens a published service binding's Fiori preview, beside its OData service and $metadata URLs. Composed from the binding, its service definition and the exposed root view — no document carries it. OData V2 and V4; a Web API binding has no preview and says so. On SAP BTP the preview URL carries the browser host (abap-web), where the BTP logon answers, while the service URLs keep the ADT host

  • 🧪 Runtime Diagnostics: RuntimeCreateProfilerTraceParameters, RuntimeListProfilerTraceFiles, RuntimeGetProfilerTraceData, RuntimeGetDumpById - Profiling and dump analysis with JSON payloads

  • 📡 Runtime Feeds: RuntimeListFeeds, RuntimeListSystemMessages, RuntimeGetGatewayErrorLog - Feed reader (dumps — filtered by user, runtime error, exception, object, package or component, and read past SAP's 100 entries per request — system messages, gateway errors), SM02 system messages, Gateway error log

  • 🐞 Debugger (in mcp-abap-adt, -http, -sse and the compact write binaries; in no -ro binary): ABAP and AMDP — breakpoints (line, exception, statement, message; a line breakpoint may carry a condition), a background run of a class or report caught at them, another user's requests and terminal mode, stack, variables, watchpoints, steps, leaving a debuggee running, the debugger settings, memory sizes and snapshots. A debug session is named by a state_handle and survives between tool calls on every transport. In user mode a breakpoint catches every request of the request user (the connected SAP user unless another is named): where that must not be possible, install a -ro binary. See Debugger

  • 🔗 Long session over Streamable HTTP (mcp-abap-adt-http, -compact-http and their -ro): every tool takes an optional state_handle argument that routes the call to the instance holding that state (a lock, a batch, a debug session); SessionOpen / SessionClose (compact: HandlerSession) keep one instance and its SAP session for a run of calls and log it off at the close, or at the idle bound. See @mcp-abap-adt/http

  • 🚀 SAP BTP Support: JWT/XSUAA authentication with browser-based token helper

  • 🔑 Destination-Based Authentication: Service key-based authentication with automatic token management (see Client Configuration)

  • 💾 Freestyle SQL: GetSqlQuery - Execute custom SQL queries via ADT Data Preview API

ℹ️ ABAP Cloud limitation: Direct ADT data preview of database tables is blocked by SAP BTP backend policies. The server returns a descriptive error when attempting such operations. On-premise systems continue to support data preview.

Documentation

For Users

  • Docs Index - Full documentation index

  • Installation Guide - Installation variants (full or compact; HTTP, RFC or SNC) and platform guides

  • RFC Setup - RFC and SNC: the SAP NW RFC library at run time, the prebuilt RFC module and where to build one

  • User Guide - End-user docs (auth, config, tools)

  • Authentication & Destinations - Destination-based auth and service keys

  • Batch Mode - Record independent calls, send them together in batch envelopes at BatchEnd, read their answers by number; which calls are recorded

  • Tool Search - The three texts each listed tool carries — description for the model, keywords for BM25, semantic for vector search — and where a client reads them

  • Debugger - The debug set of the write binaries: debug sessions and their handle, the SAP ids, what keeps a session alive on each transport, what ends it

  • Handlers Management - The twelve binaries and the tools each serves

  • Configurator: @mcp-abap-adt/configurator (repo: mcp-abap-adt-conf) provides the mcp-conf CLI to auto-configure clients

  • Tools by level

For Administrators

  • Security - Never more secure than its host: who may call the server, HTTPS, TLS to SAP, credentials and state handles, a deployment checklist

  • Deployment Docs - MCP Registry, Docker, release notes

  • Server Configuration - YAML config reference

For Developers

  • Architecture Documentation - System architecture and design decisions

  • Development Documentation - Testing guides and development resources

  • CHANGELOG.md - Version history and changes

  • docs/MIGRATION-23.0.md - Includes are created by CreateInclude, not CreateProgram; the include and table-type tools; a plain ./handlers registration lists and calls on its stated system type; ToolHandler is either call form; HandlerExporter without background runs and the debugger; compact cloud schemas; the search table's shape

  • docs/MIGRATION-22.0.md - The system type decides the tools and the object types each argument accepts (the ADT type tables of interfaces-adt 24, adt-clients 39); inspection needs the system type; friendly names and main types; the search filter's names; RunATC per system type; arguments now required

  • docs/MIGRATION-20.0.md - RFC on connection 19 and sap-rfc-lite 0.3.2: nothing compiled on install, prebuilt bindings for three platforms, the RFC library at run time, the portable build on 0.3 only; Streamable HTTP: held state by the state_handle argument, and the long session

  • docs/MIGRATION-19.0.md - A package per transport and tool set (seventeen packages, twelve binaries), the system type required, the low set gone, the auth chain on 6.0, logoff at every session end

  • docs/MIGRATION-18.0.md - The debugger on adt-clients 29: what an embedder of lib/debugger changes; a start needs a breakpoint

  • docs/MIGRATION-17.0.md - The HTTPS certificate is verified; a message class needs a responsible

  • docs/MIGRATION-16.0.md - Authentication on auth-broker 4: four authentications, destinations

  • docs/MIGRATION-14.0.md - The compact facade moved to its own packages and --exposition=compact became the mcp-abap-adt-compact command

  • docs/MIGRATION-13.0.md - What a consumer on the 12.x contract changes

  • docs/MIGRATION-12.0.md - What a consumer on the 11.x contract changes

Dependencies

Two packages do the work:

and six packages declare the contracts both of them and this project are written against — @mcp-abap-adt/interfaces-adt, -adt-connection (where IAbapConnection and IAdtWireResponse live), -network, -auth, -auth-sap and -utils. They replace the single @mcp-abap-adt/interfaces umbrella, which is no longer published: a consumer naming a contract package directly gets one copy of it in the tree and takes its majors one domain at a time.

The verdict on an ADT answer is a strategy, not a default: since adt-clients 23 no member judges its own answer, and @mcp-abap-adt/adt-strategies holds the readings this project passes to every call. That is what keeps a refusal ADT embeds in an HTTP 200 — an activation that did not activate, a delete that was refused — from reaching a caller as success.

Everything above is installed by npm install and published to npm. @mcp-abap-adt/sap-rfc-lite is optional and only needed for the RFC transport (and so for SNC). It has no install script: it carries a prebuilt binding for Linux x64 (glibc), Windows x64 and macOS ARM64 and compiles nothing on install; elsewhere a binding is built by hand. At run time it needs the SAP NW RFC library — SAP GUI's 64-bit sapnwrfc.dll in System32 on Windows, else the SAP NW RFC SDK. Check it is installed with npm ls -g @mcp-abap-adt/sap-rfc-lite. See RFC Setup.


Running the Server

After installing globally with npm install -g, you can run from any directory:

# Show help
mcp-abap-adt --help

# Default stdio mode (for MCP clients; the destination comes from --mcp, or from a .env file named with --env or --env-path: a .env in the working directory is read only when named)
mcp-abap-adt --system-type=<onprem|cloud>

# Streamable HTTP on a custom port (@mcp-abap-adt/http; credentials from x-sap-* headers)
mcp-abap-adt-http --port=8080 --system-type=<onprem|cloud>

# Use stdio mode with auth-broker (--mcp parameter)
mcp-abap-adt --mcp=TRIAL --system-type=cloud

# Use env destination from platform sessions store
mcp-abap-adt --env=trial --system-type=cloud

# Use explicit .env file path
mcp-abap-adt --env-path=/path/to/my.env --system-type=<onprem|cloud>

# SSE (@mcp-abap-adt/sse; credentials from the opening GET's x-sap-* headers)
mcp-abap-adt-sse --sse-port=3001 --system-type=<onprem|cloud>

# The compact servers take their full counterpart's options; the binary fixes the tools
mcp-abap-adt-compact --env-path=/path/to/my.env --system-type=<onprem|cloud> # npm install -g @mcp-abap-adt/compact
mcp-abap-adt-compact-http --port=8080 --system-type=<onprem|cloud> # npm install -g @mcp-abap-adt/compact-http
mcp-abap-adt-compact-sse --sse-port=3001 --system-type=<onprem|cloud> # npm install -g @mcp-abap-adt/compact-sse

# The read-only servers: the same options, the tools that change nothing
mcp-abap-adt-ro --env-path=/path/to/my.env --system-type=<onprem|cloud> # npm install -g @mcp-abap-adt/core-ro
mcp-abap-adt-compact-http-ro --port=8080 --system-type=<onprem|cloud> # npm install -g @mcp-abap-adt/compact-http-ro

Development Mode

npm install
npm run build
npm test

The checkout is not runnable as a server by itself: server/ takes @mcp-abap-adt/lib as a package. To run a build, pack both and install the tarballs together — see From source.

Environment Configuration

Env resolution:

  1. --env-path=<path|file> (or MCP_ENV_PATH) for explicit .env file.

    • Absolute path: used as-is.

    • Relative path or file name only (e.g. my.env): resolved from current working directory.

  2. --env=<destination> for destination file in standard sessions store:

    • Unix: ~/.config/mcp-abap-adt/sessions/<destination>.env

    • Windows: %USERPROFILE%\\Documents\\mcp-abap-adt\\sessions\\<destination>.env

Nothing is looked up in the working directory: a server started inside someone else's project must not take their settings. A .env there is read only when you name it (--env-path=./.env).

Whichever file is chosen is read and written back with a renewed token, whatever --unsafe says. A destination is read once per process: a change to its .env from outside takes effect on restart. .env and environment variables hold secrets and the session; a YAML config file holds configuration only and refuses a secret-looking key.

Example .env file:

SAP_URL=https://your-sap-system.example
SAP_CLIENT=100
SAP_AUTH_TYPE=basic
SAP_CONNECTION_TYPE=http
SAP_USERNAME=your-username
SAP_PASSWORD=your-password

A destination states its connection type: SAP_CONNECTION_TYPE (http or rfc) in its .env, --connection-type, the process environment or YAML connection-type. There is no default; a destination that states none is refused at startup, naming the places it can be set. A service key carries none, so a --mcp destination read from one takes it from the command line, the environment or YAML.

A JWT you already hold is not served over stdio: send it in the x-sap-jwt-token header to mcp-abap-adt-http or mcp-abap-adt-sse (@mcp-abap-adt/http, @mcp-abap-adt/sse), or create the session with mcp-auth.

For RFC connection:

SAP_URL=http://your-onprem-system.example:8000
SAP_CLIENT=100
SAP_AUTH_TYPE=basic
SAP_USERNAME=your-username
SAP_PASSWORD=your-password
SAP_CONNECTION_TYPE=rfc

SAP_CONNECTION_TYPE=rfc in the destination's .env (the --env / --env-path file, or <auth-broker-path>/sessions/<name>.env for --mcp=<name>) selects RFC, as do --connection-type=rfc, the process environment and YAML connection-type: rfc. Precedence: CLI, then the process environment (which the .env value joins, never over one already set), then YAML. Over RFC the host comes from SAP_URL and the system number from its port (80NN → NN); a port that follows no such rule needs SAP_SYSNR in the process environment. See RFC Setup Guide for prerequisites (SAP NW RFC SDK, a C++ toolchain, SAPNWRFC_HOME before the install).

Through a message server and a logon group (load-balanced logon): add SAP_MSHOST with SAP_MSSERV or SAP_SYSID (one of the two is required; SAP_MSHOST with neither is refused by @mcp-abap-adt/connection, naming both), and optionally SAP_GROUP (the logon group; PUBLIC when absent — connection's default, not the server's) and SAP_SAPROUTER (works with either addressing). Each is also --mshost, --msserv, --sysid, --group, --saprouter, or the YAML key of that name, with the same precedence as the connection type; in the .env they belong to the --env / --env-path file. With SAP_MSHOST the RFC wire takes no host and no system number from SAP_URL, and SAP_SYSNR is not read; SAP_URL is still the system's URL. The server passes the five fields as configured and adds nothing. Logon through a message server is implemented and unit-tested, but not yet measured on a live system (as of 2026-10-20): if the SDK refuses SAP_MSSERV without SAP_SYSID, add SAP_SYSID.

SAP_URL=http://your-onprem-system.example:8000
SAP_CLIENT=100
SAP_AUTH_TYPE=basic
SAP_USERNAME=your-username
SAP_PASSWORD=your-password
SAP_CONNECTION_TYPE=rfc
SAP_MSHOST=your-message-server.example
SAP_SYSID=ABC
SAP_GROUP=PUBLIC
# Optional: SAP_MSSERV=sapmsABC, SAP_SAPROUTER=/H/your-router.example/S/3299/H/

For SNC (passwordless logon over RFC, no user or password):

SAP_URL=http://your-onprem-system.example:8000
SAP_CLIENT=100
SAP_CONNECTION_TYPE=rfc
SAP_AUTH_TYPE=snc
SAP_SNC_PARTNERNAME='p:CN=<system>, O=<org>, C=<country>'
# Creates need a responsible person; over SNC no login is known
SAP_RESPONSIBLE=<your ABAP user>
# Optional: SAP_SNC_QOP, SAP_SNC_LIB, SAP_SNC_MYNAME

The credential of the installed SNC product (for example a Secure Login Client) is mapped to an ABAP user by its SNC name. SAP_CONNECTION_TYPE=rfc (or --connection-type=rfc) is required: SNC logs on over RFC only, and an SNC destination with HTTP is refused. SNC needs the SAP NW RFC library (SAP GUI's on Windows, else the SDK) and @mcp-abap-adt/sap-rfc-lite, an optional dependency — see RFC Setup.

Not supported since 16.0: SAP_AUTH_TYPE=certificate and kerberos, saml, and a jwt grant other than authorization_code and none, in a .env or service key are refused at startup, naming the authentication (a saml destination with no grant: cannot be used: grantType). See the migration note for what to do instead.

Generate a .env (JWT):

# Install the CLI globally (one-time setup) — it ships mcp-auth
npm install -g @mcp-abap-adt/auth-broker-cli

# Log in and write a .env that states its authentication and grant (--type xsuaa for an XSUAA key)
mcp-auth --service-key ./service-key.json --output ./mcp.env --type abap
# or a destination: mcp-auth --destination TRIAL --type abap   (`mcp-auth --help` lists the rest)

The .env states SAP_AUTH_TYPE and SAP_GRANT_TYPE; a jwt .env without a grant is refused at startup.

.env comments rule: only full-line comments are supported (lines that start with #).
Inline comments are not parsed, so keep comments on separate lines.

Claude recommendation: place the service key in the service-keys directory and use --mcp=<destination> (avoid manual JWT tokens).

Command-Line Options

Authentication:

  • --mcp=<destination> - Named destination: service-keys/<destination>.json and sessions/<destination>.env, field by field

  • --auth-broker-path=<path> - Custom path for auth-broker service keys and sessions

  • --browser=<name> - Browser for a login: system (default), auto, chrome, edge, firefox, none, headless — mapped by the platform; none / headless: the URL on stderr (Authentication)

  • --browser-program=<program> - The program that opens the login URL instead (excludes --browser)

  • --renewal=<mode> - refresh-then-login (default) or refresh-only (never a login)

  • --browser-auth-port=<port> - Browser login callback port, 1-65535 (default: 61001); an invalid value is refused at startup

  • --login-timeout=<seconds> - Ends a browser login not finished after this many seconds, 1-86400; no default (a login ends on its answer, the IdP's refusal or the end of its session; a cancel ends nothing)

  • --connection-type=<http|rfc> - SAP connection transport: http or rfc; required for a destination unless its .env, the environment or YAML states it (no default)

  • --mshost, --msserv, --sysid, --group, --saprouter - RFC through a message server and a logon group (SAP_MSHOST, … — see above)

  • --unsafe - Write named destinations' sessions to disk. By default they are kept in memory (one login per process). A .env you name is written back either way

When --mcp=<destination> is specified, automatic fallback loading of ./.env is skipped.

Examples:

# Named destination, session kept in memory (default)
mcp-abap-adt --mcp=TRIAL --system-type=cloud

# Named destination, session persisted to sessions/TRIAL.env
mcp-abap-adt --mcp=TRIAL --unsafe --system-type=cloud

# Custom base directory for service-keys/ and sessions/
mcp-abap-adt --mcp=TRIAL --auth-broker-path=~/prj/tmp/ --unsafe --system-type=cloud

# Browser login on another callback port
mcp-abap-adt --mcp=TRIAL --browser-auth-port=61005 --system-type=cloud

See Client Configuration for complete configuration options.

Handler logging switches

  • AUTH_LOG_LEVEL=error|warn|info|debug — sets base log level for handler logger; DEBUG_AUTH_LOG=true also enables debug.

  • HANDLER_LOG_SILENT=true — fully disables handler logging.

  • DEBUG_CONNECTORS=true — verbose connection logging in high-level handlers.

  • DEBUG_HANDLERS=true — enables verbose logs for selected read-only/system handlers.

Development

Testing

npm test

Test logging switches

  • TEST_LOG_LEVEL=error|warn|info|debug — controls test logger verbosity (DEBUG_TESTS/DEBUG_ADT_TESTS/DEBUG_CONNECTORS force debug).

  • TEST_LOG_FILE=/tmp/adt-tests.log — writes test logs to a file (best-effort).

  • TEST_LOG_SILENT=true — disables test logging pipeline (console output muted).

  • TEST_LOG_COLOR=true — adds colored/prefixed tags to test log lines.

  • All console.* in tests are routed through the test logger with a [test] prefix.

Building

npm run build

Developer Tools

# Generate tool documentation
npm run docs:tools

# See tools/README.md for more developer utilities

Contributors

Thank you to all contributors! See CONTRIBUTORS.md for the complete list.


Acknowledgment: This project was originally inspired by mario-andreschak/mcp-abap-adt. We started with the core concept and then evolved it into an independent project with our own architecture and features.

License

Two licences: the libraries Apache-2.0, the servers AGPL. Which one applies depends on which package you install.

Packages

Licence

@mcp-abap-adt/lib, background-runs-memory, responsible-rules, compact-readonly-entries, compact-modify

Apache-2.0

LICENSE, NOTICE; each package's own LICENSE

@mcp-abap-adt/server-runtime, core, http, sse, compact, compact-http, compact-sse and the six -ro packages

AGPL-3.0-only

server/LICENSE; each package's own LICENSE

All eighteen are published from this repository with one command, in dependency order (Release):

npm run release:dry        # rehearses every package, touches nothing
npm run release:publish    # @mcp-abap-adt/lib first, then the packages that depend on it

release:publish skips a version already on the registry, so re-running after a failure resumes rather than starting over. It aborts on the first failure instead of publishing a package on top of one that is not there.

Note that npm publish and npm run are different commands. npm publish release asks npm to publish a package named release, which is somebody else's package on the registry.

Copyright © 2025–2026 Oleksii Kyslytsia

All are distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

What this means. Running any of them, on your own data, carries no conditions.

Embedding the library in your own application carries no obligation to open your application: Apache-2.0 asks for the notice and the licence text to travel with it, and nothing more.

Distributing the standalone server, or running a modified version of it as a network service, means passing on the same freedoms under AGPL section 13 — including the source. That is why the two are separate packages: installing the library never puts the server in your dependency tree.

The packages underneath are LGPL-3.0-only — @mcp-abap-adt/adt-clients, adt-strategies, connection, logger, auth-broker, auth-providers, auth-stores and the contract packages interfaces-adt, interfaces-adt-connection, interfaces-network, interfaces-auth, interfaces-auth-sap and interfaces-utils — and the library links them at runtime. It was four of them when this paragraph was written; the rule is the whole scope now, libraries LGPL and servers AGPL or GPL, and the MIT that a few of the auth packages still carried was an oversight rather than an offer. LGPL does not reach your own code, but its terms do travel with those packages whatever this project is licensed as. Plan for that, not for the notice on this repository.

Other terms are possible. Apache-2.0 is what the library is offered under publicly, not the only way it can be offered. The copyright holder may license the same code separately to a party who needs different terms; that takes nothing away from anyone who received it under Apache-2.0, which is permanent. CONTRIBUTORS.md records what keeps that option open, including the rule that no LGPL code from the packages underneath is ever copied into this tree.

History. Releases through 8.13.0 were MIT and stay MIT; 9.x was GPL-3.0-only. A licence change is not retroactive — anyone may still take an earlier release under the licence it carried. See CONTRIBUTORS.md for the full account of how the relicensing was lawful.

Available Tools

256 tools
ActivateBehaviorDefinitionA

Activates the RAP behavior definition named by name, so its inactive version is in force. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
nameYesBehavior definition name (root entity).
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the load and does disclose real behavior: the state change (inactive version becomes active) and the non-obvious batch-mode contract where the call returns empty content and the answer must be fetched by number after the batch ends. It stops short of covering error cases, permissions, or transport implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with the purpose front-loaded and the batch-mode caveat second; nothing is padded or redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A mutation tool with no annotations and no output schema, and the description still conveys the state effect and the batch-answer retrieval pattern, which is the main thing an agent could get wrong. Missing only preconditions and failure behavior, which are comparatively minor here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are fully documented in the schema, including the enum values and defaults for 'detail'. The description only echoes the 'name' parameter and adds nothing about 'detail', so this is the baseline case where the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Activates) and resource (RAP behavior definition) plus the effect ('inactive version is in force'), which is more than a restatement of the name. It doesn't explicitly differentiate itself from the numerous sibling Activate* tools (e.g. ActivateObjects, ActivateServiceDefinition), so an agent must infer the distinction from the resource name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: call it when a behavior definition has an inactive version that must be brought into force. There is no explicit statement of when not to use it or whether the generic ActivateObjects would also cover this case, and no prerequisites are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ActivateClassA

Activates the ABAP class named by class_name, so its inactive version is in force. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesClass name.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it does disclose a non-obvious behavior: in batch mode the call is recorded under a sequence number and returns empty content that must be read later via BatchAnswers. That is genuinely useful beyond the schema. It still omits error/permission behavior and whether an already-active class fails, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, and the core action is front-loaded before the batch caveat. The second sentence is dense and slightly convoluted ('recorded under the next number and answers with empty content'), but every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with no annotations and no output schema, the definition covers the action, its effect, and the batch-mode return convention. Missing pieces are failure modes and confirmation of what the activation response contains, but nothing critical to calling it correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both class_name and the detail enum with its three modes. The description only restates that class_name names the class and adds nothing about the detail parameter. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Activates the ABAP class') plus the effect ('its inactive version is in force'), which is exactly what distinguishes it from the many Activate* siblings such as ActivateProgram or ActivateInterface. An agent can identify the target object type and outcome without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the effect statement — you call it when a class has an inactive version that should be put in force — and the batch-mode sentence gives a real usage context. However, it never states prerequisites (an inactive version must exist), what happens if the class is already active, or points to any alternative such as ActivateObjects for multi-object activation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ActivateDataElementB

Activates the ABAP data element named by data_element_name, so its inactive version is in force. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
data_element_nameYesData element name.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose a non-obvious behavior: in batch mode the call is recorded and returns empty content, read back by number later. That is valuable, but it omits whether activation requires a transport, lock, or special authorization, and what a non-batch response looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and effect, with the batch caveat second. The "Recordable:" clause is dense but every element is actionable; nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with no annotations and no output schema, the description covers the effect and the batch-mode return semantics, which is the main gap an agent would hit. It still leaves prerequisites and failure modes unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, including a fully documented enum for `detail`, so the schema already does the heavy lifting. The description only ties `data_element_name` to the activation target and adds no format or naming-convention detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Activates the ABAP data element named by data_element_name") and adds the effect ("so its inactive version is in force"), which separates it from Create/Update/DeleteDataElement siblings by intent. It does not explicitly name a sibling alternative such as ActivateObjects, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the agent must infer that this is the step to run after an Update leaves an inactive version behind. There is no explicit "use when X, not Y" guidance, and bulk activation via ActivateObjects is never mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ActivateDdlA

Activates the CDS view (DDL source) named by ddl_name, so its inactive version is in force. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
ddl_nameYesDDL source name.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses the core effect (the inactive version becomes active) and a non-obvious batch-mode behavior where calls are recorded and answered later by number, though it omits permission requirements and normal-mode return details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The primary activation behavior is front-loaded, and the batch-mode caveat follows directly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, it adequately explains the activation effect and batch behavior, but it does not describe what a non-batch call returns or how errors are surfaced. The description is minimally sufficient but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters in detail. The description only names 'ddl_name' and adds no additional meaning beyond what the schema provides for either parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Activates') and resource ('CDS view (DDL source)') and explicitly names the parameter that identifies it. An agent can distinguish this from sibling activation tools like ActivateTable or ActivateProgram by the DDL/CDS scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies the tool should be used when an inactive version needs to be made active, but it does not explicitly say when to use this versus alternatives such as ActivateObjects or CheckDdl. No exclusions or prerequisites are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ActivateDomainA

Activates the ABAP domain named by domain_name, so its inactive version is in force. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
domain_nameYesDomain name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does add real value: it discloses the mutation effect on the object's version state and the non-obvious batch-mode contract (call recorded under the next number, empty content returned, result read by number afterwards), which ties into BatchAnswers. It stops short of stating failure behavior, preconditions such as syntax checks, or whether a transport entry is created.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and effect; nothing is wasteful. The second sentence is a dense run-on that packs the entire batch protocol in one breath, which slightly hurts readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, no-output-schema mutation tool, the description covers the action, its effect on version state, and the batch recording protocol. Missing only activation-failure semantics and prerequisite context (checks, transport handling) that an agent would want before firing a mutating call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the 'detail' enum is fully self-documented in the schema (terse/full/raw). The description only echoes that domain_name is the target domain, adding no format or naming conventions beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Activates') and resource ('the ABAP domain named by domain_name') and explains the effect: the inactive version becomes active. The resource name separates it from the many Activate* siblings (ActivateClass, ActivateTable, ActivateDataElement), but the description never explicitly contrasts with them or with the generic ActivateObjects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'so its inactive version is in force' implies when to use it (after edits that produced an inactive version), but there is no explicit guidance on alternatives such as ActivateObjects or the Check* tools that might precede activation. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ActivateFunctionGroupA

Activates the ABAP function group named by function_group_name, so its inactive version is in force. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
function_group_nameYesFunction group name.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does meaningful work: it discloses that activation makes the inactive version live, and explains the non-obvious batch-mode recording semantics (recorded under a number, empty answer, retrieved later via BatchAnswers). It still omits error behavior when no inactive version exists and any permission/transport implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action; the second sentence is dense but earns its place by explaining batch-mode recording, though its phrasing ('Recordable', 'answers with empty content') is slightly compressed and could be clearer.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A mutation tool with no annotations and no output schema needs to explain return shape and failure modes. The description covers the batch-answer retrieval path well but says nothing about the normal return content, errors, or what happens when no inactive version is pending.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented, including the detail enum's terse/full/raw options. The description only echoes that function_group_name selects the target, adding no syntax or naming-convention guidance beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (activates) and resource (ABAP function group, named by parameter) plus the effect (inactive version goes into force). The resource boundary cleanly separates it from ActivateFunctionModule, ActivateProgram, ActivateClass and other Activate* siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: one infers this follows edits that produced an inactive version. It never says when to prefer it over ActivateObjects (the bulk activator) or when to run CheckFunctionGroup first, and no prerequisites are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ActivateFunctionModuleB

Activates the ABAP function module named by function_module_name in the function group named by function_group_name, so its inactive version is in force. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
function_group_nameYesFunction group name.
function_module_nameYesFunction module name.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry behavioral disclosure. It explains that the inactive version becomes active and describes batch recording behavior in detail, but omits permissions, dependency/lock failures, reversibility, and normal response expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with the purpose front-loaded and a relevant batch-mode caveat afterward. The second sentence is dense but earns its place by explaining non-obvious recording behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, it covers the core activation effect and important batch behavior. It remains incomplete on prerequisites, error cases, and what a normal non-batch response looks like.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the detail enum and its options, so the schema baseline is 3. The description names the two required parameters but largely restates schema semantics and does not add meaning beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Activates') and resource ('ABAP function module'), scoped by the function group named in the required parameters. It does not explicitly distinguish this from sibling activation tools such as ActivateFunctionGroup or ActivateObjects, but the function-module focus is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The implied usage is clear: activate an inactive function module. It adds useful batch-mode recording context, but gives no explicit when-to-use/when-not guidance or alternatives among the many activation, check, and delete siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ActivateInterfaceA

Activates the ABAP interface named by interface_name, so its inactive version is in force. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
interface_nameYesInterface name.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden; it does disclose a genuinely non-obvious trait — that in batch mode the call is recorded under the next number and returns empty content, with the real answer retrieved later by number. It omits permissions, failure behavior, and whether dependent objects are also activated, leaving some gaps for a mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste, with the core action and its effect front-loaded before the secondary batch-mode caveat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter activation tool with no output schema, the description covers effect, target, and the batch-recording mechanic, which is enough to call it correctly. Minor gaps remain around prerequisites and error/partial-activation behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the detail parameter already documents its terse/full/raw enum meanings, so the schema does the heavy lifting. The description only restates interface_name ('the ABAP interface named by interface_name') and adds nothing about parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (activates) and a specific resource (the ABAP interface named by interface_name), and adds the effect ('its inactive version is in force'), which distinguishes it clearly from sibling Activate* tools for classes, tables, programs, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the activation semantics, but there is no explicit guidance on prerequisites (e.g., whether CheckInterface/GetInactiveObjects should precede it) or on choosing ActivateInterface over the generic ActivateObjects, and no statement of when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ActivateMetadataExtensionA

Activates the CDS metadata extension named by name, so its inactive version is in force. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
nameYesMetadata Extension name.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose a genuinely non-obvious trait: in batch mode the call is recorded and returns empty content, with the answer retrieved by number after BatchEnd. It omits prerequisites (must an inactive version exist?), failure behavior, and permission needs, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, the activation effect front-loaded and the batch caveat second. No filler; both sentences carry information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-param mutation with no annotations and no output schema, the description covers effect and batch return semantics, which are the highest-risk unknowns. It stops short of stating preconditions and error outcomes, leaving a modest gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the description adds nothing about the 'name' or 'detail' parameters beyond what the schema already documents. Baseline 3 applies when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (activates) and resource (CDS metadata extension), plus the effect ('its inactive version is in force'), which distinguishes it from sibling reads like GetMetadataExtension and checks like CheckMetadataExtension. An agent can tell what it does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'inactive version is in force' clause implies the tool applies after an edit leaves an inactive version, but it never explicitly states when to use it versus GetMetadataExtension/CheckMetadataExtension or the generic ActivateObjects. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ActivateObjectsB

Activates the repository objects named by objects (each a name and a type) together, in one activation: any object type, related objects such as domains, data elements and tables at once. Runs outside batch mode.

NameRequiredDescriptionDefault
objectsYesArray of objects to activate. Each object must have 'name' and 'type'.
preauditNoRequest pre-audit before activation. Default: true

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It says the operation activates and 'runs outside batch mode', but does not disclose what a mutation of this kind entails: whether activation is atomic across the list, what happens on partial failure, whether objects must be inactive beforehand, or what happens to dependencies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with the core action and scope front-loaded and no filler. It could be broken up slightly for readability, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Schema fully documents both parameters and there is no output schema to explain, but the description leaves behavioral gaps (atomicity, failure handling, preconditions) that matter for a mutation tool with zero annotation coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with name/type and the full type-code enum documented in the schema, so the baseline is 3. The description restates 'each a name and a type' but adds nothing about the preaudit parameter or the semantics of mixed-type activation beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (activates) and resource (repository objects named by objects), and clarifies that heterogeneous types can be activated together in one call, which distinguishes it from the many single-type ActivateX siblings. It stops short of naming those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'together, in one activation' implies this is the bulk-activation path, and 'Runs outside batch mode' hints at a context constraint, but neither the alternatives (ActivateClass, ActivateTable, etc.) nor when-not-to-use is spelled out. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ActivateProgramB

Activates the ABAP program (report) named by program_name, so its inactive version is in force. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
program_nameYesProgram name.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses the activation effect and the batch-mode recording behavior, including empty content and later retrieval by number, but it omits permissions, error behavior, and what a normal non-batch response looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loads the primary purpose. The second sentence adds useful batch-mode context, though it is dense and specialized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core mutation and an important batch-mode behavior, but with no annotations and no output schema it leaves gaps around normal return behavior, permissions, and error cases. It is adequate but not fully complete for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description mentions program_name in passing, but adds no parameter meaning beyond the schema, and the detail parameter is documented only in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: activating the ABAP program (report) named by program_name so its inactive version becomes active. It is clear what the tool does, but it does not explicitly distinguish itself from sibling activation tools such as ActivateObjects or ActivateClass.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the action and by the batch-mode note, but there is no explicit guidance on when to choose this tool over siblings like ActivateObjects or when not to use it. An agent can infer the basic scenario, but alternatives are not addressed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ActivateServiceBindingA

Activates the OData service binding named by name, so its inactive version is in force. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
nameYesService binding name.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and delivers real behavioral detail: the mutation semantics (inactive → active) and the non-obvious batch/recordable contract where the call returns empty content and the real answer is read later by number. It stops short of permissions, error behavior, or what happens if no inactive version exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the core effect front-loaded and the batch-mode caveat placed second. The batch sentence is dense but every clause (recording, next number, empty answer, read after batch) carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter activation tool with no output schema, the description covers what matters most: what changes on the server and how the response behaves in batch mode. It is only short of permission/error prerequisites, which is a modest gap for a low-complexity mutation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the `detail` enum is fully documented in the schema, so the baseline is 3. The description only restates that the binding is identified by `name` and adds no extra semantics for either parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Activates) and resource (the OData service binding named by `name`) plus the concrete effect: the inactive version is put in force. Against siblings like CreateServiceBinding, UpdateServiceBinding, DeleteServiceBinding, and ActivateServiceDefinition, the operation is unmistakable without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: an agent infers you call this when a binding is inactive and you want it live. There is no guidance on prerequisites (must an inactive version exist?), on when to prefer this over ActivateObjects, or on failure modes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ActivateServiceDefinitionA

Activates the service definition named by name, so its inactive version is in force. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
nameYesService definition name.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does add real behavioral context: it explains the activation effect on the inactive version and, unusually, the batch-mode contract (recorded under the next number, empty answer, answer retrieved by number). It omits failure behavior (does activation return check errors?) and permission requirements, which matters for a mutating operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and effect; the batch-mode sentence is dense but every clause (recording, empty answer, retrieval by number) is operationally necessary. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter, no-output-schema, no-annotation mutation tool, the description covers the effect and the otherwise-invisible batch return contract, which compensates for the missing output schema. What remains uncovered is error/check behavior on activation failure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented, including the detail enum with per-value meaning. The description only echoes that the target is identified by name and says nothing about the detail parameter. Baseline 3 applies when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Activates the service definition named by name") plus the effect (inactive version comes into force), which is far more specific than a tautology. It does not, however, explicitly distinguish itself from the many other Activate* siblings (ActivateServiceBinding, ActivateClass, ActivateObjects), leaving that to the name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: since it puts the inactive version in force, an agent can infer this is the post-edit activation step. There is no explicit when-to-use, no prerequisite mention (e.g., successful check), and no named alternative such as ActivateObjects or ActivateServiceBinding.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ActivateStructureA

Activates the ABAP structure named by structure_name, so its inactive version is in force. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
structure_nameYesStructure name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations the description carries the full burden and does meaningful work: it explains the activation semantics and, notably, discloses the non-obvious batch-mode contract (call is recorded under the next number, returns empty content, answer retrieved by number afterwards). It still omits permissions, failure behavior, and whether errors leave the object inactive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the core action front-loaded and no filler. The batch sentence is information-dense but slightly convoluted in phrasing ('answers with empty content; its answer is read by number'), costing a bit of readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, so the description must carry behavioral context, and it covers purpose plus the batch-recording quirk well. Gaps remain around preconditions, side effects on the inactive version, and error outcomes for what is a state-changing operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented, including the terse/full/raw enum for detail. The description only restates that structure_name identifies the ABAP structure and adds nothing about the detail parameter, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Activates) and resource (ABAP structure), plus the concrete effect (inactive version comes into force). Distinguishes reasonably from ActivateProgram/ActivateClass/ActivateTable by naming the resource, though it never addresses the generic ActivateObjects sibling that could also cover structures.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the effect statement, and the batch-mode clause hints that the tool is callable inside a batch, but nothing says when to prefer this over ActivateObjects, whether a CheckStructure should run first, or what preconditions must hold.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ActivateTableA

Activates the ABAP database table named by table_name, so its inactive version is in force. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
table_nameYesTable name.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses the mutation effect and specific batch-mode behavior: calls are recorded, return empty content, and answers are read by number afterward. It omits other important behavioral details such as permissions, failure modes, and normal response behavior outside batch mode.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core activation behavior and is only two sentences. The second sentence adds relevant batch-mode information without unnecessary repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no annotations, the description covers the main action and unusual batch behavior. However, it does not explain the normal response shape, error behavior, or prerequisites, leaving gaps that an agent would need to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema already documents both table_name and detail. The description reinforces that table_name identifies the table to activate but adds no meaning for the detail parameter beyond what the schema provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: it activates the ABAP database table identified by table_name and makes its inactive version active. This clearly distinguishes it from sibling activation tools such as ActivateProgram, ActivateClass, and ActivateStructure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'so its inactive version is in force' implies the table must already have an inactive version, which gives some usage context. However, it does not explicitly state when to choose ActivateTable over ActivateObjects or when not to use it, nor does it mention prerequisites or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

AddTransportObjectB

Adds the existing object named by object_name and object_type to the transport task named by transport_number, so it travels with the task's request. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
pgmidNoProgram id. Defaults to R3TR, a workbench object's.R3TR
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
object_nameYesObject name.
object_typeYesObject-directory type — CLAS, FUGR, TABL, DOMA — not an ADT type code like CLAS/OC.
transport_numberYesNumber of the transport task the object is added to.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It does add one genuinely non-obvious trait: in batch mode the call is recorded under the next number and returns empty content, read later via a numbered answer. However, it omits failure behavior (duplicate object already in task, released/non-modifiable transport), permission requirements, and what the non-batch answer contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, action stated first with zero filler. The second sentence is dense and slightly jargon-heavy ('Recordable', 'recorded under the next number'), but every clause conveys real information rather than restating the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter mutation tool with no annotations and no output schema, the description covers the core action and batch semantics but leaves the normal (non-batch) return shape, error conditions, and transport-state preconditions unexplained. It is workable but incomplete for a write operation whose safety profile is otherwise undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters (including pgmid and detail enum) are already documented in the schema. The description only ties the three required parameters to the action and adds the 'existing' qualifier on object_name/object_type; it contributes no new syntax or constraint beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource — adding an existing object (by name and type) into a named transport task — and even states the effect ('so it travels with the task's request'). It doesn't name a sibling (e.g., RemoveTransportObject, MoveTransportObjects) to sharpen the boundary, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'The existing object' implies the object must already exist rather than be created here, and the batch-mode sentence implies usage inside BatchBegin/BatchEnd. But there is no explicit when-to-use/when-not guidance, no mention of the alternative tools for moving or removing objects, and no stated prerequisites (task must exist, must be modifiable/unreleased).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

AmdpDebugCancelA

[read-only] [debug] Cancels the stopped AMDP debuggee's execution. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden; it does disclose two useful traits: the safety posture ('[read-only]') and the batch-mode restriction. It stops short of stating what happens to the debuggee after cancellation, what state_handle becomes, or what is returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two bracketed tags plus a single sentence, with the action and its constraint front-loaded. Nothing is wasted and nothing needed is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the definition covers the action and the batch-mode limitation but leaves the post-cancellation state and any return value unexplained. Adequate for a simple two-parameter debug helper, but thin for a tool that alters a live debugging session.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters carry their own descriptions, including the full enum semantics for 'detail', so the schema does the documentation work. The description adds no param-level meaning beyond that, which is the baseline case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (cancels) and resource (the stopped AMDP debuggee's execution), which is enough to distinguish it from AmdpDebugStart and AmdpDebugStep. It does not explicitly contrast with the close sibling AmdpDebugStop, so the boundary between 'cancel' and 'stop' must be inferred.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Makes the precondition explicit (the debuggee must already be stopped) and adds a clear exclusion with 'Runs outside batch mode', which tells the agent not to wrap it in BatchBegin/BatchEnd. No named alternative for related debug flows, but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

AmdpDebugGetTableA

[read-only] [debug] Rows of a table variable at the AMDP stop, up to 100; optionally through a SELECT over it. Runs outside batch mode.

NameRequiredDescriptionDefault
queryNoA SELECT over the variable.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
variableYesThe table variable to read.
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose two genuinely non-obvious traits: a hard 100-row cap (truncation) and that it runs only outside batch mode. It still omits permission requirements and what happens if invoked without an active stop, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very short and front-loaded, with bracketed tags signaling read-only and debug category before the core content. The telegraphic phrasing ('through a SELECT over it') is slightly compressed, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only debug inspection tool with no output schema and a fully documented schema, the description covers what it returns (rows, bounded at 100, verbosity controllable via detail) and where it may run. Missing only edge-case behavior, which is minor at this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all four parameters are already documented, including the detail enum. The description only adds that 'query' is an optional SELECT applied over the table variable instead of a plain row dump; it says nothing about 'variable' or 'state_handle' beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: it reads rows of a table variable at an AMDP debug stop, with an optional SELECT path. The scope ('at the AMDP stop', 'up to 100') separates it from GetTableContents and GetTable, though it never names a sibling explicitly to disambiguate from DebugGetVariables.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'At the AMDP stop' implies the prerequisite (the debugger must already be paused following AmdpDebugStart/AmdpDebugWait), and 'runs outside batch mode' hints at the batch-tool alternative. But there is no explicit statement of when to use this versus AmdpDebugStep, DebugGetVariables, or the batch variants, and no stated failure behavior if not stopped.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

AmdpDebugSetBreakpointsB

[read-only] [debug] Sets the AMDP breakpoints of a debug session to the set given, as confirmed by the system. Catches every request of the connected SAP user, from this server and from anywhere else. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
breakpointsYesLines in SQLScript methods of a class.
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it does disclose meaningful behavior: the set is applied server-side ('as confirmed by the system'), it catches requests for the whole connected SAP user from any source (a broad, surprising side effect), and it does not work in batch mode. However, it does not state that existing breakpoints are replaced, what permissions are required, or what happens when the session has ended.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the tag prefixes front-loaded and no filler. The clause 'as confirmed by the system' is slightly vague, but overall the text is tight and appropriately sized for a three-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Honestly this is a 3-ish area, but weighing it: no output schema exists, so the description would ideally say what comes back; the 'detail' enum in the schema covers return granularity, which mitigates that gap. For a stateful debug mutation the description gives the environment constraint (no batch mode) and the scope of effect (all requests of the user), which is the core operational context an agent needs before calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so state_handle, breakpoints, and detail are already fully documented in the schema, giving a baseline of 3. The phrase 'to the set given' hints that the breakpoints array replaces rather than appends, which is a small semantic addition, but no other parameter meaning is added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Sets the AMDP breakpoints of a debug session to the set given.' The AMDP qualifier and the note about catching requests 'from this server and from anywhere else' implicitly separate it from the generic DebugSetBreakpoints sibling, but the sibling is never named, so an agent must infer which tool to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit statement of when to use this versus DebugSetBreakpoints, nor any prerequisite such as needing an active session created by AmdpDebugStart. The only exclusion hint is the trailing 'Runs outside batch mode,' which is a constraint, not usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

AmdpDebugStartA

[read-only] [debug] Opens an AMDP debug session of the connected SAP user with breakpoints on lines in SQLScript methods; a background run, when given, starts once the system confirmed the breakpoints. Catches every request of the connected SAP user, from this server and from anywhere else. Runs outside batch mode.

NameRequiredDescriptionDefault
runNoA class (as a console application) or a report started in the background once listening; its outcome is reported as the end of the session.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
breakpointsYesLines in SQLScript methods of a class.
stop_existingNoEnds an AMDP debug session of this user left behind.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, yet the description discloses the two traits that actually matter: the session captures every request of the connected SAP user from this server and anywhere else, and it runs outside batch mode. The ordering guarantee for the background run is also spelled out. It stops short of saying whether an existing session blocks the call or what a session handle looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and the [read-only] [debug] tags, and every clause carries information. The single long sentence is dense but not padded, though it could be split for scanability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description never indicates what comes back from a successful start (a session handle presumably needed by AmdpDebugWait/AmdpDebugStep) or how long the call blocks. For a stateful, blocking debug operation with nested parameters, that is a meaningful gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with per-parameter descriptions for run, detail, breakpoints and stop_existing, so the schema does the heavy lifting. The description adds only the sequencing semantics of run (starts once breakpoints are confirmed) and that breakpoints target SQLScript method lines; 3 is the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — "Opens an AMDP debug session ... with breakpoints on lines in SQLScript methods" — and pins the scope to the connected SAP user. That reads distinctly from the ABAP Debug* family and from AmdpDebugSetBreakpoints, which adds breakpoints to a session rather than opening one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: breakpoints are required, and the description notes a background run only starts after the system confirms breakpoints. It never says what to do when a session already exists (use stop_existing vs AmdpDebugStop) or how it relates to AmdpDebugSetBreakpoints, so the agent must infer the workflow from siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

AmdpDebugStepA

[read-only] [debug] Steps the stopped AMDP debuggee over a statement or on to the next stop. Runs outside batch mode.

NameRequiredDescriptionDefault
actionYesover runs the current statement, continue runs to the next stop.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses the stopped-debuggee precondition and the outside-batch-mode constraint, but it does not explain side effects on debug state, error behavior, or whether the call blocks waiting for a stop.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with compact tags; every clause adds either purpose or a usage constraint. There is no redundant or filler text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema is rich and the description adds the key precondition that the debuggee must be stopped and that the tool runs outside batch mode. With no output schema, the remaining gap around return values and blocked-call behavior is minor but real.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all three parameters clearly. The description only restates the action semantics at a high level and adds no syntax, defaults, or constraints beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: stepping a stopped AMDP debuggee. It also distinguishes the two step semantics (over a statement vs. to the next stop), which separates it from related siblings such as AmdpDebugWait or generic DebugStep.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for use: the debuggee must be stopped, and the tool runs outside batch mode. However, it does not name explicit alternatives or say when another AMDP debug tool should be preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

AmdpDebugStopA

[read-only] [debug] Ends the AMDP part of a debug session, releasing a suspended debuggee first; when the whole debug session ends with it, the kept answers of its debugger batch go too. A part that failed to undo is reported and kept with the answers. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and discloses meaningful side effects: releasing the suspended debuggee, deleting kept debugger-batch answers when the whole session ends, and reporting a failed undo. It still lacks details on permissions, idempotency, and what '[read-only]' means for mutable debug-session state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded across three efficient sentences with no obvious filler. Some phrasing around 'kept answers of its debugger batch' is dense, but the overall structure is appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description covers the key lifecycle side effects and the batch-mode constraint. It leaves minor gaps around return values and the lifecycle of 'state_handle', but is broadly complete for a debug-stop operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are fully documented in the schema. The description adds no meaning about 'state_handle' or 'detail' beyond what the schema already provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Ends') and resource ('the AMDP part of a debug session'), and adds that it releases a suspended debuggee first. It does not explicitly distinguish itself from close siblings such as AmdpDebugCancel or DebugStop.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a contextual constraint ('Runs outside batch mode') and describes failure behavior, but gives no explicit when-to-use guidance versus AmdpDebugCancel or DebugStop, nor any when-not conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

AmdpDebugWaitB

[read-only] [debug] AMDP events of a debug session after waiting up to hold_seconds. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
hold_secondsNoLongest wait for a change, at most 30 seconds.
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the burden; it does add real value with the explicit '[read-only]' marker and the constraint that it runs outside batch mode. However, for a long-poll/wait tool the critical behaviors are undisclosed: what is returned if the wait expires with no event (empty result vs. error), whether returned events are consumed or re-readable, and whether the state_handle stays valid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with bracketed tags front-loading the read-only and debug classification; nothing is redundant. It is slightly over-compressed, since the fragment omits the verb that would make it self-contained.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should convey what an 'AMDP event' result looks like and what a timeout yields; it does neither. With full schema coverage on inputs and the detail knob controlling payload size, what remains missing is concentrated in return/timing behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and every parameter, including the detail enum's three modes, is documented in the schema itself. The description only restates that the wait is bounded by hold_seconds, adding nothing beyond the schema's 'at most 30 seconds' note, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (AMDP events of a debug session) and the waiting behavior keyed to hold_seconds, and the '[debug]' tag plus the AMDP prefix separate it from the generic DebugWait sibling. It is a sentence fragment rather than a full verb statement, but an agent can still tell what it retrieves.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the '[debug]' tag and 'Runs outside batch mode' tell the agent this is for interactive AMDP debugging and not batch runs, which is a partial when-not. Nothing states when to call AmdpDebugWait versus AmdpDebugStep or DebugWait, nor that a prior AmdpDebugStart/state_handle is required, leaving the agent to infer the polling workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

BatchAnswersA

[read-only] Answers the calls of the last executed batch by number: for each number asked, the tool's answer, built from the call's parts of SAP's response when the number is first read and kept for later reads; the numbers asked are processed in parallel. Takes one number or a list of numbers; an unknown number answers as unknown.

NameRequiredDescriptionDefault
numberNoOne batch number to read (an integer of at least 1); give this or numbers, not both.
numbersNoSeveral batch numbers to read, answered in the order given; give this or number, not both.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does reasonably well: it declares read-only, discloses that answers are materialized on first read and cached for later reads, that numbers are processed in parallel, and that unknown numbers yield 'unknown' rather than an error. It does not describe what an 'answer' object contains or whether reads are idempotent across batch restarts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the read-only tag and the core action, then the caching and parallelism facts. It is dense semicolon-chained prose, but every clause contributes information about behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must convey the return shape, and 'the tool's answer, built from the call's parts of SAP's response' is suggestive but not concrete about the answer's structure or failure representation. The relationship to the batch lifecycle (BatchBegin/BatchEnd, DebugBatchBegin) is left implicit for a tool that cannot be used standalone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already states 'give this or numbers, not both' and the ordering guarantee. The description's 'takes one number or a list of numbers' and 'unknown number answers as unknown' add only marginal semantics beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: it answers the calls of the last executed batch by number. An agent can tell this is a read-back of prior batch results rather than a batch-start/end control. It stops short of naming BatchBegin/BatchEnd as the lifecycle siblings it depends on, so differentiation relies on inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"The last executed batch" implies the tool is only meaningful after a batch has run, and the description notes takes one number or a list. There is no explicit when-not guidance, no statement that BatchBegin must precede it, and no advice on what to do when a number is unknown beyond the bare 'answers as unknown'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

BatchBeginA

[read-only] Starts batch mode on this server. In batch mode each call of a tool marked recordable is recorded under the next number, starting at 1, and answers with empty content. Answers the state_handle: over Streamable HTTP send it as the state_handle argument of every call of the batch (or in the x-mcp-state-handle header).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden, and it discloses genuinely important behavior: recordable tools return empty content while batching, and the returned state_handle must be threaded through Streamable HTTP as an argument or header. It also self-declares read-only. Missing is what happens on error or repeated BatchBegin calls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the verb and purpose, followed by the mechanism and then the transport-specific detail. Nothing is repeated and nothing is filler, so the agent can stop reading at any sentence and still act correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly fills the gap by explaining that state_handle is returned and how to use it. What is left out is the lifecycle tail, i.e. how the batch is closed or its answers retrieved, which matters for an agent that has only this tool and its siblings to reason about.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 and there is no parameter ambiguity to resolve. The description instead spends its words on the state_handle output, which is useful value-add even though it is not a parameter concern.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Starts batch mode on this server") and then defines what batch mode does: recordable tool calls are recorded under sequential numbers and answer with empty content. That is enough to distinguish it from BatchEnd/BatchAnswers, though those siblings are never named, so the differentiation is inferred rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the operating context and the requirement to pass state_handle on every subsequent batch call, which implicitly tells the agent this is the entry point of a workflow. However, it never states when to use this versus BatchEnd or BatchAnswers, nor what happens if a batch is already open, leaving the workflow routing implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

BatchEndB

[read-only] Sends the recorded calls in one envelope with the credentials in force and ends batch mode. Splits SAP's answer into each call's parts and answers the number of recorded calls, of requests sent and of parts received; when sending fails, the parts received differ from the requests sent or the answer fails to split, answers that error, and every number of the batch then answers it.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description does useful behavioral work: it says the tool sends recorded calls with credentials in force, splits SAP's answer per call, returns counts of recorded calls/requests/parts, and reports errors when sending or splitting fails. However, the error behavior is hard to parse and important details such as what happens to the batch state after failure are not clearly spelled out.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is front-loaded and clear, but the second sentence is a long, convoluted run-on that repeats 'answers' and packs multiple error conditions together. The content is relevant but could be structured much more cleanly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and no output schema, the description does explain the returned counts and error conditions. Still, it omits key context for batch mode, such as the prerequisite relationship with BatchBegin and whether BatchAnswers is also needed, leaving an agent to infer the workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there are no parameter semantics to explain. The schema has no properties, and the baseline for this dimension is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it sends recorded calls in one envelope and ends batch mode. This distinguishes the core action from BatchBegin and BatchAnswers, though it does not explicitly name those siblings or fully contrast the tool with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'ends batch mode' implies the tool should be used at the end of a batch sequence, but the description never explicitly says it must follow BatchBegin or when to prefer BatchAnswers. Usage is inferable rather than explicitly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CheckBehaviorDefinitionA

[read-only] Runs a syntax check on the RAP behavior definition (BDEF) named by name. Returns syntax errors, warnings, and messages. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
nameYesBehaviorDefinition name.
versionNoWhich version to check — it goes into the checkrun body as chkrun:version, as ADT sends it. Without `version` the active version is checked; pass `inactive` for the unsaved one right after a write.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No structured annotations are provided, so the description carries the disclosure burden and does so reasonably: it marks the tool as [read-only], says it returns syntax errors/warnings/messages, and explains the non-obvious batch recording behavior. It does not cover authorization requirements or more detailed side-effect constraints, but the key behavioral traits are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three focused sentences with no wasted text. The primary purpose is front-loaded, and the batch-recording caveat is compactly summarized after the core behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter check tool with full schema coverage and no output schema, the description gives enough context to invoke it correctly: it explains the input resource, the returned categories, and the batch behavior. It could more explicitly mention alternatives or prerequisites, but no critical invocation detail is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents both `name` and `version`, including the active/inactive enum semantics. The description only repeats that the BDEF is named by `name` and adds no further meaning beyond the schema, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it runs a syntax check on the RAP behavior definition (BDEF) named by `name`. The BDEF resource makes it clearly distinguishable from the many other `Check*` siblings such as CheckClass or CheckTable. It also states what is returned: syntax errors, warnings, and messages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear enough to imply when to use it: checking the syntax of a BDEF. However, the description does not explicitly state when to use this instead of related tools like GetBehaviorDefinition, ActivateBehaviorDefinition, or other Check* tools, nor does it describe prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CheckClassA

[read-only] Runs a syntax check on the ABAP class named by class_name. Can check existing class (active/inactive) or validate hypothetical source code. Returns syntax errors, warnings, and messages. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
versionNoVersion to check: 'active' (last activated) or 'inactive' (current unsaved). Default: active.
class_nameYesClass name.
source_codeNoOptional: source code to validate. If provided, validates hypothetical code without creating object. Must include complete CLASS DEFINITION and IMPLEMENTATION sections.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No structured annotations exist, so the description carries the burden, and it does substantial work: it self-labels read-only and discloses the non-obvious batch-mode behavior where the call records an answer and returns empty content to be retrieved by number later. It does not cover authorization, cost, or limits, but the batch quirk is exactly the kind of hidden behavior an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences with the read-only tag and core action front-loaded, followed by modes, return content, and the batch caveat in priority order. Nothing is redundant, though the batch sentence is dense and could be split for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly states what comes back (syntax errors, warnings, messages), and it covers the tricky batch-mode return path. For a three-parameter read-only check tool this is essentially complete; only cross-tool routing guidance is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented, including the active/inactive enum and the requirement that source_code contain full DEFINITION and IMPLEMENTATION sections. The description only restates that existing-code and hypothetical-code modes exist, adding little beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: 'Runs a syntax check on the ABAP class named by class_name.' The resource naming implicitly separates it from the many sibling Check* tools (CheckProgram, CheckInterface, CheckTable), though none are called out explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly explains the two usage modes: checking an existing class (active or inactive) versus validating hypothetical source code passed in. It stops short of naming alternatives or stating when to prefer CheckClass-family tools over, say, activating the class, so it is clear context rather than explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CheckDataElementA

[read-only] Runs a syntax check on the ABAP data element named by data_element_name. Returns syntax errors, warnings, and messages. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
versionNoWhich version to check. Without `version` the active version is checked; pass `inactive` for the unsaved one right after a write.
data_element_nameYesData element name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it declares [read-only], enumerates the return category (syntax errors, warnings, messages), and discloses a non-obvious batch-mode behavior where the call returns empty content and must be resolved by number via BatchAnswers. It does not state whether the check is bounded in time or whether it fails on nonexistent objects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, with the read-only marker and the core action front-loaded, followed by return values and the batch caveat. No filler, though the batch sentence is dense and would read better separated from the return-value sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with no output schema and no annotations, the description covers purpose, result shape, and the batch-mode recording protocol that an agent would otherwise get wrong. Remaining gaps (timeouts, error behavior on missing objects) are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the version parameter already documents active vs inactive semantics in full, including the post-write inactive use case. The description only restates that data_element_name names the data element, adding nothing beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Runs a syntax check on the ABAP data element") and names the target object type, which implicitly separates it from the many other Check* siblings like CheckTable and CheckClass. It does not explicitly contrast itself with those siblings or with GetDataElement, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: it is a validation step, and the batch paragraph explains the batch-mode contract. There is no explicit guidance on when to prefer this over GetDataElement or ActivateDataElement, or that a check should follow an UpdateDataElement on the inactive version.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CheckDdlA

[read-only] Runs a syntax check on the CDS view named by ddl_name. Can check existing view (active/inactive) or validate hypothetical DDL source. Returns syntax errors, warnings, and messages. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
versionNoVersion to check: 'active' or 'inactive'. Without `version` the active version is checked.
ddl_nameYesCDS view name to check, passed as ddl_name.
ddl_sourceNoOptional: DDL source code to validate instead of the saved version.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well: it explicitly declares read-only behavior, states the return content (syntax errors, warnings, messages), and discloses the unusual batch-mode recording semantics including empty responses and answer retrieval by number. It does not cover auth/permission requirements or error handling for invalid ddl_name, but the core behavioral profile is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and read-only marker are front-loaded, and the description stays compact despite covering two modes plus batch semantics. The batch sentence is long but earns its place by explaining non-obvious behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description states the return content (syntax errors, warnings, messages), and no annotations exist, yet the description supplies the read-only and batch-mode context. An agent has enough to call the tool correctly, with only minor gaps around invalid-input behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented in the input schema. The description reinforces the mode distinction (existing view vs. hypothetical source) but adds little syntax or interaction detail beyond what the schema already provides; baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: 'Runs a syntax check on the CDS view named by ddl_name,' and explains the two modes (existing active/inactive view vs. hypothetical DDL source). This clearly separates it from retrieval tools like GetDdl and from other Check* tools aimed at different object types, though it never names an explicit alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states what can be checked (existing view or hypothetical source), which implies when the tool is appropriate, but gives no explicit when-not conditions or routing to alternatives such as GetDdl for plain retrieval or ActivateDdl for activation. The batch-mode note is contextual rather than a usage guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CheckDomainA

[read-only] Runs a syntax check on the ABAP domain named by domain_name. Returns syntax errors, warnings, and messages. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
versionNoWhich version to check. Without `version` the active version is checked; pass `inactive` for the unsaved one right after a write.
domain_nameYesDomain name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden. It discloses read-only status, return values (syntax errors, warnings, messages), and special batch-mode recording behavior. It lacks details on permissions or error conditions, but covers key behaviors well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loads the purpose and read-only flag. The batch-mode sentence is somewhat dense but necessary; overall it is efficient with little waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple check operation, full schema coverage, and no output schema, the description covers purpose, returns, and batch behavior sufficiently. It could more explicitly differentiate from sibling check tools, but for calling the tool it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents both parameters. The description adds no additional meaning about parameters beyond what the schema provides, making the baseline score of 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (runs a syntax check) and resource (ABAP domain named by domain_name). It does not explicitly distinguish from sibling Check* tools (e.g., CheckTable, CheckDataElement), but the domain focus is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: the tool is for checking domain syntax. However, there is no explicit guidance on when to use this versus other Check* tools or when not to use it. No alternatives or exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CheckFunctionGroupA

[read-only] Runs a syntax check on the ABAP function group named by function_group_name. Returns syntax errors, warnings, and messages. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
versionNoWhich version to check — it goes into the checkrun body as chkrun:version, as ADT sends it. Without `version` the active version is checked; pass `inactive` for the unsaved one right after a write.
function_group_nameYesFunction group name.

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations were supplied, and the description carries the burden well: it declares the operation read-only and discloses the non-obvious batch-mode recording behavior (empty content returned, answer retrieved by number after batch). That is exactly the kind of trait an agent could not infer from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: what it does, what it returns, and the batch caveat — each front-loaded and earning its place, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a simple 2-parameter read tool with no output schema: operation, return categories, version selection (via schema), and batch semantics are all covered. Only minor gaps remain around failure behavior for an invalid or nonexistent function group name.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the `version` parameter already has a rich enum description covering active vs. inactive semantics, so the schema does the heavy lifting. The description adds nothing about parameters beyond naming `function_group_name`, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Runs a syntax check on the ABAP function group') and enumerates the return content. The resource name inherently distinguishes it from siblings like CheckFunctionModule, CheckProgram, and CheckInterface, though it never explicitly says so.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied — check a function group's syntax — but there is no explicit guidance on when to prefer CheckFunctionModule, CheckInclude, or ActivateFunctionGroup instead, nor on prerequisites (e.g., must the group exist/be locked?).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CheckFunctionModuleA

[read-only] Runs a syntax check on the ABAP function module named by function_module_name in the function group named by function_group_name. Returns syntax errors, warnings, and messages. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
versionNoVersion to check: 'active' or 'inactive'. Default: active.
function_group_nameYesFunction group name containing the function module.
function_module_nameYesFunction module name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it self-declares '[read-only]', states what is returned (errors, warnings, messages), and explains the non-obvious batch behavior where the call is recorded and later read back by number. It omits authorization requirements and whether inactive-version checks behave differently, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three front-loaded sentences with no filler: purpose first, return values second, batch caveat last. The batch sentence is long but carries genuinely non-obvious information, so nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by specifying the return content. Parameters are explained well enough and the batch mode is disclosed. Missing sibling routing and activation prerequisites are the only meaningful gaps for a check tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are already documented, giving a baseline of 3. The description reinforces the function_module_name/function_group_name relationship but never mentions the 'version' parameter or its active/inactive default, adding little beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Runs a syntax check') and a precisely scoped resource (an ABAP function module within a named function group), plus the return content. It does not explicitly say how it differs from the many Check* siblings such as CheckFunctionGroup or CheckProgram, which keeps it at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The scope ('function module in the function group') implies when the tool applies, but there is no explicit statement of when to use it versus CheckFunctionGroup, CheckProgram, or the Activate* tools, and no prerequisites such as whether the object must be active first. Usage is inferable but not guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CheckInterfaceA

[read-only] Runs a syntax check on the ABAP interface named by interface_name. Returns syntax errors, warnings, and messages. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
versionNoWhich version to check — it goes into the checkrun body as chkrun:version, as ADT sends it. Without `version` the active version is checked; pass `inactive` for the unsaved one right after a write.
interface_nameYesInterface name.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: it declares the operation read-only and explains the non-obvious batch-mode behavior (empty content on call, answer retrieved later by number). It does not cover permissions or result size, which keeps it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose and return content, with the read-only tag leading. The batch sentence is dense but this is genuinely non-obvious information that earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter check tool with no output schema and no annotations, the description covers purpose, return content, safety profile, and the batch quirk. The main gap is routing guidance against sibling check/get tools, which is a minor omission given the clear resource-based naming.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters, including the enum semantics of `version`, are already fully documented in the schema. The description only echoes `interface_name` and adds no syntax or format details beyond it, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Runs a syntax check on the ABAP interface') and names the input that selects the target, which cleanly separates it from the many sibling Check* tools (CheckClass, CheckProgram, CheckTable) that share the same verb but operate on different object types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the read-only tag and the batch-recording note; the description never says when to run this versus GetInterface or the version-diff siblings, nor mentions the inactive-version workflow. The hint about checking inactive after a write lives in the schema, not the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CheckMetadataExtensionA

[read-only] Runs a syntax check on the CDS metadata extension (DDLX) named by name. Returns syntax errors, warnings, and messages. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
nameYesMetadata extension name.
versionNoWhich version to check: 'active' (default) or 'inactive', the unsaved one right after a write. This endpoint does not fall back to whichever exists.active

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the disclosure burden and does state the tool is read-only, what it returns (errors, warnings, messages), and explains the non-obvious batch recording behavior including empty content and later retrieval by number. It omits permission requirements and any side effects around active vs. inactive versions, but covers the major behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the read-only marker, purpose, and return values, followed by the batch caveat. Every clause carries information an agent needs, with no repetition of the schema or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with no output schema, the description supplies the return contents (errors, warnings, messages), the read-only nature, and the batch interaction model, while the schema handles version semantics. It is nearly complete, though it could note prerequisites or what happens when the named DDLX does not exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the version parameter’s active/inactive semantics – including the lack of fallback – are fully documented in the schema. The description only restates that the tool operates on the metadata extension 'named by name,' adding no parameter meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (runs a syntax check) and a precise resource (the CDS metadata extension / DDLX named by name). It also states the returned artifacts (syntax errors, warnings, messages), which distinguishes it from generic Check* siblings such as CheckDdl, CheckTable, and CheckClass.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'Runs a syntax check' – an agent can infer this is for validating a DDLX before activation – but the description never says when to use it rather than CheckDdl or ActivateMetadataExtension, and it gives no prerequisites. The batch-mode note describes behavior, not when to choose this tool over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CheckPackageA

[read-only] Runs a syntax check on the ABAP package named by package_name. Returns syntax errors, warnings, and messages. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
package_nameYesPackage name.
super_packageNoOptional, and not read by the check endpoint — see CheckPackageLow. Requiring it refused the call before any request was made, for a package with no parent.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It discloses that the operation is '[read-only]', that it returns syntax errors, warnings, and messages, and it explains the unusual batch-mode recording behavior where the call answers empty and the result is read later by number. These are meaningful traits beyond the schema, though it does not cover failure behavior or result structure in detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tight sentences with no waste. It front-loads the core action and read-only nature, then adds return values and batch behavior in a logical order.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a check tool with no output schema, the description explains what is returned (syntax errors, warnings, messages) and covers the non-obvious batch recording semantics. The parameter details are fully covered by the schema. It could say more about failure cases or whether the check is recursive, but the essential calling information is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema, including the caution that super_package is not read by the check endpoint. The description mentions package_name only implicitly through the package-level purpose and adds no syntax or format detail. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Runs a syntax check on the ABAP package named by package_name.' It distinguishes the tool from siblings like CheckProgram, CheckClass, and CheckTable by explicitly scoping the check to a package. An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the package-level syntax check, but it never states when to use it versus CheckProgram, CheckClass, or CheckPackageLow. There are no exclusions or decision criteria for selecting among the many sibling Check* tools. Usage is inferable from the resource name but not explicitly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CheckProgramA

[read-only] Runs a syntax check on the ABAP program (report) named by program_name. Returns syntax errors, warnings, and messages. Available on premise. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
versionNoWhich version to check — it goes into the checkrun body as chkrun:version, as ADT sends it. Without `version` the active version is checked; pass `inactive` for the unsaved one right after a write.
program_nameYesProgram name.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does well: it marks the tool as read-only, describes the return content (syntax errors, warnings, messages), and explains the batch recording behavior where calls return empty content and answers are read later by number. It does not cover authorization or edge cases, but adds meaningful context beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and return behavior, followed by availability and batch semantics. Each sentence adds value, though the batch-mode note could arguably be separated for clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only check tool with no output schema, the description supplies the key return information and batch behavior. It is sufficient for correct invocation, with only minor gaps around error details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented. The description mentions program_name but adds no syntax or format detail beyond the schema, making the baseline score appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it runs a syntax check on an ABAP program identified by program_name. This distinguishes it from sibling Check* tools such as CheckClass and CheckTable by the resource it checks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear usage context, including that it is available on premise and that `inactive` should be passed right after a write for the unsaved version. It does not explicitly exclude other Check* siblings, but the resource-specific scope makes the intended use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CheckStructureA

[read-only] Runs a syntax check on the ABAP structure named by structure_name. Can check existing structure (active/inactive) or validate hypothetical DDL code. Returns syntax errors, warnings, and messages. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
versionNoVersion to check: 'active' or 'inactive'. Without `version` the active version is checked.
ddl_codeNoOptional: DDL source code to validate instead of the saved version.
structure_nameYesStructure name.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden and does so well: it declares read-only behavior, describes the returned syntax errors/warnings/messages, and explains the important batch-mode recording semantics. It omits permission requirements and error behavior for invalid structure names.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then usage modes, return content, and batch behavior in tight sentences. Every sentence provides information an agent needs for correct invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description covers the essentials: read-only nature, modes, return content, and batch recording. It could clarify whether structure_name is still required when ddl_code is supplied, and what errors occur on invalid input.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameter schema already documents version, ddl_code, and structure_name. The description reinforces the active/inactive and hypothetical-DDL concepts but adds no syntax, format, or dependency details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (runs a syntax check) and resource (ABAP structure named by structure_name), and distinguishes the two modes: checking an existing structure versus validating hypothetical DDL code. An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the two usage contexts (existing active/inactive structure vs hypothetical DDL), which is clear guidance. It does not name alternatives such as CheckDdl or CheckTable or state exclusions, leaving sibling differentiation implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CheckTableA

[read-only] Runs a syntax check on the ABAP database table named by table_name. Can check existing table (active/inactive) or validate hypothetical DDL code. Returns syntax errors, warnings, and messages. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
versionNoVersion to check: 'active', 'inactive', or 'new'. Without `version` the active version is checked.
ddl_codeNoOptional: DDL source code to validate instead of the saved version.
table_nameYesTable name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does real work: it declares read-only, states the output is syntax errors/warnings/messages, and explains the non-obvious batch recording semantics (empty content returned, answer retrieved later by number). It omits any error/failure behavior or permission requirements, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence and every subsequent sentence adds a distinct fact (accepted inputs, return content, batch behavior). The batch sentence is long but carries information that is otherwise undiscoverable, so it earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description compensates by naming the return content (errors, warnings, messages), and it covers both usage modes plus the unusual batch/recordable lifecycle. Adequate for a 3-parameter read-only check tool, though interaction rules between version and ddl_code remain unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the enum for version is documented in the schema itself, so the description mostly restates it ('active/inactive', 'hypothetical DDL code'). It adds no format, length, or interaction detail (e.g. what happens if ddl_code and version are both supplied), so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (runs a syntax check) against a specific resource (the ABAP database table named by table_name), and adds that it also validates hypothetical DDL. It stops short of distinguishing itself from the very similar sibling CheckDdl, which an agent could easily confuse given the overlap in DDL validation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies the two modes (checking a saved active/inactive version vs validating supplied DDL), but never states when to prefer CheckTable over CheckDdl for DDL source, nor any prerequisites like needing an active/inactive object to exist. Usage is inferable rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateBehaviorDefinitionB

Create a new ABAP Behavior Definition (BDEF) in SAP system. Creates the behavior definition object in initial state. Runs outside batch mode.

NameRequiredDescriptionDefault
nameYesBehavior Definition name (usually same as Root Entity name)
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
activateNoActivate after creation. Default: true
descriptionNoDescription
root_entityYesRoot Entity name (CDS View name)
package_nameYesPackage name
master_languageNoOptional master/original language for the created object (e.g. "EN", "DE", "ZH"). Defaults to the session language (SAP_LANGUAGE) or EN.
transport_requestNoTransport request number, not a task
implementation_typeYesImplementation type: 'Managed', 'Unmanaged', 'Abstract', 'Projection'

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose two useful traits: the object is created in an empty/initial state (so content must be added afterwards) and the call cannot be made inside batch mode. It omits permission/authorization needs, whether a transport request is mandatory for non-local packages, and what happens when activate defaults to true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the verb and resource, then the resulting object state, then the execution constraint. No filler and every sentence contributes a distinct fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description says nothing about what is returned (e.g. activation status, errors) or about the create-then-update-then-activate workflow. It is adequate to attempt the call correctly but leaves the agent guessing about the result and follow-up steps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including enums for detail and implementation_type, so the schema already explains all 9 parameters. The description adds no syntax, format, or constraint detail beyond the schema, which is the expected baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: creates an ABAP Behavior Definition (BDEF) object in an SAP system, and clarifies it is created in initial state. This is clearly distinguishable from UpdateBehaviorDefinition and CreateBehaviorImplementation, though the description never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit statement of when to choose this tool over UpdateBehaviorDefinition, CreateBehaviorImplementation, or the Activate* siblings. 'Runs outside batch mode' is a constraint rather than usage guidance, and prerequisites (package, transport) are not discussed at all.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateBehaviorImplementationB

Creates the RAP behavior implementation class named by class_name for the behavior definition named by behavior_definition, in initial state: the FOR BEHAVIOR OF main source and the implementations include are written afterwards, the main source as a class source and the implementations include under the class lock. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesBehavior Implementation class name.
descriptionNoClass description. If not provided, class_name will be used.
package_nameYesPackage name
transport_requestNoTransport request number, not a task. Required for transportable packages.
behavior_definitionYesBehavior Definition name. The behavior definition must exist. Accepted for compatibility; not forwarded to the create request — the shipped create endpoint posts a metadata document (name/description/package) only. The class is bound to this behavior definition when its FOR BEHAVIOR OF main source is written, separately, via UpdateClass.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses the initial creation state, later source/include writing under class lock, and batch recording behavior, but it omits important caveats such as permissions, transport implications, and the schema-noted fact that behavior_definition is not forwarded to the create request.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action, but the first sentence is long and syntactically dense, making the initial-state and class-lock details hard to parse. The batch-mode sentence is useful but the overall structure could be clearer and more concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation tool with no output schema, the description covers the initial creation state and batch behavior but does not describe what a normal non-batch call returns. It also does not clarify the relationship to UpdateClass for binding the behavior definition, though the schema supplies that caveat.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameter meanings are largely provided by the schema itself. The description references class_name and behavior_definition and adds workflow context, but does not add substantive semantics beyond the schema, especially for detail, package_name, description, and transport_request.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: creates a RAP behavior implementation class identified by class_name. It also ties the class to a behavior definition, which distinguishes it from a generic class creation tool, though it does not explicitly compare itself to siblings like CreateClass or CreateBehaviorDefinition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the intended workflow: create the class in initial state, then write the FOR BEHAVIOR OF main source and implementations include afterwards. It also explains batch-mode usage, but it does not explicitly say when to choose this over CreateClass or CreateBehaviorDefinition, nor when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateCdsUnitTestB

Creates the ABAP Unit test class named by class_name for the CDS view named by cds_view_name, from test_class_source. The view is checked to support CDS test doubles, the test class holding the local test classes is created in the package named by package_name, and it is activated. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesName of the new global class that holds the tests.
package_nameYesPackage of the new test class.
cds_view_nameYesCDS view under test (DDL source). Must be active and testable with test doubles.
test_class_sourceYesABAP source of the local test classes: definitions and implementations, FOR TESTING.
transport_requestNoTransport request, not a task. Required for a transportable package.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does disclose useful behavior: a test-double compatibility pre-check, creation of a class holding local test classes, activation, and the operational constraint that it runs outside batch mode. It omits whether an existing class is overwritten, how errors surface, and how transport_request interacts with package type.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the create action and the parameter roles, then prerequisites and the batch-mode caveat. Nearly every clause earns its place; the batch-mode note is terse but informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter mutation with no annotations and no output schema, the description covers the create/activate sequence and one pre-check, but says nothing about the response shape, the transport_request parameter (required for transportable packages per schema), or failure modes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds only marginal meaning beyond the schema — clarifying that class_name is the global class that holds the local test classes and that test_class_source feeds it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: creates an ABAP Unit test class for a named CDS view. The CDS-view framing implicitly separates it from the sibling CreateUnitTest / CreateProgramUnitTest / CreateFunctionGroupUnitTest family, though it does not name those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the resource type (CDS view unit test) and one prerequisite is stated (the view must support CDS test doubles), but nothing says when to choose this over CreateUnitTest or UpdateCdsUnitTest, or what to do if the class already exists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateClassA

Creates the ABAP class named by class_name in the package named by package_name, in initial state: the class object alone; its source code is written by an update of the class. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
finalNoMark class as final. Default: false
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
abstractNoMark class as abstract. Default: false
class_nameYesClass name.
superclassNoOptional superclass name.
descriptionNoClass description (defaults to class_name).
package_nameYesPackage name.
master_languageNoOptional master/original language for the created object (e.g. "EN", "DE", "ZH"). Defaults to the session language (SAP_LANGUAGE) or EN.
create_protectedNoProtected constructor. Default: false
transport_requestNoTransport request number (required for transportable packages), not a task.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does disclose two non-obvious traits: the object is created with no source code, and in batch mode the call is merely recorded and returns empty content that must be read back by number. It omits permission, transport, and error/failure behavior, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the core creation semantics front-loaded and the batch-mode caveat appended. No filler or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a 10-parameter mutation tool with no annotations and no output schema, the description covers the key facts an agent needs: what exists after the call and how batch answers are retrieved. It could say more about the transport_request prerequisite for transportable packages and what the detail levels return.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every one of the 10 parameters is already documented in the schema. The description reiterates class_name and package_name semantics but adds no extra meaning for the boolean flags, the detail enum, or transport_request (whose 'not a task' caveat lives only in the schema).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Creates) and resource (ABAP class) and pins the scope to class_name/package_name. The clause 'in initial state: the class object alone; its source code is written by an update of the class' implicitly differentiates it from UpdateClass, though the sibling is never named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Conveys that this tool only creates the shell and that source population belongs to a separate update step, which is useful routing information. However, no alternative tool is named explicitly and there is no when-not-to-use guidance (e.g. if the class already exists).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateDataElementB

Create a new ABAP data element in SAP system. Creates the data element object in initial state. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
lengthNoData type length. Usually inherited from domain.
decimalsNoDecimal places. Usually inherited from domain.
data_typeNoData type (e.g., CHAR, NUMC) or domain name when type_kind is 'domain'.CHAR
type_kindNoType kind: 'domain' (default), 'predefinedAbapType', 'refToPredefinedAbapType', 'refToDictionaryType', 'refToClifType'. If not specified, defaults to 'domain'.domain
type_nameNoType name: domain name (when type_kind is 'domain'), data element name (when type_kind is 'refToDictionaryType'), or class name (when type_kind is 'refToClifType')
long_labelNoLong field label (max 40 chars). Applied during update step after creation.
descriptionNoData element description. If not provided, data_element_name will be used.
search_helpNoSearch help name. Applied during update step after creation.
short_labelNoShort field label (max 10 chars). Applied during update step after creation.
medium_labelNoMedium field label (max 20 chars). Applied during update step after creation.
package_nameYesPackage name
heading_labelNoHeading field label (max 55 chars). Applied during update step after creation.
master_languageNoOptional master/original language for the created object (e.g. "EN", "DE", "ZH"). Defaults to the session language (SAP_LANGUAGE) or EN.
data_element_nameYesData element name.
set_get_parameterNoSet/Get parameter ID. Applied during update step after creation.
transport_requestNoTransport request number, not a task. Required for transportable packages.
search_help_parameterNoSearch help parameter. Applied during update step after creation.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose two important behaviors: the object is left in an initial (not usable/activated) state, and the tool cannot run in batch mode. It does not cover failure modes on name collision, permission requirements, or the fact that label/search-help parameters are applied in a second update step.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the core action front-loaded and the two behavioral caveats following. Minimal waste, though "Creates the data element object" slightly restates the opening clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 18-parameter creation tool with no annotations and no output schema, the description covers the essentials (initial state, non-batch) but leaves out what the agent most needs next: that activation via ActivateDataElement is required, and whether transport_request is mandatory for transportable packages.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 18 parameters are already documented in the schema, including the post-creation update-step note on label fields and the transport request caveat. The description adds nothing beyond that, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("Create a new ABAP data element") and a meaningful scope detail ("in initial state"). Siblings like UpdateDataElement, CheckDataElement, and ActivateDataElement are distinguishable by name, but the description does not explicitly contrast with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Runs outside batch mode" is a real usage constraint that tells an agent not to call this inside BatchBegin/BatchEnd. However, it gives no guidance on when to prefer this over UpdateDataElement, or on the prerequisite sequence of create-then-activate that the sibling set implies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateDdlA

Creates the CDS view or classic DDL view named by ddl_name in the package named by package_name, in initial state: the DDL source object, its DDL source code written afterwards. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
ddl_nameYesDDL source name.
descriptionNoOptional description (defaults to ddl_name).
package_nameYesPackage name
master_languageNoOptional master/original language for the created object (e.g. "EN", "DE", "ZH"). Defaults to the session language (SAP_LANGUAGE) or EN.
transport_requestNoTransport request number (required for transportable packages), not a task.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries real weight: it discloses that the object lands in initial (unactivated) state, that source code is written afterwards, and the non-obvious batch semantics (empty answer recorded under the next batch number, read afterwards by number). It omits error/rollback behavior and any hint that transport_request may be required for transportable packages.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, purpose front-loaded, and every clause carries operational information (initial state, source written after, batch recording and retrieval). Nothing is redundant padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter create tool with no annotations and no output schema, the description supplies creation state, ordering of source write, and batch return semantics. It is nearly complete; the remaining gaps are activation follow-up and transport/auth preconditions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description only restates that ddl_name and package_name name the object and package, adding no meaning beyond the schema for those or for detail, master_language, description and transport_request.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Creates) and resource (CDS view or classic DDL view), and ties both required parameters to the action, so it is clearly distinct from UpdateDdl/DeleteDdl/ActivateDdl siblings. It stops short of explicitly naming those siblings as alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'Creates ... in initial state' tells the agent this is for bringing a new DDL object into existence rather than modifying one, and the closing clause explains batch-mode use. There is no explicit when-not guidance or pointer to ActivateDdl/UpdateDdl for follow-up steps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateDomainB

Create a new ABAP domain in SAP system. Creates the domain object in initial state. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
lengthNo(optional) Field length (max depends on datatype)
activateNo(optional) Activate domain after creation (default: true)
datatypeNo(optional) Data type: CHAR, NUMC, DATS, TIMS, DEC, INT1, INT2, INT4, INT8, CURR, QUAN, etc.CHAR
decimalsNo(optional) Decimal places (for DEC, CURR, QUAN types)
lowercaseNo(optional) Allow lowercase input
descriptionNo(optional) Domain description. If not provided, domain_name will be used.
domain_nameYesDomain name.
sign_existsNo(optional) Field has sign (+/-)
value_tableNo(optional) Value table name for foreign key relationship
fixed_valuesNo(optional) Array of fixed values for domain value range
package_nameNo(optional) Package name
conversion_exitNo(optional) Conversion exit routine name (without CONVERSION_EXIT_ prefix)
master_languageNoOptional master/original language for the created object (e.g. "EN", "DE", "ZH"). Defaults to the session language (SAP_LANGUAGE) or EN.
transport_requestNo(optional) Transport request number, not a task. Required for transportable packages.

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses that the domain is created in initial state and that it runs outside batch mode, but it omits permissions, transport behavior, idempotency, failure modes, and what happens when activation is enabled by default.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences with no filler, and the core action is front-loaded. The initial-state and batch-mode notes are relevant and compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a 15-parameter mutation tool with no annotations and no output schema, yet the description is very thin. The schema covers parameters well, but the description does not explain return behavior, lifecycle implications, or key creation prerequisites, leaving important context gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 15 parameters in detail. The description adds no parameter-specific semantics beyond the action itself, which meets the baseline for fully covered schemas but does not add extra guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Create a new ABAP domain in SAP system.' It distinguishes creation from sibling operations such as UpdateDomain, ActivateDomain, and DeleteDomain by specifying that the object is created 'in initial state.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is for creating a new domain, and 'Runs outside batch mode' gives one execution constraint. However, it does not explicitly say when to use this instead of UpdateDomain or ActivateDomain, nor does it state prerequisites or exclusions beyond batch mode.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateFunctionGroupA

Create a new ABAP function group in SAP system. Function groups serve as containers for function modules. When activate is false, recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
activateNoActivate function group after creation. Default: true. Set to false for batch operations.
descriptionNoFunction group description. If not provided, function_group_name will be used.
package_nameYesPackage name
master_languageNoOptional master/original language for the created object (e.g. "EN", "DE", "ZH"). Defaults to the session language (SAP_LANGUAGE) or EN.
transport_requestNoTransport request number, not a task. Required for transportable packages.
function_group_nameYesFunction group name. Up to 26 characters.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It usefully discloses the non-obvious batch-recording behavior when activate is false, but omits what happens if the group already exists, whether the operation is destructive, permission/transport prerequisites, and any failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence, followed by a short clarifying clause and one batch-mode caveat. The batch sentence is slightly dense but every sentence contributes; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool with no annotations and no output schema, the description covers purpose and one behavioral quirk but leaves out creation-side outcomes (return shape, collision handling, transport application). It is usable but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are already documented, and the description adds only marginal semantics by elaborating on the activate=false case that the schema touches on briefly. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a new ABAP function group in SAP system') and adds a definitional clause about function groups being containers for function modules. This clearly separates it from UpdateFunctionGroup, DeleteFunctionGroup, and GetFunctionGroup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The activate=false sentence implies a batch-usage context, giving some when-to-use signal, but there is no explicit routing against siblings (UpdateFunctionGroup for modification, CheckFunctionGroup for validation) and no prerequisites such as package/transport requirements.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateFunctionGroupUnitTestA

Creates the ABAP Unit test classes of the function group named by function_group_name, from test_class_source. They are written to a test include, which is activated with the group. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
test_class_sourceYesABAP source of the local test classes: definitions and implementations, FOR TESTING. Replaces what the include holds.
transport_requestNoTransport request, not a task. Required for a transportable object.
function_group_nameYesFunction group that gets the tests. Must already exist.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does disclose non-obvious behavior: the classes go into a test include that is activated along with the group, and the operation runs outside batch mode. It omits permissions, transport behavior, and reversibility, but the key side effects are stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences with the target object and inputs front-loaded, then the persistence/activation behavior, then the batch-mode constraint. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers destination, activation behavior, and an execution constraint. It does not describe what the call returns (implied only by the detail parameter enum), which is a minor gap given the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all four parameters are already documented in the schema (including the detail enum and the transport_request note). The description only restates that function_group_name names the group and test_class_source supplies the source, adding no syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: creating ABAP Unit test classes for a named function group from source. The mention of the test include and activation makes it clearly distinct from CreateUnitTest/CreateProgramUnitTest, though it doesn't explicitly name those siblings as alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the create-vs-update naming (UpdateFunctionGroupUnitTest exists as a sibling) and by the schema note that the function group must already exist. No explicit when-to-use, ordering (e.g., after CreateFunctionGroup/ActivateFunctionGroup), or alternative is stated in the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateFunctionIncludeA

Create a new ABAP include within an existing function group. Creates the include in initial state. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
descriptionNoOptional description for the include
include_nameYesInclude name.
transport_requestNoTransport request number, not a task. Required for transportable packages.
function_group_nameYesParent function group name

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden yet does add non-obvious traits: the include is created in initial (inactive) state, and the recording/empty-response batch semantics are disclosed. It stops short of stating permission/transport prerequisites or failure conditions (e.g., if the include already exists).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action in the first sentence, then adds the initial-state and batch semantics. Efficient overall, though the batch sentence is somewhat dense jargon that could confuse without batch context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations, so the description must carry context; it covers creation, initial state, and batch recording. Missing only peripheral details (activation follow-up, transport prerequisites, behavior on name collision), which keeps it just under fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters (including the detail enum and transport_request) are already documented in the schema. The description adds no parameter-level detail beyond what is structured; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (create an ABAP include) scoped to an existing function group. Clear what it does; it does not explicitly name UpdateFunctionInclude/DeleteFunctionInclude as alternatives, but the create vs. update/delete intent is unambiguous from the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage (creating a new include inside an existing function group), and the batch-mode sentence gives some context. However there is no explicit when-to-use / when-not-to-use guidance relative to siblings, nor prerequisites (e.g., function group must exist, transport requirements).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateFunctionModuleA

Create a new ABAP function module within an existing function group. Creates the function module in initial state. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
descriptionNoOptional description for the function module
transport_requestNoTransport request number, not a task. Required for transportable packages.
function_group_nameYesParent function group name
function_module_nameYesFunction module name. Up to 30 characters.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the module is created in 'initial state' and explains batch-mode recording semantics in detail—both valuable beyond the schema. It omits permission requirements, duplicate-name error behavior, and transport implications (though transport is covered in the schema).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core purpose. The batch-mode note is longer but relevant. There is no wasted language, though the third sentence could be tightened slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create mutation with no annotations and no output schema, the description covers purpose, initial state, and batch behavior adequately. It leaves error handling and authorization unstated, but the fully documented schema handles all parameter semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with all five parameters documented, so the baseline is 3. The description adds no parameter-level detail beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Create') and resource ('new ABAP function module') scoped 'within an existing function group'. This inherently distinguishes it from sibling creators like CreateFunctionGroup and CreateFunctionInclude, even though it does not name them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or alternative guidance. The phrase 'within an existing function group' implies a prerequisite, but the description never says when to choose this over UpdateFunctionModule or CreateFunctionInclude, nor does it list exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateInterfaceB

Create a new ABAP interface in SAP system. Creates the interface object in initial state. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
descriptionNoInterface description. If not provided, interface_name will be used.
package_nameYesPackage name
interface_nameYesInterface name.
master_languageNoOptional master/original language for the created object (e.g. "EN", "DE", "ZH"). Defaults to the session language (SAP_LANGUAGE) or EN.
transport_requestNoTransport request number, not a task. Required for transportable packages.

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does useful work: it discloses that the object is created in "initial state" and thoroughly explains the batch-mode recording semantics (recorded under next number, empty answer, read back later). It omits permission/error behavior and does not spell out that the object likely needs ActivateInterface afterwards to be usable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action in the first sentence and reserves the second for batch semantics. The batch sentence is dense but each clause carries information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers creation and the unusual batch behavior, but for a 6-parameter mutation with no annotations and no output schema it leaves gaps: the operational meaning of "initial state" (activation requirement), failure/error expectations, and any post-create steps are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (including transport_request and master_language) is already documented in the schema. The description adds no syntax, format, or constraint details beyond that baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Create a new ABAP interface") and adds the resulting state ("initial state"). It implicitly distinguishes itself from GetInterface/UpdateInterface/DeleteInterface siblings via the create verb, but never names them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use vs alternatives, no prerequisites, and no mention that an existing interface should be updated instead. The batch/recordable note is behavioral, not situational guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateMessageClassA

Creates the ABAP message class (T100) named by message_class_name, with its description, in the package named by package_name: a shell whose messages are added afterwards. A message class is in effect once saved. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
descriptionNo(optional) Short description. If not provided, message_class_name is used.
package_nameYesPackage name.
master_languageNo(optional) Master/original language (e.g. "EN", "DE"). Defaults to the session language (SAP_LANGUAGE) or EN.
transport_requestNo(optional) Transport request number, not a task. Required for transportable packages.
message_class_nameYesMessage class name.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does substantial work: it discloses that the class takes effect only once saved and that in batch mode the call is recorded rather than executed, returning empty content read back by number. Missing only permission/error behavior and transport handling, which the schema partially covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what is created and in what package, then adds the shell semantics and the batch caveat. Slightly dense jargon ('Recordable', 'read by number') but every sentence carries non-obvious information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter mutation with no output schema, the description covers what is created, when it becomes effective, and how the batch variant returns data. The one gap is what the normal (non-batch) response contains, though 'terse/full/raw' in the schema partly compensates.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all six parameters including the description fallback, master language default and transport request requirement are already documented in the schema. The description only restates which parameters name the object and package, adding nothing new about them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (creates the ABAP message class, T100) and pins it to the two named inputs. The clause 'a shell whose messages are added afterwards' separates it cleanly from CreateMessageClassMessage, which an agent might otherwise confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains that the class is created empty and messages come afterwards, which implicitly routes the agent to CreateMessageClassMessage as the follow-up. It also flags the batch path (BatchBegin/BatchAnswers). No explicit 'do not use for X' exclusion, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateMessageClassMessageB

Adds the message numbered msgno, with the text msgtext, to the existing ABAP message class (T100) named by message_class_name. Runs outside batch mode.

NameRequiredDescriptionDefault
msgnoYesMessage number (e.g., "001").
msgtextYesMessage text. May contain placeholders &1 &2 &3 &4 (or &).
descriptionNo(optional) Long description for the message.
self_explanatoryNo(optional) Mark the message as self-explanatory (no long text needed). Default: false.
transport_requestNo(optional) Transport request number, not a task. Required for transportable objects.
message_class_nameYesParent message class name.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It adds one useful trait (must run outside batch mode, relevant given the BatchBegin/BatchEnd siblings), but never states whether an existing msgno is overwritten, what permissions are required, or how transport_request interacts with the write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the operation and ending with the batch-mode constraint. No filler, though the parenthetical '(T100)' is a minor technical aside rather than actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers the core operation and one execution constraint. It still leaves open duplicate-handling, failure modes, and whether this is idempotent — gaps that structured fields do not fill.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters are documented in the schema. The description merely restates three of them (msgno, msgtext, message_class_name) without adding format, validation, or behavior detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (adds), the resource (message numbered msgno with text msgtext) and the parent object (existing ABAP message class T100). That is clearly distinct from CreateMessageClass and UpdateMessageClassMessage, though it does not name those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: it targets an *existing* class, so a create-class path is ruled out indirectly. The only explicit constraint is 'Runs outside batch mode', and there is no statement of when to prefer UpdateMessageClassMessage or what happens on a duplicate msgno.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateMetadataExtensionB

Create a new ABAP Metadata Extension (DDLX) in SAP system. Creates the metadata extension object in initial state. Runs outside batch mode.

NameRequiredDescriptionDefault
nameYesMetadata Extension name
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
activateNoActivate after creation. Default: true
descriptionNoDescription
package_nameYesPackage name
master_languageNoOptional master/original language for the created object (e.g. "EN", "DE", "ZH"). Defaults to the session language (SAP_LANGUAGE) or EN.
transport_requestNoTransport request number, not a task

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With zero annotations the description carries the full burden. It does disclose two useful traits beyond the schema – the object lands in initial (inactive) state and the call runs outside batch mode (relevant given the BatchBegin/BatchEnd siblings) – but it says nothing about transport/permission requirements, name-collision behavior, or what the caller gets back on success.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and object type. There is mild redundancy between 'Create a new ABAP Metadata Extension' and 'Creates the metadata extension object in initial state', so it is efficient rather than exemplary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutating tool with no annotations and no output schema, the description covers what it creates and its initial state but never indicates the response shape or the activation outcome. The detail enum in the schema partly compensates for return-value ambiguity, keeping this at minimum-viable rather than deficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every one of the seven parameters (including the detail enum and the 'not a task' transport note) is already documented in structured data. The description adds no parameter-level meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (create ABAP Metadata Extension / DDLX) and pins it to a recognizable SAP object type, which separates it from the many other Create* siblings. It does not, however, explicitly route away from adjacent tools like CheckMetadataExtension or UpdateMetadataExtension, so the differentiation is only implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the required package_name plus an optional transport_request signals 'new object in an existing package', and the default activate=true implies you get a live object unless you opt out. There is no explicit guidance on when to prefer CheckMetadataExtension first, or when to create inactive and activate later.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreatePackageB

Create a new ABAP package in SAP system. Packages are containers for development objects and are essential for organizing code. When the connection is HTTP, recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
descriptionNoPackage description. If not provided, package_name will be used.
package_nameYesPackage name.
package_typeNoPackage type: 'development' (default) or 'structure'development
super_packageYesParent package name. Required for structure packages.
record_changesNoEnable change recording for the package. Required for transportable packages. Default: false.
master_languageNoOptional master/original language for the created object (e.g. "EN", "DE", "ZH"). Defaults to the session language (SAP_LANGUAGE) or EN.
transport_layerNoTransport layer. Required for transportable packages.
transport_requestNoTransport request number, not a task. Required if the package is transportable.
software_componentNoSoftware component. If not provided, SAP will set a default.
application_componentNoApplication component (optional, e.g., BC-ABA)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden for a mutating tool, yet it says nothing about permissions, idempotency/duplicate handling, transportability consequences, or failure modes. The only behavioral content is a generic and awkwardly worded batch/HTTP recording note that is boilerplate about the batching subsystem rather than about this tool's side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is correctly front-loaded in the first sentence, but nearly half the text is a convoluted sentence about HTTP/batch recording ("recorded under the next number and answers with empty content") that is hard to parse and irrelevant to most callers. That sentence costs more than it earns.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description gives a clear tool purpose while the rich parameter schema, including transport-related parameters, fully covers inputs and expected defaults. Against a rich 11-parameter schema with 100% coverage, the description is proportionate without needing to restate parameter details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every parameter carries a meaningful description (transport_layer, transport_request, record_changes, detail, etc.), so the schema does the heavy lifting. The description adds no parameter semantics beyond that; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb and resource ("Create a new ABAP package") plus a short gloss on what a package is. It is clearly distinguishable from GetPackage/UpdatePackage/DeletePackage by the verb, though it never explicitly contrasts with CheckPackage or explains ordering relative to those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this versus alternatives, no prerequisites (e.g. that a parent/super package or transport request must already exist for transportable packages), and no note on what to do if the package already exists. Usage must be inferred entirely from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateProgramA

Create a new ABAP program (report) in SAP system. Creates the program object in initial state. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
applicationNoApplication area (e.g., 'S' for System, 'M' for Materials Management). Default: '*'
descriptionNoProgram description. If not provided, program_name will be used.
package_nameYesPackage name
program_nameYesProgram name.
program_typeNoProgram type: 'executable' (Report), 'include', 'module_pool', 'function_group', 'class_pool', 'interface_pool'. Default: 'executable'
master_languageNoOptional master/original language for the created object (e.g. "EN", "DE", "ZH"). Defaults to the session language (SAP_LANGUAGE) or EN.
transport_requestNoTransport request number, not a task. Required for transportable packages.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose two real traits: the object is created inactive ('initial state') and in batch mode it returns empty content whose answer is fetched later by number. It omits authorization needs, what happens if the program already exists, and confirmation that transport_request is needed for transportable packages.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence and the second sentence adds the lifecycle state. The batch-mode sentence is dense and slightly jargon-heavy ('recorded under the next number'), but it carries non-obvious information and is not padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter creation tool with no output schema and no annotations, the description covers what is created, its initial state, and the batch-mode return contract. What remains missing is the activation follow-up and error/duplicate handling, which is a modest but real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with enums documented for detail and program_type, so the schema already carries parameter meaning. The description adds nothing param-specific (e.g., no guidance on master_language vs application defaults), so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a new ABAP program (report)') and adds a scope qualifier ('creates the program object in initial state'), which implicitly separates it from UpdateProgram and from CreateProgramUnitTest. It does not name a sibling explicitly, so an agent must infer the Create/Update/Activate family relationships.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied from the verb - there is no statement of when to use this versus CreateProgramUnitTest, UpdateProgram, or how it relates to ActivateProgram (only the hint 'initial state'). The batch-mode clause describes recording behavior rather than tool selection, though it does tell the agent this call can be deferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateProgramUnitTestA

Creates the ABAP Unit test classes of the report named by program_name, from test_class_source. They are written to a test include, which is included into the report, and the report is activated. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
program_nameYesReport that gets the tests. Must already exist.
test_class_sourceYesABAP source of the local test classes: definitions and implementations, FOR TESTING. Replaces what the include holds.
transport_requestNoTransport request, not a task. Required for a transportable object.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden well: it discloses that test classes are written to a test include, that the include is added to the report, that the report is activated, and that execution occurs outside batch mode. It still does not mention permission requirements, failure behavior, or reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tight sentences, front-loads the core action and inputs, and adds only high-value behavioral details. There is no repetition or wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description supplies the key mutation side effects (test include creation, inclusion into the report, activation) and the execution mode. Given that the schema covers parameters and there is no output schema, this is largely complete, though error/overwrite semantics are only indirectly covered by the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all four parameters including the 'detail' enum and 'transport_request'. The description names program_name and test_class_source but adds no parameter meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Creates'), a specific resource ('ABAP Unit test classes of the report'), and names the key inputs ('program_name', 'test_class_source'). It also distinguishes the tool from generic unit-test creation by tying it to a report, a test include, and report activation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the context in which the tool operates ('of the report', 'Runs outside batch mode'), but does not explicitly say when to use it instead of siblings such as CreateUnitTest, UpdateProgramUnitTest, or RunProgramUnitTest. Usage is implied rather than routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateServiceBindingA

Create an OData service binding (V2 or V4, UI or Web API) for a service definition, in initial state. When activate is false, recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
activateNoActivate the service binding after create, then read its service group. Default: true.
descriptionNoOptional description. Defaults to service_binding_name when omitted.
package_nameYesABAP package name.
service_nameNoPublished service name. Default: service_binding_name if omitted.
binding_variantNoService binding variant. ODATA_V4_UI = OData V4 for Fiori Elements, ODATA_V4_WEB_API = OData V4 Web API, ODATA_V2_UI = OData V2 for Fiori Elements, ODATA_V2_WEB_API = OData V2 Web API.ODATA_V4_UI
master_languageNoOptional master/original language for the created object (e.g. "EN", "DE", "ZH"). Defaults to the session language (SAP_LANGUAGE) or EN.
response_formatNoAccepted for backward compatibility; no longer affects the answer, which is always the structured write result.xml
service_versionNoPublished service version. Default: 0001.
transport_requestNoOptional transport request for transport checks.
service_binding_nameYesService binding name.
service_definition_nameYesReferenced service definition name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and delivers real behavioural detail beyond the schema: the object is created in initial (inactive) state, activate=true triggers a post-create read of the service group, and activate=false switches the tool into batch-recording mode where the call returns empty content and must be read back by number. It omits error/permission behaviour and the normal (non-batch) return shape, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the core purpose and variant scope front-loaded before the conditional behaviour. The second sentence is dense and slightly cryptic ("recordable: in batch mode a call is recorded under the next number"), costing it a point on readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter mutation tool with no annotations and no output schema, the definition covers the creation and activation lifecycle but says nothing about the normal return value, failure modes, or the transport/permission requirements implied by transport_request. Adequate but with clear gaps an agent would discover only by calling it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains every parameter and the baseline is 3. The description still earns above baseline because it explains the runtime consequence of the activate flag (batch recording, empty answer, read-by-number), which the schema's one-line activate description does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ("Create an OData service binding") and narrows the scope by enumerating the four variants (V2/V4, UI/Web API) and the fact that it is created "in initial state". It stops short of naming the sibling it is not — UpdateServiceBinding and ActivateServiceBinding are adjacent operations an agent could confuse it with — so an agent must infer the create-vs-update boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by "in initial state" plus the activate flag, which together tell the agent this is a create-then-optionally-activate step. However, there is no explicit routing guidance against the many neighbouring tools (UpdateServiceBinding, ActivateServiceBinding, CreateServiceDefinition, ListServiceBindingTypes), and no stated prerequisites such as an existing service definition or a transport request.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateServiceDefinitionA

Create a service definition that exposes CDS views as an OData service, in initial state. When activate is false and source_code is absent, recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
activateNoActivate service definition after creation. Default: true.
descriptionNoService definition description. If not provided, service_definition_name will be used.
source_codeNoService definition source code (optional). If not provided, a minimal template will be created.
package_nameYesPackage name
master_languageNoOptional master/original language for the created object (e.g. "EN", "DE", "ZH"). Defaults to the session language (SAP_LANGUAGE) or EN.
transport_requestNoTransport request number, not a task. Required for transportable packages.
service_definition_nameYesService definition name.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It usefully discloses that the object is created in initial state (inactive) and explains batch-mode recording semantics with empty responses, but omits permission requirements, failure modes, and the fact that activation is required afterwards.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in one clear sentence, but the second sentence is dense and awkwardly phrased ('recordable: in batch mode a call is recorded under the next number and answers with empty content'), requiring re-reading. It is short overall but not optimally structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with eight parameters and no output schema, the description covers creation state and the notable batch edge case that an agent would otherwise miss. Remaining gaps (post-creation activation, transport handling) are partly covered by schema field descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining the interaction between activate=false and absent source_code and the resulting batch recording behavior, which is meaningful parameter-level semantics not captured in individual field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (Create a service definition) and adds scope: exposes CDS views as an OData service, created in initial state. This distinguishes it from ActivateServiceDefinition and UpdateServiceDefinition by the 'initial state' qualifier, though it never names alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a conditional usage note for the batch/recordable case when activate is false and source_code is absent. However, it gives no explicit guidance on when to choose this versus UpdateServiceDefinition or ActivateServiceDefinition, or on prerequisites such as transportable packages.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateStructureC

Create a new ABAP structure in SAP system. Creates the structure object in initial state. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
fieldsYesDoes not reach creation — the shipped create endpoint posts a metadata document only. Use UpdateStructure (with ddl_code) after creating to set the fields.
activateNoActivate structure after creation. Default: true. Set to false for batch operations (activate multiple objects later).
includesNoDoes not reach creation — see `fields`. Use UpdateStructure (with ddl_code) after creating to set includes.
descriptionNoStructure description. If not provided, structure_name will be used.
package_nameYesPackage name
structure_nameYesStructure name.
master_languageNoOptional master/original language for the created object (e.g. "EN", "DE", "ZH"). Defaults to the session language (SAP_LANGUAGE) or EN.
transport_requestNoTransport request number, not a task. Required for transportable packages.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full behavioral burden. It does say the object is created in initial state and runs outside batch mode, but it omits the critical caveat that the fields/includes parameters do not reach creation and require a follow-up UpdateStructure call. That caveat appears only in the schema, leaving the description materially incomplete for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and outcome. There is no wasted text, though the terseness leaves out important operational detail that would earn a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter create tool with no annotations and no output schema, the description should mention that fields are not applied at creation and that UpdateStructure is required afterward. The schema does contain that caveat, but the description itself leaves a critical gap an agent would only discover by reading the nested parameter descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains all nine parameters thoroughly, including the crucial 'fields does not reach creation' note. The description adds no parameter meaning beyond the schema, which is the baseline-3 case for full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Create a new ABAP structure'. It also clarifies the initial-state outcome, which distinguishes it from UpdateStructure or ActivateStructure. However, it does not explicitly name those siblings to route the agent, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives only 'Runs outside batch mode' as contextual guidance. It never says when to choose CreateStructure versus UpdateStructure or ActivateStructure, nor does it warn that fields must be set later via UpdateStructure. The agent must infer usage from the schema alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateTableB

Create a new ABAP table in SAP system. Creates the table object in initial state. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
table_nameYesTable name.
descriptionNoDoes not reach creation — the shipped create endpoint has no description field of its own. Use UpdateTable (with ddl_code) after creating to set the DDL source, which carries the description.
package_nameYesPackage name
master_languageNoOptional master/original language for the created object (e.g. "EN", "DE", "ZH"). Defaults to the session language (SAP_LANGUAGE) or EN.
transport_requestNoTransport request number, not a task. Required for transportable packages.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It usefully states that the table is created in initial state and explains batch-mode recording semantics, but it omits permission requirements, transport behavior, and whether activation is needed afterward.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and avoids unnecessary filler. The batch-mode sentence is longer but provides relevant behavioral context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has six parameters and rich schema descriptions, but no annotations and no output schema. The description covers the basic create action and initial state, yet does not explain return values or the likely need to activate the table afterward.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameter semantics are already well documented. The description itself adds no parameter-level meaning beyond what the schema provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: "Create a new ABAP table in SAP system." It is clearly a table-creation tool, but it does not explicitly differentiate itself from nearby siblings such as CreateStructure or CreateDdl.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not state when to use this tool instead of alternatives like UpdateTable, CreateStructure, or ActivateTable. The batch-mode sentence describes invocation behavior, not selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateTransportB

Create a new ABAP transport request in SAP system for development objects. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
ownerNoTransport owner (optional, defaults to current user)
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
descriptionYesTransport request description (mandatory)
target_systemNoTarget system for transport (optional, e.g., 'PRD', 'QAS'). If not provided or empty, uses 'LOCAL'
transport_typeNoTransport type: 'workbench' (cross-client) or 'customizing' (client-specific)workbench

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does add genuine behavioral context about batch mode: the call is recorded, returns empty content, and is read back by number after the batch ends. It omits other important traits for a mutating tool — permissions needed, whether an empty/duplicate request is created, and what the normal (non-batch) response contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, purpose front-loaded, no filler. The second sentence is dense and slightly cryptic ('Recordable', 'under the next number') but each part conveys real information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should indicate what a successful call returns — presumably the transport number/ID — but it only describes the anomalous batch case where content is empty. For a five-parameter create operation the behavioral picture is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with owner, description, target_system, transport_type and detail all documented including defaults and enum meanings, so the baseline is 3. The description adds nothing about parameters beyond what the schema already says — notably it never mentions target_system defaulting to 'LOCAL' or the transport_type split.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Create a new ABAP transport request ... for development objects', which is concretely distinguishable from ListTransports/GetTransport/ReadTransportObjects. It does not, however, distinguish itself from the closely related CreateTransportTask sibling, so an agent must infer request-vs-task semantics on its own.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the phrase 'for development objects'. There is no explicit when-to-use or when-not, and no routing to CreateTransportTask or AddTransportObject for follow-up steps. The batch-mode note hints at one usage context (batch recording) but does not frame it as a selection rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateTransportTaskA

Creates a task under the existing transport request named by transport_number, owned by the user named by target_user, of the type task_type. The task is itself a request resource — it reads, writes and releases like one — and is what adding and removing an object entry address, since a request's objects live on its tasks. target_user is required: it names the task's owner, and an empty owner is refused with SCTS_ADT_MSG 009. The task is typed Development/Correction (S) by default, because an Unclassified task refuses an added object on premise with SCTS_ADT_MSG 009 / TK127. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
task_typeNoS — Development/Correction (default), R — Repair of an object this system does not own, X — leave it Unclassified, as the server creates it. An Unclassified task refuses AddTransportObject on premise (TK127).S
target_userYesThe user the task belongs to: an SAP user id (sent in upper case), e.g. DEVELOPER. Required — the server will not choose one, and naming another user is how a task is made for somebody else.
transport_numberYesThe REQUEST to create the task under — never another task. The number that comes back is the task, and that is what AddTransportObject, RemoveTransportObject and ReadTransportObjects address afterwards.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the burden and does it well: it names the failure mode for an empty owner (SCTS_ADT_MSG 009), explains why S is the default (Unclassified refuses AddTransportObject with TK127), and discloses batch-mode recording with empty content read back by number. It does not state authorization requirements or whether the task is immediately released/visible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and its three inputs, then layered with the object-model note, the error/default rationale, and batch behavior. Dense but every sentence carries information; only mild duplication with the schema descriptions keeps it off a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with zero annotations and no output schema, it covers prerequisites, required ownership, type selection consequences, error codes, and the returned identifier. The remaining hole is permission/auth requirements and lock semantics, which an agent invoking a create on a transport system might need.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema's own parameter descriptions already cover target_user's upper-casing/required-ness, transport_number being a request not a task, and the S/R/X semantics including TK127. The description restates essentially the same facts, so it adds little beyond the structured data; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a precise verb (Creates), resource (a task), and the two scoping keys (transport_number as the parent REQUEST, target_user as owner, task_type as the flavor). It also disambiguates the object model — 'a request's objects live on its tasks' — which separates it from CreateTransport and the Add/RemoveTransportObject siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It establishes the precondition (the transport request must already exist, and transport_number is 'never another task') and explains that this is the step preceding AddTransportObject/RemoveTransportObject, plus how it behaves inside a batch. No explicit 'do not use when' beyond the request-vs-task exclusion, so it stops short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

CreateUnitTestA

Creates the ABAP Unit test classes of the ABAP class named by class_name, from test_class_source. They are written as the class's local test classes, and the class is activated. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesClass that holds the tests. Must already exist.
test_class_sourceYesABAP source of the local test classes: definitions and implementations, FOR TESTING. Replaces what the include holds.
transport_requestNoTransport request, not a task. Required for a transportable object.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does disclose meaningful traits: it creates local test classes, activates the owning class, and runs outside batch mode. It does not explicitly state overwrite/replacement behavior in the description itself, though the schema's test_class_source parameter notes replacement of the include contents.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tight sentences, front-loaded with the core action and resource. Every clause contributes useful information about output form, activation side effect, and execution mode.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers what is created, where it is written, the activation side effect, and the batch-mode constraint. It does not describe return values or error behavior, but the core invocation context is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already defines all four parameters clearly, including class_name, test_class_source, detail, and transport_request. The description names class_name and test_class_source but adds no additional parameter-level meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Creates') and names the exact resource ('ABAP Unit test classes of the ABAP class named by class_name') and source. It also clarifies that the created tests become the class's local test classes, which distinguishes it from broader unit-test tools such as CreateProgramUnitTest or UpdateUnitTest.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The create semantics imply usage versus update/delete siblings, but the description does not explicitly say when to choose this tool over alternatives like UpdateUnitTest, UpdateLocalTestClass, or CreateProgramUnitTest. The class-activation and non-batch requirements are stated, which helps contextualize use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugBatchBeginA

[read-only] [debug] Starts the debugger batch on the stopped ABAP debuggee, else at the AMDP break. In the debugger batch each call of step, step to line, stack, variables, child variables, stack position or setting a variable at the ABAP debuggee, and of step over, continue or the data preview of a table variable at the AMDP break, is recorded under the next number, starting at 1, and answers with empty content. Answers the state_handle: over Streamable HTTP send it as the state_handle argument of every call of the batch (or in the x-mcp-state-handle header).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well: it discloses that recorded calls return empty content, that recording starts at 1, and that the tool returns a state_handle with instructions for Streamable HTTP. It does not cover whether the debuggee state changes or how to stop the batch, but the core behavioral traits are clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main action and every sentence carries relevant information. However, the second sentence is long and nested, making it harder to parse quickly; a more structured format would improve readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description is fairly complete: it explains the start condition, the recording behavior, the empty responses, and the state_handle return. It could mention how to end the batch or what the recorded numbers are used for, but it covers enough to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero input parameters, so the baseline is 4. The description adds useful context about the state_handle returned and how to pass it in subsequent calls, though this is not an input parameter for this tool itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Starts the debugger batch on the stopped ABAP debuggee, else at the AMDP break.' This clearly distinguishes it from siblings like DebugBatchEnd and BatchBegin by naming the exact debug context and starting action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by explaining that calls made during the batch are recorded, but it does not explicitly say when to choose this over alternatives like DebugStep or AmdpDebugStep, nor does it state prerequisites beyond the debuggee being stopped.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugBatchEndB

[read-only] [debug] Sends the recorded calls of the stopped debuggee in one envelope on the session the batch started on — the ABAP debuggee's session, or the AMDP session's command session — and ends the debugger batch. Splits SAP's answer into each call's parts and answers the number of recorded calls, of requests sent and of parts received; when sending fails, the parts received differ from the requests sent or the answer fails to split, answers that error, and every number of the batch then answers it.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description does carry the burden and discloses useful behavior: the read-only/debug tags, which session is used, how SAP's answer is split, and how errors propagate to every returned count. However, it labels the operation read-only while also saying it 'ends the debugger batch', an internal tension, and it does not state the required batch state or side effects clearly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sprawling sentence with nested clauses about splitting answers and error propagation, making the core action hard to extract. Only the leading '[read-only] [debug]' tags are front-loaded; the actual purpose is buried mid-sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It explains the return counts and failure behavior, which is helpful given there is no output schema, but it leaves lifecycle context unclear. In particular it does not say that a debug batch must have been started first or how this relates to DebugBatchBegin, BatchEnd and BatchAnswers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and an empty schema, so there is no parameter semantics to explain. Baseline 4 applies; the description does not need to add parameter detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it sends the recorded calls of the stopped debuggee in one envelope and ends the debugger batch. That is clearly distinguishable from a generic 'BatchEnd' or 'DebugBatchBegin', although it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance, and no alternatives such as DebugBatchBegin, BatchEnd or BatchAnswers are named. Preconditions are only implied by phrases like 'the stopped debuggee' and 'the session the batch started on', leaving the agent to infer the lifecycle.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugCreateMemorySnapshotA

[read-only] [debug] Writes a memory snapshot of the stopped debuggee and answers the file written. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. It does disclose the key side effect (a file is written and its path is returned) and the batch-mode restriction, but says nothing about where the file lands, its size/overhead, or whether the debuggee state is otherwise untouched despite the "[read-only]" tag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short clauses, with the mode tags and the core action front-loaded; nothing is wasted. The bracket tags are a minor stylistic cost rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter debug utility with no output schema, the description covers the action, the returned artifact, and the execution-mode constraint. Remaining gaps (file location, cleanup) are small relative to the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including a documented enum for `detail`, so the schema already does the explanatory work. The description adds no meaning about `state_handle` or the detail levels, making the baseline 3 correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: writes a memory snapshot of the stopped debuggee and returns the file written. It is clearly distinguishable from the read-side siblings (MemorySnapshotGet/List/Delta), though it never names them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"of the stopped debuggee" gives the precondition (a stopped debug session) and "Runs outside batch mode" gives an explicit when-not constraint, which usefully separates it from the DebugBatch* tools. It stops short of naming alternatives such as MemorySnapshotList or MemorySnapshotGet.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugCreateWatchpointA

[read-only] [debug] Watches a variable of the stopped debuggee: it stops when the variable changes, optionally under a condition. Runs outside batch mode.

NameRequiredDescriptionDefault
nameYesVariable to watch; a path reaches a component.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
conditionNoStops only when this ABAP condition holds.
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does disclose the key traits: it requires a stopped debuggee, is unavailable in batch mode, and has a stop-on-change effect with conditional gating. It omits whether the watchpoint persists after continuing and that it must later be removed via the delete tool, leaving lifecycle behavior implicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with the effect and the batch-mode caveat front-loaded; nothing is wasted. The leading [read-only] [debug] tags add mild noise, and the read-only tag sits oddly on a tool that creates debugger state.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Prerequisites and mode restriction are covered, which matters for a 4-parameter mutation of debugger state with no output schema. However, the description never says what a successful call yields (presumably a watchpoint identifier needed by DebugDeleteWatchpoint) or how it relates to the list/delete watchpoint tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all four parameters including the detail enum and the state_handle are already documented. The description only restates the variable and optional condition, adding no syntax, path, or scope guidance beyond the schema — baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource — it watches a variable of the stopped debuggee — and explains the observable effect (stops when the variable changes, optionally under a condition). It is clearly distinguishable from DebugListWatchpoints/DebugDeleteWatchpoint by what it does, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear precondition (a stopped debuggee) and an explicit exclusion ("runs outside batch mode"), which tells the agent when this tool is applicable and when it is not. No alternative tool is named (e.g. list/delete watchpoints, or stepping for fine-grained control), so it falls short of the 5 bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugDeleteBreakpointA

[read-only] [debug] Removes one breakpoint of a debug session by its id; the rest of the set stays armed. An id outside the session's set is refused. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
state_handleYesOpaque handle identifying the server-held state this operation works on.
breakpoint_idYesBreakpoint id.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description usefully discloses that only one breakpoint is removed, the rest stay armed, and an unknown id is refused. But the '[read-only]' tag is misleading for a removal operation and it does not clarify permissions, reversibility, or response behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences and front-loads the operation: removing one breakpoint by id. The remaining sentences add scope and constraints without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter debug mutation with no annotations or output schema, the description covers the key behavior: one breakpoint removed, rest stay armed, invalid ids refused, and batch mode excluded. It could still say more about return behavior or reversibility, but it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is fully 100%, so the schema already defines state_handle, breakpoint_id, and detail. The description adds meaningful semantics for breakpoint_id by saying an id outside the session's set is refused.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: removing one breakpoint of a debug session by id. It also clarifies scope by noting that the rest of the breakpoint set stays armed, which distinguishes it from set/list operations without needing sibling names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one useful usage constraint by saying the tool runs outside batch mode and that an id outside the session's set is refused. However, it does not explicitly say when to choose this tool over adjacent debug tools such as DebugSetBreakpoints or DebugListBreakpoints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugDeleteWatchpointB

[read-only] [debug] Removes a watchpoint. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
state_handleYesOpaque handle identifying the server-held state this operation works on.
watchpoint_idYesWatchpoint id.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. It does add genuine context ('Runs outside batch mode') and a classification tag, but the '[read-only]' tag sits in tension with the destructive verb 'Removes' and is never reconciled, and nothing is said about idempotency, error behavior for a nonexistent watchpoint_id, or whether state_handle must come from a live debug session.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two bracketed tags plus a single short sentence, with the identifying verb front-loaded and the batch-mode caveat second. Efficient, though the '[read-only]' tag is arguably noise given the mutation it describes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With three parameters, no output schema, and no annotations, the description should do more: it says nothing about the return value (even a note on whether the deleted watchpoint is echoed back), nor about failure modes for an invalid id or expired state_handle. It is minimally viable but leaves real gaps for a stateful debugger mutation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including a documented enum for 'detail' and an explanation of the opaque 'state_handle'. The description adds nothing beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Removes a watchpoint'), and the resource noun itself separates it from the breakpoint siblings (DebugDeleteBreakpoint) and from DebugCreateWatchpoint / DebugListWatchpoints. It stops short of explicitly routing against those siblings, but an agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Runs outside batch mode' is a real usage constraint that tells the agent not to call this inside a DebugBatchBegin/BatchEnd session. However, there is no explicit when-to-use clause, no statement that a watchpoint must first exist (via DebugCreateWatchpoint), and no guidance on what to do with an unknown or stale watchpoint_id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugGetMemorySizesA

[read-only] [debug] Memory the stopped debuggee uses. Needs a stopped debuggee. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the safety burden itself by tagging the tool [read-only] and [debug] and stating the state precondition (stopped debuggee) plus the operational constraint (not usable in batch mode). It stops short of saying what happens when the precondition is unmet (error vs. empty result) or how expensive the call is.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, front-loaded sentences with no filler; the read-only and debug tags lead, then the purpose, then the two constraints. Slight redundancy between the tags and the terse prose keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a diagnostic getter with no output schema, the description never indicates what the returned memory figures look like (which memory categories, units, or shape). Combined with no guidance relative to the snapshot tools, an agent can invoke it but cannot anticipate the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are documented in-schema, including the enum for detail with its three levels. The description adds nothing about state_handle or detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description conveys the resource precisely: memory consumption of the currently stopped debuggee. There is no explicit verb ("Memory the stopped debuggee uses" is a noun phrase), and it does not distinguish itself from sibling memory tools such as DebugCreateMemorySnapshot, MemorySnapshotGet, or MemorySnapshotList.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Needs a stopped debuggee" and "Runs outside batch mode" are concrete preconditions that tell the agent when the call is valid. It does not, however, say when to prefer this over the snapshot siblings (MemorySnapshotList / DebugCreateMemorySnapshot), which is the main remaining ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugGetStackA

[read-only] [debug] Call stack of the stopped debuggee of the debug session named by state_handle, each frame with its ADT object address and its technical place. Needs a stopped debuggee. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no structured annotations, the description supplies the key behavioral facts itself: it is read-only, requires a stopped debuggee, is not used in batch mode, and returns frames with ADT object addresses and technical places. It does not discuss error behavior if the debuggee is not stopped, but the main operational constraints are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loads the key tags and purpose. Every sentence contributes either the action, the return shape, or an operational constraint, with no wasted wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a debugger tool with no output schema, the description does a good job of stating what is returned and the necessary precondition. It leaves out some edge-case behavior, such as what happens when no stopped debuggee exists, but is otherwise complete enough to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the detail enum and state_handle are already well documented. The description adds only that state_handle refers to the debug session, while it does not explain the detail levels beyond what the schema provides, so it stays at the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: retrieving the call stack of the stopped debuggee for a debug session identified by state_handle. It clearly distinguishes this from sibling debug tools such as DebugGetVariables or DebugListBreakpoints by naming the exact debug artifact returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear preconditions: the debuggee must be stopped, and the tool runs outside batch mode. It does not explicitly name alternatives or explain when to prefer a different debug tool, but the context is specific enough for an agent to select it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugGetVariablesA

[read-only] [debug] Variables of the stopped debuggee, by name or as members of a parent. Needs a stopped debuggee. Runs outside batch mode.

NameRequiredDescriptionDefault
namesNoVariables by name; a path reads a component or a table row.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
parentsNoInstead of names: members of these scopes, objects or tables.
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does so reasonably: it discloses read-only nature, the stopped-debuggee prerequisite, and the batch-mode restriction. It omits failure behavior (e.g., what happens if the debuggee is not stopped) and any hint about response shape, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the read-only/debug tags and the core purpose, followed by preconditions. No filler; every clause conveys actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read tool with a fully described schema and no output schema, the description covers the essential precondition and mode. The detail parameter in the schema explains return granularity, so the missing return-value discussion is largely compensated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all four parameters including the detail enum are fully documented in the schema. The description only echoes the names-vs-parents distinction already present in the schema, adding little beyond baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — retrieving variables of a stopped debuggee — and clarifies the two access modes (by name vs. as members of a parent), which separates it from DebugSetVariable. It never names a sibling or an explicit alternative, so it lacks the differentiating routing language of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete preconditions: a stopped debuggee is required and it must run outside batch mode. That's useful operating context, but there is no guidance on when to prefer names vs. parents beyond the schema, and no exclusion pointing to related tools like DebugGetStack.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugListBreakpointsB

[read-only] [debug] Breakpoints a debug session armed. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No structured annotations exist, so the description carries the full burden; the inline "[read-only]" tag plus "Runs outside batch mode" do disclose safety and a mode restriction. It says nothing about whether it mutates armed state, what happens with a stale state_handle, or whether the result includes line numbers versus raw addresses.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short fragments with the mode restriction and read-only tag front-loaded — nothing extraneous. The telegraphic, verbless phrasing is efficient but costs a little clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should characterize the returned breakpoint records (fields, ordering, empty-result behavior) and it does not. For a small two-parameter read tool with a fully specified schema, this is adequate but leaves a clear gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including an enum for detail, so the schema already documents both parameters fully. The description adds no extra meaning about state_handle lifetime or how detail levels affect the breakpoint payload, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The fragment "Breakpoints a debug session armed" names the resource and its scope, but never states the verb — the agent must infer "list" from the tool name. It does not distinguish itself from DebugListWatchpoints, which returns a different collection from the same debug session.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Runs outside batch mode" is a real precondition that tells the agent this cannot be invoked between BatchBegin/BatchEnd. There is no guidance on when to prefer this over DebugSetBreakpoints, DebugDeleteBreakpoint, or DebugListWatchpoints, so the usage boundary is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugListWatchpointsB

[read-only] [debug] Watchpoints of the stopped debuggee. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description self-declares read-only via the [read-only] tag and discloses the batch-mode exclusion and stopped-debuggee precondition, which is genuine behavioral context. It does not describe permissions, state_handle lifecycle, or what a returned watchpoint contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short bracketed/fragment clauses, front-loaded with the safety tag and domain, with no wasted text. The trade-off is that the terseness borders on under-specification rather than pure efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description ideally would hint at what a listed watchpoint looks like and how the detail level affects it. For a simple read-only list with fully documented params, it is adequate but leaves the return shape and session requirements implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (detail enum and state_handle) are fully documented in the schema, establishing the baseline of 3. The description adds nothing about parameter meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource — watchpoints — of a stopped debuggee, which cleanly separates it from the sibling DebugListBreakpoints (breakpoints) and DebugCreateWatchpoint/DebugDeleteWatchpoint. The verb is only implied by the tool name and the noun-phrase fragment, so it is clear but not stated as an explicit action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"of the stopped debuggee" implies the precondition that a debug session must be paused, and "Runs outside batch mode" excludes one context. However, it never explicitly names alternatives (e.g. DebugListBreakpoints for breakpoints) or states when to prefer this over them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugSetBreakpointsA

[read-only] [debug] Adds breakpoints to a debug session — a line, an exception class, an ABAP statement or a message; a line breakpoint may carry a condition — and answers the whole set placed, this call's refusals each with its breakpoint and reason, earlier breakpoints that dropped out of the set, and any answer row left unpaired with a breakpoint. Its breakpoints are one set, shared by every IDE of the same SAP user (in user mode, debugging the same request user; in terminal mode, whatever its ids), and each change rewrites that set as a whole. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
breakpointsYesBreakpoints: a line, an exception class, an ABAP statement or a message; a line breakpoint may carry a condition.
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses the shape of the answer (whole set placed, per-call refusals with breakpoint and reason, breakpoints dropped from the set, unpaired answer rows) and the cross-IDE shared-set semantics with whole-set rewrite on each change. The only weakness is the "[read-only]" tag on a tool that visibly mutates debug session state, which could mislead an agent about side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and nothing is filler, but the first sentence is a heavily nested run-on that packs return-value details into the purpose statement; splitting it would improve scanability without losing content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by describing the response contents in detail, plus the sharing model and batch-mode exclusion. It still leaves open how a state_handle is obtained and whether breakpoints survive session teardown, which matters for a stateful debugger tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every field including the detail enum and the per-kind breakpoint fields. The description restates the breakpoint-kind taxonomy but adds no new semantics for state_handle or for the terse/full/raw trade-off, so it stays at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Adds breakpoints to a debug session") and enumerates the four breakpoint kinds plus the optional condition, so the agent knows exactly what it creates. It never names its nearest siblings (DebugDeleteBreakpoint, DebugListBreakpoints, AmdpDebugSetBreakpoints), so the differentiation is inferable from the verb rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than declared: "Runs outside batch mode" tells the agent one constraint, and the shared-set semantics hint at when this is the right tool, but there is no explicit routing to DebugDeleteBreakpoint/DebugListBreakpoints or to the AMDP variant, and no stated prerequisites for debug session state.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugSetSettingsA

[read-only] [debug] Changes the debugger settings at the current stop and answers the settings in force; a field left out keeps its value. The debug session applies them again after each later attach. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
state_handleYesOpaque handle identifying the server-held state this operation works on.
background_rfcNoDebugs background RFC calls.
system_debuggingNoSteps into system programs and stops at breakpoints there.
update_debuggingNoDebugs update tasks.
create_exception_objectNoCreates the exception object even where a CATCH does not ask for it.
shared_object_debuggingNoDebugs shared objects.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and discloses important behavior: settings are changed at the current stop, omitted fields are preserved, and settings are reapplied after later attach. It does not cover permissions, error behavior, or full return shape, and the [read-only] tag may be somewhat confusing for a state-changing debug operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the tool's purpose, then adds the key partial-update and lifecycle constraints. Every sentence contributes useful information without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter state-changing debug tool with no annotations or output schema, the description covers the core behavior, partial updates, persistence across attaches, and batch-mode exclusion. It is not fully complete regarding prerequisite state, errors, or detailed response shape, but it is sufficient to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful update semantics: any field left out retains its current value. It also indicates that the response reports the settings in force, though it does not add parameter-specific detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: changing debugger settings at the current stop and returning the settings in force. It is clearly distinct from sibling tools like DebugStep or DebugSetVariable, though it does not explicitly name an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context: the tool operates at the current debug stop, omitted fields keep their values, and it runs outside batch mode. It does not explicitly compare itself with other debug tools such as DebugBatchBegin or DebugSetBreakpoints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugSetStackPositionA

[read-only] [debug] Selects the stack frame variables are read in; execution goes on from the same point. Needs a stopped debuggee. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
positionYesFrame position as the stack numbers it; the stopped frame has the highest position.
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no structured annotations, the description carries the burden and does well: it declares read-only behavior, the required debuggee state, and that it is unsupported in batch mode. It omits where state_handle comes from and what the call returns, leaving a small gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence with tag prefixes, front-loaded with the action. Every clause carries information, though the semicolon-chained phrasing is slightly dense rather than ideally structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter debug tool with no output schema, the description covers precondition, mode restriction, and the non-stepping semantics. The main missing piece is how the state_handle is obtained (presumably from DebugGetStack).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are documented in the schema itself, including the 'position' ordering rule and 'detail' verbosity enum. The description adds no parameter-level meaning beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Selects the stack frame variables are read in') and adds the key nuance that execution does not advance, which separates it from DebugStep. It does not name a sibling explicitly, but the operation is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Needs a stopped debuggee' and 'Runs outside batch mode' give explicit preconditions and an exclusion. It stops short of routing to alternatives (e.g., use DebugGetStack to list frames first), so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugSetVariableB

[read-only] [debug] Sets a variable of the stopped debuggee. Needs a stopped debuggee. Runs outside batch mode.

NameRequiredDescriptionDefault
nameYesVariable to set; a path reaches a component.
valueYesNew value; converted to the type by the system.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It does disclose the stopped-debuggee and non-batch preconditions, but it labels the operation '[read-only]' even though it mutates debuggee state by setting a variable — an actively misleading signal. Nothing is said about side effects, what happens if the debuggee resumes, or the failure mode when the handle is stale.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short bracketed/sentence fragments, front-loaded with the operation and its preconditions. No wasted text, though the '[read-only]' token is worse than wasted — it is a cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutating debug tool with no annotations and no output schema, the definition covers only preconditions. It does not describe the return shape of the set operation, what the 'detail' enum changes about the response, or error behavior when the debuggee is running — gaps the agent must discover at call time.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so name, value, detail, and state_handle are already documented with path, type-conversion, and verbosity behavior. The description adds no parameter-level meaning beyond that, which is the expected baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Sets a variable of the stopped debuggee' — which clearly separates it from DebugGetVariables and the DebugStep family. It lacks the state_handle/scope specifics that would make it a 5, but the core action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives two concrete preconditions that gate invocation: a stopped debuggee is required, and it runs outside batch mode. It does not point to alternatives (e.g., DebugGetVariables to read first, or DebugBatchBegin for batch usage), so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugStartListenerA

[read-only] [debug] Opens a debug session: arms breakpoints, listens for a debuggee and attaches the first one caught; refused before anything is placed while another debugger listens for that user. Needs at least one breakpoint. Takes whose requests are caught, the debugging mode and the debugger settings. In user mode it catches every request of the request user (the connected SAP user, or the one named), from this server and from anywhere else. Its breakpoints are one set, shared by every IDE of the same SAP user (in user mode, debugging the same request user; in terminal mode, whatever its ids), and each change rewrites that set as a whole. Runs outside batch mode.

NameRequiredDescriptionDefault
runNoA class (as a console application) or a report started in the background once listening; its outcome is reported as the end of the session.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
settingsNoDebugger settings, applied after each attach; a field left out keeps its value.
breakpointsYesBreakpoints, at least one: a line, an exception class, an ABAP statement or a message; a line breakpoint may carry a condition.
request_userNoUser mode: the SAP user whose requests are caught; the connected user when omitted. Debugging another user's requests needs the debug authorization for that user. Not taken in terminal mode.
debugging_modeNouser (when omitted) catches the requests of the request user; terminal catches the requests that carry this debug session's ids and needs no configuration: the run it starts carries them, so without run it catches only requests carrying the same ids.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It provides rich behavioral context beyond the schema, detailing that breakpoints are 'one set, shared by every IDE of the same SAP user,' that changes 'rewrites that set as a whole,' and specifies the constraint of running 'outside batch mode.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very dense, serving as a comprehensive block of text rather than short, punchy bullet points. However, every sentence contributes unique, necessary context to the complex function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the high parameter count, multiple modes, and shared-state semantics of the tool, this description captures virtually all the necessary operational and logical constraints an AI agent would need for accurate execution.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

While schema coverage is 100%, the description adds critical semantic meaning, explaining the difference between 'user mode' (catching every request of the request user) and 'terminal mode' (catching requests with specific IDs), which is not obvious from the enum definitions alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The tool's purpose is explicitly defined: it 'Opens a debug session: arms breakpoints, listens for a debuggee and attaches the first one caught.' This provides a precise function and outcome.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage constraints and when the tool will fail, stating it 'Needs at least one breakpoint' and is 'refused before anything is placed while another debugger listens for that user.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugStepB

[read-only] [debug] Moves the stopped debuggee into a call, over it, out of the current one or on to the next stop; or leaves it running, the listener and the breakpoints kept, by detaching or by freeing the debugger. Runs outside batch mode.

NameRequiredDescriptionDefault
actionYesinto enters the call, over runs it, return leaves the current one, continue runs to the next stop; detach lets the program run on, the listener and the breakpoints kept; release_debugger frees the debugger and the program runs on. detach and release_debugger apply to ABAP only.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. It does disclose useful behavior for the exit paths (detach keeps the listener and breakpoints, release_debugger frees the debugger), but the [read-only] tag is misleading for an operation that resumes and mutates a debug session, and nothing is said about state_handle validity after detach/release or about error behavior if the debuggee is not stopped.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence, front-loaded with the core action and then the exit paths, with no filler. It is slightly overloaded by joining stepping and session-ending semantics in a single clause chain, but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description should at least hint at what a step returns (stack position, source line) and what happens to state_handle after detach/release. It covers the action semantics well but leaves those gaps for a stateful debugger operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the action enum already spells out into/over/return/continue/detach/release_debugger and their ABAP-only restriction, and detail explains the terse/full/raw output levels. The description adds no syntax or format detail beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete verb (move the stopped debuggee) and enumerates the exact semantics of each mode: into a call, over it, out of it, on to the next stop, detach, release. That cleanly separates it from DebugStepToLine, DebugWait and DebugTerminate, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Runs outside batch mode" gives one explicit scope exclusion, and the detach/release options imply the alternative to DebugTerminate. But there is no explicit guidance on when to use this versus DebugStepToLine or how it pairs with DebugWait/DebugGetStack after stepping.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugStepToLineB

[read-only] [debug] Runs or jumps the stopped debuggee to a line. Runs outside batch mode.

NameRequiredDescriptionDefault
lineYesFor a line: the line in the object source.
modeYesrun executes up to the line; jump moves there without executing what lies between.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
includeNoFor a class: definitions, implementations, macros or testclasses; the main source when omitted.
object_nameYesFor a line: the object holding it.
object_typeYesFor a line: CLAS, PROG, INCL or FUNC.
parent_nameNoFor a function module: its function group.
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden; it does contribute the batch-mode exclusion and a "[read-only]" tag. That tag is questionable for an operation that moves the debuggee's execution point, and the description never states the prerequisite of a live stopped session or what happens to the prior execution position.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the bracketed tags front-loaded and zero filler. Slightly under-specified rather than verbose, but structurally sound.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 parameters, 5 required, and no output schema, the description should at least cover the debug-session precondition and the post-call state (debuggee now stopped at line). It covers the batch-mode caveat but leaves the session prerequisites implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter including the run/jump mode distinction and the detail verbosity is already documented in the schema. The description adds no parameter-level meaning beyond that, making the baseline 3 correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair ("runs or jumps") and a specific target ("the stopped debuggee to a line"), which is concrete enough to distinguish it from DebugStep (step-by-step) and DebugSetStackPosition. It does not name a sibling explicitly, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Runs outside batch mode" is a real usage constraint that tells the agent not to call this inside DebugBatchBegin/DebugBatchEnd, which is useful. However, there is no guidance on when to prefer jump vs run (deferred to the schema) and no explicit statement that an active stopped session is required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugStopA

[read-only] [debug] Ends a debug session, ABAP and AMDP: releases a stopped debuggee, removes the breakpoints, stops listening, closes the connections and lets the kept answers of its debugger batch go; a part that failed to undo is reported and kept with the answers. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so unusually well: it enumerates the concrete side effects (releases debuggee, removes breakpoints, stops listening, closes connections), explains batch-answer disposition, and discloses that partially-failed undo is reported and retained rather than silently dropped. Minor oddity: it self-labels "[read-only]" while describing substantial cleanup side effects, an internal tension an agent may trip over.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the verb first and each clause adding distinct operational information (cleanup actions, batch answers, partial-failure behavior, mode constraint). Nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations, so the description must cover behavior; it explains teardown scope, batch handling, partial-failure reporting, and execution mode. It leaves open the return shape of the reported failures and behavior when nothing is stopped, small gaps for a session-termination tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so state_handle and the detail enum are fully documented in the schema; baseline 3 applies. The description adds no guidance on which handle to pass (e.g., from DebugStartListener vs a debug batch) or how detail affects consumption.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Ends a debug session") and scopes it as covering both ABAP and AMDP debuggees, which distinguishes it from the AMDP-only AmdpDebugStop sibling. However it does not contrast itself with DebugTerminate, another sibling that plausibly also ends sessions, so disambiguation is incomplete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Runs outside batch mode" is the only usage cue, implicitly routing batch-context callers to DebugBatchEnd, and the enumerated cleanup actions imply this is the teardown step after DebugWait/DebugStep. No explicit when-to-use, prerequisites, or statement of what happens if no session is active.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugTakeOverListenerA

[read-only] [debug] Opens a debug session: arms breakpoints, listens for a debuggee and attaches the first one caught. Displaces another debugger listening for the same user. Needs at least one breakpoint. Takes whose requests are caught, the debugging mode and the debugger settings. In user mode it catches every request of the request user (the connected SAP user, or the one named), from this server and from anywhere else. Its breakpoints are one set, shared by every IDE of the same SAP user (in user mode, debugging the same request user; in terminal mode, whatever its ids), and each change rewrites that set as a whole. Runs outside batch mode.

NameRequiredDescriptionDefault
runNoA class (as a console application) or a report started in the background once listening; its outcome is reported as the end of the session.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
settingsNoDebugger settings, applied after each attach; a field left out keeps its value.
breakpointsYesBreakpoints, at least one: a line, an exception class, an ABAP statement or a message; a line breakpoint may carry a condition.
request_userNoUser mode: the SAP user whose requests are caught; the connected user when omitted. Debugging another user's requests needs the debug authorization for that user. Not taken in terminal mode.
debugging_modeNouser (when omitted) catches the requests of the request user; terminal catches the requests that carry this debug session's ids and needs no configuration: the run it starts carries them, so without run it catches only requests carrying the same ids.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden and does well: it discloses that it displaces another debugger listening for the same user, that breakpoints are a single shared set rewritten as a whole by every change, and that debugging another user's requests requires that user's debug authorization. Remaining gaps are what the call returns and how the session is later driven (DebugWait/DebugTerminate). The '[read-only]' tag sits awkwardly with 'Displaces another debugger', but since no annotation declares readOnly, this is self-inconsistency rather than an annotation contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and free of filler, but the breakpoint-sharing sentence — 'Its breakpoints are one set, shared by every IDE of the same SAP user (in user mode, debugging the same request user; in terminal mode, whatever its ids), and each change rewrites that set as a whole' — is tangled enough to require re-reading. The whole block runs as one undivided paragraph, so the prerequisite ('Needs at least one breakpoint') is buried mid-sentence rather than up front.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with nested settings, enum modes and no output schema, the description covers prerequisites, side effects, authorization requirements and mode semantics thoroughly. What it omits is what an agent gets back from the call and what to do next (wait, step, terminate), which matters given there is no output schema to fall back on.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantics beyond it: it frames the parameters as 'whose requests are caught, the debugging mode and the debugger settings', and explains the behavioral consequence of terminal mode ('catches the requests that carry this debug session's ids... without run it catches only requests carrying the same ids') — a coupling between debugging_mode and run that the schema documents only piecewise.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Opens a debug session' — then enumerates its mechanics (arms breakpoints, listens, attaches the first debuggee caught). An agent can distinguish it from DebugStartListener/DebugWait without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real preconditions and exclusions: 'Needs at least one breakpoint', 'Runs outside batch mode', and a detailed user-mode vs terminal-mode split that determines which requests get caught. It does not, however, name the sibling tool to use instead (e.g. DebugStartListener for a non-attaching session), so routing is inferable rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugTerminateB

[read-only] [debug] Ends the stopped debuggee and its program where it stands. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full disclosure burden. It discloses the out-of-band constraint (outside batch mode), but labels a terminate/teardown operation as "[read-only]", which is internally misleading, and says nothing about what state is destroyed, whether unsaved debuggee state or the state_handle becomes invalid, or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the action front-loaded and no wasted prose. The bracketed tags are compact but the "[read-only]" tag spends space on a claim that misleads rather than clarifies.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with full schema coverage and no output schema, the essentials are present, but an agent still cannot tell what happens to the session/state_handle after termination or how this differs from DebugStop. Those omissions matter for a debugger teardown call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including an enum for `detail` and a documented `state_handle`, so the schema does the heavy lifting. The description adds nothing about how the handle relates to the terminated debuggee, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (ends) and resource (the stopped debuggee and its program), making the effect of the call clear. It does not explicitly contrast with neighbors like DebugStop or DebugWait, so sibling differentiation is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Runs outside batch mode" is a real usage constraint, and "the stopped debuggee" implies a pre-existing stopped debug session is required. However, it never says when to choose DebugTerminate over DebugStop or how to resume/handle remaining sessions afterwards, so guidance stops at implied context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DebugWaitA

[read-only] [debug] State of a debug session after waiting up to hold_seconds; a debugger that took the user over is an error carrying the system's message. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
hold_secondsNoLongest wait for a change, at most 30 seconds.
state_handleYesOpaque handle identifying the server-held state this operation works on.

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No structured annotations are provided, so the description carries the full burden and does a reasonable job: it declares read-only behavior, the bounded wait via hold_seconds, and that a user takeover surfaces as an error carrying the system's own message. It stops short of saying what is returned on timeout without a change, which matters for a waiting/polling tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with the tag prefixes front-loaded; the wait semantics and error behavior come before the batch-mode constraint. Slightly comma-spliced prose, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only debug wait with no output schema, the description covers the wait bound, the resolution value (session state), and the error case, which is enough to call it correctly. Only the no-change/timeout return behavior is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter has a description, including the detail enum and the 30-second cap on hold_seconds. The description adds only the relational point that the session state is observed after waiting up to hold_seconds, so the schema does the heavy lifting and baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific operation on a specific resource: it returns the state of a debug session after waiting up to hold_seconds. The debug-related tags make the domain clear, though it doesn't distinguish itself from the close sibling AmdpDebugWait, which an agent could easily confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus DebugStep, DebugGetStack, or AmdpDebugWait. The only scoping statement, 'Runs outside batch mode,' is a constraint rather than usage direction, so the agent must infer the polling role from the description alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteBehaviorDefinitionA

Delete an ABAP behavior definition from the SAP system via ADT deletion API. Transport request optional for local objects. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
transport_requestNoTransport request number, not a task. Required for transportable objects. Optional for local objects.
behavior_definition_nameYesBehaviorDefinition name.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full burden. It does disclose two meaningful traits beyond the name: the transport-request requirement varies by object type (local vs. transportable) and the operation cannot be run inside BatchBegin/BatchEnd. It stops short of stating what exactly is destroyed, whether the deletion is recoverable, or what errors occur when the object is locked or in a transport.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the action and scope front-loaded, followed by the two non-obvious constraints. No filler, no repetition of the schema, and every sentence contributes a distinct fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent operation with no annotations and no output schema, the description covers the essentials to call it but leaves gaps: no indication of what happens on failure, whether an inactive object can be deleted, or whether a transport lock blocks the call. Adequate but not complete for a delete tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters including the transport_request and detail enums, making 3 the baseline. The description's 'transport request optional for local objects' merely restates the schema's own wording and adds no syntax, format, or example for the optional transport number.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb plus resource ('Delete an ABAP behavior definition') and identifies the underlying mechanism ('via ADT deletion API'), which clearly separates it from the many Get*/Create*/Update* behavior-definition siblings. It never explicitly contrasts with the closest look-alikes (DeleteBehaviorImplementation, DeleteServiceDefinition), but the resource noun is specific enough that confusion is unlikely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Transport request optional for local objects' and 'Runs outside batch mode' give real usage context for how to invoke it. However, there is no explicit when-to-use/when-not guidance, no prerequisite statement (e.g. object must exist or be inactive), and no routing to alternatives such as deactivating rather than deleting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteBehaviorImplementationB

Delete an ABAP behavior implementation from the SAP system via ADT deletion API. Transport request optional for local objects. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
transport_requestNoTransport request number, not a task. Required for transportable objects. Optional for local objects.
behavior_implementation_nameYesBehaviorImplementation name.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full burden. It does disclose two real behavioral traits — transport-request handling differs for local vs transportable objects, and the tool runs outside batch mode — but says nothing about permissions, reversibility, dependent objects, or what happens if the object is active or locked.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and resource, with no filler. The batch-mode note is terse but earns its place as a constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, no-annotation, no-output-schema tool, the description covers the transport nuance and the batch restriction but leaves out preconditions (object state, locks, activation status) and post-delete effects that an agent would need before committing to a delete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters, including the local/transportable transport_request rule that the description repeats. Baseline 3 applies; the description adds no syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource (delete an ABAP behavior implementation) and identifies the mechanism (ADT deletion API), which distinguishes it from sibling mutation tools like DeleteBehaviorDefinition or DeleteClass. It does not explicitly name a sibling it should not be confused with, but the resource noun is precise enough for an agent to select correctly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The line 'Transport request optional for local objects' plus 'Runs outside batch mode' implies usage context (local/transportable objects, not usable inside BatchBegin/BatchEnd) but never states prerequisites, when deletion is appropriate, or what to do instead if the object is locked or active.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteCdsUnitTestB

Deletes the CDS view test class named by class_name, with the ABAP Unit test classes it holds. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesTest class of the CDS view.
transport_requestNoTransport request, not a task. Required for a transportable object.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations the description carries the full burden; it usefully discloses that the ABAP Unit test classes it holds are deleted along with it (cascading delete) and that it runs outside batch mode. However, it omits irreversibility, permission/auth needs, and whether a transport is required for a deletion.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and the cascade behavior. No filler; the batch-mode note is a genuine behavioral trait though slightly disjointed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A destructive tool with no annotations and no output schema relies on the description; it covers what gets destroyed but leaves out irreversibility and permission/transport context an agent would need before invoking a delete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents class_name, transport_request, and the detail enum. The description only echoes class_name and adds no semantics beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: deletes the CDS view test class named by class_name. It is distinguishable from generic delete siblings by specifying 'CDS view test class', though it doesn't explicitly contrast with DeleteUnitTest or DeleteLocalTestClass.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the Create/Update/RunCdsUnitTest sibling set and the 'delete' verb, but the description offers no explicit when-to-use guidance or prerequisites (e.g., activation state, transport requirements) and no alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteClassB

Delete an ABAP class from the SAP system via ADT deletion API. Transport request optional for local objects. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesClass name.
transport_requestNoTransport request number, not a task. Required for transportable objects. Optional for local objects.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It discloses two useful traits (ADT deletion API, outside batch mode) but never states that deletion is destructive/irreversible, what permissions are required, or how errors on a missing class are handled — significant omissions for a delete mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, purpose front-loaded, no filler. Slight redundancy in "via ADT deletion API" but overall well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Parameters are fully documented via schema and the description adds purpose plus batch/transport context. However, for a bare, annotation-less destructive tool, it omits irreversibility, permission requirements, and failure behavior that an agent would want before calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with rich descriptions including the detail enum, so the schema does the heavy lifting. The description adds only the transport-request-optional-for-local-objects note, which is already present in the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Delete an ABAP class"), clearly distinct from DeleteProgram/DeleteInterface siblings by object type. It does not explicitly name or route around any sibling, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The note that it "runs outside batch mode" gives an implicit usage constraint, and the delete intent is obvious from the name. But there is no when-not guidance, no mention of alternatives like CheckClass or deactivation, and no prerequisite conditions for invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteDataElementB

Delete an ABAP data element from the SAP system via ADT deletion API. Transport request optional for local objects. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
data_element_nameYesData element name.
transport_requestNoTransport request number, not a task. Required for transportable objects. Optional for local objects.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses that the operation runs outside batch mode and that transport_request handling differs for local objects. However, for a destructive deletion operation it does not state irreversibility, permission requirements, or what happens to dependent objects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with the core action front-loaded. Every phrase adds either scope or a behavioral constraint, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool with no annotations and no output schema, the description provides the essential action plus two useful constraints: no batch mode and transport optionality for local objects. It is still thin on safety and prerequisite context that an agent would want before deleting an SAP data element.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already documented. The description only restates the transport_request behavior in slightly different words and adds nothing about data_element_name or the detail enum. Baseline 3 is appropriate when the schema already does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: deleting an ABAP data element via the ADT deletion API. That clearly separates it from siblings like CreateDataElement, GetDataElement, UpdateDataElement, and other Delete* tools targeting different object types. It is clear, though it does not explicitly contrast itself with adjacent operations such as CheckDataElement or ActivateDataElement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage-relevant statement is that a transport request is optional for local objects. There is no guidance on when to use this tool versus alternatives, no prerequisites, and no indication of when deletion should not be attempted.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteDdlA

Delete a DDL source from the SAP system via ADT deletion API. Transport request optional for local objects. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
ddl_nameYesDDL source name.
transport_requestNoTransport request number, not a task. Required for transportable objects. Optional for local objects.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses that transportable objects need a transport number while local objects do not, and that the tool cannot be wrapped in BatchBegin/BatchEnd — both genuine behavioral facts beyond the schema. It says nothing about permission requirements, irreversibility, error behavior, or what comes back.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and constraint, with zero filler. Each sentence adds a distinct fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no annotations and no output schema, the description covers transport semantics and batch-mode exclusion but omits permission requirements, failure modes, and what a successful deletion returns. Adequate, but it leaves real gaps for a delete operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents ddl_name, detail, and transport_request. The description only echoes the transport rule that already appears in the schema; baseline 3 applies since the structured fields do the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb plus resource ("Delete a DDL source") with the backend mechanism named (ADT deletion API), which cleanly separates it from siblings like DeleteTable, DeleteStructure, or DeleteServiceDefinition. It stops short of explicitly naming a sibling or a precondition, so it lands just under a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Transport request optional for local objects" and "Runs outside batch mode" give real invocation context, including a constraint an agent would not infer. However, there is no statement of when to prefer this over a delete alternative, or what prerequisites (inactive object, check first) apply.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteDomainA

Delete an ABAP domain from the SAP system via ADT deletion API. Transport request optional for local objects. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
domain_nameYesDomain name.
transport_requestNoTransport request number, not a task. Required for transportable objects. Optional for local objects.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the whole burden; it does disclose that this is a destructive delete, that transport requests matter for transportable objects, and that it cannot run in batch mode. It omits whether the deletion is reversible, what permissions or object states (inactive, locked) are required, and what happens on failure — material gaps for an irreversible mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying distinct information: what it does, the conditional parameter rule, and the batch-mode constraint. The core action is front-loaded and nothing is repeated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description is the only source of behavioral context for a destructive operation, and it covers scope and batch restrictions but not success/failure outcomes, prerequisites, or irreversibility. Adequate to avoid misuse, but thin for a delete tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters including the detail enum are already documented in the schema. The description's line about transport requests echoes the schema's own wording rather than adding new meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Delete an ABAP domain") plus the mechanism (ADT deletion API), which cleanly separates it from GetDomain, CreateDomain, UpdateDomain and ActivateDomain in the sibling list. It never names those siblings explicitly, so differentiation is by verb rather than by routing guidance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Transport request optional for local objects" gives a concrete conditional for the one non-obvious parameter, and "Runs outside batch mode" is an explicit exclusion telling the agent this cannot be used within a batch session. It stops short of saying when to delete versus deactivate, or what prerequisites must hold, so it is clear context without full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteFunctionGroupB

Delete an ABAP function group from the SAP system via ADT deletion API. Transport request optional for local objects. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
transport_requestNoTransport request number, not a task. Required for transportable objects. Optional for local objects.
function_group_nameYesFunctionGroup name.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description must carry the whole burden. It does disclose two behavioral traits beyond the schema: transportability semantics and the fact that it runs outside batch mode (so BatchBegin wrappers will not apply). It omits irreversibility, permission/authorization needs, and what happens to contained function modules and includes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and resource, each contributing information. "Runs outside batch mode" is slightly terse to the point of ambiguity about what mechanism it refers to, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no annotations and no output schema, the description covers the operation and one key constraint but leaves the agent guessing about authorization, side effects on child objects, and the result shape. Adequate, not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are documented in the schema already, including the transport/orphan-object rule and the detail enum. The description's transport sentence largely repeats the schema, adding no syntax or format detail, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (delete) and resource (ABAP function group) plus the underlying mechanism (ADT deletion API), which cleanly separates it from DeleteFunctionModule, DeleteFunctionInclude, and DeleteProgram in the sibling list. It does not explicitly name or contrast with those siblings, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Transport request optional for local objects" and "Runs outside batch mode" give real preconditions, implying usage context. However, there is no explicit statement of when to prefer CheckFunctionGroup/GetFunctionGroup first, nor any warning about deleting a non-empty group or using this versus generic deletion flows.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteFunctionIncludeA

Delete an ABAP function group include from the SAP system via ADT deletion API. Note: function module includes must be deleted via the Function Builder; the backend rejects such deletions. Transport request optional for local objects. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
include_nameYesInclude name.
transport_requestNoTransport request number, not a task. Required for transportable objects. Optional for local objects.
function_group_nameYesFunction group name containing the include.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that some deletions are rejected, that transport_request is optional only for local objects, and that it runs outside batch mode, but it omits irreversibility, required authorization, and what exactly gets removed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences with zero waste. The main action is front-loaded, and the caveats about function module includes, transport, and batch mode each earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a deletion tool with no annotations and no output schema, the description supplies key operational constraints: the function-module include exclusion, local-object transport optionality, and batch-mode behavior. It is mostly complete, though it could say more about permissions and irreversibility.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters, including the detail enum and transport_request. The description only reinforces that transport_request is optional for local objects, adding limited meaning beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: delete an ABAP function group include. It clearly distinguishes this from deleting a function module include by noting that the backend rejects such deletions, so an agent can route correctly among the many Delete* siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear usage context and an explicit exclusion: function module includes must be deleted via the Function Builder, not this tool. It also notes transport request optionality for local objects, though it does not explicitly contrast with DeleteFunctionGroup or DeleteFunctionModule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteFunctionModuleB

Delete an ABAP function module from the SAP system via ADT deletion API. Transport request optional for local objects. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
transport_requestNoTransport request number, not a task. Required for transportable objects. Optional for local objects.
function_group_nameYesFunctionGroup name containing the function module.
function_module_nameYesFunctionModule name.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose two non-obvious traits: transport handling for local vs transportable objects, and that it runs outside batch mode (so it cannot be batched). However, it never states irreversibility, whether the module must be inactive, or permission requirements — significant omissions for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the action front-loaded and no filler. The batch-mode note is slightly orphaned in placement but still earns its place as behavioral context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations mean the description must be self-sufficient, yet it omits the consequences of deletion (irreversibility, effect on transports/inactive objects) that an agent needs before invoking a destructive call. What is present is accurate but thin for a delete tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all four parameters are already documented in the schema, including the transport_request distinction. The description merely echoes that transport is optional for local objects and adds no format, naming, or enum guidance beyond it, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (delete an ABAP function module) plus the mechanism (ADT deletion API), which cleanly separates it from siblings like DeleteFunctionGroup, DeleteFunctionInclude and DeleteStructure. It stops short of explicitly naming an alternative or scope constraint, but the operation is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this versus DeleteFunctionGroup or CheckFunctionModule, and no prerequisites described. The 'transport request optional for local objects' line hints at a conditional context but does not tell an agent when to choose this tool or what must be true first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteInterfaceB

Delete an ABAP interface from the SAP system via ADT deletion API. Transport request optional for local objects. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
interface_nameYesInterface name.
transport_requestNoTransport request number, not a task. Required for transportable objects. Optional for local objects.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does add two genuine behavioral facts: that it executes outside batch mode and the transport-request rule for local vs. transportable objects. It doesn't disclose whether deletion is irreversible, what happens to inactive/unsaved versions, or what errors/dependencies can block the delete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the core action front-loaded and zero filler. The batch-mode sentence is somewhat abrupt but still earns its place as behavioral information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no annotations and no output schema, the description covers the transport prerequisite and batch caveat but omits irreversibility, dependency/blocking conditions, and any confirmation of what is returned. Adequate to call, but not fully complete for a destructive operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains all three parameters including the detail enum, establishing a baseline of 3. The description's transport-request sentence largely restates the schema's own parameter description rather than adding new semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Delete) and resource (ABAP interface) plus the mechanism (ADT deletion API), which clearly separates it from siblings like DeleteClass or DeleteProgram. It stops short of naming the closest alternative (e.g. DeleteLocalTypes / transport-related delete tooling), so an agent gets the resource distinction but not explicit sibling routing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Transport request optional for local objects" gives a real conditional about when a parameter is needed, and "Runs outside batch mode" hints at usage context. There is still no explicit when-to-use / when-not-to-use guidance and no mention of alternatives, so usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteLocalDefinitionsA

Delete local definitions from an ABAP class by clearing the definitions include. Manages lock, update, unlock, and optional activation. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesParent class name.
transport_requestNoTransport request number, not a task.
activate_on_deleteNoActivate parent class after deleting. Default: false

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It usefully discloses lock/update/unlock lifecycle handling, optional activation, and batch-mode exclusion, but omits permissions, reversibility, and error behavior for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with purpose and mechanism, followed by operational constraints. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no annotations and no output schema, it gives the operational flow but lacks prerequisites, permission requirements, and expected results. An agent can call it, but cannot fully predict side effects or confirmation behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description only echoes optional activation; class_name, transport_request, and detail are left to the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Delete local definitions from an ABAP class,' and clarifies the mechanism as clearing the definitions include. This clearly distinguishes it from sibling tools like GetLocalDefinitions, UpdateLocalDefinitions, DeleteLocalTypes, and DeleteLocalMacros.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides no explicit when-to-use or when-not guidance and does not name alternatives. The only usage-related constraint is 'Runs outside batch mode,' which is operational rather than selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteLocalMacrosA

Delete local macros from an ABAP class by clearing the macros include. Manages lock, update, unlock, and optional activation. Note: Macros belong to older ABAP versions. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesParent class name.
transport_requestNoTransport request number, not a task.
activate_on_deleteNoActivate parent class after deleting. Default: false

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden and does well: it names the internal lifecycle (lock, update, unlock) and the optional activation step, plus the batch-mode restriction. It remains silent on reversibility of the delete and on permission/transport requirements, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and mechanism before the behavioral notes. Slightly loose with the parenthetical 'Note:' but no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool with no annotations and no output schema, the description covers locking, activation, and batch constraints but omits what the delete returns and whether it is recoverable. It is adequate but not fully rounded out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all four parameters; the description only echoes 'optional activation' via 'optional activation' phrasing. This meets the baseline but adds no extra syntax or format guidance beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Delete local macros from an ABAP class') and explains the mechanism ('by clearing the macros include'). It does not explicitly contrast with siblings like GetLocalMacros or UpdateLocalMacros, but the operation is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states a real usage constraint ('Runs outside batch mode') and context about ABAP version relevance, implying when the tool applies. However it does not explicitly say when to choose this over UpdateLocalMacros or how it relates to GetLocalMacros, leaving selection partly inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteLocalTestClassA

Clears the local test classes include of the ABAP class named by class_name. The include is cleared under the class lock; with activate_on_delete the class is activated. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesParent class name.
transport_requestNoTransport request number (required for transportable objects), not a task.
activate_on_deleteNoActivate parent class after deleting test class. Default: false

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose meaningful behavior: the include is cleared under the class lock, activate_on_delete triggers a class activation as a side effect, and the tool is excluded from batch mode. It does not say whether the deletion is reversible, what transport behavior applies, or what a success response contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero waste. The action and target lead, followed by locking/activation behavior and the batch-mode constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter mutation tool with no output schema and full schema coverage, the description supplies the critical behavioral facts (lock scope, activation side effect, batch restriction). The main remaining gap is the result of the call and any transport implications.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters, making 3 the baseline. The description adds a little value by tying activate_on_delete to an actual activation side effect, but says nothing about class_name semantics, transport_request, or detail beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: clearing the local test class include of a named ABAP class. That is far more precise than the bare name and distinguishes it from siblings like DeleteLocalTypes, DeleteLocalMacros, and DeleteClass. It stops short of explicitly saying how it differs from DeleteClass (which removes the whole class).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Runs outside batch mode" gives one operating constraint, but there is no explicit when-to-use/when-not guidance or reference to alternatives such as UpdateLocalTestClass or DeleteLocalTypes. The intended use is strongly implied by the name and description rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteLocalTypesA

Delete local types from an ABAP class by clearing the implementations include. Manages lock, update, unlock, and optional activation. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesParent class name.
transport_requestNoTransport request number, not a task.
activate_on_deleteNoActivate parent class after deleting. Default: false

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations to lean on, the description does real work: it discloses the lock/update/unlock lifecycle it manages, optional activation, and that it must run outside batch mode. It omits what happens on lock failure or missing transport, and doesn't flag irreversibility, which matters for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what is deleted and how. Every clause carries information an agent cannot get from the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no annotations and no output schema, the description covers the operation, the internal sequence it performs, and the batch-mode restriction. Missing are error-side behavior (lock contention, transport requirement) and confirmation that the return value carries the operation log.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so class_name, transport_request, detail, and activate_on_delete are already documented. The description adds nothing beyond echoing that activation is optional, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete local types from an ABAP class') plus the mechanism ('clearing the implementations include'), which distinguishes it from DeleteLocalDefinitions and DeleteLocalMacros. It stops short of naming those siblings explicitly, so an agent still has to infer the boundary from the resource names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied via the 'Runs outside batch mode' constraint, which tells an agent not to wrap this in BatchBegin/BatchEnd. There is no explicit statement of when to use this versus UpdateLocalTypes, GetLocalTypes, or DeleteLocalDefinitions, and no stated preconditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteMessageClassA

Delete an ABAP message class (MSAG) and all of its messages from the SAP system via ADT deletion API. Transport request required for transportable objects, optional for local objects. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
transport_requestNoTransport request number, not a task. Required for transportable objects, optional for local ones.
message_class_nameYesMessage class name.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does reasonably well: it discloses the cascade deletion of all messages, the transport requirement, and that it cannot run in batch mode. It omits irreversibility, permission/authorization requirements, and failure behavior, but the core destructive profile is surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the destructive action and cascade front-loaded, followed by prerequisites. Minor redundancy with the transport_request schema description keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter destructive tool with no annotations and no output schema, the description covers the action, scope of destruction, transport prerequisite, and batch-mode caveat. Missing only authorization/irreversibility detail, which is a modest gap given the otherwise complete picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are already documented in the schema. The description's transport-request sentence merely restates the schema's own note, and it adds no meaning for the message_class_name or detail enum parameters. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: delete an ABAP message class (MSAG), and explicitly notes the cascade ('all of its messages'). This cleanly distinguishes it from the sibling DeleteMessageClassMessage, which removes a single message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a useful prerequisite — transport request required for transportable objects, optional for local ones — and notes it runs outside batch mode. However, it never explicitly routes the agent between this tool, DeleteMessageClassMessage, and UpdateMessageClass; the when-to-use vs. alternatives is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteMessageClassMessageA

Remove one message (by number) from an ABAP message class (T100), keeping the class and its other messages. Transport request required for transportable objects. Runs outside batch mode.

NameRequiredDescriptionDefault
msgnoYesMessage number to delete (e.g., "001").
transport_requestNoTransport request number, not a task. Required for transportable objects, optional for local ones.
message_class_nameYesParent message class name.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the load and does disclose real behavioral traits: the operation is destructive but surgical ('keeping the class and its other messages'), it requires a transport request for transportable objects, and it cannot run inside batch mode (a real constraint given BatchBegin/BatchEnd siblings). It omits reversibility and any permission/authorization requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and scope, then the two operational constraints. No filler; the only slight cost is that 'Runs outside batch mode' is terse enough to require interpretation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter destructive tool with no annotations and no output schema, the description covers purpose, scope, transport prerequisite and batch-mode exclusion. It still leaves gaps an agent would care about: whether the deletion is reversible, what the call returns on success/failure, and whether activation or inactive-object handling is involved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so msgno, transport_request and message_class_name are already documented. The description's '(by number)' and transport note largely restate the schema; it adds no format or edge-case detail (e.g. leading-zero handling, what a non-transportable/local object means in practice). Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb + resource + narrow scope: 'Remove one message (by number) from an ABAP message class (T100), keeping the class and its other messages.' The clause about preserving the class and remaining messages cleanly separates it from DeleteMessageClass and from UpdateMessageClassMessage/CreateMessageClassMessage without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by scoping ('one message') and two conditions are stated (transport request for transportable objects, runs outside batch mode). However, there is no explicit when-to-use/when-not or a named alternative such as DeleteMessageClass for whole-class removal or UpdateMessageClassMessage for edits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteMetadataExtensionB

Delete an ABAP metadata extension from the SAP system. Transport request optional for local objects. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
transport_requestNoTransport request number, not a task. Required for transportable objects. Optional for local objects.
metadata_extension_nameYesMetadataExtension name.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full burden. It usefully discloses that the transport request is only needed for transportable objects and that the call is not batch-compatible, but it never says deletion is irreversible, what state (active/inactive) the object must be in, or what happens to dependent objects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the action front-loaded and no filler. The transport sentence is partly redundant with the schema, which slightly undercuts the efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a three-parameter delete: the action, transport requirement, and batch-mode restriction are covered, and no output schema exists to explain. Missing irreversibility and preconditions (activation state, whether a check is advised) leaves an agent short of what it needs to call this safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters, including the detail enum, are already documented in the schema. The description's transport-request sentence merely restates the schema's "Required for transportable objects. Optional for local objects" wording, adding no new meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: deleting an ABAP metadata extension from the SAP system. The verb alone separates it from CreateMetadataExtension, UpdateMetadataExtension, GetMetadataExtension and CheckMetadataExtension, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Runs outside batch mode" gives a real usage constraint and implies it cannot be wrapped in BatchBegin/BatchEnd, but there is no guidance on when to choose this over alternatives such as CheckMetadataExtension first, or whether the object must be inactive before deletion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeletePackageA

Delete an ABAP package from the SAP system via ADT deletion API. Transport request optional for local objects. A package can be saved only once per ABAP session (PAK/058 "Package … is already locked" otherwise). The package tools of this server save a package on a session apart from this one, so a delete here works after them; for a package saved elsewhere through this connection, pass force_new_connection=true to delete from a new session, closed afterwards. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
package_nameYesPackage name.
transport_requestNoTransport request number, not a task. Required for transportable objects. Optional for local objects.
force_new_connectionNoForce creation of a new connection (bypass cache). Useful when package was locked/unlocked and needs to be deleted in a fresh session. Default: false.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses the PAK/058 one-save-per-session lock, explains why the server's own package tools leave the object deletable, and notes the tool runs outside batch mode. It omits irreversibility/confirmation expectations and any authorization requirements, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then the non-obvious session constraint, then the remediation. Four dense sentences, each earning its place, though the PAK/058 error code and parenthetical add some density that could be trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no annotations and no output schema, the description covers the main operational trap (session locking), the transport prerequisite, and the batch-mode restriction. It stops short of stating the response shape or that the deletion is irreversible/needs confirmation, which would fully close the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning beyond the schema: it connects transport_request's optionality to local vs. transportable objects and connects force_new_connection to the session-lock explanation, including that the new session is closed afterwards. The detail parameter is left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete an ABAP package') plus the mechanism ('via ADT deletion API'), which cleanly distinguishes it from sibling deletes like DeleteClass or DeleteBehaviorDefinition and from UpdatePackage. An agent needs no further reading to know what object type this affects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete conditions: transport_request is optional for local objects, and force_new_connection is only needed when the package was saved elsewhere through this connection. It also signals a batch-mode exclusion ('Runs outside batch mode'). It does not name an alternative tool or state when not to use it, which keeps it below a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteProgramA

Delete an ABAP program from the SAP system via ADT deletion API. Transport request optional for local objects. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
program_nameYesProgram name.
transport_requestNoTransport request number, not a task. Required for transportable objects. Optional for local objects.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden; it usefully discloses that the transport request is optional for local objects and that the call runs outside batch mode. However, it says nothing about irreversibility, required authorizations, or what happens to existing/inactive versions on delete — significant gaps for a destructive mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, front-loaded with purpose, no filler. The trailing 'Runs outside batch mode' is terse but adds real operational context; minor deduction for its slightly cryptic framing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive delete with no annotations and no output schema, the definition covers purpose and transport behavior but leaves out error/irreversibility behavior and preconditions, so an agent still lacks enough to call it safely in edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all three parameters, including the transport/local-object rule. The description's transport sentence merely restates the schema and adds no syntax or format detail beyond it, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete an ABAP program') plus the mechanism ('via ADT deletion API'), which cleanly distinguishes it from the many DeleteClass/DeleteInterface/DeleteServiceDefinition siblings without needing to open schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intent to remove a program is implied and the transport note gives context, but there is no explicit when-to-use/when-not guidance, no mention of prerequisites (e.g. object must be inactive/deactivated first), and no routing to alternatives such as CheckProgram or the version tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteServiceBindingA

Delete ABAP service binding via ADT deletion API. Transport request optional for local objects. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
response_formatNoAccepted for backward compatibility; no longer affects the answer, which is always the structured deletion result.xml
transport_requestNoOptional transport request for deletion transport flow.
service_binding_nameYesService binding name to delete.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses that deletion goes through the ADT deletion API, that transport is optional for local objects, and that it runs outside batch mode. It does not state irreversibility, required permissions, error behavior, or side effects on dependent objects, leaving significant safety gaps for a destructive mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place, with the core action front-loaded. No repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no annotations and no output schema, the description covers purpose, transport handling, and batch-mode behavior. It omits irreversibility, permission prerequisites, and error conditions, which are important for safely invoking a delete tool. Adequate but with clear safety gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters. The description adds only one semantic detail beyond the schema: that transport_request is optional specifically for local objects. It does not explain the detail or response_format parameters, but the schema already covers them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Delete ABAP service binding'. It adds the mechanism ('via ADT deletion API'), making the operation unambiguous. However, it does not differentiate this tool from sibling deletion tools such as DeleteServiceDefinition, so sibling selection still requires inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides contextual constraints—transport request is optional for local objects and the tool runs outside batch mode—but it never explicitly says when to use this tool versus alternatives like DeleteServiceDefinition or UpdateServiceBinding. Usage is implied by the verb, not guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteServiceDefinitionA

Delete an ABAP service definition from the SAP system via ADT deletion API. Transport request optional for local objects. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
transport_requestNoTransport request number, not a task. Required for transportable objects. Optional for local objects.
service_definition_nameYesServiceDefinition name.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations the description must carry the safety profile, and it only partly does: it makes clear this is a destructive delete, notes transport handling, and flags that it does not run in batch mode (relevant given BatchBegin/BatchEnd siblings). It says nothing about permissions, reversibility, or whether the object must be inactive, which are the traits an agent most needs for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, front-loaded sentences with no filler; the destructive action leads and the operational caveats follow. 'Runs outside batch mode' is terse enough to be slightly cryptic, which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a 3-parameter delete with full schema coverage and no output schema, but since no annotations exist the description should have carried more of the safety story (reversibility, prerequisites, failure modes) for a deletion tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description reinforces the transport_request semantics ('optional for local objects'), though that largely repeats the schema text. The 'detail' enum and the name parameter are fully covered by the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete an ABAP service definition') and the mechanism (ADT deletion API), which cleanly separates it from the many Get/Create/Update siblings and from DeleteServiceBinding. It does not explicitly name the sibling it replaces, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'Transport request optional for local objects' hints that a transport is needed for transportable objects, and 'Runs outside batch mode' hints at a constraint. There is no explicit when-to-use / when-not-to-use guidance versus alternatives such as deleting the parent package or binding.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteStructureB

Delete an ABAP structure from the SAP system via ADT deletion API. Transport request optional for local objects. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
structure_nameYesStructure name.
transport_requestNoTransport request number, not a task. Required for transportable objects. Optional for local objects.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It usefully discloses that the call runs outside batch mode (a real constraint relative to BatchBegin/BatchEnd siblings) and the transport coupling for non-local objects. However, it never states that deletion is irreversible, what permissions are needed, or what happens on failure/inactive-dependent objects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the core action front-loaded and no filler. Efficient, though the final sentence ('Runs outside batch mode') is telegraphic and would benefit from a word of context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool with no annotations and no output schema, the description covers the API, transport requirement and batch exclusion but omits irreversibility, permission needs, error/partial-failure behavior, and what a local-vs-transportable object implies for the caller. Adequate but clearly short of complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are already documented, including the detail enum and the transport/local distinction. The description merely restates the transport rule and adds no syntax or format detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete an ABAP structure') and names the underlying API. It is unambiguous against siblings like DeleteTable or DeleteClass purely by resource name, but it never explicitly distinguishes itself from those near-identical delete tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It hints at preconditions ('Transport request optional for local objects') and an execution constraint ('Runs outside batch mode'), but says nothing about when to prefer this over CheckStructure/UpdateStructure or what to do if the structure is in use. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteTableA

Delete an ABAP table from the SAP system via ADT deletion API. Transport request optional for local objects. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
table_nameYesTable name.
transport_requestNoTransport request number, not a task. Required for transportable objects. Optional for local objects.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it does add two genuine operational facts beyond the schema: the transport requirement varies by object type, and the tool cannot run in batch mode. It omits the most consequential behaviors for a destructive operation — irreversibility, whether table data or dependent objects (data elements, DDL, CDS) block or cascade the deletion, and what permissions are needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the verb and resource, with every clause adding information (API, transport rule, batch constraint). No filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, so the description is the only source of behavioral detail for a destructive single-object operation. It is minimally viable but thin: it does not say what the response contains, whether the deletion is committed immediately, or how dependencies are handled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are already documented, including the transport/task distinction and the detail enum. The description's transport note duplicates rather than extends the schema, and table_name is left with only "Table name." Baseline 3 applies when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (delete) and resource (ABAP table) plus the underlying mechanism (ADT deletion API), so the action is unambiguous. It does not explicitly contrast itself with siblings like DeleteStructure or DeleteDdl, but the resource noun is distinctive enough that an agent can differentiate them from the schemas alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Transport request optional for local objects" and "Runs outside batch mode" imply preconditions and an execution constraint, so there is some implicit guidance. However, there is no explicit when-to-use vs. when-not, no mention of alternatives (e.g. DeleteStructure for structures), and no prerequisites such as object state or dependency checks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DeleteUnitTestB

Deletes the ABAP Unit test classes of the ABAP class named by class_name. The class's local test classes are deleted, and the class stays. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesClass that holds the tests. Must already exist.
transport_requestNoTransport request, not a task. Required for a transportable object.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses the destruction scope ('local test classes are deleted, and the class stays') and the execution mode ('outside batch mode'), but omits permissions/auth needs, reversibility, and whether deletion is confirmable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the operation and its destruction scope front-loaded; every clause conveys substantive information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-param destructive tool with no output schema or annotations, the description adequately covers what is deleted, what is preserved, and the execution mode. It stops short of permissions/transport behavior and return details, so it's strong but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are already well documented. The description only echoes class_name without adding format or constraints beyond the schema baseline, so a 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Deletes') and target ('the ABAP Unit test classes of the ABAP class named by class_name') and adds 'the class stays,' which distinguishes it from DeleteClass. It does not explicitly name the closely related sibling DeleteLocalTestClass, leaving some ambiguity about which to choose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no explicit when-to-use or when-not guidance. 'Runs outside batch mode' is a runtime constraint, not guidance on choosing this tool over alternatives like DeleteLocalTestClass or DeleteCdsUnitTest. Usage is only implied by the purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DescribeByListA

[read-only] Describes each repository object named in objects, in one call: its type, description and package. Input: objects: Array<{ name: string, type?: string }>. Each object may be of type: PROG/P, FUGR, PROG/I, CLAS/OC, FUGR/FC, INTF/OI, TABLE, STRUCTURE, etc. Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. Runs outside batch mode.

NameRequiredDescriptionDefault
objectsYes
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It adds [read-only] status, timeout semantics (cancels read, logs off session, system unchanged), runs on its own ABAP session, outside batch mode, and explains client-side cancel behavior. It does not cover authorization or error handling, but overall adds substantial behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and [read-only] tag. It is generally well-structured but repeats some timeout details already present in the schema, making it slightly verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (batch describe with timeout) and lack of output schema, the description covers the return attributes and timeout behavior thoroughly. It could mention result ordering or error cases, but it is sufficient for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%, so the description must compensate. It explains the objects array structure, provides a list of valid types, and clarifies the timeout consequence (cancellation, session logoff). This adds meaningful detail beyond the schema's own descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb 'Describes' and resource 'each repository object named in objects', and distinguishes itself from single-object siblings by emphasizing 'in one call'. It also enumerates the returned attributes (type, description, package), making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context for use: bulk description of multiple objects. However, it does not explicitly name alternatives like GetObjectInfo or state when not to use it, leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

DiscardBackgroundRunB

[read-only] [runtime] Removes the kept answer of one of your finished background runs. Works on a finished run; a started run runs to its end. Runs outside batch mode.

NameRequiredDescriptionDefault
run_handleYesThe run_handle a run started with background=true answered.

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full burden, yet it leads with a '[read-only]' tag while describing an operation that removes data — an internally inconsistent safety signal for an agent deciding whether to invoke it. It also never says whether the removal is recoverable or whether the run record itself survives, both critical for a discard operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler, and the core action is front-loaded ahead of the edge-case conditions. The bracketed tag prefix adds noise and the self-contradiction costs a point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, so the description is the only source for outcomes: it explains the running-run and batch-mode cases but omits what the tool returns, whether the run persists after the answer is discarded, and whether the action is reversible. Adequate but with meaningful gaps for a destructive tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter is fully documented in the schema (100% coverage), including how a run_handle is obtained ('answered' by a run started with background=true'). The description adds no constraints such as handle validity or staleness, so the schema does the work and baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: removing the kept answer of a finished background run. This distinguishes it from read-only siblings like GetBackgroundRun and ListBackgroundRuns, which surface the same objects. The phrase 'kept answer' is slightly opaque about exactly what artifact is deleted, keeping it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Works on a finished run; a started run runs to its end' gives a clear precondition and edge-case behavior, and 'Runs outside batch mode' is an explicit exclusion. It never names an alternative sibling or explains what to use instead if the run is still active, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetAbapASTA

[read-only] Parse ABAP code and return AST (Abstract Syntax Tree) in JSON format. Runs outside batch mode.

NameRequiredDescriptionDefault
codeYesABAP source code to parse

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description is crucial for transparency. It explicitly labels the operation as [read-only], immediately informing the agent about the safety profile of the tool, which is vital when no annotations are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is extremely efficient, front-loading the most critical pieces of information (read-only status, function, and output format) in a single, powerful sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the output is complex (an AST in JSON format), stating that format is a helpful level of completeness. The combination of the input requirement and the operational constraint (outside batch mode) provides a solid foundation for agent selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema coverage is 100%, so the definition does not need to elaborate on the parameter structure. It provides no additional meaning or context regarding the 'code' parameter that isn't already covered by the schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action (Parse) and the resource (ABAP code), specifying the output (AST in JSON). While similar tools exist in the sibling list, the focus on generating the AST provides a specific behavioral distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a critical operational constraint by stating it 'Runs outside batch mode,' which is essential guidance for ensuring the tool is applicable in the right execution context. It implicitly guides the user by describing what the tool does.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetAbapSemanticAnalysisA

[read-only] Perform semantic analysis on ABAP code and return symbols, types, scopes, and dependencies. Runs outside batch mode.

NameRequiredDescriptionDefault
codeYesABAP source code to analyze

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description does carry the safety signal itself via the '[read-only]' tag and adds a genuinely useful constraint: it cannot run inside batch mode. It does not disclose input size limits, whether the code must be syntactically complete, or what the result looks like beyond a list of categories.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no redundancy; the read-only marker and the batch-mode caveat are both front-loaded and each sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by enumerating return categories (symbols, types, scopes, dependencies). The batch-mode restriction is an important operational caveat. What remains unstated is whether the code must be a full compilation unit and any size constraints.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema description coverage is 100% ('ABAP source code to analyze'), so the baseline of 4 applies. The description adds nothing parameter-specific, but nothing is missing either.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Perform semantic analysis on ABAP code') and names the outputs produced (symbols, types, scopes, dependencies), which distinguishes it from the sibling GetAbapAST (syntax tree) without naming it explicitly. Clear on its own terms, but no explicit sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to choose this over GetAbapAST, GetLocalTypes, GetTypeInfo or GetWhereUsed, all of which sit adjacent to it in the sibling list. The only usage-shaped statement is the 'outside batch mode' constraint, which is a restriction rather than a selection rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetAbapSystemSymbolsA

[read-only] Resolve ABAP symbols from semantic analysis with SAP system information including types, scopes, descriptions, and packages. Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. Runs outside batch mode.

NameRequiredDescriptionDefault
codeYesABAP source code to analyze and resolve symbols for
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden and does so strongly: it declares read-only behavior, states that it runs on a dedicated ABAP session, explains that timeout cancels the read and logs off the session while leaving the system unchanged, and clarifies that a client-side cancel only ends the client's wait while SAP continues. It also notes it runs outside batch mode. What it does not cover is error behavior or response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a bracketed read-only marker followed immediately by purpose, then moves to session/timeout behavior. It is generally efficient, though the timeout explanation is lengthy and overlaps with the schema's timeout description, adding some redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the definition covers the operationally critical facts: read-only nature, dedicated session, timeout cancellation semantics, logoff behavior, client-vs-SAP cancellation distinction, and batch-mode exclusion. It is less complete on sibling differentiation and on error or prerequisite behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema descriptions for both 'code' and 'timeout' are already detailed, including the client-cancel nuance. The description adds little parameter-specific detail beyond restating that resolution acts on ABAP source and that timeout is optional; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Resolve ABAP symbols') and enumerates the returned content (types, scopes, descriptions, packages). However, it does not distinguish this tool from closely related siblings such as GetAbapSemanticAnalysis, GetAbapAST, or GetTypeInfo, leaving the agent to infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'from semantic analysis with SAP system information', suggesting it should be chosen when system-level metadata is needed alongside symbols. But there is no explicit when-to-use, when-not-to-use, or named alternative, so the agent must infer selection among semantic-analysis siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetAdtTypesA

[read-only] Retrieve all valid ADT object types (CLAS, TABL, PROG, DEVC, FUGR, INTF, DDLS, DTEL, DOMA, SRVD, SRVB, BDEF, DDLX, etc.) or validate a specific type name. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
validate_typeNoType name to validate (optional)

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden and mostly succeeds: it declares [read-only] and discloses the non-obvious batch contract (call is recorded under the next number and returns empty content; the answer is read by number afterwards). That is a real trap flagged proactively; it stops short of covering error behavior for an invalid validate_type or output shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the read-only marker and the primary purpose, then the batch caveat. Dense but every clause carries information; the parenthetical type list is long but legitimately useful for recognition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-optional-parameter read tool with no output schema and no annotations, the description covers both invocation modes and the cross-cutting batch behavior. Only the invalid-type outcome and result shape are left unstated, minor gaps given the schema documents the parameters fully.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description echoes the validate_type use case ("validate a specific type name"), which reinforces intent, but adds nothing about the detail parameter beyond what the schema already documents in detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Retrieve") and resource ("all valid ADT object types") and enumerates concrete type codes, plus a second mode (validate a type name). It does not distinguish itself from nearby siblings like GetLocalTypes, GetTypeInfo, or GetObjectInfo, so an agent must infer which type-lookup tool applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The two modes (list all vs. pass validate_type to validate one name) are implied by the phrasing, and the batch-mode note explains how to consume results inside a batch. But there is no explicit when-to-use-this-instead-of guidance versus GetLocalTypes/GetTypeInfo, which is exactly the choice an agent faces here.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetATCFindingsA

[read-only] Reads the findings of the ATC run whose worklist is named by worklist_id, for a run started with wait=true or wait=false. Answers each finding with the object, the source position, the priority, which check ran and what it said, plus how many objects were covered and the counts per priority. Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.
worklist_idYesWorklist identifier an ATC run answered.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations the description carries the full burden and does so well: it discloses read-only semantics, that it runs on its own ABAP session, exactly what happens when timeout fires (read cancelled, session logged off, system unchanged), that a client-side cancel only ends the client's wait while SAP continues, and how batch recording returns empty content that must be read by number.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in the first clause and the return contents follow, but the timeout explanation is long and largely duplicates the schema text. Dense punctuation makes it heavier than needed for a three-parameter tool, though no sentence is truly dead weight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by enumerating what each finding answers with (object, source position, priority, check, message) plus coverage and per-priority counts. For a read-only tool it leaves nothing an agent needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents detail, timeout and worklist_id fully. The description restates the timeout semantics and client-limit guidance almost verbatim rather than adding new meaning, though it does contribute the prerequisite that worklist_id comes from a wait=true/false run.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: reads the findings of an ATC run identified by worklist_id, and specifies the run must have been started with wait=true or wait=false. An agent can distinguish this from RunATC (starts a run) and GetATCRunStatus (checks status) without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: use after an ATC run has produced a worklist, and explains the practical trigger for setting timeout and the effect of batch mode. It never explicitly names GetATCRunStatus as the alternative or states when not to use this tool, which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetATCRunStatusA

[read-only] Answers whether the ATC run named by run_id has ended (a run started with wait=false answers its run_id). Answers the status the server reports and whether it is finished — finished means ended, whatever the checks found. The run's findings are read by its worklist_id. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
run_idYesRun identifier an ATC run started with wait=false answered.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations were provided, the description carries a heavy burden, which it fulfills excellently. It explicitly defines the behavior of 'finished' (meaning ended) and details complex system behaviors like how findings are accessed via worklist_id and the specific response pattern during batch processing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The tool is necessary verbose due to the complex nature of ATC run states and batch processing. However, the structure is logical: purpose first, followed by status definition, and ending with niche batch processing details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of an output schema, the description provides all necessary contextual detail. It thoroughly explains the functional semantics, including the difference between 'finished' and 'ended,' and the system implications of batch mode.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, which is a high baseline. However, the description adds critical semantic context, specifically defining that the run must be one started with wait=false to successfully answer using the provided run_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the function: answering whether an ATC run has ended. It is highly specific, focusing on status reporting and differentiating it from run execution or findings retrieval siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage conditions, stating that the run must have started with wait=false to answer via run_id. It also details how the tool behaves conditionally in batch mode, dictating when the result can be accessed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetBackgroundRunA

[read-only] [runtime] Reads one of your background runs by its run_handle: running, or finished with what the run tool answered (the system answer as it is, an error included). A read keeps the run; a finished run is kept until you discard it. Runs outside batch mode.

NameRequiredDescriptionDefault
run_handleYesThe run_handle a run started with background=true answered.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it tags itself read-only and runtime, notes a read keeps the run, explains a finished run persists until discarded, and states the system answer is returned verbatim including errors. Missing only rate-limit/polling behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with bracketed mode tags front-loaded and no filler; each clause conveys distinct information about state, retention, and return content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by explaining what is returned (the run tool's answer, errors included) and the retention lifecycle. Adequate for a single-parameter read tool, though polling guidance for in-progress runs is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is already fully documented as 'the run_handle a run started with background=true answered'. The description restates this without adding format or sourcing detail, so the schema does the real work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: reads one background run by its run_handle, covering both running and finished states. It implicitly distinguishes itself from ListBackgroundRuns by being handle-scoped, but never names the sibling, so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing line 'Runs outside batch mode' hints that batch-mode runs should be retrieved elsewhere (BatchAnswers), which is genuinely useful routing. However no explicit when/when-not or named alternatives are given, so usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetBehaviorDefinitionA

[read-only] Reads the RAP behavior definition named by behavior_definition_name in one request: its source code (part "source", the default; active or inactive version) or its ADT metadata document (part "metadata": package, responsible, description). Returns the part read. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
partNoThe document to read: "source" (default) the source code, "metadata" the ADT metadata document (package, responsible, description, ...).source
versionNoVersion of the source: "active" (default) for the deployed version, "inactive" for the modified version awaiting activation.active
behavior_definition_nameYesBehaviorDefinition name.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It usefully discloses read-only behavior, the default part and version, return content, and non-obvious batch recording semantics, though it does not cover error behavior or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the read operation and resource, then compactly covers part selection, return behavior, and batch mode. Every sentence adds relevant context without unnecessary padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description does a good job of explaining what is returned for each part and how batch mode behaves. It stops short of full error and permission context, but it is complete enough for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters, including both enums and their defaults. The description reinforces the part and version meanings but does not add substantial semantics beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: reading a RAP behavior definition by name, with clear alternatives for source code vs ADT metadata. It also specifies active/inactive source and the default part, so an agent can distinguish it from adjacent behavior-definition tools without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the tool's usage clear through the named behavior_definition_name and the part/version semantics, but it does not explicitly say when to prefer it over siblings such as GetBehaviorDefinitionVersionSource or GetBehaviorDefinitionVersions. The guidance is implied rather than comparative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetBehaviorDefinitionVersionDiffA

[read-only] Compares the two RAP behavior definition versions named by content_uri_from and content_uri_to, entries of its version history: answers the unified diff of their sources. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uri_toYesOpaque content_uri of the NEW/compare version, from the RAP behavior definition's version history.
content_uri_fromYesOpaque content_uri of the OLD/base version, from the RAP behavior definition's version history.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden and discloses non-obvious behavior: it is read-only, and in batch mode the call is recorded under the next number and returns empty content whose answer is fetched later by number. It omits error/failure semantics (e.g. invalid or non-adjacent version URIs) and any size limits on the diff, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, purpose front-loaded first, with the read-only marker and the batch caveat trailing. The batch sentence is dense and slightly convoluted ('Recordable: ... recorded under the next number'), but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with no annotations and no output schema, the description covers what it does, what it returns (a unified diff), and how it behaves inside a batch. What remains unstated is failure/edge-case handling, which is minor for this tool shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already labels content_uri_from as OLD/base and content_uri_to as NEW/compare. The description restates that these are version-history entries but adds no format, adjacency, or ordering constraints beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (compares) on a specific resource (two RAP behavior definition versions from its version history) and names the return (unified diff of their sources). This clearly separates it from GetBehaviorDefinitionVersions (list) and GetBehaviorDefinitionVersionSource (single source) without the agent needing to open schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The comparison use case is implied by 'the two ... versions named by content_uri_from and content_uri_to', and batch mode is described, but there is no explicit when-to-use/when-not guidance nor a named alternative such as GetBehaviorDefinitionVersionSource for retrieving a single version.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetBehaviorDefinitionVersionsA

[read-only] Lists the version history of the RAP behavior definition named by behavior_definition_name: each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and the opaque content_uri that names the version's source. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
behavior_definition_nameYesRAP behavior definition name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full load, and it does well: it declares the tool read-only via the [read-only] tag, labels content_uri as opaque, notes transport fields are only present 'when available', and explains the non-obvious recordable batch semantics (empty content in batch, answer read by number afterwards). It stops short of describing ordering or pagination of versions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the read-only tag and the core action, followed by the return-field enumeration and the batch caveat. The field list is somewhat long but each item is informative; no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description compensates by enumerating the response fields and explaining batch behavior, which is what an agent needs to call and interpret it. Only minor gaps remain (version ordering, size of result sets).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter has 100% schema description coverage ('RAP behavior definition name'), so the schema already does the work. The description restates the name parameter without adding format, case-sensitivity, or lookup guidance, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: lists the version history of a RAP behavior definition, and even enumerates the per-version fields returned (versionId, author, updatedAt, transportRequest, content_uri). This clearly separates it from GetBehaviorDefinitionVersionDiff and GetBehaviorDefinitionVersionSource in practice, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the purpose (use it to inspect version history), and the batch-mode sentence gives practical guidance on calling it inside BatchBegin/BatchEnd. However, there is no explicit statement of when to prefer this over the Diff/Source siblings, and no prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetBehaviorDefinitionVersionSourceA

[read-only] Reads the source of the RAP behavior definition version named by content_uri, an entry of the RAP behavior definition's version history. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uriYesOpaque content_uri of a version, from the RAP behavior definition's version history.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and explicitly marks the operation as read-only. It also discloses non-obvious batch behavior: calls are recorded, return empty content in batch mode, and answers are read later by number.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the read-only action and resource, then follows with the essential batch-mode caveat. Both sentences carry useful information without redundant restatement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool, the description covers purpose, read-only status, parameter source, and batch semantics adequately. It stops short of describing normal return content or error behavior, which leaves a minor gap given there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single content_uri parameter is already well documented in the schema. The description repeats that it names a version from the RAP behavior definition's version history but adds little beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: reads the source of a RAP behavior definition version identified by content_uri. This implicitly distinguishes it from sibling version-list and version-diff tools, but it does not explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies the tool is used when a content_uri is available from the RAP behavior definition version history. It also explains batch-mode recording, but it does not explicitly say when to choose this over GetBehaviorDefinitionVersions or GetBehaviorDefinitionVersionDiff.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetBehaviorImplementationA

[read-only] Reads the RAP behavior implementation (its class) named by behavior_implementation_name in one request: its source code (part "source", the default; active or inactive version) or its ADT metadata document (part "metadata": package, responsible, description). Returns the part read. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
partNoThe document to read: "source" (default) the source code, "metadata" the ADT metadata document (package, responsible, description, ...).source
versionNoVersion of the source: "active" (default) for the deployed version, "inactive" for the modified version awaiting activation.active
behavior_implementation_nameYesBehaviorImplementation name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and largely meets it: it declares [read-only], explains that the answer is the part read, and discloses the non-obvious batch-mode recording behavior (empty content, answer retrieved by number after the batch). It omits error/not-found behavior and whether inactive reads require the object to be locked, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the read-only marker and resource before the mode options, and every clause carries content. The single long multi-clause sentence is slightly run-on but not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by stating what is returned ('Returns the part read') plus the batch-mode return semantics. For a three-parameter read tool this is nearly sufficient; only error and permission behavior are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both enums are already documented in the schema, so the description's restatement of part values and the default adds little beyond the structured fields. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: reads the RAP behavior implementation class named by behavior_implementation_name, and enumerates the two read modes (source, metadata). The resource is distinct enough from GetBehaviorDefinition and UpdateBehaviorImplementation, though the description never explicitly contrasts them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implied usage is clear from the part/version enumeration and the batch-mode note, but there is no explicit when-to-use versus alternatives (e.g., version-source siblings for historical versions, or GetBehaviorDefinition for the definition itself). The agent must infer routing from the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetClassA

[read-only] Reads the ABAP class named by class_name in one request: its source code (part "source", the default; active or inactive version) or its ADT metadata document (part "metadata": package, responsible, description). Returns the part read. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
partNoThe document to read: "source" (default) the source code, "metadata" the ADT metadata document (package, responsible, description, ...).source
versionNoVersion of the source: "active" (default) for the deployed version, "inactive" for the modified version awaiting activation.active
class_nameYesClass name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the load and does so well: it self-declares read-only, explains that exactly one part is returned, and discloses the non-obvious batch-mode behavior where calls return empty content and are read back by number. It stops short of covering failure modes (class not found, inactive version missing) or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and return contract are front-loaded, and the batch caveat is correctly deferred to the end. The batch sentence is dense but every clause (recording, empty answer, read by number) is actionable information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter read tool with no output schema, the description covers the selection space (part, version), what is returned, and the batch interaction quirk. Missing only error/edge-case behavior, which is a minor gap at this complexity level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the enums are documented inline, so the schema already conveys part/version semantics. The description restates the same defaults and meanings without adding format or edge-case detail, making it a baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

It states a precise verb and resource ("Reads the ABAP class named by class_name") and enumerates the two documents it can return, source or ADT metadata, including the active/inactive version axis. It does not contrast itself with closely-named siblings such as GetClassVersionSource or GetClassVersions, so an agent cannot fully rule those out from the text alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied clearly enough (read current class source or metadata), but there is no explicit when-to-use/when-not guidance and no mention of the versioned-read siblings as alternatives. An agent must infer routing from the tool name and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetClassVersionDiffA

[read-only] Compares the two ABAP class versions named by content_uri_from and content_uri_to, entries of its version history: answers the unified diff of their sources. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uri_toYesOpaque content_uri of the NEW/compare version, from the ABAP class's version history.
content_uri_fromYesOpaque content_uri of the OLD/base version, from the ABAP class's version history.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral burden and does well: it marks the tool as read-only, specifies the return as a unified diff, and importantly discloses batch-mode behavior where the call returns empty content and the answer is read by number later. It does not cover error behavior or permissions, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the read-only marker and the core diff purpose, then adds the batch-mode caveat. It is reasonably compact and every sentence contributes useful information, though the batch sentence is dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only diff tool with no output schema, the description gives enough to call it correctly: it explains the inputs are class version-history URIs, the output is a unified diff, and batch mode returns empty content. Error handling and prerequisite permissions are omitted but not critical for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both content_uri_from and content_uri_to are already documented as opaque version-history URIs for the old/base and new/compare versions. The description restates these parameters but adds little semantic detail beyond the schema, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: compares two ABAP class versions and returns the unified diff of their sources. This clearly distinguishes it from sibling tools such as GetClassVersionSource, which retrieves source rather than diffing versions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the purpose: use it when a unified diff between two class versions is needed. However, the description does not explicitly say when to prefer this over GetClassVersionSource, GetObjectVersionDiff, or other version-diff siblings, and it gives no exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetClassVersionsA

[read-only] Lists the version history of the ABAP class named by class_name: each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and the opaque content_uri that names the version's source. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
class_nameYesABAP class name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does a solid job: it declares '[read-only]', describes the exact response shape including conditional transportRequest/transportDescription ('when available'), and explains the batch recording contract (call recorded by number, empty content returned, answer read after the batch). It stops short of stating pagination, ordering, or what happens for a class with no history.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the read-only marker and the core purpose before the field enumeration and the batch caveat; every clause carries information. The single long sentence is dense, and the batch-mode clause is somewhat tacked on, keeping it below 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating the returned fields, and it covers the unusual batch-mode semantics. Missing is any pointer to the companion tools that consume versionId/content_uri, which would complete the workflow picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter, and schema description coverage is 100% ('ABAP class name'). The description adds no syntax guidance (namespace/prefix handling) beyond what the schema already provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lists the version history of the ABAP class named by class_name') and enumerates the returned per-version fields, so the agent knows exactly what it gets. It only implicitly differentiates from siblings like GetClassVersionSource and GetClassVersionDiff via the 'opaque content_uri' mention, rather than naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (fetch version list, then use content_uri to reach the source) but never states when to pick this over GetClassVersionDiff, GetClassVersionSource, or the generic GetObjectVersions. The batch-mode note gives a conditional usage rule, but only for the recordable path, not for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetClassVersionSourceA

[read-only] Reads the source of the ABAP class version named by content_uri, an entry of the ABAP class's version history. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uriYesOpaque content_uri of a version, from the ABAP class's version history.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the safety and behavioral burden and does so well: it declares the tool read-only and explains the non-obvious batch-mode behavior where the call is recorded and returns empty content until read later by number. It does not cover permissions or error behavior, but the key behavioral traits are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences. The read-only nature and core purpose are front-loaded, followed by the important batch-mode caveat, with no wasted or redundant text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with no annotations and no output schema, the description covers purpose, read-only safety, and batch-mode semantics well. It could state more explicitly that a normal call returns the source content, but the meaning is strongly implied and the critical non-obvious behavior is included.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents content_uri as an opaque version identifier from the class version history. The description reinforces that meaning but adds no syntax, format, or validation details beyond what the schema provides, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it reads the source of a named ABAP class version. It clearly distinguishes the tool from version-listing and version-diff siblings by focusing on source retrieval for a specific version identified by content_uri.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the usage context clear: call it when you have a content_uri from the ABAP class version history and need that version's source. It does not explicitly name alternatives such as GetClassVersionDiff or GetClassVersions, but the source-focused purpose provides clear context without misleading exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetDataElementA

[read-only] Reads the ABAP data element named by data_element_name in one request: its ADT metadata document (definition, package, description). Returns it under metadata, with part: "metadata". Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
data_element_nameYesData element name.

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden and does well: it declares [read-only], explains the exact return shape (`metadata` key with `part: "metadata"`), and discloses the non-obvious batch/recordable behavior where the call returns empty content and is read back by number. It omits failure behavior (e.g. what happens if the data element does not exist) and permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the [read-only] marker, then purpose, then return shape, then the batch caveat. The final batch sentence is dense but every clause (recorded number, empty content, read back by number) carries information an agent cannot get elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description supplies both the safety profile (read-only) and the return structure (`metadata` / `part: "metadata"`), plus batch semantics. Error/absence handling is the main missing piece for a single-object read.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (data_element_name, version with enum/default) are documented in the schema. The description only restates that the name identifies the object and does not add nuance such as how `version` interacts with the returned metadata, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb and resource: 'Reads the ABAP data element named by data_element_name', plus the concrete return payload (ADT metadata document with definition, package, description). It is clearly separable from CreateDataElement/UpdateDataElement/CheckDataElement by verb, though it never names a sibling to contrast with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No statement of when to use this instead of CheckDataElement, GetDataElement versions/GetObjectVersionSource, or GetTypeInfo. The batch-mode note is about how a call behaves, not when to choose this tool over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetDdlA

[read-only] Reads the CDS view (or classic DDL view) named by ddl_name in one request: its DDL source (part "source", the default; active or inactive version) or its ADT metadata document (part "metadata": package, responsible, description). Returns the part read. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
partNoThe document to read: "source" (default) the source code, "metadata" the ADT metadata document (package, responsible, description, ...).source
versionNoVersion of the source: "active" (default) for the deployed version, "inactive" for the modified version awaiting activation.active
ddl_nameYesDDL source name.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It explicitly labels the operation as read-only, says the requested part is returned, and explains the non-obvious batch-mode behavior where a recorded call returns empty content and is later read by number. It does not cover permissions, missing-object errors, or exact return format, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded paragraph with no wasted sentences. The read-only marker, part distinction, and batch behavior all earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity read tool with no output schema, the description covers the essential purpose, parameter choices, return value, and batch semantics. It is not fully complete because it omits failure behavior and does not specify the exact shape of the returned source or metadata.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents ddl_name, part, and version thoroughly. The description restates the meaning of part and version and adds context such as metadata fields, but adds little beyond what the structured schema already provides; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Reads') and resource ('CDS view (or classic DDL view)') and distinguishes the two readable parts, source and metadata. It does not explicitly contrast itself with sibling tools such as GetDdlVersionSource, GetDdlVersionDiff, or CheckDdl, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains how to choose between part='source' and part='metadata' and between active and inactive versions, which gives implied usage guidance. However, it never states when to use this tool instead of GetDdlVersions, GetDdlVersionSource, GetDdlVersionDiff, or CheckDdl, so alternative routing is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetDdlVersionDiffA

[read-only] Compares the two CDS view (DDL source) versions named by content_uri_from and content_uri_to, entries of its version history: answers the unified diff of their sources. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uri_toYesOpaque content_uri of the NEW/compare version, from the CDS view (DDL source)'s version history.
content_uri_fromYesOpaque content_uri of the OLD/base version, from the CDS view (DDL source)'s version history.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no structured annotations, the description carries the full burden and does well: it declares '[read-only]', states the answer is a unified diff of the sources, and explains the non-obvious batch-mode behavior (recorded under a number, returns empty content, answer read later by number). It omits any note on diff size/truncation or error behavior for invalid uris.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the read-only marker and the core comparison, then the batch-mode caveat. No filler and every clause conveys operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Return value is described qualitatively ('unified diff of their sources') despite no output schema, and the batch recording contract is spelled out. What is missing is how to acquire the content_uris and whether diff output is paginated or truncated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already labels content_uri_from as OLD/base and content_uri_to as NEW/compare. The description restates the same pairing without adding format, provenance, or how to obtain the opaque uris, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: compares two CDS view (DDL source) versions and returns the unified diff of their sources. The old/new mapping via content_uri_from/content_uri_to is explicit, so an agent can distinguish it from sibling source/version-list tools like GetDdlVersionSource and GetDdlVersions, though it never names those alternatives directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Says the two content_uris are 'entries of its version history', which implies a prior GetDdlVersions call but never states that prerequisite outright. There is no explicit when-to-use vs GetDdlVersionSource (single version) guidance, so the routing is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetDdlVersionsA

[read-only] Lists the version history of the CDS view (DDL source) named by ddl_name: each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and the opaque content_uri that names the version's source. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
ddl_nameYesCDS view (DDL source) name.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the burden and does well: it flags the operation as [read-only], enumerates the returned record shape, and discloses the non-obvious batch-mode behavior (calls are recorded by number and answer with empty content, to be read afterward). It stops short of noting pagination limits, permissions, or behavior when ddl_name does not exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence front-loads the verb, resource, and return fields, followed by a short batch-mode caveat. Every clause carries information, though the run-on return-field enumeration is slightly harder to scan than a short bulleted structure would be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must convey the return shape, and it does so field by field, plus it explains the batch recording semantics that would otherwise be surprising. Remaining gaps are minor: no mention of ordering, empty-history behavior, or error cases for an unknown ddl_name.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter's schema description already says 'CDS view (DDL source) name.' The description restates essentially the same meaning ('the CDS view (DDL source) named by ddl_name') without adding format, case sensitivity, or naming-convention detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: lists the version history of the CDS view (DDL source) named by ddl_name, and enumerates the fields returned (versionId, author, updatedAt, title, transportRequest, content_uri). The mention that content_uri merely 'names the version's source' implicitly separates it from GetDdlVersionSource and GetDdlVersionDiff siblings, so an agent can identify it as the enumerator rather than the fetcher or differ.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: an agent can infer it should call this first to enumerate versions, then use the content_uri with a source tool. However, no sibling is named explicitly and there is no guidance on when to prefer GetObjectVersions (the generic variant) over this typed one, nor any prerequisite such as the object needing to exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetDdlVersionSourceA

[read-only] Reads the source of the CDS view (DDL source) version named by content_uri, an entry of the CDS view (DDL source)'s version history. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uriYesOpaque content_uri of a version, from the CDS view (DDL source)'s version history.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the safety burden itself by declaring [read-only]. It also discloses the non-obvious batch/recordable semantics — the call returns empty content and must be read back by number — which an agent could not infer from schema. It omits error behavior for invalid or stale content_uri.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two front-loaded sentences with the read-only marker and the core action up front. The repeated parenthetical 'CDS view (DDL source)' is slightly redundant but does not obscure meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A single-parameter read tool with no output schema: the description says it returns the source, and explains the empty-content batch case, which is the one place the return value deviates. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already describes content_uri as an opaque URI from the version history. The description restates the same provenance without adding format, sourcing, or validity details beyond it, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: reads the DDL source of a named CDS view version, not the version list or diff. The distinction from siblings like GetDdlVersions and GetDdlVersionDiff is implicit in the phrasing and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It indicates that content_uri is an entry of the version history, which implies you must first enumerate versions, but no sibling (e.g. GetDdlVersions) is named and there are no explicit exclusions for when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetDomainA

[read-only] Reads the ABAP domain named by domain_name in one request: its ADT metadata document (definition, package, description). Returns it under metadata, with part: "metadata". Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
domain_nameYesDomain name.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does reasonably well: it discloses read-only behavior, one-request metadata retrieval, return under `metadata` with `part: "metadata"`, and batch recording semantics including empty answers and later answer retrieval by number. It omits permission/error behavior, which keeps it from 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is front-loaded with the purpose and return shape, and the second sentence efficiently covers batch-mode recording behavior. Both sentences earn their place and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with no output schema, the description explains the return envelope and batch behavior sufficiently for correct invocation. Nothing critical is missing for an agent to understand what the tool does and returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema, including the version enum. The description mentions `domain_name` but adds no version semantics or other parameter guidance beyond the schema, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ("Reads") and resource ("ABAP domain") and narrows scope to the ADT metadata document with its definition, package, and description. It does not explicitly name a sibling such as CheckDomain or ActivateDomain to sharpen differentiation, so it falls short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly marks the tool as read-only and explains batch-mode behavior, but gives no explicit when-to-use/when-not guidance or alternative-tool routing. Usage is only implied by "read-only" and "metadata document."

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetEnhancementImplA

[read-only] Retrieve source code of a specific enhancement implementation by its name and enhancement spot. Runs outside batch mode.

NameRequiredDescriptionDefault
enhancement_nameYes[read-only] Name of the enhancement implementation
enhancement_spotYesName of the enhancement spot

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden: it does declare read-only and discloses the non-batch execution constraint, which is genuine behavioral information beyond the schema. It is silent on what happens when the implementation is not found, whether the source is truncated, or any authorization requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the read-only tag and the core action front-loaded, and the execution-mode caveat tacked on at the end. Efficient, with only slight redundancy between the "[read-only]" tag and the schema's own repeat of that tag.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, read-only source retrieval tool with no output schema, the description covers what it returns (source code) and the execution context. Only edge-case behavior (missing implementation, large sources) is left unaddressed, which is a minor gap at this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the input schema. The phrase "by its name and enhancement spot" merely restates the parameter names and adds no format, case-sensitivity, or naming-convention detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ("Retrieve source code of a specific enhancement implementation") plus the two identifying keys, so an agent can tell it is a source-read tool rather than a metadata read. It does not differentiate itself from close siblings such as GetEnhancements or GetEnhancementSpot, which an agent would have to disambiguate on its own.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Runs outside batch mode" is an implicit usage constraint that steers the agent away from BatchBegin/BatchEnd contexts, but there is no explicit when-to-use statement and no named alternative for listing or reading enhancement spots. The guidance is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetEnhancementsB

[read-only] Lists the enhancements (enhancement implementations) of the program, include, function group or class named by object_name and object_type. Takes object_name and object_type (one object: its enhancements) or objects (several objects: one entry per object, in the order given, each its enhancements answer or { object_name, object_type, error }). When object_type is one of CLASS, CLAS, CLAS/OC, FUNCTION_GROUP, FUNCTIONGROUP, FUGR, FUGR/F, PROGRAM, PROG, PROG/P and include_nested is any value but true, recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
objectsNo[read-only] Several objects, read together (give this or object_name and object_type)
object_nameNoName of the ABAP object (with object_type; or give objects)
object_typeNo[read-only] Type of the ABAP object

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It declares the tool is [read-only] and discloses non-obvious batch behavior, including that calls can be recorded under the next number and answered with empty content. It does not describe permission requirements, the shape of the enhancement answer, or pagination, and it references include_nested even though that parameter is absent from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the tool's purpose and then covers input modes and batch behavior. It is dense but contains no filler; each sentence addresses a distinct concern. The long sentence about batch recording is harder to parse but still earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There are no annotations and no output schema, so the description should be fairly complete. It covers read-only behavior, single vs multiple objects, and batch recording, but it does not describe the return shape of an enhancement answer or any permission constraints. The include_nested reference is also incomplete because that parameter is missing from the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters and the baseline is 3. The description adds useful mode semantics: single-object vs multi-object calls, ordering, and per-object error handling. However, the mention of include_nested, which is not in the schema, creates some ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it lists enhancement implementations for a named ABAP object. It clearly names the object kinds it works with (program, include, function group, class). However, it does not explicitly distinguish this tool from sibling tools such as GetEnhancementImpl or GetEnhancementSpot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the two input modes: object_name plus object_type for one object, or objects for several objects. It does not say when to choose this tool over related enhancement or object-information tools, and it provides no exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetEnhancementSpotA

[read-only] Retrieve metadata and list of implementations for a specific enhancement spot. Runs outside batch mode.

NameRequiredDescriptionDefault
enhancement_spotYesName of the enhancement spot

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It usefully discloses read-only behavior and that it runs outside batch mode, but omits permissions, error behavior, and response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with zero waste and front-loads the core purpose and read-only constraint. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool, the description covers purpose, read-only behavior, and batch-mode context. It could more explicitly describe the returned metadata, but it is sufficient for an agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the single parameter is already documented in the schema. The description adds no syntax or format details beyond referencing a specific enhancement spot, making the baseline score appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: retrieve metadata and list implementations for a specific enhancement spot. It implies differentiation from broader siblings like GetEnhancements through the word 'specific', but does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'specific enhancement spot', suggesting the caller already has a spot name. However, there is no explicit guidance on when to use this versus GetEnhancements or GetEnhancementImpl, and no exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetFunctionGroupA

[read-only] Reads the ABAP function group named by function_group_name in one request: its ADT metadata document (package, description, contents). Returns it under metadata, with part: "metadata". Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
function_group_nameYesFunctionGroup name.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the burden and does well: it declares read-only, specifies the exact return shape (`metadata` key, `part: "metadata"`), and discloses the non-obvious batch-mode behavior where the call records under a sequence number and returns empty content whose answer must be fetched later. It stops short of covering failure modes (e.g., nonexistent group) or any authorization constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then return shape, then the batch caveat — a sensible ordering. The batch sentence is long and slightly dense, but it conveys information an agent cannot get elsewhere, so it earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description steps in to explain the response envelope and the batch recording semantics, which is exactly what is missing elsewhere. The remaining gap is edge-case behavior (missing or inactive function group, interaction with the `version` parameter), which is minor for a simple getter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, including a documented enum for `version`, so the schema already does the heavy lifting. The description only references `function_group_name` as the lookup key and adds no syntax, format, or version-selection guidance beyond it — the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Reads the ABAP function group') and scopes it precisely to the ADT metadata document, listing what that document contains (package, description, contents). This distinguishes it from siblings such as GetFunctionModule (module source) and CheckFunctionGroup (validation) without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The '[read-only]' tag and the batch-mode note imply this is the read-side call for a function group's definition, but the description never says when to prefer it over CheckFunctionGroup, ListFunctionModules, or the version/diff tools. Usage is inferable rather than stated, with no exclusions offered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetFunctionIncludeA

[read-only] Reads the include named by include_name of the ABAP function group named by function_group_name in one request: its source code (part "source", the default; active or inactive version) or its ADT metadata document (part "metadata"). Returns the part read. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
partNoThe document to read: "source" (default) the source code, "metadata" the ADT metadata document (package, responsible, description, ...).source
versionNoVersion of the source: "active" (default) for the deployed version, "inactive" for the modified version awaiting activation.active
include_nameYesInclude name.
function_group_nameYesFunction group containing the include.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden and largely meets it: it declares read-only, says exactly what is returned (the part read), and discloses the non-obvious recordable behavior in batch mode (empty content, answer retrieved by number). It omits error/not-found behavior and any authorization notes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence naming the read target and its variants, followed by a short batch-mode caveat. Dense but every clause carries information; the long first sentence is the only mild cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter read tool with no output schema, the description covers inputs, defaults, return value and batch semantics. Only edge-case behavior (missing include, inactive version absent) is left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with enums on part and version, so the schema already documents every parameter including defaults. The description restates the part/version choices without adding format or naming constraints beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (reads) and resource (the include of the named ABAP function group), plus the two variants it can return (source vs ADT metadata). An agent can distinguish it from ListFunctionGroupIncludes or GetFunctionGroup, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by defaults (part=source, version=active) and by the read scope, but there is no explicit statement of when to pick this over GetInclude or the function-module/file-level read tools. The batch-mode note gives context but not selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetFunctionModuleA

[read-only] Reads the ABAP function module named by function_module_name, BAPI or RFC-enabled ones included, in the function group named by function_group_name, in one request: its source code, which declares the parameter signature (part "source", the default; active or inactive version), or its ADT metadata document (part "metadata": package, responsible, description). Returns the part read. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
partNoThe document to read: "source" (default) the source code, "metadata" the ADT metadata document (package, responsible, description, ...).source
versionNoVersion of the source: "active" (default) for the deployed version, "inactive" for the modified version awaiting activation.active
function_group_nameYesFunction group containing the function module.
function_module_nameYesFunction module name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the behavioral burden well: it labels the operation read-only, describes the returned document by part, and explains batch-mode recording and delayed answer retrieval. It does not cover permissions or rate limits, but the key read behavior is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core read operation and then adds part/version and batch semantics. It is dense but efficient; the long opening sentence is justified by the amount of relevant behavior it conveys.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only retrieval tool with no annotations and no output schema, the description is complete enough: it specifies what can be read, the default part, version choice, and batch behavior. Minor missing details like auth requirements do not significantly hinder correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameter meanings are already well documented. The description adds minor nuance such as BAPI/RFC-enabled modules being included, but most parameter semantics are already present in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states a specific verb and resource: reads an ABAP function module in a function group, including BAPI/RFC-enabled ones, and returns either source or metadata. The purpose is precise, though it does not explicitly name sibling alternatives such as GetFunctionModuleVersions or ListFunctionModules.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides useful within-tool guidance on part selection and active/inactive versions, but does not state when to use this tool versus related siblings like GetFunctionModuleVersionSource, GetFunctionGroup, or ListFunctionModules. Usage is implied by the parameter semantics rather than explicitly routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetFunctionModuleVersionDiffA

[read-only] Compares the two ABAP function module versions named by content_uri_from and content_uri_to, entries of its version history: answers the unified diff of their sources. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uri_toYesOpaque content_uri of the NEW/compare version, from the ABAP function module's version history.
content_uri_fromYesOpaque content_uri of the OLD/base version, from the ABAP function module's version history.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden and does substantial work: it declares [read-only] and explains the batch-mode recording contract (call recorded under the next number, returns empty content, answer retrieved later by number). It does not cover authorization requirements or behavior on invalid/stale content URIs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the read-only marker and the core purpose, then a second sentence for the batch contract. The batch sentence is dense but every clause (recording, empty answer, read by number) carries operational meaning; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by stating the return is a unified diff of the sources, plus the batch-mode return caveat. For a two-required-param read tool this is close to complete; only error/precondition behavior is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and already labels content_uri_to as the NEW/compare version and content_uri_from as the OLD/base version. The description restates the same old-vs-new mapping and adds that the URIs come from the version history, but contributes no format or sourcing detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource - compares two ABAP function module versions identified by content_uri_from/content_uri_to - and names the return value (unified source diff). It does not explicitly contrast itself with the nearby GetFunctionModuleVersionSource or GetFunctionModuleVersions, so sibling differentiation relies on the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the wording: you compare two entries of a function module's version history. There is no explicit guidance on when to prefer this over GetFunctionModuleVersionSource (single version) or the generic GetObjectVersionDiff, and no stated preconditions such as needing both URIs from the version history listing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetFunctionModuleVersionsA

[read-only] Lists the version history of the ABAP function module named by function_module_name: each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and the opaque content_uri that names the version's source. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
function_group_nameYesOwning function group name (required).
function_module_nameYesABAP function module name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, yet the description declares read-only status and, more importantly, explains the batch ('Recordable') behavior: in batch mode the call is recorded under the next number and returns empty content, with the real answer read later by number. That is meaningful non-obvious context. It stops short of describing error behavior for a nonexistent module or any pagination/limits on the version list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in the first clause and the return-field list and batch note follow in order of relevance. It is dense but every clause carries information; the field enumeration is slightly long but earns its place given no output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully documents the shape of each version record and the content_uri handle, and it covers the batch recording model. For a simple two-parameter read tool this is nearly complete; only failure/empty-list behavior is unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented, and the baseline is 3. The description only echoes function_module_name as the subject and says nothing about function_group_name, adding no semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Lists the version history of the ABAP function module named by function_module_name') and enumerates the returned fields (versionId, author, updatedAt, transportRequest, content_uri), which implicitly separates it from siblings like GetFunctionModuleVersionSource and GetFunctionModuleVersionDiff. It never names those siblings outright, so routing still requires inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the resource: an agent can infer it is for inspecting a module's version list. There is no statement of when to prefer it over GetFunctionModuleVersionSource/VersionDiff, and no preconditions or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetFunctionModuleVersionSourceA

[read-only] Reads the source of the ABAP function module version named by content_uri, an entry of the ABAP function module's version history. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uriYesOpaque content_uri of a version, from the ABAP function module's version history.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does so well: it marks the tool as read-only and explains the important batch-mode recording behavior, including empty content and reading the answer later by number. It does not cover error behavior for stale or invalid URIs, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the read-only marker and core action. The batch-mode sentence is dense but every clause adds operational meaning for correct invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema, the description covers the essential return expectation (source content, with batch-mode empty content). It could mention failure modes for invalid content_uri, but otherwise it is complete enough to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter already has an adequate description. The description reinforces that content_uri names a version-history entry, but adds no new format, syntax, or selection details beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: reads the source of the ABAP function module version identified by content_uri. The version-history qualifier clearly distinguishes it from siblings that list versions or compute version diffs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the usage context clear: call it with a content_uri that came from the function module's version history. It does not explicitly name GetFunctionModuleVersions or GetFunctionModuleVersionDiff as alternatives, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetInactiveObjectsA

[read-only] Get a list of inactive ABAP objects — modified and pending activation. Shows classes, tables, CDS views, and other objects awaiting activation. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the disclosure burden and does so reasonably: it labels the tool read-only, identifies the result set, and explains the batch-mode behavior where calls are recorded and answers are retrieved later by number. It does not cover permissions or response limitations beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and scope, then adds the important batch-mode behavior in one additional sentence. Every sentence contributes useful information without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only list tool with no output schema, the description is largely complete: it states what is returned, gives object examples, and covers batch behavior. The only minor gap is that it does not describe the response structure in more detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one parameter, and the schema description coverage is 100%, including the full enum meaning for detail. The description does not add anything about the detail parameter, so the baseline of 3 is appropriate because the schema already documents it fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: get inactive ABAP objects that are modified and pending activation. It also names concrete object types (classes, tables, CDS views), so the agent can distinguish it from activation and generic object-listing siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear when this tool applies: inspecting objects awaiting activation. It also explains the batch-mode recording behavior, but it does not explicitly name a sibling to use for activation or say when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetIncludeA

[read-only] Read ANY single ABAP include source by name, from anywhere in the repository (an include may live outside any single program tree). Reads includes (PROG/I) by name. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
include_nameYesName of the ABAP Include

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full burden and discharges most of it: it declares read-only in band, states the cross-repository scope, and discloses the non-obvious batch behavior where a recorded call 'answers with empty content' and must be re-read by number. It omits what happens on a missing/ambiguous include name and any authorization requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with the core capability and its scope front-loaded, followed by the batch caveat. The '[read-only]' bracket and parenthetical are slightly cluttered but each sentence contributes information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema, the definition covers the essentials: it is a read, the name is repository-wide, and batch mode changes the return semantics in a way an agent would otherwise get wrong. Only failure behavior for an unknown include name is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single required parameter, so the baseline of 3 applies. The description adds some meaning by establishing that the name is resolved repository-wide rather than relative to a program tree, which helps the agent construct a valid value, but it adds no naming conventions or case-sensitivity detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Read ANY single ABAP include source by name', and adds the scoping fact that an include may live outside any single program tree, plus the PROG/I object types. This distinguishes it from list-style siblings like GetIncludesList, though it never explicitly contrasts itself with GetFunctionInclude, which is the closest source-reading sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context of use is clear (you have an include name and want its source, regardless of which program owns it), and the batch-mode sentence tells the agent a call can be recorded instead of executed. However, no explicit when-not or alternative routing is given, so the agent must infer that listing should go to GetIncludesList rather than here.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetIncludesListA

[read-only] Recursively discover and list ALL include files within an ABAP program or include. Takes object_name and object_type (one object: its tree) or objects (several objects: one entry per object, in the order given, each { object_name, object_type, tree } or { object_name, object_type, error }). Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. Runs outside batch mode.

NameRequiredDescriptionDefault
objectsNo[read-only] Several objects, read together (give this or object_name and object_type)
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.
detailedNo[read-only] If true, returns structured JSON with metadata and raw XML.
object_nameNoName of the ABAP program or include (with object_type; or give objects)
object_typeNo[read-only] ADT object type of the parent. Only these four values are supported: 'PROG/P' (program), 'PROG/I' (include), 'FUGR' (function group), 'CLAS/OC' (class). Any other value is rejected by the schema.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does: it declares read-only, states the read runs on its own ABAP session, explains that timeout cancels the read and logs off the session leaving the system unchanged, distinguishes a client-side cancel from a server-side cancel, and notes it runs outside batch mode.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the [read-only] tag and the verb+resource, then layers mode selection, timeout, and batch-mode notes. Dense but every sentence carries information; the timeout explanation is somewhat verbose and duplicated in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so description must convey returns; it describes the multi-object return shape and the detailed=true variant (structured JSON with metadata and raw XML) but says only 'its tree' for the single-object mode, leaving the exact listing format slightly underspecified. Overall adequate for a 5-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains the return shape for the objects array (one entry per object, in order given, each with tree or error) and the client-vs-server timeout interaction. The timeout text largely restates the schema's own description, capping it at 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope: 'Recursively discover and list ALL include files within an ABAP program or include.' An agent can tell this is a recursive include-hierarchy read, distinct from siblings like GetInclude or ListFunctionGroupIncludes. It does not name any sibling explicitly, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly explains the two calling modes (single object via object_name+object_type vs several via objects) and when to set a timeout, including the caveat to keep it below the MCP client's request limit. It gives no explicit exclusions or named alternatives, so 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetInterfaceA

[read-only] Reads the ABAP interface named by interface_name in one request: its source code (part "source", the default; active or inactive version) or its ADT metadata document (part "metadata": package, responsible, description). Returns the part read. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
partNoThe document to read: "source" (default) the source code, "metadata" the ADT metadata document (package, responsible, description, ...).source
versionNoVersion of the source: "active" (default) for the deployed version, "inactive" for the modified version awaiting activation.active
interface_nameYesInterface name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does well: it declares [read-only], states it returns the part read, and discloses the non-obvious batch-mode behavior where recorded calls return empty content and are read later by number. It omits auth requirements, error behavior for missing interfaces, and pagination/format details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and default are front-loaded, and every sentence carries useful information about parts, version, and batch recording. The batch-mode sentence is dense and could be split, but it is not padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter read tool with no output schema, the description explains the returned part, metadata contents, version choice, and batch recording behavior. It is largely complete, missing only return format details for source and failure behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents part, version, and interface_name with enums and defaults. The description reinforces the default and metadata contents but adds little syntax or semantic detail beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: reads the ABAP interface named by interface_name, returning either source or metadata. It clearly scopes the tool to a single interface read, though it does not explicitly distinguish itself from version-specific siblings such as GetInterfaceVersionSource or GetInterfaceVersions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the part/version semantics: read current source or metadata for one interface. There is no explicit when-to-use or when-not-to-use guidance, and no alternative sibling is named for historical version reads, checks, or activation workflows.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetInterfaceVersionDiffA

[read-only] Compares the two ABAP interface versions named by content_uri_from and content_uri_to, entries of its version history: answers the unified diff of their sources. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uri_toYesOpaque content_uri of the NEW/compare version, from the ABAP interface's version history.
content_uri_fromYesOpaque content_uri of the OLD/base version, from the ABAP interface's version history.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the burden and does well: it declares read-only behavior and, more valuably, discloses the non-obvious batch-mode semantics (call is recorded, returns empty content, answer retrieved by number after the batch). It omits error behavior for stale or mismatched content_uris and any permission notes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and return form, then the batch caveat. The first sentence is a somewhat dense run-on with colon-chained clauses, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by naming the return value explicitly (unified diff) and covering the batch-mode return path. For a two-parameter read tool, nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema already spells out OLD/base vs NEW/compare roles. The description restates that these are entries of the version history, matching but not exceeding the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (compares) plus resource (two ABAP interface versions) and names the exact inputs and output form (unified diff of sources). This clearly separates it from GetInterfaceVersionSource (single source fetch) and GetInterfaceVersions (history listing).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the prerequisite that both content_uris come from the interface's version history, but never states when to prefer this over GetObjectVersionDiff or the single-version source tool, nor any exclusions. Usage is inferable rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetInterfaceVersionsA

[read-only] Lists the version history of the ABAP interface named by interface_name: each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and the opaque content_uri that names the version's source. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
interface_nameYesABAP interface name.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it labels the operation read-only, describes the returned fields, notes that transportRequest is included "when available," and explains the non-obvious batch-mode recording behavior where calls answer with empty content and are read back by number.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then adds useful return-field and batch-mode context. It is dense but every part contributes; the only minor issue is the long field enumeration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-output-schema tool, the description is nearly complete: it explains return contents, the transport-request availability caveat, and batch behavior. It stops short of describing ordering or pagination limits, which would be useful for a history listing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents interface_name. The description only restates that the interface is named by interface_name and does not add format or case-sensitivity details, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ("Lists") and resource ("version history of the ABAP interface named by interface_name"), and it enumerates the returned fields, making clear this is a version-listing tool rather than a source or diff tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the stated purpose, but the description does not explicitly say when to choose this over sibling tools such as GetInterfaceVersionSource or GetInterfaceVersionDiff, nor does it state prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetInterfaceVersionSourceA

[read-only] Reads the source of the ABAP interface version named by content_uri, an entry of the ABAP interface's version history. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uriYesOpaque content_uri of a version, from the ABAP interface's version history.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does real work: it declares read-only behavior and explains the non-obvious batch-mode contract (call is recorded under the next number, returns empty content, answer retrieved later by number). It stops short of covering failures, invalid/expired URIs, or whether the full source is always returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the [read-only] marker and the core action, then the batch caveat. Dense but every clause carries information; the batch sentence is long but justified for a non-obvious behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read with no output schema, the description covers purpose, input provenance, and the one surprising behavioral mode. It leaves the return shape (raw ABAP source text) and size/handling characteristics implicit, which is a modest gap given no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the sole parameter's schema text already says it is an opaque content_uri from the version history, so the description's phrasing repeats rather than extends it. Baseline 3 is correct; a note on obtaining or scoping the URI would have raised it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource (reads the source of an ABAP interface version) and pins the input to a version-history entry, which separates it from the listing/diff siblings by implication. It never names GetInterfaceVersions or GetInterfaceVersionDiff explicitly, so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Saying content_uri is 'an entry of the ABAP interface's version history' hints that a version-listing call must come first, but the description never states that prerequisite or points at GetInterfaceVersions as the source of the URI. No when-not-to-use guidance versus GetInterface or the diff tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetLocalDefinitionsA

[read-only] Reads the local definitions include (the definitions include) of the ABAP class named by class_name, active or inactive version. Returns { class_name, version, part: 'source', source }. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for the deployed version, "inactive" for the modified version awaiting activation.active
class_nameYesParent class name.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No structured annotations are present, so the description carries the burden and does well: it declares [read-only], states the exact return shape, and — importantly — discloses the batch-mode recording behavior (empty content until read by number). This is genuine behavioral context an agent couldn't infer from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Read-only tag and core purpose are front-loaded, followed by return shape and batch semantics. The Recordable sentence is long but conveys non-obvious behavior, so it earns its place; slightly dense but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return shape (class_name, version, part, source) and the batch-read caveat, which covers what an agent needs to call and interpret the result. Minor gap: no explicit read-versus-update guidance, but nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both class_name and version are already documented in the schema. The description restates that class_name names the class and version is active/inactive, adding little beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (Reads) + resource (the local definitions include of the ABAP class) + scoping (active or inactive version). The phrase 'definitions include' cleanly distinguishes it from sibling tools GetLocalTypes and GetLocalMacros without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The version enum is explained, giving some context for the active/inactive choice, but there is no explicit when-to-use versus siblings (GetLocalTypes, UpdateLocalDefinitions, DeleteLocalDefinitions) or stated prerequisites. Usage is implied by the resource name rather than guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetLocalMacrosA

[read-only] Reads the local macros include of the ABAP class named by class_name, active or inactive version. Returns { class_name, version, part: 'source', source }. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for the deployed version, "inactive" for the modified version awaiting activation.active
class_nameYesParent class name.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it declares read-only, discloses the returned field set, and explains the non-obvious batch-mode behavior (empty content, answer retrieved later by number). It omits permission/auth requirements and any error behavior, keeping it just short of 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical information (what is read, from which class, which version) is front-loaded in the first clause, followed by return shape and batch caveat. Dense but every sentence adds value; the batch sentence is jargon-heavy yet necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by listing the returned fields, plus it covers the unusual batch-recorded invocation mode. A mutation-free, two-parameter read tool is adequately specified; only error/permission context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with the version enum already documented in the schema (active vs inactive). The description restates only that both versions are selectable and adds no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Reads the local macros include of the ABAP class') plus the version scope, which cleanly separates it from sibling getters like GetLocalTypes and GetLocalDefinitions. An agent can identify the exact artifact returned without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The read-only tag and 'active or inactive version' phrasing imply the read use case, and the batch-mode note tells the agent how calls behave in batch context. However, no alternatives are named and there is no explicit statement of when to prefer this over GetLocalTypes/GetLocalDefinitions or UpdateLocalMacros.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetLocalTestClassA

[read-only] Reads the local test classes include of the ABAP class named by class_name, active or inactive version. Returns { class_name, version, part: 'source', source }. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for the deployed version, "inactive" for the modified version awaiting activation.active
class_nameYesParent class name.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the burden and does so reasonably: it tags the tool [read-only], describes the return shape, and discloses the non-obvious batch-mode behavior where calls are recorded and return empty content read back by number. It stops short of noting prerequisites like class existence or error behavior, but this is solid disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core operation and return shape before the batch caveat, and every sentence carries information. The batch-mode sentence is dense but conveys genuinely non-obvious behavior, so it earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with no output schema, the description provides the return shape inline and covers the batch edge case. It lacks detail on error conditions or what 'part: source' implies, but an agent has enough to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the version enum already documents active vs inactive. The description restates the active/inactive choice and confirms class_name identifies the parent class, adding little beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Reads) and a specific resource (the local test classes include of the ABAP class named by class_name), scoped by active/inactive version. The resource is specific enough to distinguish it from nearby siblings like GetLocalTypes, GetLocalDefinitions, and GetLocalMacros.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clarifies the active vs inactive version choice and explains batch-mode behavior, which implies usage context. However, it never says when to prefer this over GetClass, GetInclude, or GetLocalTypes, nor does it state any exclusions; usage is implied rather than guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetLocalTypesA

[read-only] Reads the local types include (the implementations include) of the ABAP class named by class_name, active or inactive version. Returns { class_name, version, part: 'source', source }. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for the deployed version, "inactive" for the modified version awaiting activation.active
class_nameYesParent class name.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden. It explicitly declares the operation read-only, describes the return object shape, and discloses the unusual batch behavior where the call records under a number and returns empty content until read later. It does not cover permissions or error conditions, but it adds substantial context beyond the bare name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loads the core purpose and return shape before the batch-mode caveat. Every sentence contributes, though the batch note is dense and could be split for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only getter with no output schema, the description is nearly sufficient: it names the artifact, the parent object, the version options, and the returned fields. The batch-mode caveat is important and included, though permissions and failure behavior are not covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including an enum with default for version and a description for class_name, so the schema already documents both parameters. The description restates 'active or inactive version' and names the parent class but adds no syntax, constraints, or format details beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Reads') and a specific resource ('local types include (the implementations include) of the ABAP class named by class_name'), which clearly distinguishes it from siblings such as GetLocalDefinitions, GetLocalMacros, and GetLocalTestClass. An agent can identify the exact artifact and parent object without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly implies usage by naming the resource and the active/inactive version choice, but it never states when to choose this tool over alternatives like GetLocalDefinitions, GetLocalMacros, or GetClassVersionSource. The batch-mode note provides some operational context, but there are no explicit exclusions or decision rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetMessageClassA

[read-only] Reads the ABAP message class (MSAG/T100) named by message_class_name in one request: its ADT metadata document (XML: name, description, package, master language, messages). Returns it under metadata, with part: "metadata". Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
message_class_nameYesMessage class name.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: it discloses read-only nature, the return location (`metadata`) and `part: "metadata"`, and the non-obvious batch/recordable behavior (recorded by number, empty content returned, answer read after batch). Missing only error/permission behavior to reach a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose then the return shape then the batch caveat, with no wasted filler. Dense but each clause earns its place, though the batch sentence is somewhat terse and could be clearer.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description appropriately explains what is returned (ADT metadata XML containing name, description, package, master language, messages) and the batch-mode contract. Complete enough for a single-parameter read tool; only edge cases like permission requirements are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is documented as 'Message class name.' The description reinforces that message_class_name names the MSAG/T100 class but adds no format, syntax, or lookup detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Reads) and resource (ABAP message class / MSAG/T100) with exact scope, and the singular-object focus distinguishes it from GetMessageClassMessage, CreateMessageClass, and the other sibling verbs. An agent can identify it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The read intent is implied by '[read-only] Reads' and the surrounding create/update/delete siblings, but the description never explicitly says when to use this versus GetMessageClassMessage or how to reach individual message entries. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetMessageClassMessageA

[read-only] Reads the message numbered msgno of the ABAP message class (MSAG/T100) named by message_class_name in one request. Answers the one message under message: its number (msgno), text (msgtext), self-explanatory flag (selfexplainatory), long-text flag (documented), last changer (lastchangedby), change time (lastmodified), and every other field the system gives the message. A number absent from the class is refused as missing. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
msgnoYesMessage number (e.g., "001").
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
message_class_nameYesParent message class name.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden and does so well: it self-declares read-only, enumerates the returned fields, specifies the missing-number error, and explains batch-mode recording semantics (call recorded under the next number, empty content, answer read by number afterward). That batch caveat is exactly the kind of non-obvious behavior an agent cannot infer from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the read-only marker and the verb+resource, then the return shape, then edge cases. Padding exists ('and every other field the system gives the message'), and the batch sentence is dense, but every sentence contributes usable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating the key returned fields plus error and batch behavior. The one gap is the unmentioned detail parameter, which means the described 'every other field' answer does not visibly reconcile with the default terse projection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description reinforces msgno as a number within the class and message_class_name as the MSAG/T100 class name, but it never mentions the detail parameter (terse/full/raw), which materially changes the returned payload.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: reads the one message numbered msgno from the ABAP message class (MSAG/T100) named by message_class_name. The singular 'one message' scope cleanly separates it from the sibling GetMessageClass and the Create/Update/DeleteMessageClassMessage tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Establishes a clear when-to-use context (fetch exactly one message by class plus number) and adds an explicit failure condition: a number absent from the class is refused as missing. It does not explicitly route the agent to GetMessageClass for listing a whole class, so the alternative-handling is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetMetadataExtensionA

[read-only] Reads the CDS metadata extension named by metadata_extension_name in one request: its source code (part "source", the default; active or inactive version) or its ADT metadata document (part "metadata": package, responsible, description). Returns the part read. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
partNoThe document to read: "source" (default) the source code, "metadata" the ADT metadata document (package, responsible, description, ...).source
versionNoVersion of the source: "active" (default) for the deployed version, "inactive" for the modified version awaiting activation.active
metadata_extension_nameYesMetadataExtension name.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well: it declares read-only, explains that only the requested part is returned, and discloses the non-obvious batch behavior (recorded under the next number, returns empty content, answer retrieved by number after batch end). It does not say what happens on a missing name or an inactive object that has no modified version, so it stops short of full disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence, front-loaded with the verb and resource, then the part enumeration, then a separate clause for batch behavior. Nothing is wasted and the ordering matches how an agent decides to call it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter read tool with no output schema, the description covers the return shape adequately ("returns the part read"; metadata part contents enumerated) plus batch semantics. It is slightly thin on failure modes and on whether inactive source is empty when nothing is pending, but nothing an agent needs to make the call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both enums are documented in-schema, so the description only reinforces the defaults (part="source", version="active") rather than adding new semantics. Baseline 3 applies since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (reads a CDS metadata extension by name) and enumerates what can be read: source code or the ADT metadata document, active or inactive. It does not explicitly contrast itself with the version-oriented siblings (GetMetadataExtensionVersionSource, GetMetadataExtensionVersions), but the active/inactive framing implicitly separates it from the version-history family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the part/version defaults and by the batch-mode note, which tells an agent this call can be scheduled inside a batch and answered later. There is no explicit statement of when to prefer this tool over GetMetadataExtensionVersionSource or CheckMetadataExtension, so the agent must infer the boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetMetadataExtensionVersionDiffA

[read-only] Compares the two CDS metadata extension versions named by content_uri_from and content_uri_to, entries of its version history: answers the unified diff of their sources. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uri_toYesOpaque content_uri of the NEW/compare version, from the CDS metadata extension's version history.
content_uri_fromYesOpaque content_uri of the OLD/base version, from the CDS metadata extension's version history.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it declares "[read-only]" up front and discloses a genuinely non-obvious trait — that in batch mode the call is only recorded, returns empty content, and its answer must be read back by number. That is exactly the kind of behavior an agent cannot infer from schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the operation and its result before the batch caveat; the marker "[read-only]" leads. The batch sentence is dense but each clause carries information the agent needs, with only slight jargon overhead.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the operation, both inputs' roles, the return value (unified source diff — important since there is no output schema), and the batch read-back protocol. Minor gaps remain on failure modes (invalid/stale content_uri) and whether ordering of from/to is enforced.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents both parameters as opaque content_uris with old/base vs new/compare semantics. The description only restates that they are version-history entries, adding no format or acquisition detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Compares the two CDS metadata extension versions") and the exact output ("unified diff of their sources"), which cleanly separates it from sibling GetMetadataExtensionVersions (list) and GetMetadataExtensionVersionSource (single source). An agent can pick it out without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by "entries of its version history" and the old/new pairing, so an agent can infer it must first obtain content_uris from the versions tool. However, no sibling is named, no prerequisite is stated explicitly, and no exclusion (e.g. use GetObjectVersionDiff for other object types) is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetMetadataExtensionVersionsA

[read-only] Lists the version history of the CDS metadata extension named by metadata_extension_name: each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and the opaque content_uri that names the version's source. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
metadata_extension_nameYesCDS metadata extension name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it self-declares '[read-only]', describes the return fields (versionId, author, updatedAt, title, transportRequest/transportDescription, content_uri), and explains the batch 'recordable' behavior and empty answer. Missing details on pagination/ordering or required authorizations keep it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the read-only marker and the core purpose in the first clause, then details return fields and batch behavior. Dense but no filler; the parentheticals are slightly heavy but each carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, no-output-schema tool, the description is nearly complete: it explains return contents and batch semantics. A brief note routing to the diff/source siblings would close the remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is fully documented in the schema; the description only restates that the name identifies the extension. Baseline 3 is appropriate since the schema does the heavy lifting and the description adds no format/syntax nuance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource: "Lists the version history of the CDS metadata extension named by metadata_extension_name," and enumerates the fields each version carries. Purpose is unmistakable, though it never names the closely related siblings (GetMetadataExtensionVersionSource, GetMetadataExtensionVersionDiff) to differentiate its scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the verb 'lists the version history,' but there is no explicit when-to-use, when-not, or pointer to the sibling tools that fetch a specific version's source or a diff. The batch-mode note explains operational behavior rather than selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetMetadataExtensionVersionSourceA

[read-only] Reads the source of the CDS metadata extension version named by content_uri, an entry of the CDS metadata extension's version history. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uriYesOpaque content_uri of a version, from the CDS metadata extension's version history.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose a genuinely non-obvious trait: in batch mode the call is recorded under the next number and returns empty content, read back later by number. The '[read-only]' tag plus this recordable semantics is meaningful context beyond structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, purpose front-loaded before the batch/recordable caveat. Dense but no filler; the second sentence earns its place by covering batch semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema, the description covers purpose, provenance of the identifier, and batch return behavior, which is the main surprise an agent would hit. Only the shape of the returned source text is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is already documented as an opaque content_uri from the version history. The description restates essentially the same thing, adding no format, example, or origin detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: reads the source of a CDS metadata extension version identified by content_uri. It is distinguishable from GetMetadataExtensionVersions/VersionDiff by the word 'source' and the requirement for a version content_uri, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies the prerequisite (content_uri is 'an entry of the CDS metadata extension's version history'), which hints the agent must first enumerate versions. But it never names GetMetadataExtensionVersions as the way to obtain that uri, and gives no when-not guidance versus the diff or versions tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetObjectInfoA

[read-only] Returns the object tree of the package (DEVC), class (CLAS), program (PROG), function group (FUGR) or other object named by parent_type and parent_name. Shows root, group nodes, and terminal leaves up to maxDepth. With enrich=true each node also carries its description and package, from a repository search. Takes parent_type and parent_name (one object: its tree) or objects (several objects: one tree per object, in the order given; a failed one as { OBJECT_TYPE, OBJECT_NAME, error }). Read in ADT batch envelopes: per tier the root node structures of its nodes, then their type nodes; with enrich, the search of every node last. Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. Runs outside batch mode.

NameRequiredDescriptionDefault
enrichNo[read-only] Whether to add description and package via SearchObject (default true)
objectsNo[read-only] Several objects, read together (give this or parent_type and parent_name)
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.
maxDepthNo[read-only] Maximum tree depth (default depends on type). Every object's own type folders and their contents are always shown (one tier); a higher value only descends further for PACKAGES, expanding nested subpackages that many tiers deep — no captured node-structure document shows a non-package object usefully recursable beyond its own type folders, so other object types are capped at one tier regardless of a higher value here.
parent_nameNo[read-only] Parent object name
parent_typeNo[read-only] Parent object type (e.g. DEVC/K, CLAS/OC, PROG/P); with parent_name, or give objects
include_descriptionsNo[read-only] Include each leaf's description. Where the system serves ADT batch, each description is read from the leaf's metadata: one more read per leaf, which on a large tree takes most of the call (default false)

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present the description carries the full burden, and it does substantial work: it discloses the dedicated ABAP session, the timeout lifecycle (read cancelled, session logged off, system unchanged), the batch-envelope ordering of tiers, that enrich triggers a repository search per node, that include_descriptions costs one extra read per leaf, and the failure shape { OBJECT_TYPE, OBJECT_NAME, error }. It stops short of stating authorization requirements or any rate/session limits, which keeps it out of the top band.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose, return shape, input modes, and timeout caveat are front-loaded, which is good. However the paragraph is dense and repeats the timeout/MCP-client-cancel warning almost word-for-word from the schema, and the trailing 'Runs outside batch mode' is orphaned from the batch discussion earlier. Several sentences could be trimmed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a seven-parameter read tool with no annotations and no output schema, the description gives an adequate picture: what the tree contains (root, group nodes, terminal leaves), how enrich and include_descriptions change it, and how per-object failures are returned. Missing only the concrete response envelope shape and any permission expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all seven parameters and the baseline is 3. The description does add real interpretation for maxDepth ('a higher value only descends further for PACKAGES... other object types are capped at one tier'), but its timeout and enrich text is nearly verbatim duplication of the schema descriptions, so net added meaning is modest.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: 'Returns the object tree of the package (DEVC), class (CLAS), program (PROG), function group (FUGR)', and enumerates the supported object types with their ADT codes. That is well beyond a restated name. It never distinguishes itself from close siblings such as GetObjectStructure, GetPackageTree, or GetObjectNodeFromCache, so an agent cannot tell from the description alone which of those to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clarifies the two input modes (parent_type+parent_name for one object, objects for several) and states 'Runs outside batch mode', which implies usage context. But there is no explicit when-to-use versus alternatives, no exclusions, and no prerequisite guidance despite several overlapping tree-reading siblings. Usage is inferable rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetObjectNodeFromCacheB

[read-only] Returns a node from the in-memory objects list cache by OBJECT_TYPE, OBJECT_NAME, TECH_NAME, and expands OBJECT_URI if present. Runs outside batch mode.

NameRequiredDescriptionDefault
tech_nameYes[read-only] Technical name
object_nameYes[read-only] Object name
object_typeYes[read-only] Object type

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden; it does add useful traits — read-only, cache-backed, expands OBJECT_URI when present, and only valid outside batch mode. However it omits what happens on a cache miss (error vs. null), whether the cache can be stale, and what the returned node looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the read-only marker and the lookup key set front-loaded. No filler, only the trailing batch-mode note is slightly tacked on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a cache-read tool with no output schema and no annotations, the description should explain return shape and cache-miss behavior. It covers the lookup basis and the OBJECT_URI expansion but leaves those gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented; the description only restates the key names in caps. The one added semantic, OBJECT_URI expansion, concerns the return value rather than input parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns a node from the in-memory objects list cache') plus the exact key set used for lookup. It is distinguishable from siblings like GetObjectsList or GetObjectsByType, though the description never explicitly contrasts with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Runs outside batch mode' implies a usage context, but the agent is left to infer when to prefer this over GetObjectsList/GetObjectsByType. No explicit when-to-use or when-not-to-use guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetObjectsByTypeB

[read-only] Lists the objects of one type (classes, tables, programs, interfaces, etc.), the type whose node in the object tree is named by node_id, under the package or composite object named by parent_name, parent_tech_name and parent_type. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
formatNo[read-only] Output format: 'parsed' (default). 'raw' is accepted for backward compatibility but answers the same parsed text — see the note on `nodeLevel` below.
node_idYes[read-only] Node ID
parent_nameYes[read-only] Parent object name
parent_typeYes[read-only] Parent object type
parent_tech_nameYes[read-only] Parent technical name
with_short_descriptionsNo[read-only] Include short descriptions

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. It does add a valuable non-obvious trait: in batch mode the call is recorded under the next number and returns empty content, with the answer retrieved by number afterward. However, it says nothing about error behavior, permissions, result size, or how the returned list is shaped.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the read-only marker and the core verb+resource, followed by a single dense sentence that defines the addressing scheme and a second that covers batch recording. Every clause carries information; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter read tool with no annotations and no output schema, the description covers purpose, addressing, and batch semantics but never indicates what the returned object list contains or how large it may be. It is adequate to invoke correctly, but not complete for interpreting results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, which sets the baseline at 3, but the description genuinely adds meaning: it explains that node_id names the type's node in the object tree and that parent_name/parent_tech_name/parent_type identify the enclosing package or composite object, which the flat schema labels ('Node ID', 'Parent object name') do not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: lists objects of one type (classes, tables, programs, interfaces) and explains the identification path (the type node named by node_id under the package/composite object). The purpose is clear, though it never names sibling tools like GetObjectsList, GetPackageContents, or GetLocalTypes, so differentiation must be inferred from the hierarchical node+parent addressing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains which identifiers are needed (node_id plus the parent trio) but gives no explicit when-to-use or when-not-to-use guidance, and no alternatives are mentioned despite several overlapping list tools among the siblings. Batch-mode recording is described, but that is behavior, not selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetObjectsListA

[read-only] Recursively lists every child repository object of the program (PROG), function group (FUGR), class (CLAS), package (DEVC) or other composite object named by parent_name, parent_tech_name and parent_type, nested includes and subcomponents included. Takes parent_name, parent_tech_name and parent_type (one parent: its list) or objects (several parents: one entry per parent, in the order given, each { parent_name, parent_type, total_objects, objects } or { parent_name, parent_type, error }). Each level of the node tree is read in one ADT batch envelope. Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. Runs outside batch mode.

NameRequiredDescriptionDefault
objectsNo[read-only] Several parents, read together (give this or parent_name)
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.
parent_nameNo[read-only] Parent object name (with parent_tech_name and parent_type; or give objects)
parent_typeNo[read-only] Parent object type (e.g. PROG/P, FUGR)
parent_tech_nameNo[read-only] Parent technical name
with_short_descriptionsNo[read-only] Include short descriptions (default: true)

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no structured annotations, the description carries the full behavioral burden and does so well: it declares read-only behavior, recursion into nested subcomponents, per-level ADT batch reads, a dedicated ABAP session, and timeout cancellation that logs off the session and leaves the system unchanged. It also warns that a client-side cancel does not stop SAP work.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and read-only nature are front-loaded, and the content is dense but mostly justified for a complex recursive tool. Some timeout details are repeated verbatim in the schema and the description, but the description remains structured and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity, schema richness, and absence of an output schema, the description is nearly complete. It explains recursion, batching, session behavior, timeout semantics, and multi-parent return shape; it is slightly incomplete on the exact return shape for the single-parent mode.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds useful semantics beyond the schema: parent_name/parent_tech_name/parent_type represent one parent, objects represents several parents with preserved order, and the per-parent result shape is described including total_objects and error entries.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: it 'recursively lists every child repository object' of named composite parents, including nested includes. It is clear what the tool returns, but it never names or contrasts itself with close siblings such as GetObjectStructure or GetPackageContents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the two input modes (one parent using parent_name/parent_tech_name/parent_type, or several parents using objects), which implies usage. However, it gives no explicit guidance on when to choose this tool over similar repository-hierarchy tools, and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetObjectStructureA

[read-only] Returns the ADT structure of the repository object named by objecttype and objectname as a compact JSON tree. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
objectnameYesADT object name (e.g. /CBY/ACQ_DDL)
objecttypeYesADT object type (e.g. DDLS/DF)

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the burden and does meaningful work: it declares [read-only], describes the return as a compact JSON tree, and discloses the non-obvious batch-mode contract where the call returns empty content and the result must be retrieved by number later. It omits permission requirements and failure behavior, but the batch disclosure is genuinely valuable context not present in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action before the batch caveat, and nothing redundant. The batch sentence is dense but every clause (recording, empty response, read-by-number) is needed to use the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description is the only place return values could be explained, and 'compact JSON tree' is a thin account of a structure tree whose node shape is unknown. Given a read-only, three-parameter tool with fully documented params, it is adequate but leaves the agent guessing about the response format and error cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including an enum for detail with a full explanation of terse/full/raw, so the schema already documents all three parameters. The description adds only the output-shape hint (compact JSON tree) and no syntax or naming detail beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: returns the ADT structure of the repository object identified by objecttype/objectname, with the output shape (compact JSON tree) named. It does not differentiate itself from close siblings such as GetObjectInfo, GetTypeInfo, or GetStructure, so an agent must infer which of these generic object-readers to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to prefer this over GetObjectInfo/GetStructure/DescribeByList, and no prerequisites stated. The only usage instruction concerns batch mechanics (recorded under the next number, answer read afterwards), which is a calling procedure rather than a selection rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetObjectVersionDiffA

[read-only] Compares the two object versions named by content_uri_from and content_uri_to, entries of an object's version history, for the object type named by object_type: returns the unified diff (jsdiff) of their sources. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
object_typeYesObject type (the same value the version history was read with).
content_uri_toYesOpaque content_uri of the NEW/compare version (from the object's version history).
content_uri_fromYesOpaque content_uri of the OLD/base version (from the object's version history).

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does reasonably well: it self-declares read-only, discloses the return format (unified jsdiff of sources), and explains the non-obvious batch recording semantics where a call returns empty content and must be read back by number. It omits error/edge behavior (e.g., mismatched object_type, invalid content_uri).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences, front-loaded with the core comparison behavior, with batch semantics in a clearly marked second clause. Efficient, though the batch-mode sentence is jargon-heavy for a first-time reader.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by naming the return value (unified diff via jsdiff) and the batch-mode answer retrieval. Combined with the prerequisites for the three required parameters, an agent has enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description adds real meaning by clarifying that the two content_uris are entries of an object's version history (old/base vs new/compare) and that object_type must match the value history was read with. That goes slightly beyond the schema's own wording.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — it compares two object versions named by content_uri_from/content_uri_to for a given object_type and returns the unified jsdiff of their sources. This is far more specific than the sibling GetObjectVersionSource, though it doesn't explicitly say how it relates to the type-specific diffs (GetClassVersionDiff, GetTableVersionDiff, etc.).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies the prerequisites (both content_uris must come from the object's version history, and object_type must match how history was read), which is useful context. But it never says when to choose this generic diff over the many type-specific *VersionDiff siblings, leaving the core selection decision to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetObjectVersionsA

[read-only] Lists the version history of the class, program, interface, function module, table, structure, CDS view, behavior definition or metadata extension named by object_name and object_type. Returns each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and the opaque content_uri that names the version's source. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
object_nameYesObject name.
object_typeYesObject type.
function_group_nameNoOwning function group name. Required when object_type is function_module.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it marks the tool read-only, enumerates the returned fields (versionId, author, updatedAt, title, transportRequest/transportDescription, content_uri) and explains what content_uri is. The batch-recording behavior (empty content during batch, read by number afterwards) is a genuinely useful non-obvious trait. It stops short of pagination/ordering or behavior for objects with no version history.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose and return contents, then a compact batch-behavior note. The dense enumeration of object types is justified because it defines scope; nothing is redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by listing the returned fields, plus batch semantics and read-only status. What remains unaddressed — ordering, pagination, empty-history behavior — is modest for a read-only listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters, and the description adds only that the version history is keyed by object_name and object_type. It does not clarify the conditional requirement of function_group_name for function_module objects, which is the one parameter whose semantics could trip up a caller.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Lists') and resource ('version history') and enumerates the exact object types covered, so an agent knows precisely what comes back. It is a generic cross-type version lister and its scope is legible against the many per-type siblings (GetClassVersions, GetProgramVersions), even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the object_type enum and the phrase 'named by object_name and object_type', but there is no explicit when-to-use guidance, no mention of when to prefer this over the per-type siblings (GetClassVersions, GetTableVersions, etc.), and no stated preconditions. The batch-mode note is operational, not selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetObjectVersionSourceB

[read-only] Reads the source code of the object version named by content_uri, an entry of an object's version history, for the object type named by object_type. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uriYesOpaque content_uri of a version, from the object's version history.
object_typeYesObject type (the same value the version history was read with).

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden well: it flags [read-only] and discloses a non-obvious behavioral trait — in batch mode the call is recorded by number and returns empty content, later retrieved by number. It does not cover permissions or failure behavior, keeping it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences, front-loaded with the read-only tag and the core operation. The batch-mode sentence is terse and slightly cryptic ('under the next number') but earns its place by covering a key side effect.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description states it answers with source content, which is adequate. But it omits error behavior (invalid or stale content_uri), version/type mismatch handling, and any when-to-use context relative to siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and already documents both parameters, so the description needn't restate them. It adds only light framing ('an entry of an object's version history'), keeping this at the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: reads the source code of an object version identified by content_uri and object_type. However, it does not distinguish itself from the many per-type siblings like GetClassVersionSource or GetProgramVersionSource, which read the same thing for one specific object type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides no guidance on when to use this generic tool versus the sibling Get*VersionSource tools for class, program, interface, table, etc. The agent is left to infer the distinction between this and the type-specific readers.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetPackageA

[read-only] Reads the ABAP package named by package_name in one request: its ADT metadata document (description, super-package, sub-packages, ...), active or inactive version. Returns it under metadata, with part: "metadata": a summary, the details or the document as SAP sent it, per detail. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
package_nameYesPackage name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well: it declares read-only, discloses the return shape (under `metadata`, `part: "metadata"`), and explains the batch-mode quirk where a call records a number and answers with empty content later. It does not cover error behavior or permissions, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the read-only marker and the core action, with the batch caveat last. It is dense but every clause carries information; minor length could be trimmed but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description explains where the result lands (`metadata` / `part: "metadata"`) and how detail/version affect it, plus batch-mode semantics. Error and edge-case handling are omitted, so it is strong but not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already documents detail, version, and package_name with enums. The description only loosely reinforces the detail levels ('a summary, the details or the document as SAP sent it'), adding little beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (reads) and resource (ABAP package by package_name) and states what is returned (the ADT metadata document, active or inactive). It doesn't explicitly distinguish itself from nearby siblings like GetPackageContents or GetPackageTree, so it lands just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied (reading a package's metadata) and the batch-mode recording behavior is explained, but there is no explicit guidance on when to prefer this over GetPackageContents, GetPackageTree, or CheckPackage, nor any stated exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetPackageContentsA

[read-only] Retrieve objects inside an ABAP package as a flat list. Supports recursive traversal of subpackages. Takes package_name (one package: its list) or package_names (several packages: one entry per package, in the order given, each { package_name, objects } or { package_name, error }). Each level of the walk is read in one ADT batch envelope: the root node structures of its packages, then their type nodes; with include_descriptions, as single requests, several at a time. Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. Runs outside batch mode.

NameRequiredDescriptionDefault
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.
max_depthNoMaximum depth for recursive package traversal (default: 5)
package_nameNoName of the ABAP package (give this or package_names)
package_namesNoNames of several ABAP packages, read together (give this or package_name)
include_subpackagesNoInclude contents of subpackages recursively (default: false)
include_descriptionsNoInclude each object's description in the response. The walk's levels are then read as single requests, several at a time, rather than in ADT batch envelopes (default: false)

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden and does so thoroughly: it describes recursive traversal, ADT batch envelopes, dedicated ABAP sessions, timeout cancellation/logoff behavior, the fact that a client-side cancel does not stop SAP, and that it runs outside batch mode.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose, then moves through recursion, parameter modes, batching, and timeout behavior in a logical order. It is dense but mostly earns its length; some timeout details replicate the schema and could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex six-parameter tool with no annotations and no output schema, the description covers the essential operational behavior, timeout semantics, and multi-package response shape. The single-package return structure is only described as 'its list,' leaving a minor gap, but overall an agent has enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents each parameter. The description adds return-shape semantics beyond the schema: package_names yields one entry per package in input order, each being { package_name, objects } or { package_name, error }, and it explains how include_descriptions changes the request pattern.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource: 'Retrieve objects inside an ABAP package as a flat list.' The phrase 'flat list' also implicitly distinguishes it from the tree-oriented GetPackageTree sibling, so an agent can identify its role without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the two input modes (package_name vs package_names) and optional recursion, which implies usage. However, it never explicitly says when to choose this tool over alternatives such as GetPackageTree or GetPackage, and there are no exclusion rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetPackageTreeA

[read-only] Returns the complete tree of the ABAP package named by package_name: its subpackages and objects. Returns hierarchical tree with object names, types, and descriptions. Takes package_name (one package: its tree) or package_names (several packages: one entry per package, in the order given, each { package_name, tree, metadata } or { package_name, error }). Read in ADT batch envelopes: the package metadata with the root node structure, then each level of the walk; with include_descriptions, as single requests, several at a time. Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. Runs outside batch mode.

NameRequiredDescriptionDefault
debugNoInclude diagnostic metadata in response (counts, types, hierarchy info). Default: false
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.
max_depthNoMaximum depth for recursive package traversal. Default: 5
package_nameNoPackage name (give this or package_names)
package_namesNoSeveral package names, read together (give this or package_name)
include_subpackagesNoInclude subpackages recursively in the tree. If false, subpackages are shown as first-level objects but not recursively expanded. Default: true
include_descriptionsNoInclude each object's description in the response. The package metadata and the walk's levels are then read as single requests, several at a time, rather than in ADT batch envelopes. Default: false

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does substantial work: it declares the tool read-only, states it runs on its own ABAP session, explains that a timeout cancels the read and logs off that session leaving the system unchanged, and warns that a client-side cancel does not stop SAP. The ADT batch-envelope explanation is dense and slightly ambiguous against the closing "Runs outside batch mode", and no permission/auth requirements are mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and most sentences are informative, but the timeout caveat is restated almost verbatim from the schema description, and the ADT batch-envelope sentence is an implementation detail stated densely enough to be hard to parse. It could shed a third of its length without losing decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter read tool with no annotations and no output schema, the description covers the important gaps: return shape per mode, failure representation, session lifecycle, and cancellation behavior. Missing pieces are minor (no mention of result size limits or pagination for large package trees).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes somewhat beyond the schema by describing the per-package return shape ("{ package_name, tree, metadata } or { package_name, error }") and the ordering guarantee, but max_depth and include_subpackages are left entirely to the schema and debug is not mentioned at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb and resource ("Returns the complete tree of the ABAP package") and clarifies that subpackages and objects are included, so the agent knows exactly what it gets. It does not distinguish itself from near-siblings such as GetPackageContents or GetObjectStructure, which would be the only way to reach a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives useful conditional guidance between package_name (one package) and package_names (several, ordered, with per-package error entries), plus guidance on when to raise/lower timeout. However, it never states when to prefer this tool over the many sibling read tools that also return package/object structure, so the usage context is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetProgramA

[read-only] Reads the ABAP program (report) named by program_name in one request: its source code (part "source", the default; active or inactive version) or its ADT metadata document (part "metadata": package, responsible, description). Returns the part read. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
partNoThe document to read: "source" (default) the source code, "metadata" the ADT metadata document (package, responsible, description, ...).source
versionNoVersion of the source: "active" (default) for the deployed version, "inactive" for the modified version awaiting activation.active
program_nameYesProgram name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does add real behavioral context: it declares read-only, states that the answer is the part read, and discloses the non-obvious batch-mode contract (recorded by number, returns empty content, answer retrieved later via BatchAnswers). It stops short of error behavior (missing/inactive program) or authorization requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the read-only marker and the core verb+resource, and every following clause contributes (part selection, return value, batch behavior). The second half is dense and mixes three ideas in one sentence, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by stating the return value and the batch-mode empty-content response. For a 3-parameter read tool with full schema coverage, the only meaningful gap is error/edge-case behavior for nonexistent or inactive programs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both enum parameters are already documented in the schema, so the description is only restating the source/metadata and active/inactive meaning. Baseline 3 applies; the description adds mnemonic reinforcement but no new syntax or format detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Reads) and resource (the ABAP program/report named by program_name), and enumerates the two selectable parts (source vs ADT metadata). It does not differentiate itself from near siblings such as GetProgramVersions, GetProgramVersionSource, or CheckProgram, so an agent must infer that this reads the current/active version rather than a version history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'part' and 'version' defaults tell the agent how to shape a call, but nothing says when to choose this over CheckProgram, GetProgramVersions, or GetProgramVersionSource. The 'in one request' phrasing hints at the batch/version siblings but never names an alternative or an exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetProgramVersionDiffA

[read-only] Compares the two ABAP program versions named by content_uri_from and content_uri_to, entries of its version history: answers the unified diff of their sources. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uri_toYesOpaque content_uri of the NEW/compare version, from the ABAP program's version history.
content_uri_fromYesOpaque content_uri of the OLD/base version, from the ABAP program's version history.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden, and it does substantial work: declares [read-only], states the exact return shape (unified diff of sources), and discloses the non-obvious batch-mode contract (call is recorded under the next number, answer is empty, read back by number after the batch ends). It does not cover failure behavior for invalid or mismatched content_uris, size limits, or whether the diff is truncated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the read-only marker and the core comparison behavior, with the batch contract trailing. The 'Recordable:' phrasing is internal jargon and the second sentence is dense, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter tool with a fully documented schema and no output schema, the description covers purpose, inputs' origin, and return content. The remaining gap is practical usage detail: how to discover the content_uris and what happens when the versions are identical or the URIs are stale.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema itself already labels content_uri_from as the OLD/base version and content_uri_to as the NEW/compare version. The description only echoes that these are version-history entries, adding no syntax, format, or sourcing detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (compares two ABAP program versions) and names the return value (unified diff of their sources). The 'ABAP program' qualifier cleanly separates it from sibling diff tools such as GetClassVersionDiff, GetInterfaceVersionDiff, GetTableVersionDiff, and GetStructureVersionDiff.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies the workflow prerequisite by describing the inputs as 'entries of its version history', pointing an agent at GetProgramVersions/GetProgramVersionSource, and it explicitly explains how the tool behaves inside a batch. It never states when to prefer this over the generic GetObjectVersionDiff or when not to use it, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetProgramVersionsA

[read-only] Lists the version history of the ABAP program named by program_name: each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and the opaque content_uri that names the version's source. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
program_nameYesABAP program name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it does substantial work: it declares read-only status, enumerates the return shape (versionId, author, updatedAt, title, transportRequest/transportDescription, content_uri), and explains the non-obvious batch/recordable contract where the call returns empty content and must be read back by number. It omits any mention of result limits, pagination, or authorization requirements for a potentially long version history.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the read-only tag and the core purpose, then the return fields, then the batch caveat. Dense but every clause carries information; the batch sentence is long but describes behavior an agent cannot infer elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description compensates by listing exactly what each version record contains and how the batch mode answer is retrieved. It is nearly complete for a simple one-parameter list tool; only pagination/size expectations are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter is already documented as "ABAP program name." The description restates that the program is named by program_name without adding format, naming-convention, or case-sensitivity guidance, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Lists the version history of the ABAP program named by program_name") and even enumerates the returned fields. It does not explicitly name the sibling it is not — e.g., GetProgramVersionSource or GetProgramVersionDiff — so the agent must infer the split from the field list (content_uri) rather than being routed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: "Lists the version history" tells the agent the general occasion, and the mention of content_uri hints that source retrieval is a separate follow-up call. There is no explicit statement of when to prefer this over GetObjectVersions, GetProgramVersionSource, or GetProgramVersionDiff, and no prerequisites are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetProgramVersionSourceA

[read-only] Reads the source of the ABAP program version named by content_uri, an entry of the ABAP program's version history. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uriYesOpaque content_uri of a version, from the ABAP program's version history.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and clearly declares that the tool is read-only. It also explains non-obvious batch behavior: the call is recorded, returns empty content, and must be read by number after the batch ends. It does not cover permission requirements or error behavior, keeping it short of full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tight sentences, front-loads the read-only nature and core purpose, then adds only the relevant batch-mode caveat. No sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only getter with no output schema, the definition covers purpose, safety, and batch semantics adequately. A minor missing piece is explicit guidance to obtain content_uri from a version-history listing tool such as GetProgramVersions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameter is already documented in the schema. The description reinforces that content_uri identifies an entry in the ABAP program's version history, but adds no format or sourcing detail beyond that baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Reads the source') and names the exact resource: the ABAP program version identified by content_uri. It clearly distinguishes itself from version-listing and version-diff siblings by focusing on retrieving source for one version.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool should be used when the source of a specific version is needed, but it does not explicitly say when to use it versus GetProgramVersions or GetProgramVersionDiff. The batch-mode note describes behavior rather than selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetServiceBindingA

[read-only] Reads the OData service binding named by service_binding_name in one request: its binding document (part "source", the default) or its ADT metadata document (part "metadata": package, responsible, description), each in the response_format given. Returns the part read. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
partNoThe document to read: "source" (default) the source code, "metadata" the ADT metadata document (package, responsible, description, ...).source
response_formatNoPreferred response format. "json" requests JSON from endpoint, "xml" parses XML payload, "plain" returns raw text.xml
service_binding_nameYesService binding name. Case-insensitive.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description does meaningful work: it self-declares read-only, notes the call happens "in one request", states the return value is the part read, and — most valuably — discloses non-obvious batch semantics (recorded under the next number, empty content returned, answer retrieved by number after BatchEnd). Missing: error behavior for a nonexistent binding and any permission/lock considerations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single dense paragraph with the primary action and the read-only marker front-loaded, and the batch caveat deferred to the end where it belongs. Slightly overloaded with nested parentheticals, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter read tool with no output schema, the description covers what is read, which document variant, the response format, and the batch-mode protocol. The only real gap is that it does not sketch the shape of the returned document beyond naming a few metadata fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented in the schema. The description restates part and response_format semantics but adds no format/syntax detail (e.g., expected casing, what "plain" yields for a metadata part) beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — reads the OData service binding named by service_binding_name — and enumerates the two documents it can return (binding source vs ADT metadata). It is distinguishable from Delete/Update/CreateServiceBinding siblings by the read framing, though it never explicitly contrasts with the closest read sibling, GetServiceBindingPreviewUrl.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: you call it to fetch a binding document and choose a part. There is no explicit "use this when / use X instead" guidance, and no mention of when the metadata part is preferable to source, nor when GetServiceBindingPreviewUrl or GetServiceDefinition would be the better choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetServiceBindingPreviewUrlA

[read-only] Build the browser URL that previews a published service binding, and the service and $metadata URLs beside it. Answers: "open the service in a browser", "preview this service binding", "what is the OData URL of this binding". Reads the binding for the service, version and protocol, and the service definition for the entity sets; the preview URL needs an entity set, and the answer names what is missing. A Web API binding answers the service URLs alone. Runs outside batch mode.

NameRequiredDescriptionDefault
clientNoClient for the sap-client parameter. Omitted, the client the system reports is used; an empty string leaves the parameter out.
languageNoLogon language for the preview. Omitted, the language the system reports is used.
entity_setNoEntity set to open. Omitted, the first one the service definition exposes is used.
navigationNoAssociation or composition to follow. Omitted, the first one of the exposed root view is used.
target_entity_setNoEntity set the navigation reaches. Omitted, the second exposed entity set is used.
service_binding_nameYesService binding name.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden well: it declares read-only behavior, names the two internal reads it performs (binding, service definition), discloses the failure mode ('the answer names what is missing' when no entity set exists), and states the batch-mode restriction. It leaves out permission/prerequisite requirements and whether the URL is deterministic across calls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core capability is front-loaded in the first sentence, followed by trigger phrases, mechanics, and the batch-mode caveat — every sentence carries information. A few clauses are telegraphic ('A Web API binding answers the service URLs alone.'), which costs little but keeps it short of flawless flow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter read tool with no output schema, the description conveys the shape of the result (preview URL plus service and $metadata URLs) and how missing inputs are handled. Exact return structure and pagination/format details are unspecified, but an agent has enough to call it correctly and interpret the answer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter already documents its default ('Omitted, the first one the service definition exposes'). The description only reinforces the entity-set dependency for preview URLs and implies the navigation/target_entity_set pairing, so it adds marginal value beyond the schema rather than new semantics — baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb+resource ('Build the browser URL that previews a published service binding') and enumerates the companion outputs (service URL, $metadata URL). The quoted trigger phrases make it unmistakable versus sibling GetServiceBinding, which retrieves binding metadata rather than constructing URLs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description supplies concrete when-to-use triggers ('open the service in a browser', 'what is the OData URL of this binding') plus a mode exclusion ('Runs outside batch mode') and a protocol-specific branch (Web API bindings return service URLs only). It never explicitly contrasts with GetServiceBinding/ValidateServiceBinding, so it stops short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetServiceDefinitionA

[read-only] Reads the service definition named by service_definition_name in one request: its source code (part "source", the default; active or inactive version) or its ADT metadata document (part "metadata": package, responsible, description). Returns the part read. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
partNoThe document to read: "source" (default) the source code, "metadata" the ADT metadata document (package, responsible, description, ...).source
versionNoVersion of the source: "active" (default) for the deployed version, "inactive" for the modified version awaiting activation.active
service_definition_nameYesServiceDefinition name.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the behavioral load: it does declare read-only and discloses the non-obvious batch-mode behavior (call is recorded, answer is empty, content retrieved by number afterward), which is genuinely useful context. It stops short of stating failure modes (e.g., missing definition, inactive source absent) or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single dense paragraph, front-loaded with the purpose and resource before enumerating options and the batch caveat. Slightly long but every sentence carries information; the batch note could be separated for scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only three well-documented parameters, no output schema, and no annotations, the description covers what is read, what is returned, and the batch-mode twist. Missing only error/permission behavior and guidance on picking between source and metadata beyond the parenthetical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both enums are already documented with descriptions, so the schema does the heavy lifting. The description restates the part values and the active/inactive version semantics without adding syntax or edge-case detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (reads) and resource (the service definition named by service_definition_name) and disambiguates the two possible payloads, source code vs. ADT metadata document. An agent can tell exactly what this returns without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains that either the source or metadata document is fetched 'in one request,' steering the agent away from multi-call approaches, and describes the batch-mode recording path. It does not name explicit alternatives or when-not-to-use conditions versus siblings like GetObjectVersionSource.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetSqlQueryA

[read-only] Execute ABAP SQL SELECT queries on database tables and CDS views via SAP ADT Data Preview API. Use for ad-hoc data retrieval, row counts, and filtered queries. Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.
sql_queryYesSQL query to execute
row_numberNo[read-only] Maximum number of rows to return

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it declares read-only, states that the query runs on its own ABAP session, explains that a timeout cancels the read, logs off the session, and leaves the system unchanged, and warns that a client-side cancel only stops the client's wait while SAP keeps running. The batch-mode recording behavior (empty content, answer read by number) is context no schema field could convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and usage are front-loaded in the first two sentences, with operational caveats after. The timeout paragraph is noticeably long and duplicates the timeout parameter's schema text, costing some efficiency, but no sentence is empty of information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter query tool with no annotations and no output schema, the definition covers execution model, safety, timeout/cancellation, and batch behavior. The remaining gap is the shape of the result set (columns, row-cap interaction with `row_number`) which the agent must infer from the parameter descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters, including the timeout semantics almost verbatim as repeated in the description. The description adds no meaning beyond the schema for `detail` or `row_number`, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Execute ABAP SQL SELECT queries on database tables and CDS views') plus the mechanism (SAP ADT Data Preview API) and concrete use cases (ad-hoc retrieval, row counts, filtered queries). The only gap is that it never distinguishes itself from the sibling GetTableContents, which plausibly serves a similar need.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for when to reach for it ('ad-hoc data retrieval, row counts, and filtered queries') and adds a useful batch-mode condition. It stops short of naming an alternative or a when-not-to-use condition, so selection against GetTableContents is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetStructureA

[read-only] Reads the ABAP structure named by structure_name in one request: its definition with its fields, as source code (part "source", the default; active or inactive version) or its ADT metadata document (part "metadata": package, responsible, description). Returns the part read. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
partNoThe document to read: "source" (default) the source code, "metadata" the ADT metadata document (package, responsible, description, ...).source
versionNoVersion of the source: "active" (default) for the deployed version, "inactive" for the modified version awaiting activation.active
structure_nameYesStructure name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral burden, and it does disclose the [read-only] nature, the returned artifact, and the non-obvious batch-mode behavior (recording under a number, empty content, answer read later). It omits authorization/permission requirements, which is the main remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded paragraph leading with [read-only] and the core action, then part/version options, then batch semantics. Dense but mostly earns its space; the batch-mode sentence is valuable but slightly tax-heavy for a simple read tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter read tool with no output schema, the description covers what is returned ('Returns the part read'), the part/version choices, and the unusual batch behavior, which is enough for correct invocation. Missing permission/error behavior is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the part/version enums are already documented with defaults in the schema. The description largely restates those semantics (source default, active/inactive, metadata fields), so it adds only marginal value over structured data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Reads the ABAP structure named by structure_name') and enumerates the two content modes (source vs ADT metadata), so an agent understands exactly what it retrieves. It does not explicitly distinguish itself from siblings like GetStructuresList or GetStructureVersions, which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: call it with a known structure name, choose 'source' by default or 'metadata' for package/responsible/description. But there is no explicit 'use this instead of X when...' guidance or exclusions relative to GetStructuresList, GetStructureVersionSource, or CheckStructure.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetStructuresListA

[read-only] Recursively list the structures embedded in an ABAP structure (.INCLUDE / append), as a tree. Takes structure_name (one structure: its tree) or structure_names (several structures: one entry per structure, in the order given, each its tree answer or { structure_name, error }). Works on BASIS 7.50 and later, where the DDIC structure/table endpoints it reads exist; legacy systems (BASIS < 7.50) refuse it (issue #207). Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. Runs outside batch mode.

NameRequiredDescriptionDefault
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.
versionNoVersion to read: "active" (default) or "inactive".active
structure_nameNoStructure name (or give structure_names).
structure_namesNoSeveral structure names, read together (give this or structure_name).
include_extensionsNo[read-only] Also find extension (append) structures via where-used (objects that `extend type <this> with …`). Default true. Set false to skip the (slower) where-used lookups and return includes only.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden and does so well: it labels the operation read-only, describes running on its own ABAP session, explains timeout cancellation and session logoff, states that the system remains unchanged, notes BASIS version limitations, and mentions that include_extensions triggers slower where-used lookups.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description front-loads the core purpose and then adds necessary operational context. It is somewhat long and repeats timeout details already present in the schema, but the density is justified for a tool with session, timeout, version, and multi-read behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no annotations, it covers the important operational and return-shape context: single vs multiple structures, ordered per-structure entries, and error entries. The exact node format of the returned tree is not described, which is the main remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents the parameters. The description still adds meaning by explaining the one-vs-many choice between structure_name and structure_names, the ordering and per-structure error shape for multi-reads, and the performance implication of include_extensions=false.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: recursively list structures embedded in an ABAP structure as a tree, with .INCLUDE/append context. It is clear enough to distinguish from a plain GetStructure, but it does not explicitly name or contrast with siblings such as GetIncludesList or GetStructure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives useful usage context: use structure_name for one tree, structure_names for several, and skip include_extensions when where-used lookups are too slow. It also states the BASIS 7.50+ requirement and legacy refusal. It does not explicitly compare against alternative structure-reading tools, so it stops short of full when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetStructureVersionDiffA

[read-only] Compares the two ABAP structure versions named by content_uri_from and content_uri_to, entries of its version history: answers the unified diff of their sources. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uri_toYesOpaque content_uri of the NEW/compare version, from the ABAP structure's version history.
content_uri_fromYesOpaque content_uri of the OLD/base version, from the ABAP structure's version history.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does disclose important behavior: read-only operation, unified diff output, and special batch-mode recording semantics where content is empty and retrieved later by number. It does not cover permissions or error conditions, but the key behavioral traits are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the read-only marker and the core comparison purpose, then adds only the necessary batch-mode caveat. The description is dense but every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only diff tool with no output schema, the description gives sufficient context: what is compared, what is returned, and how batch mode changes the response. Nothing critical for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented in the schema, including old/base vs new/compare semantics. The description reinforces that they are version-history entries but adds no syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: it compares two ABAP structure versions and returns their unified source diff. This clearly distinguishes it from sibling version-history tools such as GetStructureVersionSource and GetStructureVersions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context that the inputs are version-history entries and that the tool answers a diff. It does not explicitly name alternatives or exclusions, but the intended use case is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetStructureVersionsA

[read-only] Lists the version history of the ABAP structure named by structure_name: each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and the opaque content_uri that names the version's source. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
structure_nameYesABAP structure name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full burden and largely meets it: it opens with '[read-only]', discloses the exact response fields (versionId, author, updatedAt, title, transportRequest/transportDescription, content_uri), and notes transport info is only present 'when available'. The batch/recordable behavior is a genuinely non-obvious trait that is disclosed, though its mechanics ('read by number after the batch ends') stay slightly cryptic.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose and return shape are front-loaded in the first sentence, with the batch-mode caveat isolated afterward. The batch sentence is dense and jargon-heavy ('recorded under the next number and answers with empty content') but it conveys a real edge case rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description compensates by enumerating the returned fields and flagging the batch-mode special case. Remaining gaps are minor: version ordering, whether unpublished/inactive versions appear, and pagination or size limits are not addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage ('ABAP structure name'), so the schema already does the documentation work. The description only restates the parameter's role in framing the operation and adds no syntax, case-sensitivity, or naming-convention detail beyond it — baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Lists the version history of the ABAP structure named by structure_name' — and enumerates the per-version fields returned, so an agent knows exactly what it gets. It does not explicitly contrast itself with GetStructureVersionSource or GetStructureVersionDiff, which sit next to it in the sibling list, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the word 'version history' and by the mention that content_uri is 'opaque' and names the source, which hints that a separate source tool exists for actual content. But no alternative is named and no when-not condition is given, so the agent must infer routing from the sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetStructureVersionSourceA

[read-only] Reads the source of the ABAP structure version named by content_uri, an entry of the ABAP structure's version history. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uriYesOpaque content_uri of a version, from the ABAP structure's version history.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the disclosure burden and does well: it labels the operation read-only and explains the unusual batch behavior, including empty content during batch and later answer retrieval by number. It omits error behavior or format details, but covers the key operational traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tightly written sentences with no wasted text. It front-loads the core read operation before explaining the batch-mode recording behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema and no annotations, it explains the operation, read-only nature, and batch behavior. Missing details such as error handling or output shape are minor and largely outside the main contract.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the single parameter is already documented as an opaque content_uri from version history. The description restates that meaning but adds no syntax, format, or source-detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Reads the source of the ABAP structure version named by content_uri.' It also distinguishes the tool from sibling version tools by tying content_uri to an entry in the structure's version history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly indicates the tool is for reading source for a known version URI from the structure version history. It does not explicitly name alternatives such as GetStructureVersions or GetStructureVersionDiff, but the context is sufficient to select it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetTableA

[read-only] Reads the ABAP database table named by table_name in one request: its definition with its fields, as source code (part "source", the default; active or inactive version) or its ADT metadata document (part "metadata": package, responsible, description). Returns the part read. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
partNoThe document to read: "source" (default) the source code, "metadata" the ADT metadata document (package, responsible, description, ...).source
versionNoVersion of the source: "active" (default) for the deployed version, "inactive" for the modified version awaiting activation.active
table_nameYesTable name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With zero annotations, the description carries the full burden and does real work: it declares the operation read-only, states that it returns only the part read, and discloses the non-obvious batch-mode contract (recorded under the next number, empty content returned, answer retrieved by number afterward). It omits failure behavior (nonexistent table, authorization) but the key traits an agent must know are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded paragraph: the operation and its scope come first, then mode semantics, then the batch caveat. Some clauses repeat parameter documentation verbatim, but the batch-mode sentence, though long, is genuinely load-bearing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter read-only tool with complete schema coverage and no output schema, this is nearly sufficient: it says what is returned and how batch semantics work. Minor gaps remain around error/permission behavior and large-table limits, but nothing that would cause a misinvocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both enums are already documented with defaults and meanings, so the description is essentially restating structured data. The added gloss ('package, responsible, description') duplicates the schema's own text rather than extending it. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Reads the ABAP database table named by table_name', and it pins down the returned artifact (definition with fields, source code, or ADT metadata document). It implicitly separates itself from content-reading siblings like GetTableContents by emphasizing 'definition', but never names an alternative, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what each 'part' and 'version' mode yields, which implies when to pick source vs metadata and active vs inactive. It gives no explicit when-to-use framing, no exclusions, and no pointer to sibling tools such as GetTableContents, GetTableVersionSource, or CheckTable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetTableContentsA

[read-only] Reads the contents (data preview, like SE16/SE16N) of the ABAP database table or CDS view named by table_name: every column, up to max_rows rows (default 100). Answers sql_query, row_number (the max_rows asked), execution_time, total_rows (the rows the table or view holds), columns and rows. Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.
max_rowsNoMaximum number of rows to retrieve
table_nameYesName of the ABAP table

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: read-only, runs on its own ABAP session, a timeout cancels the read and logs off the session leaving the system unchanged, and a client-side cancel only stops the client's wait while SAP keeps running. It also discloses the batch-recording side effect and that recorded calls return empty content.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and scope are front-loaded in the first clause, and every sentence is informative. The timeout discussion is somewhat long and partly duplicates the schema's parameter description, which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema, the description enumerates the answer shape (sql_query, row_number, execution_time, total_rows, columns, rows) and covers session isolation, timeout semantics, and batch-mode behavior — everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds a value the schema omits: max_rows defaults to 100, and it reinforces the timeout's cancel-and-logoff consequence beyond the schema wording. It says nothing about the 'detail' enum parameter, which is only documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource (reads the contents of the ABAP table or CDS view named by table_name) and anchors it to a familiar analogue (SE16/SE16N data preview), which distinguishes it from metadata tools such as GetTable/GetStructure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear situational context: use it for data previews, run with an optional timeout below the client's request limit, and use it in batch mode where calls are recorded by number. It never explicitly names a sibling alternative (e.g. GetSqlQuery or GetTable) or when-not-to-use, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetTableVersionDiffA

[read-only] Compares the two ABAP table versions named by content_uri_from and content_uri_to, entries of its version history: answers the unified diff of their sources. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uri_toYesOpaque content_uri of the NEW/compare version, from the ABAP table's version history.
content_uri_fromYesOpaque content_uri of the OLD/base version, from the ABAP table's version history.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so reasonably: it declares read-only status, states the input URIs come from version history, describes the output as a unified diff, and explains the non-obvious batch recording/empty-response behavior. It omits error handling and diff-size/ordering caveats.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the read-only marker and core purpose, then the batch note in a single follow-on sentence. The colon-chained phrasing is slightly dense but every clause is informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only diff with full schema coverage and no output schema, the description covers purpose, inputs' origin, return shape, and batch semantics. Only edge-case behavior (invalid URIs, large diffs) is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already labels from=OLD/base and to=NEW/compare, so the description adds only the reminder that both are version-history entries. Baseline 3 applies since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Compares) plus the exact resource (two ABAP table versions named by content_uri_from / content_uri_to) and the return (unified diff of their sources). This clearly separates it from GetTableVersions (list) and GetTableVersionSource (single source), both present as siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the batch-mode usage pattern well — call is recorded, answers empty, read back by number after BatchEnd — but never explicitly says when to prefer this over GetTableVersionSource or GetTableVersions, nor what to do if a URI is invalid.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetTableVersionsA

[read-only] Lists the version history of the ABAP table named by table_name: each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and the opaque content_uri that names the version's source. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
table_nameYesABAP table name.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it declares read-only status, discloses the full per-version payload including transport metadata, and explains the non-obvious batch behavior (records a call, returns empty content, answer read later by number). It omits permissions/authorization requirements and whether a missing table errors or returns an empty list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two front-loaded sentences with no filler; the read-only tag and the core purpose come first, and the batch caveat comes last. The first sentence is long and field-list-heavy, but every listed field earns its place given no output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must describe return values — and it does so thoroughly, including content_uri semantics and batch-mode answers. Remaining gaps are edge behavior (nonexistent table, ordering of versions) for an otherwise simple one-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter has a documented description ("ABAP table name"), so the baseline applies. The description restates that table_name identifies the ABAP table but adds no format, case-sensitivity, or lookup-scope detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Lists the version history of the ABAP table named by table_name") and even enumerates the fields each version carries. It does not name its obvious siblings GetTableVersionSource / GetTableVersionDiff, though the mention of the "opaque content_uri" implicitly hints that content retrieval is a separate call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the verb+resource rather than stated: there is no explicit "use this when..." or exclusion of GetTableVersionSource/GetTableVersionDiff. The batch-mode paragraph does give procedural guidance for how to invoke it in that context, which lifts it above a bare purpose statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetTableVersionSourceA

[read-only] Reads the source of the ABAP table version named by content_uri, an entry of the ABAP table's version history. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
content_uriYesOpaque content_uri of a version, from the ABAP table's version history.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does disclose key behavior: it is read-only and, in batch mode, returns empty content while recording the call for later retrieval by number. It does not cover permissions or error behavior, but the most non-obvious behavioral trait is explained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with the read-only status and core operation front-loaded, followed by the important batch-mode caveat. Every sentence adds useful information without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema, the description is largely complete: it explains what is read, what content_uri identifies, and the unusual batch return behavior. A small gap remains around how to obtain the content_uri or what source format is returned, but the essential calling context is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already describes content_uri as an opaque version identifier from the ABAP table's version history. The description adds little beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: reads the source of the ABAP table version named by content_uri. It clearly distinguishes this from version-listing or version-diff siblings by naming the exact object and operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains that content_uri is an entry from the ABAP table's version history and describes batch-mode recording behavior. It does not explicitly name GetTableVersions or GetTableVersionDiff as alternatives, but the context is clear enough for correct use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetTransactionA

[read-only] Reads the properties of the ABAP transaction (t-code) named by transaction_name in one request. Answers the transaction under object (name, text, type, package) and its facets under properties, in the order the system gives them — the application component chain, the package chain, type, owner, language, creation and the others the system names — each entry with its facet, name, displayName and text. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
transaction_nameYesName of the ABAP transaction

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the disclosure burden. It clearly states that the operation is read-only, runs in one request, and operates outside batch mode, and it explains the returned structure and ordering; it stops short of covering error or authorization behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the read-only marker and the core action, and it contains no filler. It is somewhat dense in a single sentence, but every clause contributes useful scope or return-shape information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must explain the return shape, and it does: object fields and properties facets with their ordering. Combined with the fully described input schema, it gives an agent enough context to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters, including the detail enum. The description reinforces that transaction_name names the t-code but adds little parameter-specific meaning beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: it reads the properties of an ABAP transaction (t-code) named by transaction_name. It also identifies the returned object and properties facets, making the tool's scope clear without relying on the title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes that it runs outside batch mode, which is a useful usage constraint. However, it does not explicitly say when to use this tool instead of generic object-inspection siblings such as GetObjectInfo or GetObjectStructure.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetTransportA

[read-only] Retrieve ABAP transport request information including metadata, included objects, and status from SAP system. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
include_tasksNoInclude list of tasks in transport (default: true)
include_objectsNoInclude list of objects in transport (default: true)
transport_numberYesTransport request number, not a task

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden, and it does well: it flags read-only semantics and, more unusually, documents the batch ('Recordable') mode where the call records a slot with empty content that must be read by number afterwards. That is real behavioral context that would otherwise be invisible. Missing only permission/authorization notes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the core purpose front-loaded, followed by the batch-mode caveat. No filler; the batch note is dense but earns its place by preventing a misinterpretation of empty responses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter read tool with no output schema, the description names what is returned (metadata, objects, status) and explains the batch-mode empty-answer behavior. An agent has enough to call it and interpret the response, with only authorization context absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the per-parameter meaning (transport_number not a task, include_tasks/include_objects defaults) is already documented in the schema. The description only loosely echoes 'included objects' and adds no new syntax or format detail, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — retrieve ABAP transport request information (metadata, included objects, status) — which is clearly distinct from ListTransports, ReadTransportObjects, and ReadTransportActionLog. It does not explicitly name or contrast with those siblings, keeping it at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the required transport_number ('not a task'), so an agent can infer this is the per-transport lookup versus a list operation. But there is no explicit when-to-use/when-not guidance or reference to alternatives like ListTransports or ReadTransportObjects.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetTypeInfoA

[read-only] Retrieve ABAP type information for a DDIC type name: data elements (DTEL), domains (DOMA), structures and table types. One name can be more than one type (MANDT is a data element and a domain): the answer lists every type the name is, in alphabetical order of type, each with its definition — data type, length and decimals, field labels, a domain's output format, value table and fixed values, a table type's row type and key. Runs outside batch mode.

NameRequiredDescriptionDefault
type_nameYesName of the ABAP type
include_structure_fallbackNoWhen true (default), the name is also read as a DDIC structure; false leaves the structure read out.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it does substantial work: it declares read-only status, discloses that one name can resolve to multiple types, specifies alphabetical-by-type ordering, and describes what each entry contains. It also flags the important constraint "Runs outside batch mode," though it says nothing about failure behavior when a name is unknown or about authorization requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense paragraph, front-loaded with the read-only tag and the core verb, with the em-dash enumeration of returned fields doing real informational work rather than padding. Nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must sketch the return shape, and it does: per-type definitions including data type, length/decimals, field labels, domain output format, value table, fixed values, row type and key. Only error/not-found behavior and permission expectations are unaddressed for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented and baseline is 3. The description adds real meaning for type_name by explaining that a single name may map to several type kinds, but it never mentions include_structure_fallback, which is the non-obvious parameter that changes what comes back.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb plus resource: "Retrieve ABAP type information for a DDIC type name," with the covered object kinds spelled out (data elements, domains, structures, table types). The MANDT example clarifies the multi-type resolution behavior, which meaningfully distinguishes it from the single-kind siblings like GetDataElement, GetDomain, GetStructure and GetTable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

By enumerating all four DDIC type kinds it implicitly signals this is the kind-agnostic lookup to use when the caller does not already know whether a name is a data element, domain, structure or table type. However, it never explicitly names the sibling tools (GetDataElement, GetDomain, GetStructure) or states when to prefer those narrower reads.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetUnitTestResultA

[read-only] Reads the result of the ABAP Unit test run named by run_id, for a run still running when its start answered. Waits for it within a bound. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
run_idYesRun id a unit test run answered.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that the tool is read-only, waits within a bound, and runs outside batch mode, which is useful. But 'within a bound' is unspecified, 'outside batch mode' is unexplained, and timeout/error behavior is not described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences and front-loads the core action and scenario. The phrase 'for a run still running when its start answered' is slightly convoluted, and 'Runs outside batch mode' is isolated without explanation, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There are no annotations and no output schema, so the description should carry more. It explains the trigger scenario and wait behavior, but does not describe what the 'result' actually includes (e.g. pass/fail details) beyond the detail enum, nor the timeout bound.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema itself documents both run_id and the detail enum with clear descriptions. The tool description adds no parameter meaning beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Reads the result of the ABAP Unit test run named by run_id.' It also clarifies the scenario ('for a run still running when its start answered'), which distinguishes it from synchronous result retrieval. However, it does not explicitly name the sibling tool (e.g. RunUnitTest) that produces the run_id.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: call this for a run that was still running when the start call returned, and expect it to wait. It does not name alternatives or state when not to use this tool, so it stops short of the top score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

GetWhereUsedA

[read-only] Lists where the object named by object_name and object_type is used — a class, interface, program, include, function group, function module (BAPI included), package, table, structure, domain, data element or CDS DDL source: every object that uses, calls or references it, with its type and package. Takes object_name and object_type (one object: its list) or objects (several objects: one entry per object, in the order given, each its list or { object_name, object_type, error }). Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. When enable_all_types is any value but true and enable_only_types is absent and disable_types is absent and objects is absent, recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
objectsNoSeveral objects, read together (give this or object_name and object_type). The type filters apply to every object.
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.
object_nameNoName of the ABAP object (with object_type; or give objects). For function modules the name MUST be in the form 'GROUP|FM_NAME' (function group name, pipe, function module name).
object_typeNoType of the ABAP object. Case-insensitive. Accepts either a human alias or an ADT type code. Supported values: 'class' / 'clas/oc', 'interface' / 'intf/if', 'program' / 'prog/p', 'include', 'function' / 'functiongroup' / 'fugr' (function group), 'functionmodule' / 'function_module' / 'fugr/ff' (function module — see object_name format), 'package' / 'devc/k', 'table' / 'tabl/dt', 'structure' / 'stru/dt', 'domain' / 'doma/dd', 'dataelement' / 'dtel', 'view' / 'ddls/df' (CDS DDL source).
disable_typesNoRemove these ADT object types from the default scope, keeping the rest (e.g. ['CLAS/OC'] to drop class usages). Applied on top of the default scope or of enable_only_types/enable_all_types.
enable_all_typesNoIf true, expands the scope to all available object types (Eclipse 'select all' behavior) by flipping every isSelected flag in the scope XML. Default: false (SAP default scope). Note: on large systems this can make the search significantly slower.
enable_only_typesNoRestrict the search to ONLY these ADT object types (e.g. ['TABL/DS','TABL/DT'] for structures, ['DDLS/DF'] for CDS sources). SAP applies the selection server-side, so unwanted types (e.g. hundreds of CLAS/OC) are never searched nor returned — use this instead of enable_all_types to avoid huge result sets. Values must be object-type codes from THIS object's where-used scope (the searchable categories, e.g. 'CLAS/OC','INTF/OI','FUGR/FF','DDLS/DF', not result-row codes like 'FUGR/F'). If any value is not searchable for the object the call returns an error listing the supported types — it never falls back to the unfiltered default set. Takes precedence over enable_all_types.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: read-only, runs on its own ABAP session, timeout cancels the read and logs off the session leaving the system unchanged, enable_all_types can be significantly slower on large systems, and invalid filter types error out rather than silently falling back. The final sentence about batch recording is garbled to the point of being undecipherable, which is a real transparency defect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, which is good, but the body is one long run-on sentence that repeatedly restates timeout behavior (three separate mentions) and ends in a broken 'recordable:' clause that adds noise rather than information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only query tool with a fully described 7-parameter schema and no output schema, this covers modes, filter precedence, session/timeout behavior, and error cases. The mangled batch-mode sentence is the one incomplete thought; return shape (type + package per referencing object) is sufficient for the agent to proceed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description earns above baseline by adding cross-parameter semantics the schema doesn't spell out — which mode wins (objects vs object_name/object_type), that type filters apply to every object in `objects`, that enable_only_types takes precedence over enable_all_types, and the practical relationship between timeout and the client's 60s request limit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lists where the object named by object_name and object_type is used') and enumerates the supported object types plus the shape of each result row (type and package). It's clearly the only where-used tool among the siblings, but it never names or distinguishes itself from SearchObject / SearchSource, which an agent might otherwise reach for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real routing guidance: either object_name+object_type for one object or objects for many ('one entry per object, in the order given'), and explicitly recommends enable_only_types over enable_all_types to avoid huge result sets, noting precedence. No sibling comparison or 'when not to use' is offered, and disable_types interaction is only sketched.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ListBackgroundRunsA

[read-only] [runtime] Lists your background runs: run_handle, tool, object, when it started, and running or finished. A run's output is read by its run_handle. Runs outside batch mode.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden; it compensates partially by self-tagging "[read-only]" and "[runtime]" and by describing the handle-based retrieval model. It says nothing about whether finished runs persist, retention windows, result limits, or pagination behavior, which matters for a list tool with no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short clauses with zero filler, front-loaded with the read-only/runtime tags and the verb-resource statement. Every sentence carries information the agent cannot get from structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema list tool, the description covers what comes back, how to retrieve a run's output, and how batch runs differ. The only missing piece is enumeration behavior (result size, ordering, retention), a minor gap given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 with nothing for the description to add. The schema is empty and the description correctly implies the call needs no input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Lists your background runs") and enumerates the returned fields (run_handle, tool, object, start time, status), so the agent knows exactly what surface this covers. It does not name the singular sibling GetBackgroundRun, but the phrase "A run's output is read by its run_handle" points at it indirectly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause "Runs outside batch mode" scopes usage and implicitly routes batch-mode work to BatchEnd/BatchAnswers, and "A run's output is read by its run_handle" tells the agent to follow up with GetBackgroundRun rather than expecting output here. There is no explicit "do not use for X" statement, but the boundary is clear enough to act on.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ListFunctionGroupIncludesA

[read-only] List the includes (TOP, custom) of an ABAP function group. Runs outside batch mode.

NameRequiredDescriptionDefault
function_group_nameYesFunction group name.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description does step in to declare read-only semantics and a batch-mode restriction, which is useful context. It says nothing about the shape or size of the returned include list, ordering, or what happens for a nonexistent function group.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the read-only tag front-loaded and zero redundant phrasing. The trailing batch-mode clause is terse but not explained, keeping it just shy of a top mark.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, non-destructive list operation with no output schema, the description covers what it returns at a conceptual level and a key operational constraint. Minor gaps remain around return contents and error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single parameter at 100% schema coverage, so the schema already documents 'function_group_name'. The description adds no syntax, naming-convention, or case-sensitivity guidance beyond that, making this a baseline case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('includes (TOP, custom) of an ABAP function group'), which distinguishes it from the sibling ListFunctionModules. It stops short of naming the related siblings GetIncludesList or GetFunctionInclude, so the boundary is inferable rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Only hint of conditional usage is 'Runs outside batch mode', which is a real constraint but leaves the agent to guess when to prefer this over GetIncludesList or GetFunctionInclude. No exclusions or alternative routing are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ListFunctionModulesA

[read-only] List the function modules of an ABAP function group. Runs outside batch mode.

NameRequiredDescriptionDefault
function_group_nameYesFunction group name.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It does disclose two traits — read-only nature and that it must run outside batch mode — but says nothing about permissions, pagination, result size, or what happens with an invalid function group name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste; the [read-only] marker and the core action are front-loaded, and the batch-mode caveat is appended where it belongs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one fully documented parameter the input side is covered, but there is no output schema and the description does not indicate what the listing returns (names only, full module metadata, ordering). For a list-style tool that gap is meaningful but not crippling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter exists and schema coverage is 100%, so the schema already documents it. The description's phrase 'of an ABAP function group' confirms the parameter's role as the container being enumerated, adding slight clarity over the terse schema description 'Function group name.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('function modules') with a clear scope qualifier ('of an ABAP function group'). An agent can distinguish it from GetFunctionModule (single object) by implication, though siblings like ListFunctionGroupIncludes are not explicitly contrasted.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The scope phrase hints at when to use it (enumerating members of a known function group), and 'Runs outside batch mode' implicitly excludes one context. However, no alternative tool is named and no explicit when-not guidance beyond the batch-mode restriction is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ListLeftoverSessionsA

[read-only] [session] Lists the SAP sessions of this server's destination that an ended server process left open (it was killed before it could log them off), with the locks they may hold: handle, role (built: an instance connection; debugger: a debug session connection), destination, user (absent for a token login) and when it was last recorded. Read from the session records alone, on this machine. Only sessions of ended processes are listed. Log one off by its handle. A server process that starts while exactly one instance session (built) of its destination is left is born on it, before any tool call; with several, all stay here, untaken. Runs outside batch mode.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full burden and does so: it declares read-only, identifies the data source ('Read from the session records alone, on this machine'), defines scope, and explains the lock/role semantics (built vs debugger, user absent for token logins). It even documents the non-obvious startup interaction where a new server process is born on a single leftover instance session.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose and scope are front-loaded in the first sentence, with the read-only and session tags leading. It is dense but mostly earns its length; the closing note about server-process birth behavior is legitimate context but reads as an aside that could be trimmed or moved.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read tool with no annotations and no output schema, the description supplies scope, data provenance, return fields, and an explicit next step. Minor ambiguity remains about how many destinations are covered per call and whether the list can be empty, but nothing essential to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The mention of 'handle' in the response fields plus 'Log one off by its handle' usefully explains what the agent does with the output, which is the only parameter-adjacent context available.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource (list leftover SAP sessions of this server's destination) and immediately bounds the population: sessions an ended, killed server process left open. It also enumerates the returned fields (handle, role, destination, user, last recorded), so the agent knows exactly what it is asking for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the selection constraint ('Only sessions of ended processes are listed') and routes remediation explicitly ('Log one off by its handle'), which clearly points at the LogoffLeftoverSession sibling without naming it. It also says 'Runs outside batch mode', a real when-not condition. The only gap is that the alternative tool is described rather than named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ListServiceBindingTypesA

[read-only] Lists the available service binding types (for example ODataV2/ODataV4) from the ADT Business Services endpoint, in the response_format given. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
response_formatNoShape of the answer: the document as the server sent it, the same parsed, or a flat list of the type names.xml

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: it declares read-only, names the endpoint, and discloses the important batch-mode trait (call recorded under the next number, returns empty content, answer read by number afterwards). It stops short of error/permission behavior, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose, followed by the batch caveat. The batch sentence is dense but every clause carries operational meaning; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-param read tool with no output schema, the description covers purpose, output shape selection, and batch behavior adequately. Only error handling and a sample of the type-name output are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the response_format enum is fully documented in the schema; the description only echoes 'in the response_format given' without adding format semantics beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Lists) and resource (service binding types) with concrete examples (ODataV2/ODataV4) and names the source endpoint (ADT Business Services). No sibling tool enumerates binding types, so an agent can distinguish it immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the narrow purpose and the batch-mode note explains one operating context, but it never states explicitly when to reach for this versus alternatives (e.g. GetServiceBinding for a single binding) or any prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ListTransportsA

[read-only] List transport requests for the current or specified user. Returns modifiable and/or released workbench and customizing requests. user and modifiable-only are both applied client-side, over every request the server's default search configuration answers; ADT receives the default search alone. Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. Runs outside batch mode.

NameRequiredDescriptionDefault
userNoThe user to filter to: an SAP user id (matched in upper case); applied client-side. If not provided, defaults to the current session user, so an unfiltered call already answers only that user's transports.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.
modifiable_onlyNoOnly return modifiable (not yet released) transports; applied client-side. Default: true.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so thoroughly: it declares '[read-only]', states it runs on its own ABAP session outside batch mode, and precisely defines timeout/cancel semantics (the read is cancelled, its ABAP session logged off, the system stays as it was; a client-side cancel only ends the client's wait while SAP keeps running).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and the sentence order moves from what it returns to how it runs. It is dense and slightly repetitive — the timeout/cancel explanation largely duplicates the `timeout` schema description — but every sentence adds signal, so waste is minimal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a filtered-list tool with no output schema, the description covers return content, the `detail` verbosity levels, client-side filtering scope, session isolation, and timeout behavior well enough to call it correctly. Minor shortfall is the lack of explicit alternative-tool routing, which matters in a catalog full of transport siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds a genuinely useful nuance absent from the schema: `user` and modifiable-only are applied client-side over the server's default search, while ADT receives only the default search. That meaningfully changes how an agent should interpret results and choose parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('List transport requests') and then narrows scope: 'for the current or specified user', returning 'modifiable and/or released workbench and customizing requests'. An agent can tell it apart from single-object siblings like GetTransport or mutation siblings like CreateTransport without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It surfaces defaults clearly ('user defaults to the current session user', 'modifiable_only default true'), which is useful context for choosing whether to call unfiltered. But it never states when to use this over alternatives such as GetTransport (single request) or ReadTransportObjects, leaving the routing decision implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

LogoffLeftoverSessionA

[read-only] [session] Logs off a leftover SAP session (any role): the session ends, and every lock it holds is released. Only the logoff is sent, credential-free. The session record is deleted afterwards. Runs outside batch mode.

NameRequiredDescriptionDefault
handleYesThe handle of a leftover session, as the list of leftover sessions answers it.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden and does so: it discloses that every lock held by the session is released, that only a credential-free logoff is transmitted, that the session record is deleted afterwards, and that it must run outside batch mode.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short clauses, all informative, with the action and its effects front-loaded. The bracketed [read-only] [session] tags are low-cost but slightly redundant given the prose that follows.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, no-output-schema tool, the description covers the action, the post-conditions (locks released, record deleted), the transport behavior (credential-free logoff only), and the execution constraint. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, so the schema already explains what the handle is and where it comes from. The description adds no further constraints or format detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Logs off a leftover SAP session") plus scope ("any role"), which clearly separates it from read-only siblings such as ListLeftoverSessions. It never names the sibling that produces the handle, however, so the differentiation is implicit rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational context: the tool targets leftover sessions and "Runs outside batch mode," which tells the agent when it is callable. There is no explicit statement of when not to use it or which alternative to pick for a live/active session.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

MemorySnapshotDeltaA

[read-only] [debug] Two memory snapshots compared in a view: memory by kind, largest objects, an object's children or its referrers. Needs the memory snapshot authorization. Runs outside batch mode.

NameRequiredDescriptionDefault
keyNoObject key, for children and references.
viewNooverview: memory by kind; ranking: the largest objects; children: what an object holds; references: what holds an object.overview
to_idYesSnapshot id to compare to.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
from_idYesSnapshot id to compare from.
max_objectsNoObjects in a ranking, children or references answer.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does substantial work: it tags the tool as read-only and debug-scoped, and discloses the authorization requirement plus the batch-mode exclusion, which are real invocation constraints. It stops short of describing volume/performance or the shape of the comparison result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with the mode tags, the core operation, the available views, and the two hard constraints front-loaded. Nothing is padded or repeated across sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter, no-output-schema tool, the description covers purpose, view taxonomy, authorization, and the batch-mode restriction, which is most of what an agent needs. The remaining gap is the relationship to the sibling snapshot tools and the size/format of the delta result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all six parameters including the view and detail enums are already documented in the schema. The description paraphrases the views (memory by kind, largest objects, children, referrers) but adds nothing about from_id/to_id ordering, max_objects, or detail levels beyond what the schema states, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it compares two memory snapshots and returns one of four views. It clearly distinguishes a delta operation from single-snapshot reads, though it never names MemorySnapshotList or MemorySnapshotGet as the alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Prerequisites are given (memory snapshot authorization required, must run outside batch mode), which tells the agent when it can call. But it never says when to prefer this over MemorySnapshotList/MemorySnapshotGet or DebugCreateMemorySnapshot, so the choice among snapshots is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

MemorySnapshotGetA

[read-only] [debug] One memory snapshot in a view: header, memory by kind, largest objects, an object's children or its referrers. Needs the memory snapshot authorization. Runs outside batch mode.

NameRequiredDescriptionDefault
keyNoObject key, for children and references.
viewNoheader: the snapshot; overview: memory by kind; ranking: the largest objects; children: what an object holds; references: what holds an object.overview
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
max_objectsNoObjects in a ranking, children or references answer.
snapshot_idYesSnapshot id.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral burden and does well: it declares the tool read-only, notes the required authorization, and states that it runs outside batch mode. It does not describe error behavior or limits, but the key safety and execution constraints are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loads the read-only/debug tags, and then gives the core purpose in a single sentence. Every phrase contributes useful information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only debug tool with five fully described parameters and no output schema, the description is largely complete. It covers the available views and constraints, though it could say more about what a caller receives for each view or when a key is required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters including enums and defaults. The description echoes the view options in prose but adds little semantic detail beyond what the schema provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a read-only debug tool that retrieves one memory snapshot, and it enumerates the available views (header, overview, ranking, children, references). It distinguishes the resource from the sibling MemorySnapshotList implicitly by saying 'One memory snapshot', though it does not explicitly name the sibling alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states operational constraints such as needing memory snapshot authorization and running outside batch mode, but it does not explicitly state when to choose this tool over MemorySnapshotList or MemorySnapshotDelta. Usage is implied by the single-snapshot focus.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

MemorySnapshotListA

[read-only] [debug] Memory snapshots the system lists. Empty when the user lacks the memory snapshot authorization. Runs outside batch mode.

NameRequiredDescriptionDefault
userNoOnly the snapshots of this SAP user.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does well: it discloses read-only/debug intent, that results are empty without memory snapshot authorization, and that it runs outside batch mode. It stops short of describing output shape or side effects in more detail, but the key constraints are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with tags and purpose, and every phrase adds useful context. There is no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity, fully schema-documented list tool, the description covers authorization and batch-mode constraints. However, with no output schema, it does not explain the return structure or clarify the distinction from MemorySnapshotGet and MemorySnapshotDelta, leaving some contextual gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both the user and detail parameters are already well documented in the schema, including the detail enum. The description adds no extra parameter semantics beyond the authorization note, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource (memory snapshots) and implies a list operation via the name and phrase 'the system lists.' It is clear enough to distinguish from unrelated tools, but it does not explicitly differentiate from MemorySnapshotGet or MemorySnapshotDelta.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied through the [debug] tag and the constraint 'Runs outside batch mode,' which effectively says not to use it in batch contexts. There is no explicit guidance on when to choose this over MemorySnapshotGet or MemorySnapshotDelta.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

MoveTransportObjectsA

Moves the object entries named by objects from the transport task named by transport_number to the task named by target_number. Each entry is named by its position in the source task's object list. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
objectsYesThe entries to move, at least one — each with object_name, object_type, position (in the source task) and an optional pgmid.
target_numberYesNumber of the transport task the entries move to.
transport_numberYesNumber of the transport task that holds the entries.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses that the operation is a mutation and explains batch-mode recording with empty immediate answers, which is useful beyond the schema. However, it omits permissions, reversibility, error behavior, and what happens to the source task after the move.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core move operation in the first sentence and follows with the position rule and batch behavior. It is efficient and free of filler, though the batch-mode sentence is dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema fully documents all four parameters and there is no output schema, so the description need not explain return fields. However, for a mutation tool with no annotations, it should provide more context about permissions, side effects, or failure modes beyond batch recording.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description reinforces that entries are named by their position in the source task's object list, but this mostly repeats the schema's own description and does not add new syntax or format guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (moves) and resource (object entries between transport tasks), and it clearly identifies the source and target by parameter names. It is easy to distinguish from sibling tools like AddTransportObject or RemoveTransportObject because it describes moving existing entries rather than adding or removing them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool by explaining that it moves entries between tasks, but it does not explicitly say when to choose it over alternatives such as removing from one task and adding to another. No exclusions or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ReadTransportActionLogA

[read-only] Reads the action log of the transport request named by transport_number: one entry per lifecycle event — created, object added, object deleted, owner changed. It confirms that an object entry was taken out of the request, since a removal answers by echoing what it was asked. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
transport_numberYesTransport REQUEST or TASK number. A request answers its own lifecycle events; a task answers the events of the objects on it.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does unusually well: it declares the read-only nature, describes the return granularity (one entry per lifecycle event), and explains the non-obvious batch-mode contract where a call is recorded under the next number, answers with empty content, and must be read back by number afterwards. It stops short of covering permissions, log size, or ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the read-only marker and the core action, and no sentence is pure filler. The removal-confirmation sentence ('since a removal answers by echoing what it was asked') is convoluted and forces a re-read, slightly hurting clarity-per-word.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description does describe what comes back (one entry per lifecycle event) plus the batch-mode answer behavior, which are the two things an agent could not infer from the schema. Missing pieces are error behavior and log volume/pagination, minor for a read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both transport_number and the detail enum are already fully documented, making 3 the baseline. The description restates transport_number's role but adds no detail on syntax, format, or how to choose between request and task beyond what the schema says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: reads the action log of the transport request named by transport_number, returning one entry per lifecycle event (created, object added, object deleted, owner changed). That is concrete and distinguishable from the mutation siblings like AddTransportObject, but it never contrasts itself with the closest read siblings GetTransport and ReadTransportObjects, so the boundary is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: it hints that this is the tool to confirm an object removal ('it confirms that an object entry was taken out of the request'), which is a real use case. But there is no explicit when-to-use versus GetTransport or ReadTransportObjects, and no stated prerequisites such as needing a valid transport number or appropriate authorization.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ReadTransportObjectsA

[read-only] Lists the objects the transport request or task named by transport_number holds, each with its position, which a removal of the entry names. A task answers its own entries; a request answers every task's entries, each once, with its task number and position — the task a removal addresses. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
transport_numberYesTransport REQUEST or TASK number. A task answers its own entries; a request answers the entries of each of its tasks, each with its `task` number — the task a removal addresses.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden effectively: it labels the tool as [read-only], explains request-vs-task answer behavior, and discloses that batch-mode calls are recorded with empty content and later read by number. It omits error handling and permission details, but covers key behavioral traits beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first sentence, and subsequent sentences add relevant task/request and batch-mode details. It is dense but not padded, with each sentence contributing useful context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description does a good job explaining the returned object structure (position, task) and batch-mode behavior. Missing error or permission details are minor gaps rather than blockers for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description restates the transport_number semantics already present in the schema and does not discuss the detail parameter's enum values, so it adds little beyond structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (Lists) and resource (objects held by a transport request or task), and it clarifies the task-vs-request distinction. It does not explicitly contrast with sibling tools such as GetTransport or ListTransports, but the purpose is still easy to identify.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by mentioning that positions are what a removal names and by explaining batch-mode recording, but it does not state when to choose this tool over alternatives or when not to use it. The guidance is present but indirect.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

RemoveTransportObjectA

Removes the entry of the object named by object_name and object_type from the transport task named by transport_number, at position. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
pgmidNoProgram id. Defaults to R3TR, a workbench object's.R3TR
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
positionYesPosition of the object's entry in the task's object list.
object_nameYesObject name.
object_typeYesObject-directory type — CLAS, FUGR, TABL, DOMA — not an ADT type code like CLAS/OC.
transport_numberYesNumber of the transport task that holds the entry.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden and does deliver a non-obvious behavioral trait: in batch mode the call records under the next number, returns empty content, and the answer must be read by number afterward. It omits other relevant behavior — whether the removal is reversible, permission/lock requirements, and what happens on an invalid position.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action in one sentence, followed by a clearly separated batch-mode note. Dense but each sentence contributes; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, six-parameter, output-schema-less tool the description covers the action and the asynchronous batch read path (referencing the numbered-answer pattern), which is the main thing an agent could get wrong. Error and preconditions are the remaining gap, but the essential call semantics are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and already documents every parameter including the detail enum and pgmid default, so the baseline is 3. The description only restates that object_name/object_type/transport_number/position identify the entry, adding no format or constraint detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Removes), a specific resource (the entry of an object), and the three identifiers that scope it (object name/type, transport task, position). It is unambiguous against siblings like AddTransportObject or MoveTransportObjects, though it never names an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when the tool applies but gives no explicit when/when-not guidance, no prerequisites (e.g. task must be modifiable/unreleased), and no pointer to ReadTransportObjects or MoveTransportObjects as the way to inspect or relocate entries instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

RunATCA

[read-only] Runs the ABAP Test Cockpit (ATC) checks of the check variant named by check_variant over the objects named by objects. Creates a worklist for the check variant, then starts the run. Answers worklist_id always — the run's findings are read by it, for either value of wait. With wait=false it also answers run_id, which the run's status is read by; with wait=true the server holds the request until the checks finish and answers the finding counts. Runs outside batch mode.

NameRequiredDescriptionDefault
waitNoHold the request until the checks finish and answer the finding counts. Default false: the run starts and answers a run_id to poll.
objectsYesThe objects to check. One run may cover several; each needs a name and a type.
max_findingsNoCap on findings the run records (maximumVerdicts). A whole number, at least 1. Default 100.
check_variantNoATC check variant. Omitted, the system's own default variant is used.

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations to lean on, the description carries the full burden and does so: it discloses the side effect (a worklist is created), what every return path yields (worklist_id always, run_id with wait=false, finding counts with wait=true), and the operational constraint that it runs outside batch mode. That is exactly the context an agent needs before invoking a stateful run.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and no filler; four sentences all carry information. The clause 'the run's findings are read by it, for either value of wait' is awkwardly phrased and slightly slows comprehension, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, so the description must explain returns and safety on its own — it does both, including the 'runs outside batch mode' caveat. The only loose thread is the '[read-only]' tag sitting next to a tool that creates a worklist, which could momentarily puzzle an agent about side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns an extra point by mapping parameter values to outcomes (wait=false yields run_id to poll, wait=true holds and yields counts) and by tying worklist_id to both modes. It does not add detail on max_findings or object-type semantics, which remain schema-only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (runs) and resource (ABAP Test Cockpit checks), plus the two scoping inputs (check_variant, objects). It distinguishes the grouped ATC check from the per-object Check* siblings implicitly but never names one explicitly, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the wait semantics ('poll the run_id' vs 'hold until checks finish and answer counts'), which helps an agent choose a calling mode. However, there is no statement of when this tool should be used instead of CheckClass/CheckPackage/etc., and no prerequisite guidance (e.g., that a check variant must already exist).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

RunCdsUnitTestA

[read-only] Runs the ABAP Unit tests of the CDS view test class named by class_name and returns the result. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesTest class of the CDS view.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden itself: it declares '[read-only]' and notes it 'runs outside batch mode,' which is useful non-obvious context. However, for a tool that actually executes tests, it does not say whether results are persisted, whether it requires an active session, or how long a run may take.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, front-loaded with the verb and scope, with the batch-mode caveat appended. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, so the description should carry more of the behavioral and return-value picture; 'returns the result' does not indicate what a caller gets back or how failures surface. Adequate for a two-parameter tool but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented, and the description only echoes class_name's meaning. The 'detail' enum (terse/full/raw) is untouched in the prose, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (runs) and resource (ABAP Unit tests of the CDS view test class), and the phrase 'CDS view test class' implicitly separates it from RunUnitTest, RunProgramUnitTest, and RunFunctionGroupUnitTest. It does not name those siblings outright, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context (CDS view unit tests) but offers no explicit when-to-use, no mention of pairing with GetCdsUnitTestResult, and no exclusions versus the other Run*UnitTest siblings. Usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

RunFunctionGroupUnitTestA

[read-only] Runs every ABAP Unit test of the function group named by function_group_name and returns the result. runner async (default): the run is started and waited for within a bound, and a run that outlasts it returns its run_id, whose status and result are read by run_id; suited to long suites. runner sync: one request that returns the finished result. When runner is sync, recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
scopeNoWhich tests the run covers, sent with either runner. Foreign tests are test classes linked to the object by an ABAP Doc @testing relation (a function module's tests are often linked so). With runner sync they execute only with foreign_tests true: with the defaults (foreign_tests false, add_foreign_tests_as_preview true) SAP lists them as a preview, unexecuted. Runner async executes them with the defaults as well.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
runnerNoasync (default): starts the run, waits for it within a bound and returns the result, or the run_id of a run that outlasts the bound, whose status and result are read by run_id; suited to long suites. sync: one request that returns the finished result.async
function_group_nameYesFunction group whose tests run.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does a good job: it self-declares '[read-only]', explains that async runs are bounded and may return only a run_id whose result must be fetched separately, and discloses the non-obvious batch-mode recording behavior where the call returns empty content read later by number. It omits execution side effects (tests can create/modify data) and any mention that the function group must be active, so it falls short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, and nearly every clause carries behavioral information rather than filler. The final sentence is overpacked and grammatically broken ('When runner is sync, recordable: ...'), forcing a re-read, which costs it a point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, so the description must cover behavior and return handling alone, and it does explain that results may come back inline or via run_id. What is missing is any description of the result payload (pass/fail counts, messages) and explicit naming of the companion tool used to read run_id, leaving the agent to guess at follow-up steps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema itself already spells out runner, detail, and the full scope subtree including foreign-test preview semantics. The description mostly restates the runner enum rather than adding syntax or default behavior beyond it, so the baseline 3 is right. The recordable/batch note is the only genuine addition, and even that is a sentence fragment ('When runner is sync, recordable: ...') rather than a parameter clarification.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: runs every ABAP Unit test of the function group named by function_group_name and returns the result. Clear on scope (all tests in the group), but it never distinguishes itself from close siblings such as RunFunctionModuleUnitTest, RunProgramUnitTest, or RunUnitTest, so an agent must infer which Run* variant applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives real guidance on the async-vs-sync choice ('suited to long suites') and explains how foreign tests behave differently under each runner. However, there is no guidance on when to use this tool rather than the sibling unit-test runners or GetUnitTestResult, which is the selection decision the agent actually faces.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

RunFunctionModuleUnitTestA

[read-only] Runs the ABAP Unit tests of the function module named by function_module_name and returns the result. runner async (default): the run is started and waited for within a bound, and a run that outlasts it returns its run_id, whose status and result are read by run_id; suited to long suites. runner sync: one request, addressed by function_group_name and function_module_name, that returns the finished result of every test of the module's function group. When runner is sync and function_group_name is given, recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
scopeNoWhich tests the run covers, sent with either runner. Foreign tests are test classes linked to the object by an ABAP Doc @testing relation (a function module's tests are often linked so). With runner sync they execute only with foreign_tests true: with the defaults (foreign_tests false, add_foreign_tests_as_preview true) SAP lists them as a preview, unexecuted. Runner async executes them with the defaults as well.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
runnerNoasync (default): starts the run, waits for it within a bound and returns the result, or the run_id of a run that outlasts the bound, whose status and result are read by run_id; suited to long suites. sync: one request that returns the finished result.async
function_group_nameNoFunction group holding the function module; required by runner sync.
function_module_nameYesFunction module whose tests run.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does so well: it marks the operation as read-only, explains async waiting and run_id fallback, sync request behavior, and batch recordable behavior. It still leaves some operational details implicit, such as error handling and side effects of test execution.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and the content is dense with relevant invocation details. The recordable clause is somewhat run-on and the sync sentence is slightly awkward, but the description remains appropriately sized for a complex tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of annotations and an output schema, the description is thorough: it covers return behavior for async and sync runners, the run_id follow-up path, function group addressing, and batch recording. An agent has enough information to invoke the tool correctly without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds meaningful semantics for runner and function_group_name, including the sync requirement and async run_id workflow. It adds less value for detail and scope because those are already well documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it runs ABAP Unit tests for a named function module and returns the result. It distinguishes the scope from sibling tools like RunFunctionGroupUnitTest and RunUnitTest by explicitly tying the run to function_module_name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly explains when to choose runner async versus sync, including that async is suited to long suites. It does not explicitly compare this tool with sibling unit-test runners such as RunFunctionGroupUnitTest or RunUnitTest.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

RunProgramUnitTestA

[read-only] Runs the ABAP Unit tests of the report named by program_name and returns the result. runner async (default): the run is started and waited for within a bound, and a run that outlasts it returns its run_id, whose status and result are read by run_id; suited to long suites. runner sync: one request that returns the finished result. When runner is sync, recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
scopeNoWhich tests the run covers, sent with either runner. Foreign tests are test classes linked to the object by an ABAP Doc @testing relation (a function module's tests are often linked so). With runner sync they execute only with foreign_tests true: with the defaults (foreign_tests false, add_foreign_tests_as_preview true) SAP lists them as a preview, unexecuted. Runner async executes them with the defaults as well.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
runnerNoasync (default): starts the run, waits for it within a bound and returns the result, or the run_id of a run that outlasts the bound, whose status and result are read by run_id; suited to long suites. sync: one request that returns the finished result.async
program_nameYesReport whose tests run.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full load and delivers substantive behavior: the '[read-only]' marker, the bounded async wait that can return a run_id instead of a result, how that run_id is later read, and that a recordable batch call returns empty content keyed to the next number. It omits prerequisites (does the program need tests created first?) and error behavior for a nonexistent program.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action and the async default are front-loaded, and every sentence carries information about runner choice or batch behavior. The final sentence ('When runner is sync, recordable: ...') is compressed to the point of being hard to parse on first read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with four parameters, a nested scope object, two enums, and no output schema, the description covers the action, runner trade-off, and batch peculiarity well. The one real gap is return shape: it says 'returns the result' and mentions run_id but never characterizes what a result or run status contains, leaving the agent dependent on sibling status/result tools it was not told about.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already explains program_name, runner, detail, and the nested scope defaults in comparable detail. The description largely restates the runner semantics and adds no format or constraint detail beyond the schema; the batch/'recordable' note is behavioral rather than a parameter clarification.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: runs ABAP Unit tests of the report named by program_name and returns the result. The program/report scoping implicitly distinguishes it from the class-, CDS-, and function-group-level run siblings, but it never names those alternatives, so the agent must infer the boundary from the parameter name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real selection guidance between the two runners: async with a bounded wait is 'suited to long suites', sync returns the finished result in one request. It also explains when a batch-mode call is recordable and how to retrieve its answer. It does not mention sibling tools such as RunUnitTest or GetUnitTestResult, so cross-tool routing is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

RuntimeAnalyzeProfilerTraceA

[read-only] [runtime] Read profiler trace view and return compact analysis summary (totals + top entries). Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
topNoNumber of top rows for summary. Default: 10.
viewNohitlist
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.
trace_id_or_uriYesProfiler trace ID or full trace URI.
with_system_eventsNoInclude system events.

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With zero annotations the description carries the full burden and does so unusually well: it declares read-only, notes the call runs on its own ABAP session, explains that a timeout cancels the read and logs off that session leaving the system unchanged, and warns that a client-side cancel does not stop SAP. It also discloses the non-obvious batch-mode recording contract (empty content, answer read by number afterward).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Core purpose is front-loaded and most sentences carry real operational information (session isolation, cancellation semantics, batch recording). It loses a little by repeating the timeout/MCP-client-limit material that already appears in the schema, and the long em-dash clauses make the middle sentences hard to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Behavioral side effects are thoroughly covered, which is the hardest part. However, with no output schema the description should say more about the returned summary, and it leaves the three view modes unexplained, so an agent cannot judge what changing view actually yields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so the schema already documents trace_id_or_uri, top, timeout and with_system_events. The description's timeout text largely restates the schema's own timeout description rather than adding new meaning, and it says nothing about the view enum values (hitlist/statements/db_accesses), which remain undocumented everywhere. Baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: "Read profiler trace view and return compact analysis summary (totals + top entries)." This clearly separates it from raw-data readers like RuntimeGetProfilerTraceData. It never names a sibling explicitly, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Use is implied (you have a trace and want a summary), and the batch-mode paragraph tells you how calls behave in batch. But it never states when to pick this over RuntimeGetProfilerTraceData or RuntimeListProfilerTraceFiles, nor any prerequisite for obtaining a trace_id_or_uri.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

RuntimeCreateProfilerTraceParametersB

[read-only] [runtime] Schedule ABAP profiler trace parameters and return profilerId (the request id) for profiled execution. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
aggregateNo
sql_traceNo
amdp_traceNo
descriptionYesHuman-readable trace description.
all_db_eventsNo
explicit_on_offNo
with_rfc_tracingNo
all_dynpro_eventsNo
all_procedural_unitsNo
max_time_for_tracingNo
max_size_for_trace_fileNo
all_misc_abap_statementsNo
all_system_kernel_eventsNo
all_internal_table_eventsNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose two non-obvious traits: the self-declared read-only nature and the batch-mode behavior (recorded under the next number, empty answer, read later by number), which is genuinely useful. It omits whether a trace is actually started or left armed, permission requirements, and any defaults for the 14 flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with the core action and return value front-loaded, followed by the batch caveat. Terse but no wasted clauses, given the specialized SAP terminology.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter, 7%-coverage tool with no output schema, the description covers only the return value and batch semantics. An agent still cannot tell what most of the trace configuration flags do or how to reasonably populate them.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 7% and the description explains none of the 13 undocumented flags (aggregate, sql_trace, amdp_trace, all_db_events, explicit_on_off, max_time_for_tracing, etc.). Only the required 'description' parameter is self-documenting in the schema, so the description leaves most parameter semantics unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: schedule ABAP profiler trace parameters and return a profilerId for profiled execution. This is distinguishable from siblings like RuntimeListProfilerTraceFiles, RuntimeGetProfilerTraceData, and RuntimeAnalyzeProfilerTrace, though it never explicitly names which sibling it pairs with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The batch-mode sentence implies a usage context (call it inside a batch, read the answer by number after BatchEnd), which implicitly points at the batch siblings. There is no explicit guidance on when to choose this versus RuntimeRunClass/RuntimeRunProgram or how the returned profilerId is subsequently consumed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

RuntimeGetDumpByIdA

[read-only] [runtime] Read an ABAP runtime dump by its dump_id or URI. Answers a summary — runtime error, exception, terminated program, time, user, and the source position where it terminated — and the parsed dump. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
viewNoDump view mode: default payload, summary section, or formatted long text.default
dump_idYesThe dump's id, or its URI as a dumps feed entry carries it.
response_modeNoWhat is returned: "payload" — the parsed dump, "summary" — runtime error, exception, terminated program, time, user and termination position, "both" — summary and payload.both

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the behavioral burden, and it does: it declares the tool read-only, specifies the answer contents (summary fields plus parsed dump), and discloses the non-obvious batch-mode recording behavior where calls answer empty and are retrieved by number later. It stops short of documenting pagination or size limits for large dumps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and resource, followed by the answer contents and then the batch-mode special case. It is dense but every sentence carries information; the batch-mode sentence is long but earns its place by preventing a subtle misuse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given three well-documented parameters, no output schema, and no annotations, the description is nearly complete: it explains the return contents and the batch-mode side effect. It could have mentioned how the 'view' modes affect output, but that is already covered by the schema, so the remaining gap is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (dump_id, view, response_mode) are already documented in the schema. The description reinforces that dump_id accepts an id or URI and implies the summary-vs-payload distinction, but adds no syntax or format detail beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Read an ABAP runtime dump by its dump_id or URI.' It then enumerates what the answer contains, so there is no ambiguity about the tool's function. It does not explicitly contrast itself with runtime siblings (feeds, logs, profiler data), which keeps it at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the strong purpose statement, and the batch-mode recording note provides operational context. However, the description never says when to use this tool versus alternatives, nor does it state any exclusions or prerequisites (e.g., required authorization for dumps).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

RuntimeGetGatewayErrorLogA

[read-only] [runtime] List SAP Gateway error log (/IWFND/ERROR_LOG) or get error detail. Returns structured entries with type, shortText, transactionId, dateTime, username. With error_url returns full detail including serviceInfo, errorContext, sourceCode, callStack. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
toNoEnd of time range in YYYYMMDDHHMMSS format.
fromNoStart of time range in YYYYMMDDHHMMSS format.
userNoFilter errors by SAP username.
error_urlNoFeed URL of a specific error entry (from a previous list response link field). When provided, returns detailed error info instead of listing.
max_resultsNoMaximum number of errors to return.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it declares read-only via the [read-only] tag, describes batch-mode behavior where the call returns empty content and is later read by number — a genuinely non-obvious trait. It omits auth/authorization requirements and pagination/truncation behavior for max_results, keeping it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the read-only/runtime tags and the core action, then return fields, then modes, then the batch caveat — logical order with no filler. The batch sentence is long but carries information unavailable elsewhere; minor density cost from bracketed tags.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates well by enumerating the returned fields (type, shortText, transactionId, dateTime, username) and the detail fields (serviceInfo, errorContext, sourceCode, callStack). For a 5-param read-only tool this is nearly complete; only pagination/limit behavior and authorization needs are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters (from, to, user, error_url, max_results) are already documented in the schema; baseline is 3. The description reinforces error_url's mode-switching role but adds no new syntax or constraints for the time range, user filter, or max_results beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (List SAP Gateway error log /IWFND/ERROR_LOG) and explicitly covers the two modes: listing versus retrieving a single error's detail via error_url. The sibling list contains many Runtime* tools, and this description makes clear it is about the gateway error log specifically, not feeds, dumps, or system messages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The condition selecting detail mode is stated explicitly ("With error_url returns full detail"), which is the key routing decision. It also explains batch-mode recording semantics. It does not name any sibling alternative (e.g. RuntimeListFeeds, RuntimeListSystemMessages) or state exclusions, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

RuntimeGetProfilerTraceDataA

[read-only] [runtime] Read profiler trace data by trace id/uri: hitlist, statements, or db accesses. Returns parsed JSON payload. Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
idNoStatement node ID (for statements view).
viewYesTrace view to retrieve.
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.
with_detailsNoInclude statement details (for statements view).
trace_id_or_uriYesProfiler trace ID or full ADT trace URI.
with_system_eventsNoInclude system events.
auto_drill_down_thresholdNoAuto drill-down threshold (for statements view).

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so: it declares read-only behavior, discloses that the read runs on a dedicated ABAP session, that a timeout cancels the read and logs off that session leaving the system unchanged, that a client-side cancel does not stop SAP, and that in batch mode the call returns empty content recorded under a sequence number.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and views before the operational caveats, and every sentence carries real information. The timeout paragraph is somewhat long and partially duplicates the schema's timeout description, keeping it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description states the return is a parsed JSON payload and warns that in batch mode the immediate answer is empty content retrieved later by number. Combined with the side-effect and session behavior disclosure, an agent has everything needed to call it safely and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all seven parameters, including the timeout semantics restated almost verbatim in the description. The description adds no syntax or example values beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (read profiler trace data) plus the three enumerable views (hitlist, statements, db accesses), which lets an agent map directly to the schema enum. It does not, however, distinguish itself from sibling RuntimeAnalyzeProfilerTrace, which an agent could plausibly confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives operational guidance (own ABAP session, timeout recommended below the client's 60 s limit, batch-mode recording) but never says when to choose this over RuntimeAnalyzeProfilerTrace or RuntimeListProfilerTraceFiles, nor when to pick a given view. Usage is implied by the view names rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

RuntimeListFeedsA

[read-only] [runtime] Reads the ADT runtime feed named by feed_type: with feed_type "dumps", the ABAP short dumps (runtime errors) of the program or object named by object_name, of the user named by user, in the time range from–to, filtered also by runtime error, exception, package and application component; with "system_messages" or "gateway_errors", the system messages or SAP Gateway errors of the user and time range; with "descriptors" (the default) or "variants", the feeds and their variants. Entries come newest first; each dump carries its dump_id. When more entries remain, next_to is the to that reads on; incomplete_second names a second holding more entries than SAP answers in one request. Takes feed_type (one feed: its answer) or feed_types (several feeds with the same filters: one entry per feed, in the order given, each its answer or { feed_type, error }). Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. When feed_type is one of descriptors, variants (absent reads as descriptors) and feed_types is absent, recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
toNoEnd of time range in YYYYMMDDHHMMSS format, inclusive; pass a previous next_to here to read on.
fromNoStart of time range in YYYYMMDDHHMMSS format.
userNoEntries of this SAP user (exact match).
packageNoDumps whose object package contains this text, in any case.
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.
componentNoDumps whose application component contains this text, in any case.
exceptionNoDumps whose exception class contains this text, in any case.
feed_typeNoFeed to read. "descriptors" lists available feeds, "variants" lists feed variants, others read that specific feed. Default: descriptors.
feed_typesNoSeveral feeds, read together with the same filters (give this or feed_type).
max_resultsNoMost entries to return, up to 1000; SAP answers at most 100 per request and the pages are read in turn. An answer holds whole seconds, so it may hold a few entries fewer, or a crowded second more, than asked. Default: 50.
object_nameNoDumps whose terminated object name contains this text, in any case.
runtime_errorNoDumps whose runtime error contains this text, in any case.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full burden and does: it marks itself read-only, discloses that it runs on its own ABAP session, explains exactly what happens when timeout fires (read cancelled, session logged off, system unchanged), describes ordering (newest first), pagination via next_to, the incomplete_second overflow case, and the recordable batch-mode behavior where a call answers with empty content and is read later by number.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Nearly all content is substantive, but it is delivered as one long run-on block rather than front-loaded clauses or bullets, which makes the critical routing information (feed types, pagination, batch caveat) harder to scan. The timeout paragraph is also duplicated almost word-for-word from the input schema, which is wasted space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter, no-annotation, no-output-schema tool, it covers the essentials: filtering semantics, ordering, pagination continuation, overflow handling and batch recording. What it omits is the shape of non-dump entries (system_messages, gateway_errors, descriptors/variants), so an agent knows a dump's dump_id but not what fields other feeds return.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description nonetheless adds value by explaining parameter *interactions* the schema does not: feed_type vs feed_types as mutually exclusive alternatives, that next_to should be passed back as `to`, and that a missing feed_type reads as descriptors. It does repeat the timeout text nearly verbatim from the schema, which caps this below a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Reads the ADT runtime feed named by feed_type') and then enumerates each of the five feed types with what it returns, so an agent can map a task (dumps vs system messages vs feed discovery) to the right mode without opening the schema. It also effectively distinguishes itself from siblings like RuntimeListSystemMessages and RuntimeGetGatewayErrorLog by showing those are feed types of this tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete selection rules: default is 'descriptors' when feed_type is absent, and feed_types is the alternative when several feeds share filters (with an explicit per-feed error shape). It also prescribes setting timeout below the client's request limit and warns that a client cancel does not stop SAP. It never states when *not* to use this tool or names a sibling to prefer instead, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

RuntimeListProfilerTraceFilesA

[read-only] [runtime] List ABAP profiler trace files available in ADT runtime. Returns structured entries with id, recordedAt, user, objectName, state, expiresAt, and sizing/timing fields. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden well: it declares the operation as read-only, enumerates the returned entry fields, and explains unusual batch-mode recording behavior where calls return empty content and answers are read by number later. It omits permission requirements and any pagination or size limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core listing purpose and uses compact bracketed tags. The batch-mode sentence is dense and slightly convoluted, but it contains important operational information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing tool with no output schema, the description supplies a useful field list and batch-mode behavior. It could say more about state or expiry semantics and whether results are paginated, but it is largely complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description does not need to explain parameter semantics, though it does describe the returned entry fields instead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: "List ABAP profiler trace files available in ADT runtime." It clearly distinguishes this listing operation from sibling runtime tools such as RuntimeGetProfilerTraceData and RuntimeCreateProfilerTraceParameters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the listing purpose, and the batch-mode note provides some operational context. However, it never explicitly states when to use this tool instead of RuntimeGetProfilerTraceData, RuntimeAnalyzeProfilerTrace, or RuntimeCreateProfilerTraceParameters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

RuntimeListSystemMessagesA

[read-only] [runtime] List SM02 system messages. Returns structured entries with id, title, text, severity, validity period, and author. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
toNoEnd of time range in YYYYMMDDHHMMSS format.
fromNoStart of time range in YYYYMMDDHHMMSS format.
userNoFilter by author username.
max_resultsNoMaximum number of messages to return.

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations absent, the description carries the full burden and does reasonably well: it declares read-only, enumerates the return fields, and explains the non-obvious batch-mode recording semantics (recorded under next number, empty content, read back by number). It omits permission requirements and pagination/truncation behavior, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the [read-only]/[runtime] tags and core purpose, and every sentence carries information. The batch-mode sentence is dense but relevant, not filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description's field enumeration is valuable, and the lack of annotations is offset by the explicit read-only declaration and batch behavior note. Remaining gaps (pagination handling, empty-result behavior) are minor for a filtered list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (from, to, user, max_results) are already documented with formats in the schema. The description adds no syntax or semantics beyond mentioning 'validity period', so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb 'List' and resource 'SM02 system messages', plus enumerates the returned fields (id, title, text, severity, validity period, author). It doesn't explicitly differentiate from sibling runtime tools, but no sibling appears to overlap on SM02 messages, so an agent can still identify the target resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides no when-to-use, when-not-to-use, or alternative-tool guidance. The batch-mode sentence describes behavior after invocation, not a condition that selects this tool, so an agent gets no routing signal from usage guidance itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

RuntimeRunClassA

[read-only] [runtime] Runs the ABAP class named by class_name, which implements if_oo_adt_classrun, and returns its console output. Set profile=true to also capture a profiler trace: schedules the trace, runs the class under it, then searches the profiler feed for the id this run produced (bounded by max_trace_attempts/trace_retry_delay_ms). If the trace appears only after that bound, the run still answers success with output and profiler_id, trace_id absent — the trace is then found later in the list of profiler trace files. When profile is any value but true, recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
profileNoWhen true, run with the profiler and search the profiler feed for the resulting traceId. Default false.
aggregateNo
sql_traceNo
amdp_traceNo
backgroundNoWhen true, the run goes on in the background on an ABAP session of its own and the call answers at once with a run_handle; read its answer later with GetBackgroundRun, and remove it with DiscardBackgroundRun. A started run cannot be stopped. No default: without it the call waits for the run to end.
class_nameYesABAP class name to execute.
descriptionNoProfiler trace description (only used when profile=true).
all_db_eventsNo
explicit_on_offNo
with_rfc_tracingNo
all_dynpro_eventsNo
trace_lookup_urisNoAccepted for backward compatibility; no longer affects trace lookup. adt-clients 19 lists the profiler feed as one endpoint, optionally filtered by user — there is nowhere to put a URI.
max_trace_attemptsNoMax attempts to poll the profiler feed for the trace this run produced (default 5). Only used when profile=true.
all_procedural_unitsNo
max_time_for_tracingNo
trace_retry_delay_msNoDelay in ms between profiler-feed polling attempts (default 2000). Only used when profile=true.
max_size_for_trace_fileNo
all_misc_abap_statementsNo
all_system_kernel_eventsNo
all_internal_table_eventsNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses profiler tracing behavior, polling bounds, partial-success return shape, and batch-mode recording, but it does not address the side-effect risk of executing arbitrary ABAP code and leaves most trace parameters' behavior unexplained. The '[read-only]' tag is also potentially misleading for a code-execution tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and avoids repeating the schema wholesale. The middle sentence is dense but earns its place by explaining the profiler polling edge case; the final batch-mode sentence is less clearly structured but still adds relevant behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 20-parameter tool with no output schema and no annotations, the description covers the main execution flow, profiler tracing, and one batch-mode return behavior. However, it is not complete enough: it omits return-value structure for normal runs, many parameter interactions, and the side-effect profile of arbitrary class execution.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 35% across 20 parameters, so the description needs to compensate for many undocumented parameters. It explains class_name, profile, max_trace_attempts, trace_retry_delay_ms, and alludes to batch mode, but says nothing meaningful about aggregate, sql_trace, amdp_trace, background, description, trace_lookup_uris, and the many all_* trace options.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: 'Runs the ABAP class named by class_name, which implements if_oo_adt_classrun, and returns its console output.' This clearly distinguishes it from RuntimeRunProgram and other siblings by naming the executable artifact and the expected interface.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the prerequisite that the class implements if_oo_adt_classrun and explains when to set profile=true, but gives no explicit guidance on when to choose this tool over RuntimeRunProgram, RunUnitTest, or background-run variants. Usage is implied rather than routed against alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

RuntimeRunProgramB

[read-only] [runtime] Runs the ABAP program (report) named by program_name and returns its output. Set profile=true to also start a profiler trace; the trace is then found in the list of profiler trace files (program execution is fire-and-forget, so the traceId arrives later, through that list). When profile is any value but true, recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
profileNoWhen true, run with the profiler. Default false. Trace must be located afterwards via RuntimeListProfilerTraceFiles — program execution does not return traceId synchronously.
aggregateNo
sql_traceNo
amdp_traceNo
backgroundNoWhen true, the run goes on in the background on an ABAP session of its own and the call answers at once with a run_handle; read its answer later with GetBackgroundRun, and remove it with DiscardBackgroundRun. A started run cannot be stopped. No default: without it the call waits for the run to end.
descriptionNoProfiler trace description (only used when profile=true).
program_nameYesABAP program name to execute.
all_db_eventsNo
explicit_on_offNo
with_rfc_tracingNo
all_dynpro_eventsNo
all_procedural_unitsNo
max_time_for_tracingNo
max_size_for_trace_fileNo
all_misc_abap_statementsNo
all_system_kernel_eventsNo
all_internal_table_eventsNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden and does well: it discloses fire-and-forget execution, that the traceId arrives asynchronously via the trace file list, and batch-mode recording behavior. It omits permissions, failure modes, and what the returned output looks like, but the async/side-effect profile is clearly surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Leads with the core action, which is good, but the batch-mode sentence ('When profile is any value but true, recordable: in batch mode a call is recorded under the next number...') is convoluted and hard to parse. It is dense and not cleanly structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 17-parameter tool with no output schema and no annotations, the description leaves most tracing parameters unexplained and does not describe the returned output format. It adequately covers the common path but is incomplete given the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 24% and there are 17 parameters. The description explains program_name indirectly and profile=true, but the 12 tracing/aggregation flags (aggregate, sql_trace, amdp_trace, all_db_events, max_time_for_tracing, etc.) are undocumented in both schema and prose, leaving most parameters opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Runs the ABAP program (report) named by program_name and returns its output.' This clearly distinguishes it from RuntimeRunClass, though it does not name that sibling explicitly. The added note about firewall-like behaviors (fire-and-forget) is extra.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-do-what guidance: set profile=true to start a trace located via the profiler trace file list, and use background/GetBackgroundRun/DiscardBackgroundRun for async execution. It does not say when to prefer this over RuntimeRunClass or RunProgramUnitTest, keeping it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

RunUnitTestA

[read-only] Runs the ABAP Unit tests of the ABAP class named by class_name and returns the result. runner async (default): the run is started and waited for within a bound, and a run that outlasts it returns its run_id, whose status and result are read by run_id; suited to long suites. runner sync: one request that returns the finished result. When runner is sync, recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
scopeNoWhich tests the run covers, sent with either runner. Foreign tests are test classes linked to the object by an ABAP Doc @testing relation (a function module's tests are often linked so). With runner sync they execute only with foreign_tests true: with the defaults (foreign_tests false, add_foreign_tests_as_preview true) SAP lists them as a preview, unexecuted. Runner async executes them with the defaults as well.
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
runnerNoasync (default): starts the run, waits for it within a bound and returns the result, or the run_id of a run that outlasts the bound, whose status and result are read by run_id; suited to long suites. sync: one request that returns the finished result.async
class_nameYesClass whose tests run.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden and does so well: it declares read-only behavior, explains the async bound and run_id fallback, states that sync is a single request returning the finished result, and discloses the batch-mode empty-answer/recordable side effect. These are precisely the behavioral details an agent needs before invoking it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and scope, then explains runner modes and batch behavior efficiently. The single dense paragraph is information-dense but slightly hard to scan; every sentence still contributes necessary context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description explains the return shape sufficiently: the finished result, or a run_id for long-running async executions, plus how to read the answer after a batch. The remaining gap is that the internal structure of the 'result' is not described, but for a test-runner tool the key operational behavior is covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents class_name, scope, detail, and runner. The description restates the runner semantics and adds the batch-mode recordable caveat, but adds little parameter-level meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Runs') and resource ('ABAP Unit tests of the ABAP class named by class_name'), immediately distinguishing it from the program/function-group/CDS unit test runners in the sibling list. An agent can tell what it does and which object type it targets without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear guidance on choosing between runner async (suited to long suites) and runner sync, including the trade-offs and batch recordable caveat. It does not explicitly name alternatives such as GetUnitTestResult for retrieving an async run, but the implied workflow is understandable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

SearchObjectA

[read-only] Search ABAP repository by object name or wildcard pattern (e.g. 'Z*'). Answers: "find object X", "does X exist", "list objects matching...", "search for program/class/table by name". Supports all repository object types — optionally filter by type (PROG, CLAS, INTF, DEVC, TABL, DDLS, DTEL, FUGR, SRVD, SRVB, BDEF, DDLX, etc.). Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.
maxResultsNo[read-only] Maximum number of results to return
object_nameYes[read-only] Object name or mask (e.g. 'MARA*')
object_typeNo[read-only] Optional ABAP object type (e.g. 'TABL', 'CLAS/OC')

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden and does: it declares read-only behavior, discloses that it 'runs on an ABAP session of its own', and explains timeout semantics precisely — the read is cancelled, the session is logged off, and the system is left unchanged. It also warns that a client-side cancel only ends the client's wait while SAP keeps running, and explains batch-mode recording with empty content, which are exactly the non-obvious traits an agent must know before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is correctly front-loaded and the quoted intents are efficient, but the timeout paragraph largely restates the schema's own timeout description, including the 60s TypeScript SDK note, which appears in both places. The final batch-mode sentence is information-dense but crammed into one long line, costing readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description does substantial work: session isolation, cancellation semantics, and batch-mode return behavior are all covered. What it leaves out is the shape of a normal successful answer — whether results are names, object URIs, or typed entries — and how maxResults interacts with truncation, which an agent sorting through 100+ matches would want.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so a 3 is the floor, but the description adds real meaning the schema lacks: it enumerates the supported object types (PROG, CLAS, INTF, DEVC, TABL, DDLS, DTEL, FUGR, SRVD, SRVB, BDEF, DDLX) rather than the schema's two examples, and shows the wildcard mask form. It says nothing about maxResults beyond the schema's terse 'maximum number of results', leaving result truncation behavior implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search ABAP repository by object name or wildcard pattern') and immediately scopes it to name-based lookup, which separates it from source-level siblings like SearchSource and typed enumerations like GetObjectsByType. The quoted user intents ('find object X', 'does X exist', 'list objects matching...') make the retrieval scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intent phrases ('find object X', 'does X exist', 'list objects matching...') give a clear picture of when to reach for this tool, including the existence-check case that many searchers handle poorly. It does not name an alternative or state when not to use it (e.g. when to prefer SearchSource for a text grep), so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

SearchSourceA

[read-only] Search ABAP source text inside one or more packages (programs, function groups, classes). packages accepts * masks (Z*, /NS/Z*) alongside exact names; mask resolution is best-effort and scoped to the ADT repository-search result window — some matching packages may be left unscanned. For certainty, pass concrete package names. When using masks, narrow the mask itself and use object_types, object_filter, and max_objects as scan-target controls that apply after package resolution. Comments are searched by default; set exclude_comments=true to drop col-1 * and full-line " comments. The version parameter affects PROG and CLAS main include reads only — FUGR subinclude reads always go against the active version (the include endpoint reads the active version alone). truncated.by_object_cap means at least one object had MORE hits than max_hits_per_object, so that object's hits were capped. The object-count limit is max_objects (which sets truncated.by_max_objects). To avoid by_object_cap, raise max_hits_per_object. The scan is read in ADT batch envelopes: the searches of the package masks, each level of the package walk, then the sources of the scanned objects in envelopes of at most 300 reads (main sources and function group structures, then function group includes and function modules); time_budget_ms is checked before every envelope, and a scan it stops answers whole objects. Run only ONE SearchSource per destination at a time — multiple parallel SearchSource calls against the same SAP system saturate the scan backend and can make all of them time out. Prefer combining terms into a single call over parallel calls. A scan that stops before its last target answers next_start_at; pass it as start_at to go on. When next_start_at equals start_at, time_budget_ms passed before the first object was answered: raise time_budget_ms or lower max_objects. The answer carries total_targets, the scan targets of the walk; it is absent when time_budget_ms passed during the walk. Runs on an ABAP session of its own. Optional timeout (seconds): when it passes, the read is cancelled, its ABAP session logged off, and the system stays as it was. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a client's cancel ends only the client's wait, and SAP runs the read on. Runs outside batch mode.

NameRequiredDescriptionDefault
queryYesPrimary substring to match (case-insensitive, ABAP CS).
query2NoOptional second substring. When set, both query and query2 must appear on the same line.
excludeNoUp to 3 substrings; a line containing any of them is dropped.
timeoutNoSeconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.
versionNoSource version for PROG and CLAS main include reads. Default active. FUGR subincludes always read the active version.
packagesYesPackages to scan. Each entry is either an exact dev-class name or a `*` mask, where `*` stands for any characters and a namespace prefix may lead it.
start_atNoIndex of the first scan target to read, from `next_start_at` of the previous answer; 0 by default.
max_objectsNoCap the total objects scanned across all packages (default 500). Setting truncated.by_max_objects=true when exceeded.
emit_no_hitsNoWhen true, list zero-hit targets in a separate no_hits array. Default false.
object_typesNoSubset of object families to scan (default: all three).
object_filterNoGlob applied to object names within each package (e.g. "Z*").
time_budget_msNoInternal scan deadline in ms. When exceeded, returns the hits of the objects before `next_start_at` with truncated.by_timeout=true and next_start_at; when next_start_at equals start_at, the deadline passed before the first object was answered: raise time_budget_ms or lower max_objects. Set this BELOW your client/transport timeout (e.g. 540000 for a 600s client) so you get a partial result instead of a hard cutoff.
exclude_commentsNoSkip col-1 '*' and full-line '"' comment lines. Default false (comments are scanned).
include_subpackagesNoRecurse into subpackages (default true).
max_hits_per_objectNoCap hits per root object across its source units (default 100). When exceeded, truncated.by_object_cap=true is set. Raise this value if you need more hits per object.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so thoroughly: read-only nature, comment handling, version limitation for FUGR includes, truncation flags and their causes, time-budget behavior, batch-envelope scanning, pagination semantics, and the concurrency warning about parallel calls against the same SAP system. It also discloses that a timeout cancels the read and logs off its ABAP session, leaving the system as it was.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and critical caveats are front-loaded, but the rest is a dense single block that repeats schema content (the timeout explanation and time_budget_ms guidance largely duplicate their schema descriptions). Much of the detail is necessary for a 15-parameter tool, but some sentences could be trimmed without losing behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 15 parameters, no annotations, and no output schema, the description is unusually complete: it documents return fields like total_targets and next_start_at, truncation flags, resume behavior, timeout side effects, and concurrency constraints. An agent has enough information to call it correctly and interpret the answer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3, but the description adds real meaning beyond the schema: mask resolution is best-effort and scoped to the ADT repository-search window, version affects only PROG/CLAS main includes, and max_hits_per_object vs max_objects drive distinct truncation flags. It also explains how time_budget_ms, next_start_at, and start_at interact when a scan stops early.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: search ABAP source text inside packages, scoped to programs, function groups, and classes. The scope is precise enough to separate it from object-level search, but it never names sibling SearchObject or otherwise explicitly differentiates itself from that tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational context: prefer concrete package names for certainty, narrow masks and use object_types/object_filter/max_objects, and run only one SearchSource per destination. It explains how to resume with next_start_at and how to avoid by_object_cap. However, it never routes the agent to a specific alternative tool when this one is a poor fit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

SortAndCompressTransportTaskA

Sorts the object list of the transport task named by transport_number and merges its duplicate entries. A task holding the same entry twice refuses removing an entry until this has run. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
transport_numberYesNumber of the transport task to sort and compress.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and discloses the mutation (sorting and merging duplicates), the removal-blocking precondition, and batch recording semantics including empty responses and later retrieval by number. It still omits permission requirements and precise duplicate-merge behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the action and scope. Each sentence adds distinct operational information—purpose, precondition, and batch behavior—without filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with no output schema or annotations, the description covers purpose, prerequisite, and batch/return behavior sufficiently. Some operational details, such as sort order, duplicate-retention rules, and permissions, remain unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters are already documented in the schema. The description restates transport_number's meaning but adds no syntax or semantics beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Sorts the object list of the transport task named by transport_number and merges its duplicate entries.' This clearly distinguishes it from sibling transport-object tools such as RemoveTransportObject or AddTransportObject.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the precondition that a task with duplicate entries refuses entry removal until this runs, which implies when to invoke it. It does not explicitly name an alternative or state when not to use it, so it falls short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateBehaviorDefinitionA

Update source code of an existing ABAP Behavior Definition (BDEF). Locks, updates, unlocks, and optionally activates. Runs outside batch mode.

NameRequiredDescriptionDefault
nameYesBehavior Definition name
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
activateNoActivate after update. Default: true
lock_handleNoLock handle from LockObject. If not provided, will attempt to lock internally (not recommended for stateful flows).
source_codeYesNew source code
transport_requestNoTransport request number, not a task. Required for transportable packages.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and discloses key behavior: locks, updates, unlocks, optional activation, and that it runs outside batch mode. It omits finer details such as failure behavior or permission requirements, but covers the core mutation workflow well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose, followed by behavioral notes. Every sentence adds useful information without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description gives enough context for an agent to understand the mutation workflow and activation side effect. Given full schema coverage and no output schema, remaining gaps such as transport handling and error responses are modest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters are already documented. The description adds only a reference to optional activation and the lock/update/unlock sequence; it does not add syntax or format details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: updating source code of an existing ABAP Behavior Definition. It clearly differentiates from creation/deletion/read tools by specifying 'existing' and 'source code', though it does not explicitly name sibling alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies use for modifying existing BDEF source and notes optional activation, but provides no explicit when-to-use guidance versus ActivateBehaviorDefinition, CreateBehaviorDefinition, or CheckBehaviorDefinition. Usage is inferable but not directive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateBehaviorImplementationB

Update source code of an existing ABAP behavior implementation class. Updates the implementations include. Manages lock, update, unlock, and optional activation. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
activateNoActivate behavior implementation after update. Default: true.
class_nameYesBehavior Implementation class name. Must exist in the system.
transport_requestNoTransport request number, not a task. Optional if object is local or already in transport.
behavior_definitionYesReferenced Behavior Definition name. Accepted for compatibility; not forwarded to the write — the shipped update() no longer reads it (it writes the implementations include only, never the FOR BEHAVIOR OF main source).
implementation_codeYesImplementation code for the implementations include. Contains the actual behavior implementation methods.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose something valuable: it manages lock/update/unlock, activation is optional, and it cannot run in batch mode. It does not say whether the implementations include is fully replaced or merged, what happens on lock failure, or whether a transport is mandatory — all material for an unannotated write tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short, front-loaded sentences with no filler; the target of the write is stated first. 'Updates the implementations include' is mildly redundant with sentence one but earns its place by scoping the write.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Six parameters, no annotations, no output schema, so the burden is on the description. It covers scope, locking, activation and batch restriction, but leaves overwrite semantics and any indication of what the caller gets back unstated — a gap for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter including the behavioral quirks (behavior_definition accepted but not forwarded, transport_request must be a request not a task, activate defaults true) is already documented in the schema. The description adds no parameter-level meaning beyond 'Updates the implementations include.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource: 'Update source code of an existing ABAP behavior implementation class,' and narrows it to the implementations include. This distinguishes it from UpdateBehaviorDefinition and CreateBehaviorImplementation without needing to name them, though no sibling is explicitly called out.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The line 'Runs outside batch mode' gives a real operating constraint, and 'existing' implies CreateBehaviorImplementation is not the tool to use. But there is no explicit when-to-use vs. when-not, and no pointer to ActivateBehaviorImplementation or CheckClass for validation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateCdsUnitTestA

Writes test_class_source as the ABAP Unit test classes of the CDS view test class named by class_name. The local test classes in the test class are rewritten, and it is activated. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesTest class of the CDS view. Must already exist.
test_class_sourceYesABAP source of the local test classes: definitions and implementations, FOR TESTING. Replaces what the include holds.
transport_requestNoTransport request, not a task. Required for a transportable object.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does meaningful work: it discloses that existing local test class content is replaced (a destructive rewrite), that activation is triggered as a side effect, and that the call runs outside batch mode. It stops short of stating permission/lock requirements or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: the primary write, the rewrite/activation side effect, and the batch-mode constraint are all front-loaded with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutation tool with no annotations and no output schema, the description covers the essential behavioral facts (overwrite semantics, activation, non-batch execution) that the schema does not. Only lock/permission behavior and failure modes are left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains all four parameters including the detail enum and transport_request. The description reinforces what class_name and test_class_source denote but adds no format or syntax detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (writes) plus a precise resource: the ABAP Unit test classes of the CDS view test class named by class_name. It distinguishes itself from CreateCdsUnitTest/DeleteCdsUnitTest by being the write-in-place operation, though it does not explicitly name the neighboring UpdateUnitTest or UpdateLocalTestClass alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the description says the local test classes 'are rewritten' and the object is activated, which tells an agent this is an in-place update of an existing test class, and 'Must already exist' appears only in the schema for class_name. No explicit when-to-use/when-not or pointer to Create/Run/Delete siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateClassA

Update source code of an existing ABAP class. Locks, updates, unlocks, and optionally activates. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
activateNoActivate after update. Default: false.
class_nameYesClass name.
source_codeYesComplete ABAP class source code.
transport_requestNoTransport request number, not a task. Required for transportable packages.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral burden and does well by disclosing the lock-update-unlock sequence, optional activation, and that it runs outside batch mode. It does not cover permissions, failure behavior, or return details, but the core mutation behavior is clearly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the primary action and then adds key behavioral context in two short sentences. There is no wasted language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description gives enough behavioral context to invoke it correctly: locking, updating, unlocking, optional activation, and batch-mode exclusion. It could say more about overwrite semantics or return behavior, but the schema already covers parameter details comprehensively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters in detail. The description reinforces source-code updating and optional activation but adds no syntax or format details beyond the schema, making 3 the appropriate baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: updating source code of an existing ABAP class. This clearly distinguishes it from CreateClass, DeleteClass, GetClass, and ActivateClass, even without naming them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it by saying it updates an existing class and runs outside batch mode, but it does not explicitly compare it with alternatives such as CreateClass, CheckClass, or ActivateClass. The usage context is inferable but not fully spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateDataElementA

Update an existing ABAP data element. Locks, updates with provided parameters (complete replacement), unlocks, and optionally activates. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
lengthNoLength - for predefinedAbapType or refToPredefinedAbapType
activateNoActivate data element after update (default: true)
decimalsNoDecimals - for predefinedAbapType or refToPredefinedAbapType
data_typeNoData type (CHAR, NUMC, etc.) - for predefinedAbapType or refToPredefinedAbapType
type_kindNoType kind: domain, predefinedAbapType, refToPredefinedAbapType, refToDictionaryType, refToClifTypedomain
type_nameNoType name: domain name, data element name, or class name (depending on type_kind)
descriptionNoNew data element description
search_helpNoSearch help name
package_nameYesPackage name
field_label_longNoLong field label (max 40 chars)
data_element_nameYesData element name to update
field_label_shortNoShort field label (max 10 chars)
set_get_parameterNoSet/Get parameter ID
transport_requestNoTransport request number, not a task. Required for transportable packages.
field_label_mediumNoMedium field label (max 20 chars)
field_label_headingNoHeading field label (max 55 chars)
search_help_parameterNoSearch help parameter

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the internal lock/unlock lifecycle, that activation is optional, that it runs outside batch mode, and critically that the update is a complete replacement. It does not cover failure behavior (e.g. what happens if the lock fails) or permission requirements, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, tightly packed, with the identity of the operation front-loaded before the behavioral detail. Every clause conveys something actionable; nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 18-parameter mutation tool with no annotations and no output schema, the description covers the mutation lifecycle well but says nothing about the response (the 'detail' parameter implies a returned data element representation) or error/lock-conflict behavior. Adequate but with clear remaining gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3, but the phrase 'updates with provided parameters (complete replacement)' adds semantics the schema cannot express: any omitted field is effectively cleared. That is a material warning for an 18-parameter mutation tool and earns a step above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Update') and resource ('ABAP data element') and constrains it to an 'existing' object, which separates it from CreateDataElement at a glance. The sequence of operations (lock/update/unlock/activate) further pins down what the call actually does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it via 'existing' and hints at a usage constraint with 'complete replacement', but it never names an alternative (e.g. ActivateDataElement for activation-only, or CreateDataElement for new objects) or states prerequisites beyond what the schema carries. Usage is inferable rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateDdlA

Updates the DDL source code of the existing CDS view or classic DDL view named by ddl_name to ddl_source. Locks, updates, unlocks, and optionally activates. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
activateNoActivate after update. Default: false.
ddl_nameYesDDL source name.
ddl_sourceYesComplete DDL source code.
transport_requestNoTransport request number, not a task. Required for transportable packages.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does add real behavioral detail: the lock/update/unlock sequence, that activation is optional, and that it runs outside batch mode. It omits error/failure behavior and the transport-request prerequisite (only in schema), which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with zero filler: purpose first, then the lock/activation behavior, then the batch-mode constraint. Everything is front-loaded and each clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter mutation tool with no annotations and no output schema, the description covers purpose, mutation mechanics, activation, and execution mode. The main gap is that it never states what is returned, though the detail parameter in the schema implies a result object exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already defines all five parameters, including detail and transport_request. The description only restates the ddl_name/ddl_source purpose and the optional activation, adding nothing about syntax, transport behavior, or the detail enum.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Updates the DDL source code of the existing CDS view or classic DDL view') and binds it to the ddl_name/ddl_source parameters. The word 'existing' implicitly distinguishes it from CreateDdl/DeleteDdl, but no sibling is named, so full sibling differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'optionally activates' and 'Runs outside batch mode' describe operating context but not when to choose UpdateDdl over ActivateDdl or CheckDdl. There is no explicit when-to-use or when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateDomainA

Update an existing ABAP domain. Locks, updates with provided parameters (complete replacement), unlocks, and optionally activates. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
lengthNoField length (max depends on datatype)
activateNoActivate domain after update (default: true)
datatypeNoData type: CHAR, NUMC, DATS, TIMS, DEC, INT1, INT2, INT4, INT8, CURR, QUAN, etc.
decimalsNoDecimal places (for DEC, CURR, QUAN types)
lowercaseNoAllow lowercase input
descriptionNoNew domain description (optional)
domain_nameYesDomain name to update
sign_existsNoField has sign (+/-)
value_tableNoValue table name for foreign key relationship
fixed_valuesNoArray of fixed values for domain value range
package_nameYesPackage name
conversion_exitNoConversion exit routine name (without CONVERSION_EXIT_ prefix)
transport_requestNoTransport request number, not a task. Required for transportable packages.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does real work: it discloses the lock/update/unlock sequence, that the update is a complete replacement rather than a merge, that activation is optional, and that it runs outside batch mode (relevant given the BatchBegin/BatchEnd siblings). It omits failure/rollback behavior and transport requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the verb and resource, then behavior, then the batch-mode caveat. No filler and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter mutation tool with no annotations and no output schema, the description covers the operation's mechanics (lock, replace, unlock, activate, outside batch) well. Gaps remain on rollback on failure and on the transport_request requirement, though the schema documents that field.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so a 3 is the baseline, but the phrase 'with provided parameters (complete replacement)' adds meaning the schema does not: values omitted from the call are reset, not preserved. That is a substantive semantic gain beyond the per-field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing ABAP domain'), which clearly separates it from CreateDomain, DeleteDomain, and ActivateDomain in the sibling list. It does not explicitly name those alternatives, so it falls short of the top band.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: 'existing' signals it is not for creation, and 'optionally activates' hints that ActivateDomain is unnecessary. There is no explicit when-to-use/when-not guidance or statement of prerequisites such as the domain already existing or being unlocked.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateFunctionGroupA

Update metadata (description) of an existing ABAP function group. Function groups are containers for function modules, which carry the source; this updates the group's metadata alone. Locks the group, writes, and unlocks it. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
descriptionYesNew description for the function group.
transport_requestNoTransport request number, not a task. Optional if object is local or already in transport.
function_group_nameYesFunction group name. Must exist in the system.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and discloses important traits: it locks the group, writes, unlocks it, and operates outside batch mode. It does not mention authorization requirements, error behavior, or whether the previous description is recoverable, leaving some mutation context uncovered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four tight sentences, front-loaded with the core action and scope. The container clarification and lock/write/unlock note are useful and earn their place without unnecessary repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter mutation tool with no annotations and no output schema, the description gives the essential scope and locking behavior, while the schema documents all parameters. It omits return-value and error-behavior context, which is a minor gap rather than a blocker.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description reinforces that the description parameter is the new group description and that the function group must exist, but it adds no syntax, format, enum, or default details beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (Update) and resource (metadata/description of an ABAP function group), and clarifies the exact scope: the group's metadata alone, not function module source. This distinguishes it from siblings such as UpdateFunctionModule and CreateFunctionGroup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for use: the group must already exist and the operation changes only metadata/description. It also notes that the tool runs outside batch mode. It does not explicitly name when to choose a different sibling or when not to use it, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateFunctionGroupUnitTestA

Writes test_class_source as the ABAP Unit test classes of the function group named by function_group_name. The local test classes in its test include are rewritten, and it is activated. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
test_class_sourceYesABAP source of the local test classes: definitions and implementations, FOR TESTING. Replaces what the include holds.
transport_requestNoTransport request, not a task. Required for a transportable object.
function_group_nameYesFunction group whose tests are replaced. Its test include must already exist.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations the description carries the full burden, and it discloses two important behaviors: the existing local test classes are rewritten (destructive overwrite), and the object is activated as part of the call. It also flags the batch-mode restriction. It stops short of covering transport implications or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and target, followed by side effects and the execution constraint. Slight redundancy in 'of the function group named by function_group_name', but no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers what is overwritten, that activation occurs, and when it may not run. The main remaining gap is transport behavior, which is only hinted at by the schema's transport_request field.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (including detail and transport_request) are already documented in the schema. The description adds only loose framing for test_class_source and function_group_name without format or transport detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (writes/replaces), resource (ABAP Unit test classes of a function group), and names the exact target include. It is clearly distinguishable from CreateFunctionGroupUnitTest and from UpdateLocalTestClass by scoping the write to the function group's test include.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implied usage as a replace operation on an existing test include, and 'Runs outside batch mode' gives one concrete execution constraint. However, it never explicitly routes the agent between this tool and CreateFunctionGroupUnitTest or UpdateLocalTestClass, nor states prerequisites such as the test include already existing (that lives only in the schema).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateFunctionIncludeB

Update source code of an existing ABAP function group include. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
activateNoActivate the include after the source update. Default: false. Set true to make the updated source the active version immediately.
source_codeYesComplete ABAP include source code.
include_nameYesInclude name. Include must already exist.
transport_requestNoTransport request number, not a task. Required for transportable includes.
function_group_nameYesFunction group name containing the include.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full behavioral burden for a mutation tool. It states that it updates existing source code and runs outside batch mode, but does not explain overwrite implications, activation behavior, transport handling, error conditions, or reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two compact sentences and front-loads the core action. Every sentence adds at least some useful information, with no repetition or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema fully documents all six parameters, so the description need not repeat them. However, for a mutation tool with no annotations or output schema, it is only minimally complete: it omits important behavioral context such as whether the source is overwritten, the effect of activation, and transport requirements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already well documented in the schema. The description only reinforces that the include must already exist and that source code is updated; it adds no further parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: updating the source code of an existing ABAP function group include. The word 'existing' implicitly separates it from CreateFunctionInclude and DeleteFunctionInclude, though it does not explicitly name those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides no explicit guidance on when to use this tool versus alternatives such as CreateFunctionInclude, GetFunctionInclude, or UpdateFunctionModule. The only usage-related constraint is the brief note that it runs outside batch mode.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateFunctionModuleA

Update source code of an existing ABAP function module. Locks, updates, unlocks, and optionally activates. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
activateNoActivate function module after source update. Default: false. Set to true to activate immediately.
source_codeYesComplete ABAP function module source code, from FUNCTION to ENDFUNCTION.
transport_requestNoTransport request number, not a task. Required for transportable function modules.
function_group_nameYesFunction group name containing the function module.
function_module_nameYesFunction module name. Function module must already exist.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden and does add real behavioral detail: it discloses the lock/update/unlock sequence, that activation is optional, and that it runs outside batch mode. It stops short of explaining what happens if the update fails (whether the lock is released) or any permission/transport prerequisites, which the parameter schema only partly covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and followed by the behavioral sequence and environment constraint. No filler or repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter mutation tool with no annotations and no output schema, the description covers the lifecycle and environment well but leaves failure semantics, lock-release behavior, and the nature of the response (e.g., whether parse details are returned given the 'detail' parameter) unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all six parameters including the activate flag, transport_request, and detail enum are already documented in the schema. The description adds no format or convention detail beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update source code of an existing ABAP function module'), which distinguishes it from CreateFunctionModule and GetFunctionModule by the word 'existing'. It does not explicitly clarify its relationship to the ActivateFunctionModule sibling, so sibling differentiation is only partial.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through the phrasing 'existing function module' and the option to activate, but it never states when to use this versus ActivateFunctionModule, UpdateFunctionInclude, or CreateFunctionModule. The 'runs outside batch mode' note is a contextual constraint rather than a when-to-use rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateInterfaceA

Update source code of an existing ABAP interface. Locks, updates, unlocks, and optionally activates. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
activateNoActivate interface after update. Default: true.
source_codeYesComplete ABAP interface source code with INTERFACE...ENDINTERFACE section.
interface_nameYesInterface name. Must exist in the system.
transport_requestNoTransport request number, not a task. Optional if object is local or already in transport.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose meaningful behavior: it locks, updates, unlocks, and optionally activates, and it must run outside batch mode. It omits what happens to the inactive/active version on failure and whether a transport is required, but the core mutation lifecycle is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and with zero filler. Each sentence adds a distinct fact (what, lifecycle, execution constraint).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description plus a fully-documented schema covers what an agent needs to call it. Only failure/rollback semantics and version-state effects are left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters including the activate default and the full-source requirement. The description only echoes activation ("optionally activates") and adds no syntax or format detail beyond what the schema says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: "Update source code of an existing ABAP interface." That is enough to separate it from CreateInterface/GetInterface/DeleteInterface, though it never explicitly names those siblings or clarifies its relationship to ActivateInterface despite mentioning activation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"existing" implies the object must already be present, and "Runs outside batch mode" is a real usage constraint that steers agents away from the BatchBegin/BatchEnd siblings. However, there is no explicit when-to-use vs. ActivateInterface or CheckInterface guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateLocalDefinitionsA

Update local definitions (class-local types/constants) in an ABAP class. Manages lock, update, unlock, and optional activation of parent class. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesParent class name.
definitions_codeYesUpdated source code for local definitions.
transport_requestNoTransport request number (required for transportable objects), not a task.
activate_on_updateNoActivate parent class after updating local definitions. Default: false

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and usefully discloses lock/update/unlock handling, optional parent-class activation, and that it runs outside batch mode. It does not explicitly state that existing definitions are overwritten or describe permission/transport requirements beyond what the schema already supplies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three compact sentences with the core operation front-loaded, followed by lifecycle behavior and a runtime constraint. Every sentence contributes useful information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description gives enough behavioral context about locking, updating, activation, and batch mode. It could say more about the response or overwrite semantics, but the schema covers parameters thoroughly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameter semantics are already well documented in the schema. The description mentions optional activation of the parent class, but adds little parameter meaning beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: update local definitions in an ABAP class, with clarifying scope that these are class-local types/constants. This distinguishes it from sibling tools such as UpdateLocalTypes and DeleteLocalDefinitions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is implied by the purpose and the note that it runs outside batch mode, but the description does not explicitly say when to choose this tool over UpdateLocalTypes, UpdateLocalMacros, or GetLocalDefinitions. No explicit alternatives or when-not conditions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateLocalMacrosB

Update local macros in an ABAP class. Manages lock, update, unlock, and optional activation of parent class. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesParent class name.
macros_codeYesUpdated source code for local macros.
transport_requestNoTransport request number (required for transportable objects), not a task.
activate_on_updateNoActivate parent class after updating local macros. Default: false

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description does real work: it discloses the internal lock -> update -> unlock sequence, that parent-class activation is optional, and that it is not batch-safe. It omits failure/rollback behavior, permission requirements, and whether an inactive object is left behind when activation is skipped.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences with the resource stated first, then the behavioral lifecycle, then the execution constraint. Nothing is padded, though the batch-mode note could be merged more tightly with the lifecycle sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter mutation tool with no annotations and no output schema, the description covers the mechanism but leaves gaps on error handling and what the caller receives back. It is adequate to attempt a call but not to predict its side effects fully.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters including the detail enum and transport_request already carry documentation. The description adds nothing parameter-level beyond implying the activation flag exists, which matches the baseline for fully documented schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource (update local macros in an ABAP class), which clearly separates it from the sibling readers/deleters GetLocalMacros and DeleteLocalMacros. It does not explicitly name those siblings, so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Runs outside batch mode" is a real usage constraint that rules out use inside BatchBegin/BatchEnd flows, and the lock/update/unlock mention implies prerequisites are handled internally. However, it never says when to prefer this over UpdateLocalDefinitions/UpdateLocalTypes or what preconditions (inactive objects, transport) must hold.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateLocalTestClassA

Writes test_class_code as the local test classes include of the ABAP class named by class_name. The include is written under the class lock; with activate_on_update the class is activated. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesParent class name.
test_class_codeYesUpdated source code for the local test class.
transport_requestNoTransport request number (required for transportable objects), not a task.
activate_on_updateNoActivate parent class after updating test class. Default: false

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose meaningful traits: the include is written 'under the class lock' (concurrency behavior) and activate_on_update triggers activation of the parent class. It stops short of covering permissions, transport requirements (the schema has transport_request), or whether the write replaces the entire include.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and resource; the lock/activation/batch facts each earn their place. The final fragment 'Runs outside batch mode' is slightly cryptic but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers key behaviors (locking, optional activation, batch-mode restriction) but leaves the return value and transport handling unexplained. Adequate but with clear gaps an agent must infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds meaning for activate_on_update and class_name, but says nothing about test_class_code semantics (full replacement vs merge), transport_request, or detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Writes') and a precise resource ('test_class_code as the local test classes include of the ABAP class named by class_name'), which clearly separates it from siblings like UpdateLocalTypes or UpdateClass. It never explicitly names an alternative, so it falls short of the 5 benchmark for sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the purpose (update a class's local test-class include), and the note 'Runs outside batch mode' adds a real environmental constraint. However, it never states when to prefer this over UpdateClass/UpdateLocalTypes or what prerequisites exist, so guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateLocalTypesA

Update local types definitions in an ABAP class. Manages lock, update, unlock, and optional activation of parent class. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesParent class name.
local_types_codeYesUpdated source code for local types.
transport_requestNoTransport request number (required for transportable objects), not a task.
activate_on_updateNoActivate parent class after updating local types. Default: false

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose real behavior: it manages lock/update/unlock internally and can optionally activate the parent class. That is meaningful operational context an agent can't get from the schema. It stops short of failure/rollback semantics (e.g. what happens if update succeeds but activation fails) and permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the verb and resource, then lock/activation behavior, then the batch-mode constraint. No filler and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers locking and activation but omits error/rollback behavior, whether the code replaces or merges existing local types, and what the response contains. Adequate but with a clear gap for a destructive-in-effect write operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters including detail, transport_request and activate_on_update are already documented. The description adds only a light echo of the activation behavior ('optional activation of parent class'), so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Update local types definitions in an ABAP class.' The resource is precise and distinguishes it from GetLocalTypes/DeleteLocalTypes by verb, but it never names those siblings or clarifies how it differs from UpdateLocalDefinitions/UpdateLocalMacros, so routing still requires inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage condition given is implicit: 'Runs outside batch mode,' which tells the agent this cannot be invoked inside a batch session. There is no explicit when-to-use versus GetLocalTypes (read) or the other UpdateLocal* tools, and no prerequisite guidance such as lock ownership or transport requirements.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateMessageClassB

Updates the header of the ABAP message class named by message_class_name: its description. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
descriptionYesNew short description for the message class.
transport_requestNo(optional) Transport request number, not a task. Required for transportable objects.
message_class_nameYesMessage class name.

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses the execution context and that only the description field is updated, but it omits permissions, transport requirements, activation effects, side effects, and response behavior for this mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences and is front-loaded with the operation and target. Both sentences add useful information without repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core update and a runtime constraint, and the schema fully documents the parameters. However, with no annotations and no output schema, it still leaves gaps around transport requirements, side effects, and what the caller should expect after the update.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are already documented. The description reinforces the meaning of message_class_name and description but adds nothing about detail or transport_request, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and target: it updates the header description of an ABAP message class identified by message_class_name. This distinguishes it from message-level siblings such as UpdateMessageClassMessage, though it does not explicitly name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It includes one useful usage constraint, 'Runs outside batch mode,' which tells the agent when the tool is valid. However, it gives no explicit when-to-use guidance versus GetMessageClass, CreateMessageClass, DeleteMessageClass, or UpdateMessageClassMessage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateMessageClassMessageA

Change the text / flags of an existing message in an ABAP message class (T100). Creates the message when the class lacks it (upsert). Runs outside batch mode.

NameRequiredDescriptionDefault
msgnoYesMessage number (e.g., "001").
msgtextYesNew message text. May contain placeholders &1 &2 &3 &4 (or &).
descriptionNo(optional) Long description for the message.
self_explanatoryNo(optional) Mark the message as self-explanatory.
transport_requestNo(optional) Transport request number, not a task. Required for transportable objects.
message_class_nameYesParent message class name.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose two important traits: upsert semantics and non-batch execution. It omits whether the change requires transport, activation, or special authorization, and says nothing about failure/reversibility for a mutation. Useful but incomplete for a write tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action, then the upsert exception, then the execution constraint. No filler and nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter write tool with no annotations and no output schema, the description should also address transport handling and any post-change activation requirement. It covers the upsert and batch aspects but leaves those gaps, so it is adequate rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters including transport_request and self_explanatory are already self-documented. The description adds only the loose phrase 'text / flags', which gestures at msgtext and self_explanatory but adds no format or constraint detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (change text/flags of an existing T100 message) plus the underlying repository object, so the intent is unambiguous. It does not name the sibling boundary with CreateMessageClassMessage / DeleteMessageClassMessage, though the 'upsert' note implicitly covers the create case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a real routing rule: use it even when the message does not yet exist (upsert), so it supersedes the create path. It also states it runs outside batch mode, which tells the agent not to wrap it in BatchBegin/BatchEnd. No explicit sibling names or negative cases beyond that.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateMetadataExtensionA

Update source code of an existing ABAP Metadata Extension (DDLX). Locks, updates, unlocks, and optionally activates. Runs outside batch mode.

NameRequiredDescriptionDefault
nameYesMetadata Extension name
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
activateNoActivate after update. Default: true
lock_handleNoLock handle from LockObject. If not provided, will attempt to lock internally.
source_codeYesNew source code
transport_requestNoTransport request number (required for transportable packages), not a task.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description usefully discloses the mutation lifecycle: it locks, updates, unlocks, and optionally activates the object. It also notes that it runs outside batch mode, which is meaningful behavioral context. It stops short of covering failure behavior, permissions, or what happens if locking fails.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences are front-loaded with the core purpose and then the important behavioral constraints. There is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter mutation tool with no annotations and no output schema, the description covers the essential operation and locking/activation behavior. It relies on the fully documented schema for parameter details, which is reasonable, though it could mention transport handling or failure semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters are already documented in the schema. The description adds only high-level context about locking and optional activation, without adding syntax or format meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: update the source code of an existing ABAP Metadata Extension (DDLX). It clearly distinguishes this tool from siblings such as CreateMetadataExtension, GetMetadataExtension, DeleteMetadataExtension, and ActivateMetadataExtension.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear the tool is for updating an existing DDLX and optionally activating it. However, it does not explicitly say when to use this versus ActivateMetadataExtension, CheckMetadataExtension, or UpdateDdl, nor does it describe prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdatePackageA

Update the description of an existing ABAP package. Locks the package, writes, and unlocks it again, whatever the write answered. Over RFC this runs in an ABAP session of its own, closed afterwards. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
descriptionYesNew description for the package.
package_nameYesPackage name. Package must already exist.
transport_requestNoTransport request number (required for transportable packages), not a task.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the lock/write/unlock sequence, notes the unlock happens regardless of the write's answer, explains the separate RFC ABAP session that is closed afterward, and warns that it runs outside batch mode. It omits error/rollback semantics and permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core action followed by the operational caveats. Every sentence adds non-redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers the critical behavioral traits (locking, session, batch restriction) that an agent needs. It could still say something about error outcomes or what a successful update returns, but it is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters including the detail enum and transport_request are already documented in the schema. The description adds nothing beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update the description of an existing ABAP package'), narrowing scope to the description field only. It is clearly distinct from CreatePackage/DeletePackage/GetPackage, though it doesn't name a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'existing ABAP package' and 'Runs outside batch mode' imply preconditions, giving some usage context. However, there are no explicit when-to-use/when-not guidance or named alternatives (e.g. CreatePackage vs UpdatePackage), leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateProgramA

Update source code of an existing ABAP program. Locks, updates, unlocks, and optionally activates. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
activateNoActivate program after source update. Default: false. Set to true to activate immediately, or use ActivateObject for batch activation.
source_codeYesComplete ABAP program source code.
program_nameYesProgram name. Program must already exist.
transport_requestNoTransport request number, not a task. Required for transportable packages.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does deliver real behavioral value: it discloses the internal lock/update/unlock lifecycle, meaning the agent does not need a separate lock call, and that activation is an optional trailing step. It omits what happens if the lock cannot be acquired or the update fails midway, and says nothing about rollback or response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler, with the core action and the precondition ("existing") front-loaded before the lock lifecycle and execution-mode note. Nothing here is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter mutation tool with no annotations and no output schema, the description covers the precondition and the lock/activation semantics but says nothing about failure modes, whether partial updates roll back, or what the caller receives. The schema fills the parameter gaps, so the tool is callable, but the behavioral picture is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters including the detail enum and transport_request are fully documented in structured data. The description adds only "optionally activates," which restates the activate parameter, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("Update source code of an existing ABAP program"), which is unambiguous and immediately actionable. It does not, however, explicitly distinguish itself from adjacent siblings such as CreateProgram, ActivateProgram, or UpdateLocalTypes, leaving that routing to the agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Runs outside batch mode" is an implied usage constraint, and "optionally activates" hints at a choice the caller must make, but the description never states when to prefer this tool over ActivateProgram or the batch activation path. Real guidance on that trade-off lives in the schema's activate parameter description, not in the tool description itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateProgramUnitTestA

Writes test_class_source as the ABAP Unit test classes of the report named by program_name. The local test classes in its test include are rewritten, and it is activated. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
program_nameYesReport whose tests are replaced. Its test include must already exist.
test_class_sourceYesABAP source of the local test classes: definitions and implementations, FOR TESTING. Replaces what the include holds.
transport_requestNoTransport request, not a task. Required for a transportable object.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose real behavioral traits: the existing local test classes in the test include are overwritten, the object is activated as a side effect, and the call cannot run in batch mode. What it omits is failure behavior (missing test include, activation failure) and any transport/permission implications, leaving a gap for a destructive mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what is written and to what; the overwrite and activation consequences follow immediately. No filler and no restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers the essentials: source target, overwrite scope, activation side effect, and an execution-environment constraint. It falls short only on error conditions and transport handling, which an agent would otherwise need to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The prose adds a little meaning to program_name ('the report whose tests are replaced') and test_class_source ('local test classes: definitions and implementations, FOR TESTING'), but says nothing about detail or transport_request beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: writing test_class_source as the ABAP Unit test classes of the report in program_name, with the local test classes in the test include rewritten and activated. That is enough to separate it from Run/Create/Delete counterparts by name, though it never explicitly names the sibling tools it is not (CreateProgramUnitTest, UpdateLocalTestClass) to confirm the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is only implied: the tool is for replacing existing local test classes of a program, and the prerequisite that the test include must already exist lives in the schema, not the description. There is no explicit statement of when to prefer CreateProgramUnitTest or UpdateLocalTestClass, and the 'runs outside batch mode' note reads as environment trivia rather than a selection rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateServiceBindingB

Update publication state of an existing ABAP service binding. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
service_nameYesPublished service name, from the binding. Required: an OData V2 publication job resolves the service by name and version and refuses without them. Ignored for V4, where the request names its target on its own.
binding_variantNoService binding variant. Determines OData version for publish/unpublish routing.ODATA_V4_UI
response_formatNoAccepted for backward compatibility; no longer affects the answer, which is always the structured write result.xml
service_versionNoPublished service version. Default 0001. Used by an OData V2 publication job together with the service name; ignored for V4.
service_binding_nameYesService binding name to update.
desired_publication_stateYesTarget publication state.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full behavioral burden. It discloses the operation is a state mutation and that it cannot run in batch mode, but omits permissions required, side effects of publishing (service exposure), reversibility of published vs unpublished, and whether activation is implied. A significant portion of the mutation's risk profile is left undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, purpose front-loaded in the first sentence and the operational constraint immediately following. Nothing in it is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The rich schema covers parameters, but with no annotations and no output schema the description should say more about what happens on success/failure, error modes (e.g., invalid state transition), and whether the binding must be inactive. For a mutating tool with seven parameters, that gap is real even if the schema is well documented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema itself explains service_name, service_version, binding_variant, desired_publication_state, and even the deprecated response_format. The description adds no parameter-level guidance beyond what the schema already states, so it earns only the baseline at best; scoring 2 because the two-sentence description contributes nothing to disambiguating the seven parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource: updating the publication state of an existing ABAP service binding. It clearly implies a mutation on an already-existing object rather than creation, but it never mentions near-neighbours like ActivateServiceBinding, ValidateServiceBinding, or GetServiceBinding, so sibling differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Runs outside batch mode' is a concrete usage constraint that tells the agent not to wrap this in BatchBegin/BatchEnd, which is genuinely useful. However, it says nothing about when to prefer this over ActivateServiceBinding or CreateServiceBinding, nor about prerequisites such as the binding needing to exist or be inactive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateServiceDefinitionA

Update source code of an existing ABAP service definition. Locks, updates, unlocks, and optionally activates. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
activateNoActivate service definition after update. Default: true.
source_codeYesComplete service definition source code.
transport_requestNoTransport request number, not a task. Optional if object is local or already in transport.
service_definition_nameYesService definition name. Must exist in the system.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose meaningful behavior: the implicit lock/update/unlock/activate sequence, that activation is optional, and the batch-mode restriction. It omits failure semantics (e.g., what happens if activation fails or the lock cannot be acquired) and permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and resource, followed by effect and then the batch constraint. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description supplies the essential operational model (lock cycle, optional activation, batch exclusion). The remaining gap is error/rollback behavior and where the activation result is reported, which is not covered anywhere else.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all five parameters including activate, transport_request and detail are already documented in the schema. The description adds no additional semantics about these parameters, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update source code of an existing ABAP service definition') and adds the operational effect (lock/update/unlock/activate). It is clearly distinguishable from CreateServiceDefinition, GetServiceDefinition, DeleteServiceDefinition and ActivateServiceDefinition, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage through 'existing' (object must pre-exist) and 'runs outside batch mode' (excludes BatchBegin-style flows). However it never says when to prefer ActivateServiceDefinition alone, or what to do if the object is already locked, leaving the agent to infer alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateStructureA

Update DDL source code of an existing ABAP structure. Locks, updates, unlocks, and optionally activates. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
activateNoActivate structure after source update. Default: true.
ddl_codeYesComplete DDL source code for structure. Example: '@EndUserText.label : \'My Structure\' @AbapCatalog.tableCategory : #TRANSPARENT define structure zz_s_test_001 { client : abap.clnt not null; id : abap.char(10); name : abap.char(255); }'
structure_nameYesStructure name. Structure must already exist.
transport_requestNoTransport request number, not a task. Optional if object is local or already in transport.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose the lock/update/unlock lifecycle, optional activation, and the batch-mode restriction. It stops short of covering permissions, transport requirements, or failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the verb and resource, then behavior, then constraint. Nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description supplies the essential operational context: locking, activation, and batch restriction. The main remaining gap is what happens on failure or what the call returns, though the detail parameter partly mitigates this.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all five parameters including activate, transport_request, and detail are already documented inline. The description adds no parameter-level detail beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: updating the DDL source of an existing ABAP structure. An agent can tell it apart from UpdateTable or UpdateDdl by the object type, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Runs outside batch mode' is a real usage constraint, and 'existing structure' implies a prerequisite. However, it never names alternatives (e.g. UpdateDdl, CreateStructure, CheckStructure) or states when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateTableA

Update DDL source code of an existing ABAP table. Locks, updates, unlocks, and optionally activates. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
activateNoActivate table after source update. Default: true.
ddl_codeYesComplete DDL source code for table. Example: '@EndUserText.label : \'My Table\' @AbapCatalog.tableCategory : #TRANSPARENT define table ztst_table { key client : abap.clnt not null; key id : abap.char(10); name : abap.char(255); }'
table_nameYesTable name. Table must already exist.
transport_requestNoTransport request number, not a task. Optional if object is local or already in transport.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose real behavior beyond the schema: the lock/update/unlock sequence (concurrency and lock contention matter to the caller) and the constraint that it runs outside batch mode. It stops short of saying what happens on failure (e.g., locks left held) or that it replaces the entire source.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler, with the core action front-loaded and the lock/batch constraints following immediately. Every sentence carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with five parameters, no annotations, and no output schema, the description omits what the call returns (the detail enum implies a parse result is returned) and says nothing about transport requirements or failure behavior. Locking and batch-mode exclusion are covered, but the response contract is left entirely implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters — including ddl_code's full-source semantics, activate's default of true, transport_request, and detail — are already documented. The description only restates that activation is optional and adds no syntax or format guidance, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (update) and a precise resource (DDL source code of an existing ABAP table), which separates it from CreateTable and from UpdateDdl (CDS DDL) by naming the ABAP table as the target. It doesn't explicitly name a sibling to route away from, which is what a 5 would require.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied rather than stated: 'existing ABAP table' conveys the precondition, and 'Runs outside batch mode' implicitly excludes use inside BatchBegin/BatchEnd. There is no explicit when-to-use-vs-alternatives guidance, such as when to use this rather than CreateTable or UpdateDdl.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

UpdateUnitTestA

Writes test_class_source as the ABAP Unit test classes of the ABAP class named by class_name. The class's local test classes are rewritten, and the class is activated. Runs outside batch mode.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
class_nameYesClass that holds the tests. Must already exist.
test_class_sourceYesABAP source of the local test classes: definitions and implementations, FOR TESTING. Replaces what the include holds.
transport_requestNoTransport request, not a task. Required for a transportable object.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden well: it discloses that local test classes are rewritten (a destructive replace), that the class is activated afterward, and that it runs outside batch mode. It omits permission/transport prerequisites, though transport_request is documented in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the resource, the destructive rewrite, activation, and batch-mode caveat front-loaded. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers the key behavioral facts (rewrite, activation, batch constraint). Minor gaps remain around prerequisites, but nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all four parameters are already documented. The description references class_name and test_class_source meaningfully but adds no syntax or format detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (writes) and resource (ABAP Unit test classes of the named class), which clearly conveys the operation. It does not explicitly differentiate from close siblings like UpdateLocalTestClass or CreateUnitTest, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the mutation verb and the 'must already exist' note carried by the schema, but the description offers no explicit when-to-use guidance or routing to alternatives such as UpdateLocalTestClass or CreateUnitTest.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ValidateServiceBindingA

[read-only] Validates a new service binding named by service_binding_name for the service definition named by service_definition_name, in the package and version given, through the ADT validation endpoint. Recordable: in batch mode a call is recorded under the next number and answers with empty content; its answer is read by number after the batch ends.

NameRequiredDescriptionDefault
detailNoHow much of the answer to return: "terse" (default, the fields you need to act), "full" (the whole parse), "raw" (the document as ADT sent it).terse
descriptionNoOptional description used during validation.
package_nameNoABAP package for the binding.
service_binding_nameYesService binding name to validate.
service_binding_versionNoService binding version (for example: 1.0). Accepted for backward compatibility; the transport check this now runs does not read it.
service_definition_nameYesService definition linked to binding. Accepted for backward compatibility; the transport check this now runs does not read it.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does real work: it declares '[read-only]' and explains the batch recording contract (recorded under the next number, empty content returned, answer read later by number). It does not say what a failed validation looks like or whether anything persists, which is the remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the read-only marker and the purpose before the batch caveat. Every clause carries information; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter, no-output-schema tool, the description covers purpose and batch mechanics but never describes the validation verdict (pass/fail, message list) an agent must act on. The backward-compatibility note for service_definition_name conflicts with the description's claim that it names the definition being validated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description names the key parameters but adds nothing about the 'detail' enum or the version semantics. It also says validation runs 'for the service definition named by service_definition_name', which the schema says is accepted only for backward compatibility and not read by the current check.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Validates') plus the exact resource ('a new service binding') and names the ADT validation endpoint, so an agent can tell it apart from GetServiceBinding/CreateServiceBinding and the Check* family. It stops short of explicitly contrasting itself with those siblings, so it is clear but not fully differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'new' implies the pre-creation validation use case, and the batch-mode sentence implies how it is used inside BatchBegin/BatchEnd. Neither is stated as a rule, and there is no when-not clause telling the agent to prefer CheckServiceDefinition or GetServiceBinding instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev21.0.0
    • ChangedGetTypeInfo1 field changed
      • changedInput schema / properties / include_structure_fallback / description
        Previous value: -"When true (default), tries DDIC structure lookup only if type lookup returns 404/empty."New value: +"When true (default), the name is also read as a DDIC structure; false leaves the structure read out."
  2. 149 tool updatesv20.1.0
    • ChangedActivateBehaviorDefinition2 fields changed
      • removedInput schema / properties / session_id
        Removed value: -{
        -  "description": "Session ID from GetSession. If not provided, a new session will be created.",
        -  "type": "string"
        -}
      • removedInput schema / properties / session_state
        Removed value: -{
        -  "description": "Session state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.",
        -  "properties": {
        -    "cookie_store": {},
        -    "cookies": {
        -      "type": "string"
        -    },
        -    "csrf_token": {
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
    • ChangedActivateClass2 fields changed
      • removedInput schema / properties / session_id
        Removed value: -{
        -  "description": "Session ID from GetSession. If not provided, a new session will be created.",
        -  "type": "string"
        -}
      • removedInput schema / properties / session_state
        Removed value: -{
        -  "description": "Session state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.",
        -  "properties": {
        -    "cookie_store": {},
        -    "cookies": {
        -      "type": "string"
        -    },
        -    "csrf_token": {
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
    • ChangedActivateDataElement2 fields changed
      • removedInput schema / properties / session_id
        Removed value: -{
        -  "description": "Session ID from GetSession. If not provided, a new session will be created.",
        -  "type": "string"
        -}
      • removedInput schema / properties / session_state
        Removed value: -{
        -  "description": "Session state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.",
        -  "properties": {
        -    "cookie_store": {},
        -    "cookies": {
        -      "type": "string"
        -    },
        -    "csrf_token": {
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
    • ChangedActivateDdl2 fields changed
      • removedInput schema / properties / session_id
        Removed value: -{
        -  "description": "Session ID from GetSession. If not provided, a new session will be created.",
        -  "type": "string"
        -}
      • removedInput schema / properties / session_state
        Removed value: -{
        -  "description": "Session state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.",
        -  "properties": {
        -    "cookie_store": {},
        -    "cookies": {
        -      "type": "string"
        -    },
        -    "csrf_token": {
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
    • ChangedActivateDomain2 fields changed
      • removedInput schema / properties / session_id
        Removed value: -{
        -  "description": "Session ID from GetSession. If not provided, a new session will be created.",
        -  "type": "string"
        -}
      • removedInput schema / properties / session_state
        Removed value: -{
        -  "description": "Session state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.",
        -  "properties": {
        -    "cookie_store": {},
        -    "cookies": {
        -      "type": "string"
        -    },
        -    "csrf_token": {
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
    • ChangedActivateFunctionGroup2 fields changed
      • removedInput schema / properties / session_id
        Removed value: -{
        -  "description": "Session ID from GetSession. If not provided, a new session will be created.",
        -  "type": "string"
        -}
      • removedInput schema / properties / session_state
        Removed value: -{
        -  "description": "Session state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.",
        -  "properties": {
        -    "cookie_store": {},
        -    "cookies": {
        -      "type": "string"
        -    },
        -    "csrf_token": {
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
    • ChangedActivateFunctionModule2 fields changed
      • removedInput schema / properties / session_id
        Removed value: -{
        -  "description": "Session ID from GetSession. If not provided, a new session will be created.",
        -  "type": "string"
        -}
      • removedInput schema / properties / session_state
        Removed value: -{
        -  "description": "Session state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.",
        -  "properties": {
        -    "cookie_store": {},
        -    "cookies": {
        -      "type": "string"
        -    },
        -    "csrf_token": {
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
    • ChangedActivateInterface2 fields changed
      • removedInput schema / properties / session_id
        Removed value: -{
        -  "description": "Session ID from GetSession. If not provided, a new session will be created.",
        -  "type": "string"
        -}
      • removedInput schema / properties / session_state
        Removed value: -{
        -  "description": "Session state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.",
        -  "properties": {
        -    "cookie_store": {},
        -    "cookies": {
        -      "type": "string"
        -    },
        -    "csrf_token": {
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
    • ChangedActivateMetadataExtension2 fields changed
      • removedInput schema / properties / session_id
        Removed value: -{
        -  "description": "Session ID from GetSession. If not provided, a new session will be created.",
        -  "type": "string"
        -}
      • removedInput schema / properties / session_state
        Removed value: -{
        -  "description": "Session state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.",
        -  "properties": {
        -    "cookie_store": {},
        -    "cookies": {
        -      "type": "string"
        -    },
        -    "csrf_token": {
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
    • AddedActivateProgram
    • ChangedActivateServiceBinding2 fields changed
      • removedInput schema / properties / session_id
        Removed value: -{
        -  "description": "Session ID from GetSession. If not provided, a new session will be created.",
        -  "type": "string"
        -}
      • removedInput schema / properties / session_state
        Removed value: -{
        -  "description": "Session state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.",
        -  "properties": {
        -    "cookie_store": {},
        -    "cookies": {
        -      "type": "string"
        -    },
        -    "csrf_token": {
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
    • ChangedActivateServiceDefinition2 fields changed
      • removedInput schema / properties / session_id
        Removed value: -{
        -  "description": "Session ID from GetSession. If not provided, a new session will be created.",
        -  "type": "string"
        -}
      • removedInput schema / properties / session_state
        Removed value: -{
        -  "description": "Session state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.",
        -  "properties": {
        -    "cookie_store": {},
        -    "cookies": {
        -      "type": "string"
        -    },
        -    "csrf_token": {
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
    • ChangedActivateStructure2 fields changed
      • removedInput schema / properties / session_id
        Removed value: -{
        -  "description": "Session ID from GetSession. If not provided, a new session will be created.",
        -  "type": "string"
        -}
      • removedInput schema / properties / session_state
        Removed value: -{
        -  "description": "Session state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.",
        -  "properties": {
        -    "cookie_store": {},
        -    "cookies": {
        -      "type": "string"
        -    },
        -    "csrf_token": {
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
    • ChangedActivateTable2 fields changed
      • removedInput schema / properties / session_id
        Removed value: -{
        -  "description": "Session ID from GetSession. If not provided, a new session will be created.",
        -  "type": "string"
        -}
      • removedInput schema / properties / session_state
        Removed value: -{
        -  "description": "Session state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.",
        -  "properties": {
        -    "cookie_store": {},
        -    "cookies": {
        -      "type": "string"
        -    },
        -    "csrf_token": {
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
    • AddedAmdpDebugCancel
    • AddedAmdpDebugGetTable
    • AddedAmdpDebugSetBreakpoints
    • AddedAmdpDebugStart
    • AddedAmdpDebugStep
    • AddedAmdpDebugStop
    • AddedAmdpDebugWait
    • AddedBatchAnswers
    • AddedBatchBegin
    • AddedBatchEnd
    • ChangedCheckBehaviorDefinition1 field changed
      • changedInput schema / properties / version / description
        Previous value: -"Which version to check — it goes into the checkrun body as chkrun:version, as ADT sends it. Omitted, the inactive one is checked; an object that is only active has none, and SAP answers such a check with a finding against an empty source (e.g. G46 \"REPORT/PROGRAM statement is missing\") or \"Inactive version … does not exist\" — ask for active."New value: +"Which version to check — it goes into the checkrun body as chkrun:version, as ADT sends it. Without `version` the active version is checked; pass `inactive` for the unsaved one right after a write."
    • ChangedCheckDataElement1 field changed
      • changedInput schema / properties / version / description
        Previous value: -"Which version to check. Defaults to the inactive one, what a caller wants right after a write; an object that is only active has no inactive version, and SAP answers such a check with \"Error while importing object … from the database\" — ask for active."New value: +"Which version to check. Without `version` the active version is checked; pass `inactive` for the unsaved one right after a write."
    • ChangedCheckDdl1 field changed
      • changedInput schema / properties / version / description
        Previous value: -"Version to check: 'active' or 'inactive'. Default: inactive."New value: +"Version to check: 'active' or 'inactive'. Without `version` the active version is checked."
    • ChangedCheckDomain1 field changed
      • changedInput schema / properties / version / description
        Previous value: -"Which version to check. Defaults to the inactive one, what a caller wants right after a write; an object that is only active has no inactive version, and SAP answers such a check with \"Error while importing object … from the database\" — ask for active."New value: +"Which version to check. Without `version` the active version is checked; pass `inactive` for the unsaved one right after a write."
    • ChangedCheckFunctionGroup1 field changed
      • changedInput schema / properties / version / description
        Previous value: -"Which version to check — it goes into the checkrun body as chkrun:version, as ADT sends it. Omitted, the inactive one is checked; an object that is only active has none, and SAP answers such a check with a finding against an empty source (e.g. G46 \"REPORT/PROGRAM statement is missing\") or \"Inactive version … does not exist\" — ask for active."New value: +"Which version to check — it goes into the checkrun body as chkrun:version, as ADT sends it. Without `version` the active version is checked; pass `inactive` for the unsaved one right after a write."
    • ChangedCheckInterface1 field changed
      • changedInput schema / properties / version / description
        Previous value: -"Which version to check — it goes into the checkrun body as chkrun:version, as ADT sends it. Omitted, the inactive one is checked; an object that is only active has none, and SAP answers such a check with a finding against an empty source (e.g. G46 \"REPORT/PROGRAM statement is missing\") or \"Inactive version … does not exist\" — ask for active."New value: +"Which version to check — it goes into the checkrun body as chkrun:version, as ADT sends it. Without `version` the active version is checked; pass `inactive` for the unsaved one right after a write."
    • AddedCheckProgram
    • ChangedCheckStructure1 field changed
      • changedInput schema / properties / version / description
        Previous value: -"Version to check: 'active' or 'inactive'. Default: inactive."New value: +"Version to check: 'active' or 'inactive'. Without `version` the active version is checked."
    • ChangedCheckTable1 field changed
      • changedInput schema / properties / version / description
        Previous value: -"Version to check: 'active', 'inactive', or 'new'. Default: new."New value: +"Version to check: 'active', 'inactive', or 'new'. Without `version` the active version is checked."
    • AddedCreateProgram
    • AddedCreateProgramUnitTest
    • ChangedCreateServiceBinding1 field changed
      • changedInput schema / properties / activate / description
        Previous value: -"Activate and generate the service binding after create. Default: true."New value: +"Activate the service binding after create, then read its service group. Default: true."
    • ChangedCreateTransportTask1 field changed
      • changedInput schema / properties / target_user / description
        Previous value: -"SAP user the task belongs to, e.g. DEVELOPER. Required — the server will not choose one, and naming another user is how a task is made for somebody else."New value: +"The user the task belongs to: an SAP user id (sent in upper case), e.g. DEVELOPER. Required — the server will not choose one, and naming another user is how a task is made for somebody else."
    • AddedDebugBatchBegin
    • AddedDebugBatchEnd
    • AddedDebugCreateMemorySnapshot
    • AddedDebugCreateWatchpoint
    • AddedDebugDeleteBreakpoint
    • AddedDebugDeleteWatchpoint
    • AddedDebugGetMemorySizes
    • AddedDebugGetStack
    • AddedDebugGetVariables
    • AddedDebugListBreakpoints
    • AddedDebugListWatchpoints
    • AddedDebugSetBreakpoints
    • AddedDebugSetSettings
    • AddedDebugSetStackPosition
    • AddedDebugSetVariable
    • AddedDebugStartListener
    • AddedDebugStep
    • AddedDebugStepToLine
    • AddedDebugStop
    • AddedDebugTakeOverListener
    • AddedDebugTerminate
    • AddedDebugWait
    • AddedDeletePackage
    • AddedDeleteProgram
    • ChangedDescribeByList1 field changed
      • addedInput schema / properties / timeout
        Added value: +{
        +  "description": "Seconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.",
        +  "maximum": 2147483,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • AddedDiscardBackgroundRun
    • ChangedGetAbapSystemSymbols1 field changed
      • addedInput schema / properties / timeout
        Added value: +{
        +  "description": "Seconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.",
        +  "maximum": 2147483,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • ChangedGetATCFindings2 fields changed
      • addedInput schema / properties / timeout
        Added value: +{
        +  "description": "Seconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.",
        +  "maximum": 2147483,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedInput schema / properties / worklist_id / description
        Previous value: -"Worklist identifier answered by RunATC."New value: +"Worklist identifier an ATC run answered."
    • ChangedGetATCRunStatus1 field changed
      • changedInput schema / properties / run_id / description
        Previous value: -"Run identifier answered by RunATC when wait was false."New value: +"Run identifier an ATC run started with wait=false answered."
    • AddedGetBackgroundRun
    • ChangedGetBehaviorDefinition2 fields changed
      • addedInput schema / properties / part
        Added value: +{
        +  "default": "source",
        +  "description": "The document to read: \"source\" (default) the source code, \"metadata\" the ADT metadata document (package, responsible, description, ...).",
        +  "enum": [
        +    "source",
        +    "metadata"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / version / description
        Previous value: -"Version to read: \"active\" (default) for deployed version, \"inactive\" for modified but not activated version."New value: +"Version of the source: \"active\" (default) for the deployed version, \"inactive\" for the modified version awaiting activation."
    • ChangedGetBehaviorDefinitionVersionDiff2 fields changed
      • changedInput schema / properties / content_uri_from / description
        Previous value: -"Opaque content_uri of the OLD/base version (from a GetBehaviorDefinitionVersions entry)."New value: +"Opaque content_uri of the OLD/base version, from the RAP behavior definition's version history."
      • changedInput schema / properties / content_uri_to / description
        Previous value: -"Opaque content_uri of the NEW/compare version (from a GetBehaviorDefinitionVersions entry)."New value: +"Opaque content_uri of the NEW/compare version, from the RAP behavior definition's version history."
    • ChangedGetBehaviorDefinitionVersionSource1 field changed
      • changedInput schema / properties / content_uri / description
        Previous value: -"Opaque content_uri taken from a GetBehaviorDefinitionVersions entry."New value: +"Opaque content_uri of a version, from the RAP behavior definition's version history."
    • ChangedGetBehaviorImplementation2 fields changed
      • addedInput schema / properties / part
        Added value: +{
        +  "default": "source",
        +  "description": "The document to read: \"source\" (default) the source code, \"metadata\" the ADT metadata document (package, responsible, description, ...).",
        +  "enum": [
        +    "source",
        +    "metadata"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / version / description
        Previous value: -"Version to read: \"active\" (default) for deployed version, \"inactive\" for modified but not activated version."New value: +"Version of the source: \"active\" (default) for the deployed version, \"inactive\" for the modified version awaiting activation."
    • ChangedGetClass2 fields changed
      • addedInput schema / properties / part
        Added value: +{
        +  "default": "source",
        +  "description": "The document to read: \"source\" (default) the source code, \"metadata\" the ADT metadata document (package, responsible, description, ...).",
        +  "enum": [
        +    "source",
        +    "metadata"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / version / description
        Previous value: -"Version to read: \"active\" (default) for deployed version, \"inactive\" for modified but not activated version."New value: +"Version of the source: \"active\" (default) for the deployed version, \"inactive\" for the modified version awaiting activation."
    • ChangedGetClassVersionDiff2 fields changed
      • changedInput schema / properties / content_uri_from / description
        Previous value: -"Opaque content_uri of the OLD/base version (from a GetClassVersions entry)."New value: +"Opaque content_uri of the OLD/base version, from the ABAP class's version history."
      • changedInput schema / properties / content_uri_to / description
        Previous value: -"Opaque content_uri of the NEW/compare version (from a GetClassVersions entry)."New value: +"Opaque content_uri of the NEW/compare version, from the ABAP class's version history."
    • ChangedGetClassVersionSource1 field changed
      • changedInput schema / properties / content_uri / description
        Previous value: -"Opaque content_uri taken from a GetClassVersions entry."New value: +"Opaque content_uri of a version, from the ABAP class's version history."
    • ChangedGetDdl2 fields changed
      • addedInput schema / properties / part
        Added value: +{
        +  "default": "source",
        +  "description": "The document to read: \"source\" (default) the source code, \"metadata\" the ADT metadata document (package, responsible, description, ...).",
        +  "enum": [
        +    "source",
        +    "metadata"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / version / description
        Previous value: -"Version to read: \"active\" (default) for deployed version, \"inactive\" for modified but not activated version."New value: +"Version of the source: \"active\" (default) for the deployed version, \"inactive\" for the modified version awaiting activation."
    • ChangedGetDdlVersionDiff2 fields changed
      • changedInput schema / properties / content_uri_from / description
        Previous value: -"Opaque content_uri of the OLD/base version (from a GetDdlVersions entry)."New value: +"Opaque content_uri of the OLD/base version, from the CDS view (DDL source)'s version history."
      • changedInput schema / properties / content_uri_to / description
        Previous value: -"Opaque content_uri of the NEW/compare version (from a GetDdlVersions entry)."New value: +"Opaque content_uri of the NEW/compare version, from the CDS view (DDL source)'s version history."
    • ChangedGetDdlVersionSource1 field changed
      • changedInput schema / properties / content_uri / description
        Previous value: -"Opaque content_uri taken from a GetDdlVersions entry."New value: +"Opaque content_uri of a version, from the CDS view (DDL source)'s version history."
    • ChangedGetEnhancements3 fields changed
      • changedInput schema / properties / object_name / description
        Previous value: -"Name of the ABAP object"New value: +"Name of the ABAP object (with object_type; or give objects)"
      • addedInput schema / properties / objects
        Added value: +{
        +  "description": "[read-only] Several objects, read together (give this or object_name and object_type)",
        +  "items": {
        +    "properties": {
        +      "object_name": {
        +        "description": "Name of the ABAP object",
        +        "type": "string"
        +      },
        +      "object_type": {
        +        "description": "Type of the ABAP object",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "object_name",
        +      "object_type"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "object_name",
        -  "object_type"
        -]
    • AddedGetFunctionInclude
    • ChangedGetFunctionModule4 fields changed
      • changedInput schema / properties / function_group_name / description
        Previous value: -"FunctionGroup name containing the function module."New value: +"Function group containing the function module."
      • changedInput schema / properties / function_module_name / description
        Previous value: -"FunctionModule name."New value: +"Function module name."
      • addedInput schema / properties / part
        Added value: +{
        +  "default": "source",
        +  "description": "The document to read: \"source\" (default) the source code, \"metadata\" the ADT metadata document (package, responsible, description, ...).",
        +  "enum": [
        +    "source",
        +    "metadata"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / version / description
        Previous value: -"Version to read: \"active\" (default) for deployed version, \"inactive\" for modified but not activated version."New value: +"Version of the source: \"active\" (default) for the deployed version, \"inactive\" for the modified version awaiting activation."
    • ChangedGetFunctionModuleVersionDiff2 fields changed
      • changedInput schema / properties / content_uri_from / description
        Previous value: -"Opaque content_uri of the OLD/base version (from a GetFunctionModuleVersions entry)."New value: +"Opaque content_uri of the OLD/base version, from the ABAP function module's version history."
      • changedInput schema / properties / content_uri_to / description
        Previous value: -"Opaque content_uri of the NEW/compare version (from a GetFunctionModuleVersions entry)."New value: +"Opaque content_uri of the NEW/compare version, from the ABAP function module's version history."
    • ChangedGetFunctionModuleVersionSource1 field changed
      • changedInput schema / properties / content_uri / description
        Previous value: -"Opaque content_uri taken from a GetFunctionModuleVersions entry."New value: +"Opaque content_uri of a version, from the ABAP function module's version history."
    • ChangedGetIncludesList7 fields changed
      • changedInput schema / properties / object_name / description
        Previous value: -"Name of the ABAP program or include"New value: +"Name of the ABAP program or include (with object_type; or give objects)"
      • addedInput schema / properties / objects
        Added value: +{
        +  "description": "[read-only] Several objects, read together (give this or object_name and object_type)",
        +  "items": {
        +    "properties": {
        +      "object_name": {
        +        "description": "Name of the ABAP program or include",
        +        "type": "string"
        +      },
        +      "object_type": {
        +        "description": "ADT object type: 'PROG/P', 'PROG/I', 'FUGR' or 'CLAS/OC'",
        +        "enum": [
        +          "PROG/P",
        +          "PROG/I",
        +          "FUGR",
        +          "CLAS/OC"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "object_name",
        +      "object_type"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / timeout / description
        Previous value: -"[read-only] Timeout in ms for each ADT request."New value: +"Seconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP."
      • addedInput schema / properties / timeout / maximum
        Added value: +2147483
      • addedInput schema / properties / timeout / minimum
        Added value: +1
      • changedInput schema / properties / timeout / type
        Previous value: -"number"New value: +"integer"
      • removedInput schema / required
        Removed value: -[
        -  "object_name",
        -  "object_type"
        -]
    • ChangedGetInterface2 fields changed
      • addedInput schema / properties / part
        Added value: +{
        +  "default": "source",
        +  "description": "The document to read: \"source\" (default) the source code, \"metadata\" the ADT metadata document (package, responsible, description, ...).",
        +  "enum": [
        +    "source",
        +    "metadata"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / version / description
        Previous value: -"Version to read: \"active\" (default) for deployed version, \"inactive\" for modified but not activated version."New value: +"Version of the source: \"active\" (default) for the deployed version, \"inactive\" for the modified version awaiting activation."
    • ChangedGetInterfaceVersionDiff2 fields changed
      • changedInput schema / properties / content_uri_from / description
        Previous value: -"Opaque content_uri of the OLD/base version (from a GetInterfaceVersions entry)."New value: +"Opaque content_uri of the OLD/base version, from the ABAP interface's version history."
      • changedInput schema / properties / content_uri_to / description
        Previous value: -"Opaque content_uri of the NEW/compare version (from a GetInterfaceVersions entry)."New value: +"Opaque content_uri of the NEW/compare version, from the ABAP interface's version history."
    • ChangedGetInterfaceVersionSource1 field changed
      • changedInput schema / properties / content_uri / description
        Previous value: -"Opaque content_uri taken from a GetInterfaceVersions entry."New value: +"Opaque content_uri of a version, from the ABAP interface's version history."
    • ChangedGetLocalDefinitions1 field changed
      • changedInput schema / properties / version / description
        Previous value: -"Version to read: \"active\" (default) for deployed version, \"inactive\" for modified but not activated version."New value: +"Version to read: \"active\" (default) for the deployed version, \"inactive\" for the modified version awaiting activation."
    • ChangedGetLocalMacros1 field changed
      • changedInput schema / properties / version / description
        Previous value: -"Version to read: \"active\" (default) for deployed version, \"inactive\" for modified but not activated version."New value: +"Version to read: \"active\" (default) for the deployed version, \"inactive\" for the modified version awaiting activation."
    • ChangedGetLocalTestClass1 field changed
      • changedInput schema / properties / version / description
        Previous value: -"Version to read: \"active\" (default) for deployed version, \"inactive\" for modified but not activated version."New value: +"Version to read: \"active\" (default) for the deployed version, \"inactive\" for the modified version awaiting activation."
    • ChangedGetLocalTypes1 field changed
      • changedInput schema / properties / version / description
        Previous value: -"Version to read: \"active\" (default) for deployed version, \"inactive\" for modified but not activated version."New value: +"Version to read: \"active\" (default) for the deployed version, \"inactive\" for the modified version awaiting activation."
    • ChangedGetMessageClassMessage1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • ChangedGetMetadataExtension2 fields changed
      • addedInput schema / properties / part
        Added value: +{
        +  "default": "source",
        +  "description": "The document to read: \"source\" (default) the source code, \"metadata\" the ADT metadata document (package, responsible, description, ...).",
        +  "enum": [
        +    "source",
        +    "metadata"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / version / description
        Previous value: -"Version to read: \"active\" (default) for deployed version, \"inactive\" for modified but not activated version."New value: +"Version of the source: \"active\" (default) for the deployed version, \"inactive\" for the modified version awaiting activation."
    • ChangedGetMetadataExtensionVersionDiff2 fields changed
      • changedInput schema / properties / content_uri_from / description
        Previous value: -"Opaque content_uri of the OLD/base version (from a GetMetadataExtensionVersions entry)."New value: +"Opaque content_uri of the OLD/base version, from the CDS metadata extension's version history."
      • changedInput schema / properties / content_uri_to / description
        Previous value: -"Opaque content_uri of the NEW/compare version (from a GetMetadataExtensionVersions entry)."New value: +"Opaque content_uri of the NEW/compare version, from the CDS metadata extension's version history."
    • ChangedGetMetadataExtensionVersionSource1 field changed
      • changedInput schema / properties / content_uri / description
        Previous value: -"Opaque content_uri taken from a GetMetadataExtensionVersions entry."New value: +"Opaque content_uri of a version, from the CDS metadata extension's version history."
    • RemovedGetNodeStructureLow
    • ChangedGetObjectInfo8 fields changed
      • addedInput schema / properties / include_descriptions
        Added value: +{
        +  "default": false,
        +  "description": "[read-only] Include each leaf's description. Where the system serves ADT batch, each description is read from the leaf's metadata: one more read per leaf, which on a large tree takes most of the call (default false)",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / maxDepth / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / maxDepth / minimum
        Added value: +-9007199254740991
      • changedInput schema / properties / maxDepth / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / objects
        Added value: +{
        +  "description": "[read-only] Several objects, read together (give this or parent_type and parent_name)",
        +  "items": {
        +    "properties": {
        +      "object_name": {
        +        "description": "Object name",
        +        "type": "string"
        +      },
        +      "object_type": {
        +        "description": "Object type (e.g. DEVC/K, CLAS/OC, PROG/P)",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "object_type",
        +      "object_name"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / parent_type / description
        Previous value: -"[read-only] Parent object type (e.g. DEVC/K, CLAS/OC, PROG/P)"New value: +"[read-only] Parent object type (e.g. DEVC/K, CLAS/OC, PROG/P); with parent_name, or give objects"
      • addedInput schema / properties / timeout
        Added value: +{
        +  "description": "Seconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.",
        +  "maximum": 2147483,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "parent_type",
        -  "parent_name"
        -]
    • ChangedGetObjectsList4 fields changed
      • addedInput schema / properties / objects
        Added value: +{
        +  "description": "[read-only] Several parents, read together (give this or parent_name)",
        +  "items": {
        +    "properties": {
        +      "parent_name": {
        +        "description": "Parent object name",
        +        "type": "string"
        +      },
        +      "parent_type": {
        +        "description": "Parent object type (e.g. PROG/P, FUGR)",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "parent_type",
        +      "parent_name"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / parent_name / description
        Previous value: -"[read-only] Parent object name"New value: +"[read-only] Parent object name (with parent_tech_name and parent_type; or give objects)"
      • addedInput schema / properties / timeout
        Added value: +{
        +  "description": "Seconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.",
        +  "maximum": 2147483,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "parent_name",
        -  "parent_tech_name",
        -  "parent_type"
        -]
    • RemovedGetObjectStructureLow
    • ChangedGetObjectVersionDiff3 fields changed
      • changedInput schema / properties / content_uri_from / description
        Previous value: -"Opaque content_uri of the OLD/base version (from a GetObjectVersions entry)."New value: +"Opaque content_uri of the OLD/base version (from the object's version history)."
      • changedInput schema / properties / content_uri_to / description
        Previous value: -"Opaque content_uri of the NEW/compare version (from a GetObjectVersions entry)."New value: +"Opaque content_uri of the NEW/compare version (from the object's version history)."
      • changedInput schema / properties / object_type / description
        Previous value: -"Object type (same value used in GetObjectVersions)."New value: +"Object type (the same value the version history was read with)."
    • ChangedGetObjectVersionSource2 fields changed
      • changedInput schema / properties / content_uri / description
        Previous value: -"Opaque content_uri taken from a GetObjectVersions version entry."New value: +"Opaque content_uri of a version, from the object's version history."
      • changedInput schema / properties / object_type / description
        Previous value: -"Object type (same value used in GetObjectVersions)."New value: +"Object type (the same value the version history was read with)."
    • ChangedGetPackageContents5 fields changed
      • changedInput schema / properties / include_descriptions / description
        Previous value: -"Include object descriptions in response (default: true)"New value: +"Include each object's description in the response. The walk's levels are then read as single requests, several at a time, rather than in ADT batch envelopes (default: false)"
      • changedInput schema / properties / package_name / description
        Previous value: -"Name of the ABAP package"New value: +"Name of the ABAP package (give this or package_names)"
      • addedInput schema / properties / package_names
        Added value: +{
        +  "description": "Names of several ABAP packages, read together (give this or package_name)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / timeout
        Added value: +{
        +  "description": "Seconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.",
        +  "maximum": 2147483,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "package_name"
        -]
    • ChangedGetPackageTree9 fields changed
      • changedInput schema / properties / include_descriptions / default
        Previous value: -trueNew value: +false
      • changedInput schema / properties / include_descriptions / description
        Previous value: -"Include object descriptions in response. Default: true"New value: +"Include each object's description in the response. The package metadata and the walk's levels are then read as single requests, several at a time, rather than in ADT batch envelopes. Default: false"
      • addedInput schema / properties / max_depth / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / max_depth / minimum
        Added value: +-9007199254740991
      • changedInput schema / properties / max_depth / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name"New value: +"Package name (give this or package_names)"
      • addedInput schema / properties / package_names
        Added value: +{
        +  "description": "Several package names, read together (give this or package_name)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / timeout
        Added value: +{
        +  "description": "Seconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.",
        +  "maximum": 2147483,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "package_name"
        -]
    • AddedGetProgram
    • AddedGetProgramVersionDiff
    • AddedGetProgramVersions
    • AddedGetProgramVersionSource
    • ChangedGetServiceBinding1 field changed
      • addedInput schema / properties / part
        Added value: +{
        +  "default": "source",
        +  "description": "The document to read: \"source\" (default) the source code, \"metadata\" the ADT metadata document (package, responsible, description, ...).",
        +  "enum": [
        +    "source",
        +    "metadata"
        +  ],
        +  "type": "string"
        +}
    • ChangedGetServiceDefinition2 fields changed
      • addedInput schema / properties / part
        Added value: +{
        +  "default": "source",
        +  "description": "The document to read: \"source\" (default) the source code, \"metadata\" the ADT metadata document (package, responsible, description, ...).",
        +  "enum": [
        +    "source",
        +    "metadata"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / version / description
        Previous value: -"Version to read: \"active\" (default) for deployed version, \"inactive\" for modified but not activated version."New value: +"Version of the source: \"active\" (default) for the deployed version, \"inactive\" for the modified version awaiting activation."
    • RemovedGetSession
    • ChangedGetSqlQuery1 field changed
      • addedInput schema / properties / timeout
        Added value: +{
        +  "description": "Seconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.",
        +  "maximum": 2147483,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • ChangedGetStructure2 fields changed
      • addedInput schema / properties / part
        Added value: +{
        +  "default": "source",
        +  "description": "The document to read: \"source\" (default) the source code, \"metadata\" the ADT metadata document (package, responsible, description, ...).",
        +  "enum": [
        +    "source",
        +    "metadata"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / version / description
        Previous value: -"Version to read: \"active\" (default) for deployed version, \"inactive\" for modified but not activated version."New value: +"Version of the source: \"active\" (default) for the deployed version, \"inactive\" for the modified version awaiting activation."
    • ChangedGetStructuresList7 fields changed
      • changedInput schema / properties / structure_name / description
        Previous value: -"Structure name."New value: +"Structure name (or give structure_names)."
      • addedInput schema / properties / structure_names
        Added value: +{
        +  "description": "Several structure names, read together (give this or structure_name).",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / timeout / description
        Previous value: -"[read-only] Timeout in ms for each ADT request."New value: +"Seconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP."
      • addedInput schema / properties / timeout / maximum
        Added value: +2147483
      • addedInput schema / properties / timeout / minimum
        Added value: +1
      • changedInput schema / properties / timeout / type
        Previous value: -"number"New value: +"integer"
      • removedInput schema / required
        Removed value: -[
        -  "structure_name"
        -]
    • ChangedGetStructureVersionDiff2 fields changed
      • changedInput schema / properties / content_uri_from / description
        Previous value: -"Opaque content_uri of the OLD/base version (from a GetStructureVersions entry)."New value: +"Opaque content_uri of the OLD/base version, from the ABAP structure's version history."
      • changedInput schema / properties / content_uri_to / description
        Previous value: -"Opaque content_uri of the NEW/compare version (from a GetStructureVersions entry)."New value: +"Opaque content_uri of the NEW/compare version, from the ABAP structure's version history."
    • ChangedGetStructureVersionSource1 field changed
      • changedInput schema / properties / content_uri / description
        Previous value: -"Opaque content_uri taken from a GetStructureVersions entry."New value: +"Opaque content_uri of a version, from the ABAP structure's version history."
    • ChangedGetTable2 fields changed
      • addedInput schema / properties / part
        Added value: +{
        +  "default": "source",
        +  "description": "The document to read: \"source\" (default) the source code, \"metadata\" the ADT metadata document (package, responsible, description, ...).",
        +  "enum": [
        +    "source",
        +    "metadata"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / version / description
        Previous value: -"Version to read: \"active\" (default) for deployed version, \"inactive\" for modified but not activated version."New value: +"Version of the source: \"active\" (default) for the deployed version, \"inactive\" for the modified version awaiting activation."
    • ChangedGetTableContents1 field changed
      • addedInput schema / properties / timeout
        Added value: +{
        +  "description": "Seconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.",
        +  "maximum": 2147483,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • ChangedGetTableVersionDiff2 fields changed
      • changedInput schema / properties / content_uri_from / description
        Previous value: -"Opaque content_uri of the OLD/base version (from a GetTableVersions entry)."New value: +"Opaque content_uri of the OLD/base version, from the ABAP table's version history."
      • changedInput schema / properties / content_uri_to / description
        Previous value: -"Opaque content_uri of the NEW/compare version (from a GetTableVersions entry)."New value: +"Opaque content_uri of the NEW/compare version, from the ABAP table's version history."
    • ChangedGetTableVersionSource1 field changed
      • changedInput schema / properties / content_uri / description
        Previous value: -"Opaque content_uri taken from a GetTableVersions entry."New value: +"Opaque content_uri of a version, from the ABAP table's version history."
    • ChangedGetTransaction1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • RemovedGetVirtualFoldersLow
    • ChangedGetWhereUsed4 fields changed
      • changedInput schema / properties / object_name / description
        Previous value: -"Name of the ABAP object. For function modules the name MUST be in the form 'GROUP|FM_NAME' (function group name, pipe, function module name)."New value: +"Name of the ABAP object (with object_type; or give objects). For function modules the name MUST be in the form 'GROUP|FM_NAME' (function group name, pipe, function module name)."
      • addedInput schema / properties / objects
        Added value: +{
        +  "description": "Several objects, read together (give this or object_name and object_type). The type filters apply to every object.",
        +  "items": {
        +    "properties": {
        +      "object_name": {
        +        "description": "Name of the ABAP object; a function module as 'GROUP|FM_NAME'",
        +        "type": "string"
        +      },
        +      "object_type": {
        +        "description": "Type of the ABAP object, as object_type takes it",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "object_name",
        +      "object_type"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / timeout
        Added value: +{
        +  "description": "Seconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.",
        +  "maximum": 2147483,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "object_name",
        -  "object_type"
        -]
    • AddedListBackgroundRuns
    • AddedListLeftoverSessions
    • ChangedListTransports2 fields changed
      • addedInput schema / properties / timeout
        Added value: +{
        +  "description": "Seconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.",
        +  "maximum": 2147483,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedInput schema / properties / user / description
        Previous value: -"SAP user name to filter to; applied client-side. If not provided, defaults to the current session user, so an unfiltered call already answers only that user's transports."New value: +"The user to filter to: an SAP user id (matched in upper case); applied client-side. If not provided, defaults to the current session user, so an unfiltered call already answers only that user's transports."
    • AddedLogoffLeftoverSession
    • AddedMemorySnapshotDelta
    • AddedMemorySnapshotGet
    • AddedMemorySnapshotList
    • AddedMoveTransportObjects
    • RemovedReadFunctionInclude
    • ChangedReadTransportObjects1 field changed
      • changedInput schema / properties / transport_number / description
        Previous value: -"Transport REQUEST or TASK number. Both answer: a request lists the entries of all its tasks, which is how to find WHICH task holds an object; a task lists its own. A removal must then address that task, not the request."New value: +"Transport REQUEST or TASK number. A task answers its own entries; a request answers the entries of each of its tasks, each with its `task` number — the task a removal addresses."
    • ChangedRunATC4 fields changed
      • addedInput schema / properties / max_findings / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / max_findings / minimum
        Added value: +1
      • changedInput schema / properties / max_findings / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / objects / minItems
        Added value: +1
    • ChangedRunFunctionGroupUnitTest2 fields changed
      • addedInput schema / properties / runner
        Added value: +{
        +  "default": "async",
        +  "description": "async (default): starts the run, waits for it within a bound and returns the result, or the run_id of a run that outlasts the bound, whose status and result are read by run_id; suited to long suites. sync: one request that returns the finished result.",
        +  "enum": [
        +    "async",
        +    "sync"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / scope
        Added value: +{
        +  "description": "Which tests the run covers, sent with either runner. Foreign tests are test classes linked to the object by an ABAP Doc @testing relation (a function module's tests are often linked so). With runner sync they execute only with foreign_tests true: with the defaults (foreign_tests false, add_foreign_tests_as_preview true) SAP lists them as a preview, unexecuted. Runner async executes them with the defaults as well.",
        +  "properties": {
        +    "add_foreign_tests_as_preview": {
        +      "description": "List the foreign tests as a preview, unexecuted (default true).",
        +      "type": "boolean"
        +    },
        +    "foreign_tests": {
        +      "description": "Execute the foreign tests, those linked by an ABAP Doc @testing relation (default false).",
        +      "type": "boolean"
        +    },
        +    "own_tests": {
        +      "description": "Include the object's own tests (default true).",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • ChangedRunFunctionModuleUnitTest3 fields changed
      • addedInput schema / properties / function_group_name
        Added value: +{
        +  "description": "Function group holding the function module; required by runner sync.",
        +  "type": "string"
        +}
      • addedInput schema / properties / runner
        Added value: +{
        +  "default": "async",
        +  "description": "async (default): starts the run, waits for it within a bound and returns the result, or the run_id of a run that outlasts the bound, whose status and result are read by run_id; suited to long suites. sync: one request that returns the finished result.",
        +  "enum": [
        +    "async",
        +    "sync"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / scope
        Added value: +{
        +  "description": "Which tests the run covers, sent with either runner. Foreign tests are test classes linked to the object by an ABAP Doc @testing relation (a function module's tests are often linked so). With runner sync they execute only with foreign_tests true: with the defaults (foreign_tests false, add_foreign_tests_as_preview true) SAP lists them as a preview, unexecuted. Runner async executes them with the defaults as well.",
        +  "properties": {
        +    "add_foreign_tests_as_preview": {
        +      "description": "List the foreign tests as a preview, unexecuted (default true).",
        +      "type": "boolean"
        +    },
        +    "foreign_tests": {
        +      "description": "Execute the foreign tests, those linked by an ABAP Doc @testing relation (default false).",
        +      "type": "boolean"
        +    },
        +    "own_tests": {
        +      "description": "Include the object's own tests (default true).",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • AddedRunProgramUnitTest
    • ChangedRuntimeAnalyzeProfilerTrace1 field changed
      • addedInput schema / properties / timeout
        Added value: +{
        +  "description": "Seconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.",
        +  "maximum": 2147483,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • AddedRuntimeGetGatewayErrorLog
    • ChangedRuntimeGetProfilerTraceData1 field changed
      • addedInput schema / properties / timeout
        Added value: +{
        +  "description": "Seconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.",
        +  "maximum": 2147483,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • ChangedRuntimeListFeeds3 fields changed
      • removedInput schema / properties / feed_type / default
        Removed value: -"descriptors"
      • addedInput schema / properties / feed_types
        Added value: +{
        +  "description": "Several feeds, read together with the same filters (give this or feed_type).",
        +  "items": {
        +    "enum": [
        +      "descriptors",
        +      "variants",
        +      "dumps",
        +      "system_messages",
        +      "gateway_errors"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / timeout
        Added value: +{
        +  "description": "Seconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.",
        +  "maximum": 2147483,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • ChangedRuntimeRunClass7 fields changed
      • addedInput schema / properties / background
        Added value: +{
        +  "description": "When true, the run goes on in the background on an ABAP session of its own and the call answers at once with a run_handle; read its answer later with GetBackgroundRun, and remove it with DiscardBackgroundRun. A started run cannot be stopped. No default: without it the call waits for the run to end.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / max_trace_attempts / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / max_trace_attempts / minimum
        Added value: +1
      • changedInput schema / properties / max_trace_attempts / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / trace_retry_delay_ms / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / trace_retry_delay_ms / minimum
        Added value: +0
      • changedInput schema / properties / trace_retry_delay_ms / type
        Previous value: -"number"New value: +"integer"
    • RemovedRuntimeRunClassWithProfiling
    • AddedRuntimeRunProgram
    • ChangedRunUnitTest2 fields changed
      • addedInput schema / properties / runner
        Added value: +{
        +  "default": "async",
        +  "description": "async (default): starts the run, waits for it within a bound and returns the result, or the run_id of a run that outlasts the bound, whose status and result are read by run_id; suited to long suites. sync: one request that returns the finished result.",
        +  "enum": [
        +    "async",
        +    "sync"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / scope
        Added value: +{
        +  "description": "Which tests the run covers, sent with either runner. Foreign tests are test classes linked to the object by an ABAP Doc @testing relation (a function module's tests are often linked so). With runner sync they execute only with foreign_tests true: with the defaults (foreign_tests false, add_foreign_tests_as_preview true) SAP lists them as a preview, unexecuted. Runner async executes them with the defaults as well.",
        +  "properties": {
        +    "add_foreign_tests_as_preview": {
        +      "description": "List the foreign tests as a preview, unexecuted (default true).",
        +      "type": "boolean"
        +    },
        +    "foreign_tests": {
        +      "description": "Execute the foreign tests, those linked by an ABAP Doc @testing relation (default false).",
        +      "type": "boolean"
        +    },
        +    "own_tests": {
        +      "description": "Include the object's own tests (default true).",
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • ChangedSearchObject1 field changed
      • addedInput schema / properties / timeout
        Added value: +{
        +  "description": "Seconds to wait for the answer: a whole number, at least 1, no default — without it the call waits until SAP answers. When it passes, the read is cancelled (its ABAP session is logged off) and the call answers that nothing was changed. Set it below your MCP client's request limit — the TypeScript SDK's client cancels at 60 s; a cancel does nothing to SAP.",
        +  "maximum": 2147483,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • AddedSearchSource
    • AddedSortAndCompressTransportTask
    • AddedUpdatePackage
    • AddedUpdateProgram
    • AddedUpdateProgramUnitTest
  3. 162 tool updatesv16.0.0
    • ChangedActivateBehaviorDefinition2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / name / description
        Previous value: -"Behavior definition name (root entity, e.g., ZI_MY_ENTITY)."New value: +"Behavior definition name (root entity)."
    • ChangedActivateClass2 fields changed
      • changedInput schema / properties / class_name / description
        Previous value: -"Class name (e.g., ZCL_MY_CLASS)."New value: +"Class name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • ChangedActivateDataElement2 fields changed
      • changedInput schema / properties / data_element_name / description
        Previous value: -"Data element name (e.g., ZDT_MY_ELEMENT)."New value: +"Data element name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • ChangedActivateDdl2 fields changed
      • changedInput schema / properties / ddl_name / description
        Previous value: -"DDL source name (e.g., ZVW_MY_VIEW)."New value: +"DDL source name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • ChangedActivateDomain2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / domain_name / description
        Previous value: -"Domain name (e.g., ZDM_MY_DOMAIN)."New value: +"Domain name."
    • ChangedActivateFunctionGroup2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / function_group_name / description
        Previous value: -"Function group name (e.g., Z_FG_TEST)."New value: +"Function group name."
    • ChangedActivateFunctionModule3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / function_group_name / description
        Previous value: -"Function group name (e.g., Z_FG_TEST)."New value: +"Function group name."
      • changedInput schema / properties / function_module_name / description
        Previous value: -"Function module name (e.g., Z_FM_TEST)."New value: +"Function module name."
    • ChangedActivateInterface2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / interface_name / description
        Previous value: -"Interface name (e.g., ZIF_MY_INTERFACE)."New value: +"Interface name."
    • ChangedActivateMetadataExtension2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / name / description
        Previous value: -"Metadata extension name (e.g., ZC_MY_EXTENSION)."New value: +"Metadata Extension name."
    • ChangedActivateObjects1 field changed
      • changedInput schema / properties / objects / items / properties / name / description
        Previous value: -"Object name in uppercase (e.g., ZOK7_D_MTART, ZCL_MY_CLASS)"New value: +"Object name in uppercase"
    • ChangedActivateServiceBinding2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / name / description
        Previous value: -"Service binding name (e.g., ZSB_MY_SERVICE)."New value: +"Service binding name."
    • ChangedActivateServiceDefinition2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / name / description
        Previous value: -"Service definition name (e.g., ZSD_MY_SERVICE)."New value: +"Service definition name."
    • ChangedActivateStructure2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / structure_name / description
        Previous value: -"Structure name (e.g., ZST_MY_STRUCTURE)."New value: +"Structure name."
    • ChangedActivateTable2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / table_name / description
        Previous value: -"Table name (e.g., ZTB_MY_TABLE)."New value: +"Table name."
    • AddedAddTransportObject
    • ChangedCheckBehaviorDefinition2 fields changed
      • changedInput schema / properties / name / description
        Previous value: -"BehaviorDefinition name (e.g., ZI_MY_BDEF)."New value: +"BehaviorDefinition name."
      • addedInput schema / properties / version
        Added value: +{
        +  "description": "Which version to check — it goes into the checkrun body as chkrun:version, as ADT sends it. Omitted, the inactive one is checked; an object that is only active has none, and SAP answers such a check with a finding against an empty source (e.g. G46 \"REPORT/PROGRAM statement is missing\") or \"Inactive version … does not exist\" — ask for active.",
        +  "enum": [
        +    "active",
        +    "inactive"
        +  ],
        +  "type": "string"
        +}
    • ChangedCheckClass1 field changed
      • changedInput schema / properties / class_name / description
        Previous value: -"Class name (e.g., ZCL_MY_CLASS)."New value: +"Class name."
    • ChangedCheckDataElement2 fields changed
      • changedInput schema / properties / data_element_name / description
        Previous value: -"Data element name (e.g., ZDE_MY_ELEMENT)."New value: +"Data element name."
      • addedInput schema / properties / version
        Added value: +{
        +  "description": "Which version to check. Defaults to the inactive one, what a caller wants right after a write; an object that is only active has no inactive version, and SAP answers such a check with \"Error while importing object … from the database\" — ask for active.",
        +  "enum": [
        +    "active",
        +    "inactive"
        +  ],
        +  "type": "string"
        +}
    • ChangedCheckDdl1 field changed
      • changedInput schema / properties / ddl_name / description
        Previous value: -"CDS view name to check, passed as ddl_name (e.g., ZI_MY_VIEW)."New value: +"CDS view name to check, passed as ddl_name."
    • ChangedCheckDomain2 fields changed
      • changedInput schema / properties / domain_name / description
        Previous value: -"Domain name (e.g., ZDM_MY_DOMAIN)."New value: +"Domain name."
      • addedInput schema / properties / version
        Added value: +{
        +  "description": "Which version to check. Defaults to the inactive one, what a caller wants right after a write; an object that is only active has no inactive version, and SAP answers such a check with \"Error while importing object … from the database\" — ask for active.",
        +  "enum": [
        +    "active",
        +    "inactive"
        +  ],
        +  "type": "string"
        +}
    • ChangedCheckFunctionGroup2 fields changed
      • changedInput schema / properties / function_group_name / description
        Previous value: -"Function group name (e.g., ZFGRP_MY_GROUP)."New value: +"Function group name."
      • addedInput schema / properties / version
        Added value: +{
        +  "description": "Which version to check — it goes into the checkrun body as chkrun:version, as ADT sends it. Omitted, the inactive one is checked; an object that is only active has none, and SAP answers such a check with a finding against an empty source (e.g. G46 \"REPORT/PROGRAM statement is missing\") or \"Inactive version … does not exist\" — ask for active.",
        +  "enum": [
        +    "active",
        +    "inactive"
        +  ],
        +  "type": "string"
        +}
    • ChangedCheckFunctionModule1 field changed
      • changedInput schema / properties / function_module_name / description
        Previous value: -"Function module name (e.g., Z_MY_FUNCTION)."New value: +"Function module name."
    • ChangedCheckInterface2 fields changed
      • changedInput schema / properties / interface_name / description
        Previous value: -"Interface name (e.g., ZIF_MY_INTERFACE)."New value: +"Interface name."
      • addedInput schema / properties / version
        Added value: +{
        +  "description": "Which version to check — it goes into the checkrun body as chkrun:version, as ADT sends it. Omitted, the inactive one is checked; an object that is only active has none, and SAP answers such a check with a finding against an empty source (e.g. G46 \"REPORT/PROGRAM statement is missing\") or \"Inactive version … does not exist\" — ask for active.",
        +  "enum": [
        +    "active",
        +    "inactive"
        +  ],
        +  "type": "string"
        +}
    • ChangedCheckMetadataExtension2 fields changed
      • changedInput schema / properties / name / description
        Previous value: -"Metadata extension name (e.g., ZC_MY_DDLX)."New value: +"Metadata extension name."
      • addedInput schema / properties / version
        Added value: +{
        +  "default": "active",
        +  "description": "Which version to check: 'active' (default) or 'inactive', the unsaved one right after a write. This endpoint does not fall back to whichever exists.",
        +  "enum": [
        +    "active",
        +    "inactive"
        +  ],
        +  "type": "string"
        +}
    • ChangedCheckPackage3 fields changed
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name (e.g., ZMY_PACKAGE)."New value: +"Package name."
      • changedInput schema / properties / super_package / description
        Previous value: -"Super package name (parent package)."New value: +"Optional, and not read by the check endpoint — see CheckPackageLow. Requiring it refused the call before any request was made, for a package with no parent."
      • changedInput schema / required
        Previous value: -[
        -  "package_name",
        -  "super_package"
        -]New value: +[
        +  "package_name"
        +]
    • ChangedCheckStructure1 field changed
      • changedInput schema / properties / structure_name / description
        Previous value: -"Structure name (e.g., ZST_MY_STRUCTURE)."New value: +"Structure name."
    • ChangedCheckTable1 field changed
      • changedInput schema / properties / table_name / description
        Previous value: -"Table name (e.g., ZMCP_MY_TABLE)."New value: +"Table name."
    • ChangedCreateBehaviorDefinition2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number"New value: +"Transport request number, not a task"
    • ChangedCreateBehaviorImplementation5 fields changed
      • changedInput schema / properties / behavior_definition / description
        Previous value: -"Behavior Definition name (e.g., ZI_MY_ENTITY). The behavior definition must exist."New value: +"Behavior Definition name. The behavior definition must exist. Accepted for compatibility; not forwarded to the create request — the shipped create endpoint posts a metadata document (name/description/package) only. The class is bound to this behavior definition when its FOR BEHAVIOR OF main source is written, separately, via UpdateClass."
      • changedInput schema / properties / class_name / description
        Previous value: -"Behavior Implementation class name (e.g., ZBP_MY_ENTITY). Must follow SAP naming conventions (typically starts with ZBP_ for behavior implementations)."New value: +"Behavior Implementation class name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name (e.g., ZOK_LOCAL, $TMP for local objects)"New value: +"Package name"
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable packages."New value: +"Transport request number, not a task. Required for transportable packages."
    • ChangedCreateCdsUnitTest8 fields changed
      • changedInput schema / properties / cds_view_name / description
        Previous value: -"CDS view name to validate for unit test doubles."New value: +"CDS view under test (DDL source). Must be active and testable with test doubles."
      • changedInput schema / properties / class_name / description
        Previous value: -"Global test class name (e.g., ZCL_CDS_TEST)."New value: +"Name of the new global class that holds the tests."
      • removedInput schema / properties / description
        Removed value: -{
        -  "description": "Optional description for the global test class.",
        -  "type": "string"
        -}
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name (e.g., ZOK_TEST_PKG_01, $TMP)."New value: +"Package of the new test class."
      • addedInput schema / properties / test_class_source
        Added value: +{
        +  "description": "ABAP source of the local test classes: definitions and implementations, FOR TESTING.",
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (required for transportable packages)."New value: +"Transport request, not a task. Required for a transportable package."
      • changedInput schema / required
        Previous value: -[
        -  "class_name",
        -  "package_name",
        -  "cds_view_name"
        -]New value: +[
        +  "cds_view_name",
        +  "class_name",
        +  "package_name",
        +  "test_class_source"
        +]
    • ChangedCreateClass4 fields changed
      • changedInput schema / properties / class_name / description
        Previous value: -"Class name (e.g., ZCL_TEST_CLASS_001)."New value: +"Class name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name (e.g., ZOK_LAB, $TMP)."New value: +"Package name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (required for transportable packages)."New value: +"Transport request number (required for transportable packages), not a task."
    • ChangedCreateDataElement4 fields changed
      • changedInput schema / properties / data_element_name / description
        Previous value: -"Data element name (e.g., ZZ_E_TEST_001). Must follow SAP naming conventions."New value: +"Data element name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name (e.g., ZOK_LOCAL, $TMP for local objects)"New value: +"Package name"
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable packages."New value: +"Transport request number, not a task. Required for transportable packages."
    • ChangedCreateDdl4 fields changed
      • changedInput schema / properties / ddl_name / description
        Previous value: -"DDL source name (e.g., ZOK_R_TEST_0002, Z_I_MY_VIEW)."New value: +"DDL source name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name (e.g., ZOK_LAB, $TMP for local objects)"New value: +"Package name"
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (required for transportable packages)."New value: +"Transport request number (required for transportable packages), not a task."
    • ChangedCreateDomain4 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / domain_name / description
        Previous value: -"Domain name (e.g., ZZ_TEST_0001). Must follow SAP naming conventions."New value: +"Domain name."
      • changedInput schema / properties / package_name / description
        Previous value: -"(optional) Package name (e.g., ZOK_LOCAL, $TMP for local objects)"New value: +"(optional) Package name"
      • changedInput schema / properties / transport_request / description
        Previous value: -"(optional) Transport request number (e.g., E19K905635). Required for transportable packages."New value: +"(optional) Transport request number, not a task. Required for transportable packages."
    • ChangedCreateFunctionGroup4 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / function_group_name / description
        Previous value: -"Function group name (e.g., ZTEST_FG_001). Must follow SAP naming conventions (start with Z or Y, max 26 chars)."New value: +"Function group name. Up to 26 characters."
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name (e.g., ZOK_LAB, $TMP for local objects)"New value: +"Package name"
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable packages."New value: +"Transport request number, not a task. Required for transportable packages."
    • AddedCreateFunctionGroupUnitTest
    • ChangedCreateFunctionInclude4 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / function_group_name / description
        Previous value: -"Parent function group name (e.g., ZTEST_FG_001)"New value: +"Parent function group name"
      • changedInput schema / properties / include_name / description
        Previous value: -"Include name (e.g., LZTEST_FG_001F01)."New value: +"Include name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable packages."New value: +"Transport request number, not a task. Required for transportable packages."
    • ChangedCreateFunctionModule4 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / function_group_name / description
        Previous value: -"Parent function group name (e.g., ZTEST_FG_001)"New value: +"Parent function group name"
      • changedInput schema / properties / function_module_name / description
        Previous value: -"Function module name (e.g., Z_TEST_FUNCTION_001). Must follow SAP naming conventions (start with Z or Y, max 30 chars)."New value: +"Function module name. Up to 30 characters."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable packages."New value: +"Transport request number, not a task. Required for transportable packages."
    • ChangedCreateInterface4 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / interface_name / description
        Previous value: -"Interface name (e.g., ZIF_TEST_INTERFACE_001). Must follow SAP naming conventions (start with Z or Y)."New value: +"Interface name."
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name (e.g., ZOK_LAB, $TMP for local objects)"New value: +"Package name"
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable packages."New value: +"Transport request number, not a task. Required for transportable packages."
    • ChangedCreateMessageClass4 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / message_class_name / description
        Previous value: -"Message class name (e.g., ZMY_MSGS). Must follow SAP naming conventions."New value: +"Message class name."
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name (e.g., ZMY_PKG, $TMP for local objects)."New value: +"Package name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"(optional) Transport request number (e.g., E19K905635). Required for transportable packages."New value: +"(optional) Transport request number, not a task. Required for transportable packages."
    • ChangedCreateMessageClassMessage2 fields changed
      • changedInput schema / properties / message_class_name / description
        Previous value: -"Parent message class name (e.g., ZMY_MSGS)."New value: +"Parent message class name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"(optional) Transport request number. Required for transportable objects."New value: +"(optional) Transport request number, not a task. Required for transportable objects."
    • ChangedCreateMetadataExtension2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number"New value: +"Transport request number, not a task"
    • ChangedCreatePackage6 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name (e.g., ZOK_TEST_0002). Must follow SAP naming conventions (start with Z or Y for customer namespace)."New value: +"Package name."
      • changedInput schema / properties / software_component / description
        Previous value: -"Software component (e.g., HOME, ZLOCAL). If not provided, SAP will set a default (typically ZLOCAL for local packages)."New value: +"Software component. If not provided, SAP will set a default."
      • changedInput schema / properties / super_package / description
        Previous value: -"Parent package name (e.g., ZOK_PACKAGE). Required for structure packages."New value: +"Parent package name. Required for structure packages."
      • changedInput schema / properties / transport_layer / description
        Previous value: -"Transport layer (e.g., ZE19). Required for transportable packages."New value: +"Transport layer. Required for transportable packages."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required if package is transportable."New value: +"Transport request number, not a task. Required if the package is transportable."
    • ChangedCreateServiceBinding3 fields changed
      • changedInput schema / properties / activate / description
        Previous value: -"Activate service binding after create. Default: true."New value: +"Activate and generate the service binding after create. Default: true."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / response_format / description
        Added value: +"Accepted for backward compatibility; no longer affects the answer, which is always the structured write result."
    • ChangedCreateServiceDefinition4 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name (e.g., ZOK_LOCAL, $TMP for local objects)"New value: +"Package name"
      • changedInput schema / properties / service_definition_name / description
        Previous value: -"Service definition name (e.g., ZSD_MY_SERVICE). Must follow SAP naming conventions (start with Z or Y)."New value: +"Service definition name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable packages."New value: +"Transport request number, not a task. Required for transportable packages."
    • ChangedCreateStructure6 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / fields / description
        Previous value: -"Array of structure fields"New value: +"Does not reach creation — the shipped create endpoint posts a metadata document only. Use UpdateStructure (with ddl_code) after creating to set the fields."
      • changedInput schema / properties / includes / description
        Previous value: -"Include other structures in this structure"New value: +"Does not reach creation — see `fields`. Use UpdateStructure (with ddl_code) after creating to set includes."
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name (e.g., ZOK_LOCAL, $TMP for local objects)"New value: +"Package name"
      • changedInput schema / properties / structure_name / description
        Previous value: -"Structure name (e.g., ZZ_S_TEST_001). Must follow SAP naming conventions."New value: +"Structure name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable packages."New value: +"Transport request number, not a task. Required for transportable packages."
    • ChangedCreateTable5 fields changed
      • changedInput schema / properties / description / description
        Previous value: -"Table description for validation and creation."New value: +"Does not reach creation — the shipped create endpoint has no description field of its own. Use UpdateTable (with ddl_code) after creating to set the DDL source, which carries the description."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name (e.g., ZOK_LOCAL, $TMP for local objects)"New value: +"Package name"
      • changedInput schema / properties / table_name / description
        Previous value: -"Table name (e.g., ZZ_TEST_TABLE_001). Must follow SAP naming conventions."New value: +"Table name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable packages."New value: +"Transport request number, not a task. Required for transportable packages."
    • ChangedCreateTransport1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • AddedCreateTransportTask
    • ChangedCreateUnitTest11 fields changed
      • addedInput schema / properties / class_name
        Added value: +{
        +  "description": "Class that holds the tests. Must already exist.",
        +  "type": "string"
        +}
      • removedInput schema / properties / context
        Removed value: -{
        -  "description": "Optional context string shown in SAP tools.",
        -  "type": "string"
        -}
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / duration
        Removed value: -{
        -  "properties": {
        -    "long": {
        -      "type": "boolean"
        -    },
        -    "medium": {
        -      "type": "boolean"
        -    },
        -    "short": {
        -      "type": "boolean"
        -    }
        -  },
        -  "type": "object"
        -}
      • removedInput schema / properties / risk_level
        Removed value: -{
        -  "properties": {
        -    "critical": {
        -      "type": "boolean"
        -    },
        -    "dangerous": {
        -      "type": "boolean"
        -    },
        -    "harmless": {
        -      "type": "boolean"
        -    }
        -  },
        -  "type": "object"
        -}
      • removedInput schema / properties / scope
        Removed value: -{
        -  "properties": {
        -    "add_foreign_tests_as_preview": {
        -      "type": "boolean"
        -    },
        -    "foreign_tests": {
        -      "type": "boolean"
        -    },
        -    "own_tests": {
        -      "type": "boolean"
        -    }
        -  },
        -  "type": "object"
        -}
      • addedInput schema / properties / test_class_source
        Added value: +{
        +  "description": "ABAP source of the local test classes: definitions and implementations, FOR TESTING. Replaces what the include holds.",
        +  "type": "string"
        +}
      • removedInput schema / properties / tests
        Removed value: -{
        -  "description": "List of container/test class pairs to execute.",
        -  "items": {
        -    "properties": {
        -      "container_class": {
        -        "description": "Class that owns the test include (e.g., ZCL_MAIN_CLASS).",
        -        "type": "string"
        -      },
        -      "test_class": {
        -        "description": "Test class name inside the include (e.g., LTCL_MAIN_CLASS).",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "container_class",
        -      "test_class"
        -    ],
        -    "type": "object"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / title
        Removed value: -{
        -  "description": "Optional title for the ABAP Unit run.",
        -  "type": "string"
        -}
      • addedInput schema / properties / transport_request
        Added value: +{
        +  "description": "Transport request, not a task. Required for a transportable object.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "tests"
        -]New value: +[
        +  "class_name",
        +  "test_class_source"
        +]
    • ChangedDeleteBehaviorDefinition3 fields changed
      • changedInput schema / properties / behavior_definition_name / description
        Previous value: -"BehaviorDefinition name (e.g., Z_MY_BEHAVIORDEFINITION)."New value: +"BehaviorDefinition name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable objects. Optional for local objects ($TMP)."New value: +"Transport request number, not a task. Required for transportable objects. Optional for local objects."
    • ChangedDeleteBehaviorImplementation3 fields changed
      • changedInput schema / properties / behavior_implementation_name / description
        Previous value: -"BehaviorImplementation name (e.g., Z_MY_BEHAVIORIMPLEMENTATION)."New value: +"BehaviorImplementation name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable objects. Optional for local objects ($TMP)."New value: +"Transport request number, not a task. Required for transportable objects. Optional for local objects."
    • ChangedDeleteCdsUnitTest3 fields changed
      • changedInput schema / properties / class_name / description
        Previous value: -"Global test class name (e.g., ZCL_CDS_TEST)."New value: +"Test class of the CDS view."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (required for transportable packages)."New value: +"Transport request, not a task. Required for a transportable object."
    • ChangedDeleteClass3 fields changed
      • changedInput schema / properties / class_name / description
        Previous value: -"Class name (e.g., ZCL_MY_CLASS)."New value: +"Class name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable objects. Optional for local objects ($TMP)."New value: +"Transport request number, not a task. Required for transportable objects. Optional for local objects."
    • ChangedDeleteDataElement3 fields changed
      • changedInput schema / properties / data_element_name / description
        Previous value: -"Data element name (e.g., Z_MY_DATA_ELEMENT)."New value: +"Data element name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable objects. Optional for local objects ($TMP)."New value: +"Transport request number, not a task. Required for transportable objects. Optional for local objects."
    • ChangedDeleteDdl3 fields changed
      • changedInput schema / properties / ddl_name / description
        Previous value: -"DDL source name (e.g., Z_MY_VIEW)."New value: +"DDL source name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable objects. Optional for local objects ($TMP)."New value: +"Transport request number, not a task. Required for transportable objects. Optional for local objects."
    • ChangedDeleteDomain3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / domain_name / description
        Previous value: -"Domain name (e.g., Z_MY_DOMAIN)."New value: +"Domain name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable objects. Optional for local objects ($TMP)."New value: +"Transport request number, not a task. Required for transportable objects. Optional for local objects."
    • ChangedDeleteFunctionGroup3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / function_group_name / description
        Previous value: -"FunctionGroup name (e.g., Z_MY_FUNCTIONGROUP)."New value: +"FunctionGroup name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable objects. Optional for local objects ($TMP)."New value: +"Transport request number, not a task. Required for transportable objects. Optional for local objects."
    • ChangedDeleteFunctionInclude4 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / function_group_name / description
        Previous value: -"Function group name containing the include (e.g., Z_MY_FG)."New value: +"Function group name containing the include."
      • changedInput schema / properties / include_name / description
        Previous value: -"Include name (e.g., LZ_MY_FGF01)."New value: +"Include name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable objects. Optional for local objects ($TMP)."New value: +"Transport request number, not a task. Required for transportable objects. Optional for local objects."
    • ChangedDeleteFunctionModule4 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / function_group_name / description
        Previous value: -"FunctionGroup name containing the function module (e.g., Z_MY_FUNCTIONGROUP)."New value: +"FunctionGroup name containing the function module."
      • changedInput schema / properties / function_module_name / description
        Previous value: -"FunctionModule name (e.g., Z_MY_FUNCTIONMODULE)."New value: +"FunctionModule name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable objects. Optional for local objects ($TMP)."New value: +"Transport request number, not a task. Required for transportable objects. Optional for local objects."
    • ChangedDeleteInterface3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / interface_name / description
        Previous value: -"Interface name (e.g., Z_MY_INTERFACE)."New value: +"Interface name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable objects. Optional for local objects ($TMP)."New value: +"Transport request number, not a task. Required for transportable objects. Optional for local objects."
    • ChangedDeleteLocalDefinitions3 fields changed
      • changedInput schema / properties / class_name / description
        Previous value: -"Parent class name (e.g., ZCL_MY_CLASS)."New value: +"Parent class name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number."New value: +"Transport request number, not a task."
    • ChangedDeleteLocalMacros3 fields changed
      • changedInput schema / properties / class_name / description
        Previous value: -"Parent class name (e.g., ZCL_MY_CLASS)."New value: +"Parent class name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number."New value: +"Transport request number, not a task."
    • ChangedDeleteLocalTestClass3 fields changed
      • changedInput schema / properties / class_name / description
        Previous value: -"Parent class name (e.g., ZCL_MY_CLASS)."New value: +"Parent class name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (required for transportable objects)."New value: +"Transport request number (required for transportable objects), not a task."
    • ChangedDeleteLocalTypes3 fields changed
      • changedInput schema / properties / class_name / description
        Previous value: -"Parent class name (e.g., ZCL_MY_CLASS)."New value: +"Parent class name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number."New value: +"Transport request number, not a task."
    • ChangedDeleteMessageClass3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / message_class_name / description
        Previous value: -"Message class name (e.g., ZMY_MSGS)."New value: +"Message class name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable objects, optional for local ($TMP)."New value: +"Transport request number, not a task. Required for transportable objects, optional for local ones."
    • ChangedDeleteMessageClassMessage2 fields changed
      • changedInput schema / properties / message_class_name / description
        Previous value: -"Parent message class name (e.g., ZMY_MSGS)."New value: +"Parent message class name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number. Required for transportable objects, optional for local ($TMP)."New value: +"Transport request number, not a task. Required for transportable objects, optional for local ones."
    • ChangedDeleteMetadataExtension3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / metadata_extension_name / description
        Previous value: -"MetadataExtension name (e.g., Z_MY_METADATAEXTENSION)."New value: +"MetadataExtension name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable objects. Optional for local objects ($TMP)."New value: +"Transport request number, not a task. Required for transportable objects. Optional for local objects."
    • ChangedDeleteServiceBinding2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / response_format / description
        Added value: +"Accepted for backward compatibility; no longer affects the answer, which is always the structured deletion result."
    • ChangedDeleteServiceDefinition3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / service_definition_name / description
        Previous value: -"ServiceDefinition name (e.g., Z_MY_SERVICEDEFINITION)."New value: +"ServiceDefinition name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable objects. Optional for local objects ($TMP)."New value: +"Transport request number, not a task. Required for transportable objects. Optional for local objects."
    • ChangedDeleteStructure3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / structure_name / description
        Previous value: -"Structure name (e.g., Z_MY_STRUCTURE)."New value: +"Structure name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable objects. Optional for local objects ($TMP)."New value: +"Transport request number, not a task. Required for transportable objects. Optional for local objects."
    • ChangedDeleteTable3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / table_name / description
        Previous value: -"Table name (e.g., Z_MY_TABLE)."New value: +"Table name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable objects. Optional for local objects ($TMP)."New value: +"Transport request number, not a task. Required for transportable objects. Optional for local objects."
    • ChangedDeleteUnitTest5 fields changed
      • addedInput schema / properties / class_name
        Added value: +{
        +  "description": "Class that holds the tests. Must already exist.",
        +  "type": "string"
        +}
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / run_id
        Removed value: -{
        -  "description": "Run identifier returned by CreateUnitTest/RunUnitTest.",
        -  "type": "string"
        -}
      • addedInput schema / properties / transport_request
        Added value: +{
        +  "description": "Transport request, not a task. Required for a transportable object.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "run_id"
        -]New value: +[
        +  "class_name"
        +]
    • ChangedGetAdtTypes1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • AddedGetATCFindings
    • AddedGetATCRunStatus
    • ChangedGetBehaviorDefinition1 field changed
      • changedInput schema / properties / behavior_definition_name / description
        Previous value: -"BehaviorDefinition name (e.g., Z_MY_BEHAVIORDEFINITION)."New value: +"BehaviorDefinition name."
    • ChangedGetBehaviorImplementation1 field changed
      • changedInput schema / properties / behavior_implementation_name / description
        Previous value: -"BehaviorImplementation name (e.g., Z_MY_BEHAVIORIMPLEMENTATION)."New value: +"BehaviorImplementation name."
    • RemovedGetCdsUnitTest
    • RemovedGetCdsUnitTestResult
    • RemovedGetCdsUnitTestStatus
    • ChangedGetClass1 field changed
      • changedInput schema / properties / class_name / description
        Previous value: -"Class name (e.g., ZCL_MY_CLASS)."New value: +"Class name."
    • ChangedGetDataElement1 field changed
      • changedInput schema / properties / data_element_name / description
        Previous value: -"Data element name (e.g., Z_MY_DATA_ELEMENT)."New value: +"Data element name."
    • ChangedGetDdl1 field changed
      • changedInput schema / properties / ddl_name / description
        Previous value: -"DDL source name (e.g., Z_MY_VIEW)."New value: +"DDL source name."
    • ChangedGetDomain1 field changed
      • changedInput schema / properties / domain_name / description
        Previous value: -"Domain name (e.g., Z_MY_DOMAIN)."New value: +"Domain name."
    • ChangedGetFunctionGroup1 field changed
      • changedInput schema / properties / function_group_name / description
        Previous value: -"FunctionGroup name (e.g., Z_MY_FUNCTIONGROUP)."New value: +"FunctionGroup name."
    • ChangedGetFunctionModule2 fields changed
      • changedInput schema / properties / function_group_name / description
        Previous value: -"FunctionGroup name containing the function module (e.g., Z_MY_FUNCTIONGROUP)."New value: +"FunctionGroup name containing the function module."
      • changedInput schema / properties / function_module_name / description
        Previous value: -"FunctionModule name (e.g., Z_MY_FUNCTIONMODULE)."New value: +"FunctionModule name."
    • ChangedGetInactiveObjects1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • ChangedGetInterface1 field changed
      • changedInput schema / properties / interface_name / description
        Previous value: -"Interface name (e.g., Z_MY_INTERFACE)."New value: +"Interface name."
    • ChangedGetLocalDefinitions1 field changed
      • changedInput schema / properties / class_name / description
        Previous value: -"Parent class name (e.g., ZCL_MY_CLASS)."New value: +"Parent class name."
    • ChangedGetLocalMacros1 field changed
      • changedInput schema / properties / class_name / description
        Previous value: -"Parent class name (e.g., ZCL_MY_CLASS)."New value: +"Parent class name."
    • ChangedGetLocalTestClass1 field changed
      • changedInput schema / properties / class_name / description
        Previous value: -"Parent class name (e.g., ZCL_MY_CLASS)."New value: +"Parent class name."
    • ChangedGetLocalTypes1 field changed
      • changedInput schema / properties / class_name / description
        Previous value: -"Parent class name (e.g., ZCL_MY_CLASS)."New value: +"Parent class name."
    • ChangedGetMessageClass1 field changed
      • changedInput schema / properties / message_class_name / description
        Previous value: -"Message class name (e.g., ZMY_MSGS)."New value: +"Message class name."
    • ChangedGetMessageClassMessage1 field changed
      • changedInput schema / properties / message_class_name / description
        Previous value: -"Parent message class name (e.g., ZMY_MSGS)."New value: +"Parent message class name."
    • ChangedGetMetadataExtension1 field changed
      • changedInput schema / properties / metadata_extension_name / description
        Previous value: -"MetadataExtension name (e.g., Z_MY_METADATAEXTENSION)."New value: +"MetadataExtension name."
    • ChangedGetNodeStructureLow2 fields changed
      • changedInput schema / properties / node_id / default
        Previous value: -"0000"New value: +"000000"
      • changedInput schema / properties / node_id / description
        Previous value: -"Optional node ID (default: \"0000\" for root). Use to fetch child nodes."New value: +"Optional node ID (default: \"000000\", the root). Use to fetch child nodes. \"0000\" is not the root: the server answers it with an empty body."
    • ChangedGetObjectInfo1 field changed
      • changedInput schema / properties / maxDepth / description
        Previous value: -"[read-only] Maximum tree depth (default depends on type)"New value: +"[read-only] Maximum tree depth (default depends on type). Every object's own type folders and their contents are always shown (one tier); a higher value only descends further for PACKAGES, expanding nested subpackages that many tiers deep — no captured node-structure document shows a non-package object usefully recursable beyond its own type folders, so other object types are capped at one tier regardless of a higher value here."
    • ChangedGetObjectsByType1 field changed
      • changedInput schema / properties / format / description
        Previous value: -"[read-only] Output format: 'raw' or 'parsed'"New value: +"[read-only] Output format: 'parsed' (default). 'raw' is accepted for backward compatibility but answers the same parsed text — see the note on `nodeLevel` below."
    • ChangedGetObjectStructure1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • ChangedGetObjectStructureLow2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / object_name / description
        Previous value: -"Object name (e.g., \"ZMY_CLASS\", \"ZMY_PROGRAM\")"New value: +"Object name"
    • ChangedGetObjectVersions1 field changed
      • changedInput schema / properties / object_name / description
        Previous value: -"Object name (e.g., ZCL_MY_CLASS, ZIF_MY_INTERFACE, Z_MY_TABLE)."New value: +"Object name."
    • ChangedGetPackage2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name (e.g., Z_MY_PACKAGE)."New value: +"Package name."
    • ChangedGetPackageContents1 field changed
      • changedInput schema / properties / package_name / description
        Previous value: -"Name of the ABAP package (e.g., \"ZMY_PACKAGE\")"New value: +"Name of the ABAP package"
    • ChangedGetPackageTree1 field changed
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name (e.g., \"ZMY_PACKAGE\")"New value: +"Package name"
    • ChangedGetServiceBinding1 field changed
      • changedInput schema / properties / service_binding_name / description
        Previous value: -"Service binding name (for example: ZUI_MY_BINDING). Case-insensitive."New value: +"Service binding name. Case-insensitive."
    • AddedGetServiceBindingPreviewUrl
    • ChangedGetServiceDefinition1 field changed
      • changedInput schema / properties / service_definition_name / description
        Previous value: -"ServiceDefinition name (e.g., Z_MY_SERVICEDEFINITION)."New value: +"ServiceDefinition name."
    • ChangedGetSqlQuery1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • ChangedGetStructure1 field changed
      • changedInput schema / properties / structure_name / description
        Previous value: -"Structure name (e.g., Z_MY_STRUCTURE)."New value: +"Structure name."
    • ChangedGetStructuresList1 field changed
      • changedInput schema / properties / structure_name / description
        Previous value: -"Structure name (e.g., Z_MY_STRUCTURE)."New value: +"Structure name."
    • ChangedGetTable1 field changed
      • changedInput schema / properties / table_name / description
        Previous value: -"Table name (e.g., Z_MY_TABLE)."New value: +"Table name."
    • ChangedGetTableContents1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • ChangedGetTransport1 field changed
      • changedInput schema / properties / transport_number / description
        Previous value: -"Transport request number (e.g., E19K905635, DEVK905123)"New value: +"Transport request number, not a task"
    • RemovedGetUnitTest
    • ChangedGetUnitTestResult4 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / format
        Removed value: -{
        -  "description": "Result format: abapunit or junit.",
        -  "enum": [
        -    "abapunit",
        -    "junit"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / properties / run_id / description
        Previous value: -"Run identifier returned by unit test run."New value: +"Run id a unit test run answered."
      • removedInput schema / properties / with_navigation_uris
        Removed value: -{
        -  "default": false,
        -  "description": "Include navigation URIs in result if supported.",
        -  "type": "boolean"
        -}
    • RemovedGetUnitTestStatus
    • ChangedGetVirtualFoldersLow2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / object_search_pattern / description
        Previous value: -"Object search pattern (e.g., \"*\", \"Z*\", \"ZCL_*\"). Default: \"*\""New value: +"Object search pattern: \"*\" matches any name, and a trailing \"*\" matches a prefix. Default: \"*\""
    • ChangedGetWhereUsed1 field changed
      • changedInput schema / properties / object_type / description
        Previous value: -"Type of the ABAP object. Case-insensitive. Accepts either a human alias or an ADT type code. Supported values: 'class' / 'clas/oc', 'interface' / 'intf/if', 'program' / 'prog/p', 'include', 'function' / 'functiongroup' / 'fugr' (function group), 'functionmodule' / 'function_module' / 'fugr/ff' (function module — see object_name format), 'package' / 'devc/k', 'table' / 'tabl/dt', 'structure' / 'stru/dt', 'domain' / 'doma/dd', 'dataelement' / 'dtel', 'view' / 'ddls/df' (CDS DDL source only — classic DDIC views are not supported). Any other value throws 'Unsupported object type'."New value: +"Type of the ABAP object. Case-insensitive. Accepts either a human alias or an ADT type code. Supported values: 'class' / 'clas/oc', 'interface' / 'intf/if', 'program' / 'prog/p', 'include', 'function' / 'functiongroup' / 'fugr' (function group), 'functionmodule' / 'function_module' / 'fugr/ff' (function module — see object_name format), 'package' / 'devc/k', 'table' / 'tabl/dt', 'structure' / 'stru/dt', 'domain' / 'doma/dd', 'dataelement' / 'dtel', 'view' / 'ddls/df' (CDS DDL source)."
    • ChangedListFunctionGroupIncludes1 field changed
      • changedInput schema / properties / function_group_name / description
        Previous value: -"Function group name (e.g., Z_MY_FG)."New value: +"Function group name."
    • ChangedListFunctionModules1 field changed
      • changedInput schema / properties / function_group_name / description
        Previous value: -"Function group name (e.g., Z_MY_FG)."New value: +"Function group name."
    • ChangedListServiceBindingTypes1 field changed
      • addedInput schema / properties / response_format / description
        Added value: +"Shape of the answer: the document as the server sent it, the same parsed, or a flat list of the type names."
    • ChangedListTransports3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / modifiable_only / description
        Previous value: -"Only return modifiable (not yet released) transports. Default: true."New value: +"Only return modifiable (not yet released) transports; applied client-side. Default: true."
      • changedInput schema / properties / user / description
        Previous value: -"SAP user name. If not provided, returns transports for the current user."New value: +"SAP user name to filter to; applied client-side. If not provided, defaults to the current session user, so an unfiltered call already answers only that user's transports."
    • ChangedReadFunctionInclude2 fields changed
      • changedInput schema / properties / function_group_name / description
        Previous value: -"Function group name containing the include (e.g., Z_MY_FG)."New value: +"Function group name containing the include."
      • changedInput schema / properties / include_name / description
        Previous value: -"Include name (e.g., LZ_MY_FGTOP, LZ_MY_FGU01)."New value: +"Include name."
    • AddedReadTransportActionLog
    • AddedReadTransportObjects
    • AddedRemoveTransportObject
    • AddedRunATC
    • AddedRunCdsUnitTest
    • AddedRunFunctionGroupUnitTest
    • AddedRunFunctionModuleUnitTest
    • ChangedRuntimeGetDumpById2 fields changed
      • changedInput schema / properties / dump_id / description
        Previous value: -"Full runtime dump ID (e.g. from RuntimeListFeeds)."New value: +"The dump's id, or its URI as a dumps feed entry carries it."
      • changedInput schema / properties / response_mode / description
        Previous value: -"Controls what is returned: \"payload\" — full parsed dump data, \"summary\" — compact key facts only (title, exception, program, line, user, date…), \"both\" — summary + full payload."New value: +"What is returned: \"payload\" — the parsed dump, \"summary\" — runtime error, exception, terminated program, time, user and termination position, \"both\" — summary and payload."
    • ChangedRuntimeListFeeds8 fields changed
      • addedInput schema / properties / component
        Added value: +{
        +  "description": "Dumps whose application component contains this text, in any case.",
        +  "type": "string"
        +}
      • addedInput schema / properties / exception
        Added value: +{
        +  "description": "Dumps whose exception class contains this text, in any case.",
        +  "type": "string"
        +}
      • changedInput schema / properties / max_results / description
        Previous value: -"Maximum number of entries to return."New value: +"Most entries to return, up to 1000; SAP answers at most 100 per request and the pages are read in turn. An answer holds whole seconds, so it may hold a few entries fewer, or a crowded second more, than asked. Default: 50."
      • addedInput schema / properties / object_name
        Added value: +{
        +  "description": "Dumps whose terminated object name contains this text, in any case.",
        +  "type": "string"
        +}
      • addedInput schema / properties / package
        Added value: +{
        +  "description": "Dumps whose object package contains this text, in any case.",
        +  "type": "string"
        +}
      • addedInput schema / properties / runtime_error
        Added value: +{
        +  "description": "Dumps whose runtime error contains this text, in any case.",
        +  "type": "string"
        +}
      • changedInput schema / properties / to / description
        Previous value: -"End of time range in YYYYMMDDHHMMSS format."New value: +"End of time range in YYYYMMDDHHMMSS format, inclusive; pass a previous next_to here to read on."
      • changedInput schema / properties / user / description
        Previous value: -"Filter feed entries by SAP username."New value: +"Entries of this SAP user (exact match)."
    • ChangedRuntimeRunClass4 fields changed
      • changedInput schema / properties / max_trace_attempts / description
        Previous value: -"Max polling attempts to resolve traceId after execution (default 5). Only used when profile=true."New value: +"Max attempts to poll the profiler feed for the trace this run produced (default 5). Only used when profile=true."
      • changedInput schema / properties / profile / description
        Previous value: -"When true, run with the profiler and resolve the resulting traceId. Default false."New value: +"When true, run with the profiler and search the profiler feed for the resulting traceId. Default false."
      • changedInput schema / properties / trace_lookup_uris / description
        Previous value: -"Additional URIs to consult when resolving the trace (advanced, profile=true)."New value: +"Accepted for backward compatibility; no longer affects trace lookup. adt-clients 19 lists the profiler feed as one endpoint, optionally filtered by user — there is nowhere to put a URI."
      • changedInput schema / properties / trace_retry_delay_ms / description
        Previous value: -"Delay in ms between trace polling attempts (default 2000). Only used when profile=true."New value: +"Delay in ms between profiler-feed polling attempts (default 2000). Only used when profile=true."
    • ChangedRuntimeRunClassWithProfiling3 fields changed
      • changedInput schema / properties / max_trace_attempts / description
        Previous value: -"Max polling attempts to resolve traceId after execution (default 5). Increase for slow systems (e.g. SAP trial cloud)."New value: +"Max attempts to poll the profiler feed for the trace this run produced (default 5). Increase for slow systems (e.g. SAP trial cloud)."
      • changedInput schema / properties / trace_lookup_uris / description
        Previous value: -"Additional URIs to consult when resolving the trace (advanced)."New value: +"Accepted for backward compatibility; no longer affects trace lookup. adt-clients 19 lists the profiler feed as one endpoint, optionally filtered by user — there is nowhere to put a URI."
      • changedInput schema / properties / trace_retry_delay_ms / description
        Previous value: -"Delay in ms between trace polling attempts (default 2000)."New value: +"Delay in ms between profiler-feed polling attempts (default 2000)."
    • ChangedRunUnitTest9 fields changed
      • addedInput schema / properties / class_name
        Added value: +{
        +  "description": "Class whose tests run.",
        +  "type": "string"
        +}
      • removedInput schema / properties / context
        Removed value: -{
        -  "description": "Optional context string shown in SAP tools.",
        -  "type": "string"
        -}
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / duration
        Removed value: -{
        -  "properties": {
        -    "long": {
        -      "type": "boolean"
        -    },
        -    "medium": {
        -      "type": "boolean"
        -    },
        -    "short": {
        -      "type": "boolean"
        -    }
        -  },
        -  "type": "object"
        -}
      • removedInput schema / properties / risk_level
        Removed value: -{
        -  "properties": {
        -    "critical": {
        -      "type": "boolean"
        -    },
        -    "dangerous": {
        -      "type": "boolean"
        -    },
        -    "harmless": {
        -      "type": "boolean"
        -    }
        -  },
        -  "type": "object"
        -}
      • removedInput schema / properties / scope
        Removed value: -{
        -  "properties": {
        -    "add_foreign_tests_as_preview": {
        -      "type": "boolean"
        -    },
        -    "foreign_tests": {
        -      "type": "boolean"
        -    },
        -    "own_tests": {
        -      "type": "boolean"
        -    }
        -  },
        -  "type": "object"
        -}
      • removedInput schema / properties / tests
        Removed value: -{
        -  "description": "List of container/test class pairs to execute.",
        -  "items": {
        -    "properties": {
        -      "container_class": {
        -        "description": "Class that owns the test include (e.g., ZCL_MAIN_CLASS).",
        -        "type": "string"
        -      },
        -      "test_class": {
        -        "description": "Test class name inside the include (e.g., LTCL_MAIN_CLASS).",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "container_class",
        -      "test_class"
        -    ],
        -    "type": "object"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / title
        Removed value: -{
        -  "description": "Optional title for the ABAP Unit run.",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "tests"
        -]New value: +[
        +  "class_name"
        +]
    • ChangedSearchObject1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • ChangedUpdateBehaviorDefinition2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable packages."New value: +"Transport request number, not a task. Required for transportable packages."
    • ChangedUpdateBehaviorImplementation4 fields changed
      • changedInput schema / properties / behavior_definition / description
        Previous value: -"Behavior Definition name (e.g., ZI_MY_ENTITY). Must match the behavior definition used when creating the class."New value: +"Referenced Behavior Definition name. Accepted for compatibility; not forwarded to the write — the shipped update() no longer reads it (it writes the implementations include only, never the FOR BEHAVIOR OF main source)."
      • changedInput schema / properties / class_name / description
        Previous value: -"Behavior Implementation class name (e.g., ZBP_MY_ENTITY). Must exist in the system."New value: +"Behavior Implementation class name. Must exist in the system."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Optional if object is local or already in transport."New value: +"Transport request number, not a task. Optional if object is local or already in transport."
    • ChangedUpdateCdsUnitTest4 fields changed
      • changedInput schema / properties / class_name / description
        Previous value: -"Global test class name (e.g., ZCL_CDS_TEST)."New value: +"Test class of the CDS view. Must already exist."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / test_class_source / description
        Previous value: -"Updated local test class ABAP source code."New value: +"ABAP source of the local test classes: definitions and implementations, FOR TESTING. Replaces what the include holds."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (required for transportable packages)."New value: +"Transport request, not a task. Required for a transportable object."
    • ChangedUpdateClass3 fields changed
      • changedInput schema / properties / class_name / description
        Previous value: -"Class name (e.g., ZCL_TEST_CLASS_001)."New value: +"Class name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable packages."New value: +"Transport request number, not a task. Required for transportable packages."
    • ChangedUpdateDataElement4 fields changed
      • changedInput schema / properties / data_element_name / description
        Previous value: -"Data element name to update (e.g., ZZ_TEST_DTEL_01)"New value: +"Data element name to update"
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name (e.g., ZOK_LOCAL, $TMP for local objects)"New value: +"Package name"
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable packages."New value: +"Transport request number, not a task. Required for transportable packages."
    • ChangedUpdateDdl3 fields changed
      • changedInput schema / properties / ddl_name / description
        Previous value: -"DDL source name (e.g., ZOK_R_TEST_0002)."New value: +"DDL source name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable packages."New value: +"Transport request number, not a task. Required for transportable packages."
    • ChangedUpdateDomain4 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / domain_name / description
        Previous value: -"Domain name to update (e.g., ZZ_TEST_0001)"New value: +"Domain name to update"
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name (e.g., ZOK_LOCAL, $TMP for local objects)"New value: +"Package name"
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable packages."New value: +"Transport request number, not a task. Required for transportable packages."
    • ChangedUpdateFunctionGroup3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / function_group_name / description
        Previous value: -"Function group name (e.g., ZTEST_FG_001). Must exist in the system."New value: +"Function group name. Must exist in the system."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Optional if object is local or already in transport."New value: +"Transport request number, not a task. Optional if object is local or already in transport."
    • AddedUpdateFunctionGroupUnitTest
    • ChangedUpdateFunctionInclude4 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / function_group_name / description
        Previous value: -"Function group name containing the include (e.g., ZOK_FG_MCP01)."New value: +"Function group name containing the include."
      • changedInput schema / properties / include_name / description
        Previous value: -"Include name (e.g., LZOK_FG_MCP01F01). Include must already exist."New value: +"Include name. Include must already exist."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable includes."New value: +"Transport request number, not a task. Required for transportable includes."
    • ChangedUpdateFunctionModule5 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / function_group_name / description
        Previous value: -"Function group name containing the function module (e.g., ZOK_FG_MCP01)."New value: +"Function group name containing the function module."
      • changedInput schema / properties / function_module_name / description
        Previous value: -"Function module name (e.g., Z_TEST_FM_MCP01). Function module must already exist."New value: +"Function module name. Function module must already exist."
      • changedInput schema / properties / source_code / description
        Previous value: -"Complete ABAP function module source code. Must include FUNCTION statement with parameters and ENDFUNCTION. Example:\n\nFUNCTION Z_TEST_FM\n  IMPORTING\n    VALUE(iv_input) TYPE string\n  EXPORTING\n    VALUE(ev_output) TYPE string.\n  \n  ev_output = iv_input.\nENDFUNCTION."New value: +"Complete ABAP function module source code, from FUNCTION to ENDFUNCTION."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Required for transportable function modules."New value: +"Transport request number, not a task. Required for transportable function modules."
    • ChangedUpdateInterface3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / interface_name / description
        Previous value: -"Interface name (e.g., ZIF_MY_INTERFACE). Must exist in the system."New value: +"Interface name. Must exist in the system."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Optional if object is local or already in transport."New value: +"Transport request number, not a task. Optional if object is local or already in transport."
    • ChangedUpdateLocalDefinitions4 fields changed
      • changedInput schema / properties / activate_on_update / description
        Previous value: -"Activate parent class after updating. Default: false"New value: +"Activate parent class after updating local definitions. Default: false"
      • changedInput schema / properties / class_name / description
        Previous value: -"Parent class name (e.g., ZCL_MY_CLASS)."New value: +"Parent class name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number."New value: +"Transport request number (required for transportable objects), not a task."
    • ChangedUpdateLocalMacros4 fields changed
      • changedInput schema / properties / activate_on_update / description
        Previous value: -"Activate parent class after updating. Default: false"New value: +"Activate parent class after updating local macros. Default: false"
      • changedInput schema / properties / class_name / description
        Previous value: -"Parent class name (e.g., ZCL_MY_CLASS)."New value: +"Parent class name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number."New value: +"Transport request number (required for transportable objects), not a task."
    • ChangedUpdateLocalTestClass3 fields changed
      • changedInput schema / properties / class_name / description
        Previous value: -"Parent class name (e.g., ZCL_MY_CLASS)."New value: +"Parent class name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (required for transportable objects)."New value: +"Transport request number (required for transportable objects), not a task."
    • ChangedUpdateLocalTypes4 fields changed
      • changedInput schema / properties / activate_on_update / description
        Previous value: -"Activate parent class after updating. Default: false"New value: +"Activate parent class after updating local types. Default: false"
      • changedInput schema / properties / class_name / description
        Previous value: -"Parent class name (e.g., ZCL_MY_CLASS)."New value: +"Parent class name."
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number."New value: +"Transport request number (required for transportable objects), not a task."
    • ChangedUpdateMessageClass3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / message_class_name / description
        Previous value: -"Message class name (e.g., ZMY_MSGS)."New value: +"Message class name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"(optional) Transport request number. Required for transportable objects."New value: +"(optional) Transport request number, not a task. Required for transportable objects."
    • ChangedUpdateMessageClassMessage2 fields changed
      • changedInput schema / properties / message_class_name / description
        Previous value: -"Parent message class name (e.g., ZMY_MSGS)."New value: +"Parent message class name."
      • changedInput schema / properties / transport_request / description
        Previous value: -"(optional) Transport request number. Required for transportable objects."New value: +"(optional) Transport request number, not a task. Required for transportable objects."
    • ChangedUpdateMetadataExtension2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (required for transportable packages)."New value: +"Transport request number (required for transportable packages), not a task."
    • ChangedUpdateServiceBinding4 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / response_format / description
        Added value: +"Accepted for backward compatibility; no longer affects the answer, which is always the structured write result."
      • changedInput schema / properties / service_name / description
        Previous value: -"Published service name."New value: +"Published service name, from the binding. Required: an OData V2 publication job resolves the service by name and version and refuses without them. Ignored for V4, where the request names its target on its own."
      • changedInput schema / properties / service_version / description
        Previous value: -"Published service version. Optional."New value: +"Published service version. Default 0001. Used by an OData V2 publication job together with the service name; ignored for V4."
    • ChangedUpdateServiceDefinition3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / service_definition_name / description
        Previous value: -"Service definition name (e.g., ZSD_MY_SERVICE). Must exist in the system."New value: +"Service definition name. Must exist in the system."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Optional if object is local or already in transport."New value: +"Transport request number, not a task. Optional if object is local or already in transport."
    • ChangedUpdateStructure3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / structure_name / description
        Previous value: -"Structure name (e.g., ZZ_S_TEST_001). Structure must already exist."New value: +"Structure name. Structure must already exist."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Optional if object is local or already in transport."New value: +"Transport request number, not a task. Optional if object is local or already in transport."
    • ChangedUpdateTable3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / table_name / description
        Previous value: -"Table name (e.g., ZZ_TEST_TABLE_001). Table must already exist."New value: +"Table name. Table must already exist."
      • changedInput schema / properties / transport_request / description
        Previous value: -"Transport request number (e.g., E19K905635). Optional if object is local or already in transport."New value: +"Transport request number, not a task. Optional if object is local or already in transport."
    • ChangedUpdateUnitTest6 fields changed
      • addedInput schema / properties / class_name
        Added value: +{
        +  "description": "Class that holds the tests. Must already exist.",
        +  "type": "string"
        +}
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / run_id
        Removed value: -{
        -  "description": "Run identifier returned by CreateUnitTest/RunUnitTest.",
        -  "type": "string"
        -}
      • addedInput schema / properties / test_class_source
        Added value: +{
        +  "description": "ABAP source of the local test classes: definitions and implementations, FOR TESTING. Replaces what the include holds.",
        +  "type": "string"
        +}
      • addedInput schema / properties / transport_request
        Added value: +{
        +  "description": "Transport request, not a task. Required for a transportable object.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "run_id"
        -]New value: +[
        +  "class_name",
        +  "test_class_source"
        +]
    • ChangedValidateServiceBinding3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "terse",
        +  "description": "How much of the answer to return: \"terse\" (default, the fields you need to act), \"full\" (the whole parse), \"raw\" (the document as ADT sent it).",
        +  "enum": [
        +    "terse",
        +    "full",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / service_binding_version / description
        Previous value: -"Service binding version (for example: 1.0)."New value: +"Service binding version (for example: 1.0). Accepted for backward compatibility; the transport check this now runs does not read it."
      • changedInput schema / properties / service_definition_name / description
        Previous value: -"Service definition linked to binding."New value: +"Service definition linked to binding. Accepted for backward compatibility; the transport check this now runs does not read it."
  4. 3 tool updatesv9.0.0
    • AddedGetEnhancementSpot
    • AddedGetInclude
    • AddedGetIncludesList
  5. 18 tool updatesv8.12.1
    • RemovedGetDataElementVersionDiff
    • RemovedGetDataElementVersions
    • RemovedGetDataElementVersionSource
    • RemovedGetDomainVersionDiff
    • RemovedGetDomainVersions
    • RemovedGetDomainVersionSource
    • RemovedGetEnhancementSpot
    • RemovedGetFunctionGroupVersionDiff
    • RemovedGetFunctionGroupVersions
    • RemovedGetFunctionGroupVersionSource
    • RemovedGetInclude
    • RemovedGetIncludesList
    • ChangedGetObjectVersionDiff1 field changed
      • changedInput schema / properties / object_type / enum
        Previous value: -[
        -  "class",
        -  "program",
        -  "interface",
        -  "function_group",
        -  "function_module",
        -  "table",
        -  "structure",
        -  "ddl",
        -  "domain",
        -  "data_element",
        -  "package",
        -  "behavior_definition",
        -  "metadata_extension"
        -]New value: +[
        +  "class",
        +  "program",
        +  "interface",
        +  "function_module",
        +  "table",
        +  "structure",
        +  "ddl",
        +  "behavior_definition",
        +  "metadata_extension"
        +]
    • ChangedGetObjectVersions1 field changed
      • changedInput schema / properties / object_type / enum
        Previous value: -[
        -  "class",
        -  "program",
        -  "interface",
        -  "function_group",
        -  "function_module",
        -  "table",
        -  "structure",
        -  "ddl",
        -  "domain",
        -  "data_element",
        -  "package",
        -  "behavior_definition",
        -  "metadata_extension"
        -]New value: +[
        +  "class",
        +  "program",
        +  "interface",
        +  "function_module",
        +  "table",
        +  "structure",
        +  "ddl",
        +  "behavior_definition",
        +  "metadata_extension"
        +]
    • ChangedGetObjectVersionSource1 field changed
      • changedInput schema / properties / object_type / enum
        Previous value: -[
        -  "class",
        -  "program",
        -  "interface",
        -  "function_group",
        -  "function_module",
        -  "table",
        -  "structure",
        -  "ddl",
        -  "domain",
        -  "data_element",
        -  "package",
        -  "behavior_definition",
        -  "metadata_extension"
        -]New value: +[
        +  "class",
        +  "program",
        +  "interface",
        +  "function_module",
        +  "table",
        +  "structure",
        +  "ddl",
        +  "behavior_definition",
        +  "metadata_extension"
        +]
    • RemovedGetPackageVersionDiff
    • RemovedGetPackageVersions
    • RemovedGetPackageVersionSource
  6. 8 tool updatesv8.6.1
    • AddedCreateMessageClass
    • AddedCreateMessageClassMessage
    • AddedDeleteMessageClass
    • AddedDeleteMessageClassMessage
    • AddedGetMessageClass
    • AddedGetMessageClassMessage
    • AddedUpdateMessageClass
    • AddedUpdateMessageClassMessage
  7. 37 tool updatesv8.5.0
    • AddedGetBehaviorDefinitionVersionDiff
    • AddedGetBehaviorDefinitionVersions
    • AddedGetBehaviorDefinitionVersionSource
    • AddedGetClassVersionDiff
    • AddedGetClassVersions
    • AddedGetClassVersionSource
    • AddedGetDataElementVersionDiff
    • AddedGetDataElementVersions
    • AddedGetDataElementVersionSource
    • AddedGetDdlVersionDiff
    • AddedGetDdlVersions
    • AddedGetDdlVersionSource
    • AddedGetDomainVersionDiff
    • AddedGetDomainVersions
    • AddedGetDomainVersionSource
    • AddedGetFunctionGroupVersionDiff
    • AddedGetFunctionGroupVersions
    • AddedGetFunctionGroupVersionSource
    • AddedGetFunctionModuleVersionDiff
    • AddedGetFunctionModuleVersions
    • AddedGetFunctionModuleVersionSource
    • AddedGetInterfaceVersionDiff
    • AddedGetInterfaceVersions
    • AddedGetInterfaceVersionSource
    • AddedGetMetadataExtensionVersionDiff
    • AddedGetMetadataExtensionVersions
    • AddedGetMetadataExtensionVersionSource
    • AddedGetObjectVersionDiff
    • AddedGetPackageVersionDiff
    • AddedGetPackageVersions
    • AddedGetPackageVersionSource
    • AddedGetStructureVersionDiff
    • AddedGetStructureVersions
    • AddedGetStructureVersionSource
    • AddedGetTableVersionDiff
    • AddedGetTableVersions
    • AddedGetTableVersionSource
  8. 2 tool updatesv8.2.0
    • AddedGetObjectVersions
    • AddedGetObjectVersionSource
  9. 14 tool updatesv8.1.0
    • ChangedCreateBehaviorDefinition1 field changed
      • addedInput schema / properties / master_language
        Added value: +{
        +  "description": "Optional master/original language for the created object (e.g. \"EN\", \"DE\", \"ZH\"). Defaults to the session language (SAP_LANGUAGE) or EN.",
        +  "type": "string"
        +}
    • ChangedCreateClass1 field changed
      • addedInput schema / properties / master_language
        Added value: +{
        +  "description": "Optional master/original language for the created object (e.g. \"EN\", \"DE\", \"ZH\"). Defaults to the session language (SAP_LANGUAGE) or EN.",
        +  "type": "string"
        +}
    • ChangedCreateDataElement1 field changed
      • addedInput schema / properties / master_language
        Added value: +{
        +  "description": "Optional master/original language for the created object (e.g. \"EN\", \"DE\", \"ZH\"). Defaults to the session language (SAP_LANGUAGE) or EN.",
        +  "type": "string"
        +}
    • ChangedCreateDdl1 field changed
      • addedInput schema / properties / master_language
        Added value: +{
        +  "description": "Optional master/original language for the created object (e.g. \"EN\", \"DE\", \"ZH\"). Defaults to the session language (SAP_LANGUAGE) or EN.",
        +  "type": "string"
        +}
    • ChangedCreateDomain1 field changed
      • addedInput schema / properties / master_language
        Added value: +{
        +  "description": "Optional master/original language for the created object (e.g. \"EN\", \"DE\", \"ZH\"). Defaults to the session language (SAP_LANGUAGE) or EN.",
        +  "type": "string"
        +}
    • ChangedCreateFunctionGroup1 field changed
      • addedInput schema / properties / master_language
        Added value: +{
        +  "description": "Optional master/original language for the created object (e.g. \"EN\", \"DE\", \"ZH\"). Defaults to the session language (SAP_LANGUAGE) or EN.",
        +  "type": "string"
        +}
    • ChangedCreateInterface1 field changed
      • addedInput schema / properties / master_language
        Added value: +{
        +  "description": "Optional master/original language for the created object (e.g. \"EN\", \"DE\", \"ZH\"). Defaults to the session language (SAP_LANGUAGE) or EN.",
        +  "type": "string"
        +}
    • ChangedCreateMetadataExtension1 field changed
      • addedInput schema / properties / master_language
        Added value: +{
        +  "description": "Optional master/original language for the created object (e.g. \"EN\", \"DE\", \"ZH\"). Defaults to the session language (SAP_LANGUAGE) or EN.",
        +  "type": "string"
        +}
    • ChangedCreatePackage1 field changed
      • addedInput schema / properties / master_language
        Added value: +{
        +  "description": "Optional master/original language for the created object (e.g. \"EN\", \"DE\", \"ZH\"). Defaults to the session language (SAP_LANGUAGE) or EN.",
        +  "type": "string"
        +}
    • ChangedCreateServiceBinding1 field changed
      • addedInput schema / properties / master_language
        Added value: +{
        +  "description": "Optional master/original language for the created object (e.g. \"EN\", \"DE\", \"ZH\"). Defaults to the session language (SAP_LANGUAGE) or EN.",
        +  "type": "string"
        +}
    • ChangedCreateServiceDefinition1 field changed
      • addedInput schema / properties / master_language
        Added value: +{
        +  "description": "Optional master/original language for the created object (e.g. \"EN\", \"DE\", \"ZH\"). Defaults to the session language (SAP_LANGUAGE) or EN.",
        +  "type": "string"
        +}
    • ChangedCreateStructure1 field changed
      • addedInput schema / properties / master_language
        Added value: +{
        +  "description": "Optional master/original language for the created object (e.g. \"EN\", \"DE\", \"ZH\"). Defaults to the session language (SAP_LANGUAGE) or EN.",
        +  "type": "string"
        +}
    • ChangedCreateTable1 field changed
      • addedInput schema / properties / master_language
        Added value: +{
        +  "description": "Optional master/original language for the created object (e.g. \"EN\", \"DE\", \"ZH\"). Defaults to the session language (SAP_LANGUAGE) or EN.",
        +  "type": "string"
        +}
    • ChangedGetWhereUsed2 fields changed
      • addedInput schema / properties / disable_types
        Added value: +{
        +  "description": "Remove these ADT object types from the default scope, keeping the rest (e.g. ['CLAS/OC'] to drop class usages). Applied on top of the default scope or of enable_only_types/enable_all_types.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / enable_only_types
        Added value: +{
        +  "description": "Restrict the search to ONLY these ADT object types (e.g. ['TABL/DS','TABL/DT'] for structures, ['DDLS/DF'] for CDS sources). SAP applies the selection server-side, so unwanted types (e.g. hundreds of CLAS/OC) are never searched nor returned — use this instead of enable_all_types to avoid huge result sets. Values must be object-type codes from THIS object's where-used scope (the searchable categories, e.g. 'CLAS/OC','INTF/OI','FUGR/FF','DDLS/DF', not result-row codes like 'FUGR/F'). If any value is not searchable for the object the call returns an error listing the supported types — it never falls back to the unfiltered default set. Takes precedence over enable_all_types.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  10. 12 tool updatesv8.0.0
    • AddedActivateDdl
    • RemovedActivateView
    • AddedCheckDdl
    • RemovedCheckView
    • AddedCreateDdl
    • RemovedCreateView
    • AddedDeleteDdl
    • RemovedDeleteView
    • AddedGetDdl
    • RemovedGetView
    • AddedUpdateDdl
    • RemovedUpdateView
  11. 1 tool updatev7.1.1
    • ChangedUpdateFunctionInclude1 field changed
      • addedInput schema / properties / activate
        Added value: +{
        +  "default": false,
        +  "description": "Activate the include after the source update. Default: false. Set true to make the updated source the active version immediately.",
        +  "type": "boolean"
        +}
  12. 7 tool updatesv7.1.0
    • AddedCreateFunctionInclude
    • AddedDeleteFunctionInclude
    • AddedGetStructuresList
    • AddedListFunctionGroupIncludes
    • AddedListFunctionModules
    • AddedReadFunctionInclude
    • AddedUpdateFunctionInclude
  13. 2 tool updatesv7.0.0
    • AddedActivateServiceDefinition
    • AddedCreatePackage

TDQS

B3.2/5.0

Scored across 256 tools

Disambiguation2/5

The per-type tool families (Get/Create/Update/Delete/Check/ActivateClass, -Program, -Table, etc.) are individually clear, but they overlap heavily with generic tools: GetObjectVersions/GetObjectVersionSource/GetObjectVersionDiff duplicate GetClassVersions/GetTableVersions/etc., and ActivateObjects duplicates every Activate* tool. Similarly GetObjectInfo, GetObjectsList, GetObjectsByType, GetPackageTree, GetPackageContents and GetObjectStructure all walk object trees, so an agent must guess which to call.

Naming Consistency4/5

The surface follows a strong Verb+Noun CamelCase convention (GetX, CreateX, UpdateX, DeleteX, CheckX, ActivateX, RunX) repeated consistently across all object types. A few outliers invert the order or deviate (MemorySnapshotList/Get/Delta, AmdpDebugStart, DescribeByList), keeping it from a perfect score.

Tool Count1/5

256 tools is an extreme mismatch for a single server: the per-type CRUD/check/activate/version quadrants multiply the surface far beyond what an agent can reliably select from. Many tools are near-duplicates of generic ones (version source/diff per type vs. the object-generic versions), so the count is inflated rather than earned.

Completeness4/5

Coverage of the ADT domain is extremely broad: CRUD, activation, syntax checks, version history/diff, transports, ATC, ABAP Unit, runtime/profiler, SQL preview and a full debugger surface are all present. Some object types are read-only (enhancements, transactions) and a few check/generic operations are missing per type, but the core lifecycle is covered.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    Not graded
    maintenance
    An MCP server that facilitates seamless interaction with SAP ABAP systems to manage development objects, transport requests, and source code. It provides a comprehensive suite of tools for performing syntax checks, object searches, and code modifications via the ADT API.
    100
    -
  • A
    license
    C
    quality
    D
    maintenance
    An MCP server that enables seamless communication between ABAP systems and MCP clients using the ABAP Development Tools (ADT) API. It provides tools for managing ABAP objects, handling transport requests, and performing code analysis directly through MCP-compatible interfaces.
    100
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    MCP server for SAP ABAP development that enables AI assistants and code editors to interact with SAP systems via ABAP Developer Toolkit (ADT) APIs, supporting read, create, update, and delete of ABAP objects.
    100
    756 npm
    MIT