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

  • Four authentications: basic (HTTP or RFC), SNC (passwordless, RFC), JWT with browser login (service key, ABAP or XSUAA) and JWT you already hold

  • 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 SDK and a C++ toolchain on the machine before npm install, because the RFC module is compiled during the install and silently left out when it cannot be. 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 --mcp trial

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 --transport=stdio --mcp=TRIAL

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

The server supports exactly four authentications; each is a destination stated in a service key, a .env, or both:

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

SAP_AUTH_TYPE=jwt, SAP_GRANT_TYPE=none, SAP_JWT_TOKEN (or the x-sap-jwt-token header)

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: the first stated of the tool's own argument, the x-sap-responsible header, SAP_RESPONSIBLE in the destination's own .env, then in the process environment — else the login: on-premise the destination's SAP_USERNAME, the x-sap-login of an x-sap-url connection, the process SAP_USERNAME; on a cloud system only the system's user. A create that finds none (SNC, a token you hold) is refused naming SAP_RESPONSIBLE; nothing is sent — a message class included, from 17.0.0. The master system comes from x-sap-master-system or SAP_MASTER_SYSTEM (destination .env, then process) — no tool takes it as an argument — else from a cloud system itself; otherwise it is left out and the system applies itself — never refused. Reads are unaffected. The process environment is read once: a change made to it while the server runs is not picked up. See Authentication & Destinations. Coming from 16.x? See the 17.0 migration note — the HTTPS certificate is now verified. From 15.x, the 16.0 note first.

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

Architecture

The project ships as two packages — and a compact variant of each — 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 server — stdio, SSE and streamable HTTP, the launcher and the mcp-abap-adt CLI. Depends on the library.

@mcp-abap-adt/compact

AGPL-3.0-only

The compact standalone server, mcp-abap-adt-compact: one tool per operation, the object type in the arguments. Same launcher and configuration as core.

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

Apache-2.0

The compact tools as libraries, split into the half that changes nothing and the half that writes.

Install @mcp-abap-adt/core (or @mcp-abap-adt/compact) to run a server. Install @mcp-abap-adt/lib to embed the tools in your own application.

1. Standalone MCP Server (Default)

Run as a standalone MCP server with stdio, HTTP, or SSE transport:

mcp-abap-adt                           # stdio (default)
mcp-abap-adt --transport=http          # HTTP mode
mcp-abap-adt --transport=sse           # SSE mode

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,
  NoDedupStrategy, // optional: expose both Read<X> and Get<X>
} from '@mcp-abap-adt/lib/embeddable';

const server = new EmbeddableMcpServer({
  connection,              // Your AbapConnection instance
  logger,                  // Optional logger
  exposition: ['readonly', 'high'],  // Handler groups to expose
  // Default hides Read<X> when Get<X> is exposed (ReadVsGetDedupStrategy).
  // Pass NoDedupStrategy to expose both variants instead.
  // readOnlyDedupStrategy: new NoDedupStrategy(),
});
await server.connect(transport);

See Handlers Management → EmbeddableMcpServer dedup strategies for how readonly tools are deduped against high/low, how to opt out with NoDedupStrategy, 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 (a run waits for its result; GetUnitTestResult for one that outlasts the wait) — CheckClass and the rest of the Check* family

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

  • 👁️ 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: 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

  • 🚀 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

For Administrators

For Developers

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 is compiled during npm install against the SAP NW RFC SDK that SAPNWRFC_HOME names, and npm leaves it out without an error when it cannot be — check 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; requires .env file or --mcp parameter)
mcp-abap-adt

# stdio mode (explicit; default when --transport is omitted)
mcp-abap-adt --transport=stdio

# HTTP mode on custom port (HTTP requires --transport=http)
mcp-abap-adt --transport=http --port=8080

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

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

# Use explicit .env file path
mcp-abap-adt --env-path=/path/to/my.env

# SSE mode (requires .env file or --mcp parameter)
mcp-abap-adt --transport=sse --port=3001

# SSE mode with auth-broker (--mcp parameter)
mcp-abap-adt --transport=sse --mcp=TRIAL

# The compact server takes the same options (npm install -g @mcp-abap-adt/compact)
mcp-abap-adt-compact --env-path=/path/to/my.env

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_USERNAME=your-username
SAP_PASSWORD=your-password

For a JWT you already hold (SAP BTP):

SAP_URL=https://your-btp-system.example
SAP_CLIENT=100
SAP_AUTH_TYPE=jwt
SAP_GRANT_TYPE=none
SAP_JWT_TOKEN=your-jwt-token

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 --env / --env-path .env 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).

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 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: lacks: 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 and mcp-sso
npm install -g @mcp-abap-adt/auth-broker-cli

# Write a .env that states its authentication and grant
mcp-auth generate-env --grant authorization_code   # `mcp-auth --help` lists the other flags

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: chrome, edge, firefox, system (default), headless, none

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

  • --allow-destination-header - Honour the x-mcp-destination header (HTTP/SSE only, off by default)

  • --connection-type=<http|rfc> - SAP connection transport: http (default) or rfc

  • --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

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

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

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

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 packages, two licences. Which one applies depends on which you install.

Package

Licence

@mcp-abap-adt/lib

Apache-2.0

LICENSE, NOTICE

@mcp-abap-adt/core

AGPL-3.0-only

server/LICENSE

Both are published from this repository with one command, in the order the dependency requires:

npm run release:dry        # rehearses both, touches nothing
npm run release:publish    # @mcp-abap-adt/lib, then @mcp-abap-adt/core

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 the server on top of a library 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

Both 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 either, 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

202 tools
ActivateBehaviorDefinitionA

Activate a RAP behavior definition. Use after CreateBehaviorDefinition or UpdateBehaviorDefinition if the object remains inactive.

ParametersJSON Schema
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
session_idNoSession ID from GetSession. If not provided, a new session will be created.
session_stateNoSession state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.

TDQS

A4/5.0
Behavior3/5

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

There are no annotations, so the description carries the full burden. It conveys some behavioral context (activation resolves an object left inactive after create/update), but says nothing about side effects, permission needs, whether activation triggers dependency/compilation failures, or reversibility. Adequate but incomplete for a state-changing 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?

Two short sentences, purpose front-loaded, with the workflow condition second and no wasted words.

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 scope-activation tool with no output schema, the description covers the action and its place in the create/update workflow. The main gap is the absence of any note on activation dependencies or side effects, which matters more given there are no annotations.

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 name, detail, session_id, and session_state. The description adds no extra parameter semantics beyond what the schema provides, 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?

States a specific verb (Activate) and resource (RAP behavior definition), which distinguishes it from the many other Activate* siblings that target different object types. An agent can route to 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 Guidelines4/5

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

Gives explicit context — use it after CreateBehaviorDefinition or UpdateBehaviorDefinition when the object remains inactive — and names both relevant siblings. It does not mention the generic ActivateObjects alternative for batch activation, so it stops just short of full when/when-not guidance.

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

ActivateClassA

Activate an ABAP class. Use after CreateClass or UpdateClass if the object remains inactive.

ParametersJSON Schema
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.
session_idNoSession ID from GetSession. If not provided, a new session will be created.
session_stateNoSession state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.

TDQS

A3.5/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 nothing about side effects, whether activation can fail on syntax errors, idempotency, permissions, or session handling, despite session_id/session_state being part of the call. Only the minimal mutation implication of 'Activate' is conveyed.

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 action and followed by the triggering condition. 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 simple activation tool with fully documented parameters, the description covers the core intent. However, with no annotations and a nested session_state parameter, it omits session requirements and failure behavior that an agent would need to invoke this reliably.

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 class_name, detail, session_id, and session_state. The description adds no parameter guidance beyond that, 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 ('Activate') and resource ('ABAP class'), which cleanly separates it from the many Get*/Create*/Update* siblings. It does not name ActivateObjects, the generic bulk activator, but the resource specificity makes the target 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 when-to-use context: after CreateClass or UpdateClass if the object remains inactive. This names the sibling operations that typically precede it. It stops short of stating when NOT to use it (e.g., vs. ActivateObjects for batch activation).

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

ActivateDataElementA

Activate an ABAP data element. Use after CreateDataElement or UpdateDataElement if the object remains inactive.

ParametersJSON Schema
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
session_idNoSession ID from GetSession. If not provided, a new session will be created.
session_stateNoSession state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.
data_element_nameYesData element name.

TDQS

A3.7/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 implies a state-changing activation but says nothing about side effects, whether it requires a lock, whether it is reversible, whether other inactive objects are pulled in, or what happens on failure — significant gaps for a mutation tool with zero annotation coverage.

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 action stated first and the precondition second. Front-loaded and appropriately sized.

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 adequately covers what the tool does and when, but for a mutation tool with no annotations and no output schema, it omits behavioral detail an agent would want (activation effects, error/prerequisite handling). Minimum viable 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% with four well-described parameters (detail, session_id, session_state, data_element_name), so the schema does the heavy lifting. The description adds no parameter meaning beyond the schema, so baseline 3 is correct.

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 ('Activate an ABAP data element') and clearly distinguishes itself from the many sibling Activate* tools by naming the object type. An agent can route to 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 Guidelines4/5

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

Explicitly specifies when to use it: 'after CreateDataElement or UpdateDataElement if the object remains inactive' — naming the sibling operations that precede it and the condition that triggers it. It lacks explicit when-not-to-use guidance, but the sequencing context is strong.

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

ActivateDdlA

Activate a CDS view. Use after CreateDdl or UpdateDdl if the object remains inactive.

ParametersJSON Schema
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.
session_idNoSession ID from GetSession. If not provided, a new session will be created.
session_stateNoSession state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.

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 disclosure burden. It adds real workflow context (activation is a post-create/update remediation step only needed while the object is inactive), but is silent on permissions, transport/lock implications, idempotency on an already-active object, and failure behavior for a state-changing 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?

Two short sentences, zero filler. Purpose comes first, the usage condition second — correctly front-loaded for a quick routing decision.

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 four-parameter, state-changing tool with no annotations and no output schema, the description covers what and when but not the operational details an agent needs (session handling via session_id/session_state, effect on the active/inactive state, error semantics). Adequate 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%: ddl_name, detail, session_id and session_state are all documented in the schema itself. The description adds no field-level meaning (e.g. that ddl_name is the DDL source rather than a database table), so the schema does the heavy lifting and 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 (Activate) and a specific resource (CDS view / DDL source), which cleanly separates it from the many sibling Activate* tools (ActivateClass, ActivateTable, ActivateStructure, etc.). An agent can identify the target object type 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?

Explicitly conditions use: run it after CreateDdl or UpdateDdl when the object 'remains inactive', which tells the agent when this step is required. It does not, however, mention bulk alternatives such as ActivateObjects or an environment-inactive check via GetInactiveObjects, so the routing is clear but not exhaustive.

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

ActivateDomainB

Activate an ABAP domain. Use after CreateDomain or UpdateDomain if the object remains inactive.

ParametersJSON Schema
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
session_idNoSession ID from GetSession. If not provided, a new session will be created.
domain_nameYesDomain name.
session_stateNoSession state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.

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 mentions the precondition that the object must be inactive, but says nothing about what activation changes, whether it requires permissions or a session, whether it is reversible, or what happens on failure—major gaps for a state-changing 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?

Two tightly written sentences with no filler. The core action is front-loaded and the usage condition follows immediately, making it easy to scan.

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 an activation mutation tool with no annotations and no output schema, the description is too thin. It covers when to invoke it but omits behavioral details such as session requirements, side effects, failure modes, and how it relates to the generic ActivateObjects sibling.

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 session fields. The description adds no parameter-level information 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?

States a specific verb ('Activate') and resource ('ABAP domain'), which distinguishes it from the many other Activate* siblings by resource type. However, it never explicitly differentiates itself from generic activation tools like 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 Guidelines4/5

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

Provides a clear triggering condition: use after CreateDomain or UpdateDomain when the object remains inactive. It does not state when not to use it or name alternative activation paths (e.g., ActivateObjects), so it is clear context without full when/when-not guidance.

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

ActivateFunctionGroupA

Activate an ABAP function group. Use after CreateFunctionGroup or UpdateFunctionGroup if the object remains inactive.

ParametersJSON Schema
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
session_idNoSession ID from GetSession. If not provided, a new session will be created.
session_stateNoSession state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.
function_group_nameYesFunction group name.

TDQS

A3.5/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 implies a state-changing operation but says nothing about side effects, lock/transport implications, permission requirements, or whether activation is reversible or can fail on errors in the group. All of that is left to inference 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.

Conciseness5/5

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

Two sentences, zero padding, with the action stated first and the precondition second. Nothing 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?

Purpose and the key usage condition are covered, and the rich schema compensates for parameter details. With no annotations and no output schema, however, the description omits behavioral aspects (side effects, failure modes, session handling relevance) that an agent would want before invoking 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 every parameter (function_group_name, session_id, session_state, detail) is already documented in the schema, including the detail enum. The description adds no parameter-level meaning beyond that, which is the baseline 3 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 (Activate) and a specific resource (ABAP function group), which cleanly distinguishes it from the many non-activation siblings. It doesn't explicitly differentiate itself from generic siblings like ActivateObjects or the parallel ActivateFunctionModule, but the specific resource noun makes the target 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 a concrete usage condition: call it after CreateFunctionGroup or UpdateFunctionGroup when the object remains inactive. That routes the agent well for the common case, though it never explains when to prefer the generic ActivateObjects instead or what to do if activation fails.

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

ActivateFunctionModuleA

Activate an ABAP function module. Use after UpdateFunctionModule if the object remains inactive.

ParametersJSON Schema
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
session_idNoSession ID from GetSession. If not provided, a new session will be created.
session_stateNoSession state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.
function_group_nameYesFunction group name.
function_module_nameYesFunction module name.

TDQS

A3.5/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 behavioral burden, and it discloses almost nothing: no statement of what activation changes, whether it fails on syntax errors, whether it needs an existing session/lock, or whether the operation is reversible. Only the implicit mutation semantics can be inferred from the verb.

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, with the action front-loaded and the precondition second. Nothing could be trimmed without losing signal.

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 is thin on failure modes and return expectations, though the 100%-covered schema handles the input side. It is minimally sufficient to invoke but leaves the agent guessing about activation errors.

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 function_module_name, function_group_name, session_id, session_state and detail all documented in-schema, so the baseline is 3. The description adds no parameter meaning beyond the schema, such as that the two required names identify the object to activate.

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 (Activate) plus a specific resource (ABAP function module), so the agent knows exactly what the tool performs. It does not differentiate itself from siblings like ActivateObjects or ActivateFunctionGroup, which is the only gap.

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?

"Use after UpdateFunctionModule if the object remains inactive" gives a concrete trigger condition tied to a named sibling, which is above-average routing guidance. It stops short of stating when NOT to use it (e.g. preferring ActivateFunctionGroup or batch ActivateObjects).

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

ActivateInterfaceA

Activate an ABAP interface. Use after CreateInterface or UpdateInterface if the object remains inactive.

ParametersJSON Schema
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
session_idNoSession ID from GetSession. If not provided, a new session will be created.
session_stateNoSession state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.
interface_nameYesInterface name.

TDQS

A3.5/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 of behavioral disclosure for a mutation tool. It hints at a state transition (inactive -> active) but says nothing about idempotency, required locks/transport entry, permissions, whether activation can partially succeed, or what an already-active object returns. That is a substantial gap for an activation 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?

Two sentences, zero waste, with the purpose and the trigger condition both front-loaded. Nothing is repeated from the schema or title.

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 description should compensate more than it does. It covers purpose and trigger adequately for a single required parameter, but omits the failure/return behavior an agent needs to interpret an activation 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%, including a documented enum for 'detail' and an explanation of session_id/session_state, so the schema already carries parameter meaning. The description adds nothing about parameters, which is acceptable at this coverage level but not above 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 ('Activate an ABAP interface'), which is unambiguous and matches the naming family of ActivateClass/ActivateTable/etc. It does not, however, distinguish itself from the generic sibling ActivateObjects, which could plausibly activate an interface too, so the 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 Guidelines4/5

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

Gives a clear trigger condition: 'Use after CreateInterface or UpdateInterface if the object remains inactive.' That tells the agent when the tool is warranted rather than leaving it to inference. It stops short of naming alternatives (e.g., ActivateObjects) or explaining what to do if activation fails.

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

ActivateMetadataExtensionA

Activate a CDS metadata extension. Use after CreateMetadataExtension or UpdateMetadataExtension if the object remains inactive.

ParametersJSON Schema
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
session_idNoSession ID from GetSession. If not provided, a new session will be created.
session_stateNoSession state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.

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 behavioral burden. It discloses the key state-transition trigger (post-create/update, object inactive), but says nothing about required permissions, session prerequisites, failure modes, or side effects on dependents, which matters 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.

Conciseness5/5

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

Two sentences, no filler, and the core action is front-loaded ahead of the conditional prerequisite. Every clause 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?

No output schema and no annotations, so the description is the only source of behavior, and it stops at the trigger condition. For an activation mutation tool, an agent would still want to know what activation returns or how failures surface, 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 description coverage is 100% with four well-documented parameters (name, detail, session_id, session_state), so the schema does the heavy lifting and the baseline of 3 applies. The description adds nothing about how name or session data should be supplied.

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 (activate a CDS metadata extension), which cleanly separates it from the many other Activate* siblings (ActivateDdl, ActivateClass, ActivateTable, etc.). An agent can identify the correct tool 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?

Explicitly tells the agent when to reach for this tool: after CreateMetadataExtension or UpdateMetadataExtension, and only when the object remains inactive. It does not mention the generic ActivateObjects alternative, so it falls just 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.

ActivateObjectsA

Activate one or multiple ABAP repository objects. Use after Create/Update when objects remain inactive, or for group activation of related objects (e.g., domains + data elements + tables together). Works with any object type.

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

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 one useful trait – implicit dependency ordering via the 'domains + data elements + tables together' example – but says nothing about failure modes, whether partial activation is possible, dependency resolution, or permission requirements for a state-changing 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?

Two tight sentences, front-loaded with the action and scope followed by usage context. Every clause earns its place with no 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 two-param activation tool with no annotations and no output schema, the description covers purpose, timing, and grouping well. It is only slightly short on what happens on success/failure or ordering guarantees, which keeps it from a 5.

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 params ('objects' array with per-item type codes and 'preaudit') are already fully documented in the schema. The description adds no syntax or semantic detail beyond it, 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?

States a specific verb and resource ('Activate ... ABAP repository objects') and immediately distinguishes itself from the many singular ActivateXxx siblings with 'one or multiple' and 'group activation of related objects'. An agent can tell this is the batch/multi-object activation tool 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 when-to-use context: 'Use after Create/Update when objects remain inactive, or for group activation of related objects'. The example (domains + data elements + tables) clarifies the group case. It does not explicitly name the per-type ActivateDomain/ActivateClass alternatives or when to prefer them, 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.

ActivateServiceBindingA

Activate an ABAP service binding. Use after CreateServiceBinding or UpdateServiceBinding if the object remains inactive.

ParametersJSON Schema
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
session_idNoSession ID from GetSession. If not provided, a new session will be created.
session_stateNoSession state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.

TDQS

A3.7/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. Beyond implying a state-changing operation, it says nothing about side effects, required permissions, whether activation is idempotent, or what occurs if the object is already active.

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 padding; the action is front-loaded and the usage condition follows immediately.

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 no-annotation, no-output-schema mutation tool, the description covers purpose and usage but omits behavioral context (permissions, failure modes, effects). Adequate but with a clear gap given the absence of structured hints.

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 (name, detail, session_id, session_state) are already documented in the schema. The description adds no extra meaning about parameter formats or interactions, 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?

States a specific verb (Activate) and resource (ABAP service binding), making it immediately distinguishable from GetServiceBinding, DeleteServiceBinding, ValidateServiceBinding and the many 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 Guidelines4/5

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

Explicitly names the triggering tools (CreateServiceBinding, UpdateServiceBinding) and the condition under which activation is warranted ('if the object remains inactive'), so the agent knows when this follows on from those operations. It lacks an explicit exclusion (e.g., using ActivateObjects for batches), so it falls just 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.

ActivateServiceDefinitionA

Activate an ABAP service definition. Use after CreateServiceDefinition or UpdateServiceDefinition if the object remains inactive.

ParametersJSON Schema
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
session_idNoSession ID from GetSession. If not provided, a new session will be created.
session_stateNoSession state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.

TDQS

A3.5/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 only implies activation is conditional on an inactive state, but says nothing about permissions, transport implications, failure modes (e.g. syntax errors blocking activation), reversibility, or what activation changes. For a mutation tool with zero annotation coverage this is a substantial 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 tight sentences with the action front-loaded and the triggering condition immediately after. 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?

Purpose and trigger are covered and the parameter schema is fully documented, but with no annotations and no output schema the description leaves behavioral expectations (side effects, failure conditions, what 'active' yields) unstated. Adequate but not 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 schema already documents name, detail, session_id and session_state, including the enum meaning. The description adds no parameter-level meaning 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: 'Activate an ABAP service definition.' This clearly separates it from GetServiceDefinition/CreateServiceDefinition/DeleteServiceDefinition. It does not, however, distinguish it from the generic ActivateObjects sibling, which also performs activation.

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 an explicit trigger: 'Use after CreateServiceDefinition or UpdateServiceDefinition if the object remains inactive.' This names the preceding lifecycle steps and the condition that warrants activation. It stops short of naming an alternative (e.g. ActivateObjects) or stating 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.

ActivateStructureA

Activate an ABAP structure. Use after CreateStructure or UpdateStructure if the object remains inactive.

ParametersJSON Schema
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
session_idNoSession ID from GetSession. If not provided, a new session will be created.
session_stateNoSession state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.
structure_nameYesStructure name.

TDQS

A3.5/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 behavioral burden. It conveys a precondition (object must still be inactive) but says nothing about side effects, whether activation is a mutation, permission requirements, error behavior if already active, or what the activation result 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?

Two short sentences, zero filler, with the action front-loaded and the precondition immediately after. Nothing could be trimmed without losing 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 simple activation operation with fully documented parameters and a session-management pattern already in the schema, the description is adequate on the input side. It is thin on the output side (no output schema) and does not hint at what activation returns, such as messages or remaining inactive objects.

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 detail, session_id, session_state, and structure_name are all documented in the schema itself. The description adds no parameter-level meaning, which is acceptable at full coverage but yields only the baseline score.

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 ("Activate an ABAP structure"), which cleanly separates it from the many other Activate* siblings that target tables, classes, domains, etc. It does not explicitly name the generic ActivateObjects alternative, so the differentiation is implied by resource rather than spelled out.

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 triggering condition: use it after CreateStructure or UpdateStructure when the object remains inactive. This is real guidance about lifecycle ordering, though it offers no exclusions (e.g., what to do if the object is already active, or when to prefer the bulk ActivateObjects).

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

ActivateTableB

Activate an ABAP table. Use after CreateTable or UpdateTable if the object remains inactive.

ParametersJSON Schema
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
session_idNoSession ID from GetSession. If not provided, a new session will be created.
table_nameYesTable name.
session_stateNoSession state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.

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 says only that it activates the table, with no mention of permissions, transport implications, reversibility, or side effects of activation on 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?

Two short sentences, front-loaded with the action and followed by the workflow condition. No filler, though the second sentence could have been folded in more tightly.

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 four params including a nested session_state object and no output schema, the description covers only the trigger. It leaves session handling and activation semantics to the schema, which is adequate but leaves behavioral gaps unfilled.

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 (detail, session_id, table_name, session_state) are already documented in the schema. The description adds no extra meaning about parameter usage, 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 (Activate) and resource (ABAP table), so the core action is unambiguous. It does not differentiate itself from the many sibling Activate* tools (e.g., ActivateObjects, ActivateStructure), though the resource in the name makes the target reasonably clear.

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?

Explicitly ties usage to a workflow: run after CreateTable or UpdateTable when the object remains inactive. This gives a clear trigger condition, but offers no exclusions or named alternative (e.g., ActivateObjects for batch activation).

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

AddTransportObjectB

Add an existing ABAP object to a transport task, so it travels with the task's request.

ParametersJSON Schema
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.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 states the mutation happens but not whether it requires a modifiable transport, what happens if the object is already in the request, whether it errors on a released task, or what permissions are needed — significant gaps for a write 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?

A single sentence with zero filler, front-loading the action and following with the effect. Nothing to trim.

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 no annotations and no output schema, the description should explain prerequisites, failure modes, and effect on the transport request. It covers only the bare intent, leaving an agent unable to predict what will happen on error or on an already-released transport.

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 notable warning that object_type is an object-directory type (CLAS, FUGR) rather than an ADT type code, so the schema already does the heavy lifting. The description adds no parameter-level meaning beyond the schema, which is the baseline 3 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+resource ('Add an existing ABAP object to a transport task') and adds the consequence ('so it travels with the task's request'), which makes it distinguishable from the sibling RemoveTransportObject. It doesn't explicitly name siblings, so it falls 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?

The word 'existing' implies the object must already exist, and the tool's intent (assign an object to a task) is inferable, but there is no explicit when-to-use guidance, no prerequisites (e.g., transport must be modifiable/unreleased), and no mention of when to prefer this over CreateTransportTask or ReadTransportObjects.

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

CheckBehaviorDefinitionB

Perform syntax check on an ABAP behavior definition (BDEF). Returns syntax errors, warnings, and messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesBehaviorDefinition name.
versionNoWhich 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.

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 the return content (syntax errors, warnings, messages), which is genuinely useful behavioral information. However it does not state that the operation is read-only/non-persisting, whether it requires an activation lock, or any permission constraints, leaving notable behavioral gaps for a mutation-adjacent check 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 with zero redundancy: the first front-loads purpose and resource, the second covers the return contract. Since no output schema exists, the return statement is informative rather than filler, so 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 low-complexity, 2-parameter check tool with 100% schema coverage and no output schema, the description covers both purpose and return shape adequately. It is slightly thin on behavioral/read-only semantics, but the detailed 'version' param schema compensates for much of the operational nuance an agent needs.

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 carries unusually rich guidance (inactive default, active fallback behavior, empty-source findings). The description adds nothing about parameters, so the baseline 3 applies since 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?

States a specific verb (syntax check) and resource (ABAP behavior definition / BDEF), so it is distinguishable from the Get/Update/Activate/Create BehaviorDefinition siblings. It does not explicitly contrast itself with the Check* family (CheckClass, CheckTable, CheckDdl), but the resource-specific naming makes the intent 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?

The description provides no when-to-use, when-not-to-use, or alternative guidance. It never says whether this is a pre-activation gate, whether it overlaps with RunATC/GetATCFindings, or that it should be used before ActivateBehaviorDefinition. Usage is only implied by the tool name.

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

CheckClassA

Perform syntax check on an ABAP class. Can check existing class (active/inactive) or validate hypothetical source code. Returns syntax errors, warnings, and messages.

ParametersJSON Schema
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
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 the return content (syntax errors, warnings, messages) and the fact that hypothetical validation does not create an object, which is genuinely useful. However, it never explicitly states that the operation is read-only/non-mutating for the existing-class path, nor mentions permission or lock prerequisites, so behavioral coverage is incomplete for a zero-annotation 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 with the core action front-loaded and no filler. Slightly dense but every sentence carries purpose or mode information; no structural 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?

No output schema exists, and the description compensates by naming the returned content (errors, warnings, messages). It also covers both operating modes, so an agent has enough to call it correctly. The lack of explicit read-only confirmation and guidance against sibling check/analysis tools is the only 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%, so all three parameters, including the active/inactive enum and the complete-source requirement for source_code, are already documented in the schema. The description restates the mode distinction but adds no syntax, format, or constraint detail beyond what the schema provides, 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?

States a specific verb ('syntax check') and resource ('ABAP class'), and by naming the resource it distinguishes itself from siblings like CheckInterface, CheckTable, and CheckDdl. An agent can identify the target of the check 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?

The description explains the two usage modes clearly: checking an existing class (active or inactive) versus validating hypothetical source code that is not yet an object. It gives solid context but names no alternative or exclusion, e.g. it never contrasts itself with GetAbapAST, GetAbapSemanticAnalysis, or RunATC, so the agent must infer when a syntax check beats those tools.

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

CheckDataElementB

Perform syntax check on an ABAP data element. Returns syntax errors, warnings, and messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoWhich 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.
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 behavioral burden. It usefully discloses that the tool is a non-mutating check and what it returns (errors, warnings, messages), but it omits the version-default pitfall (defaults to inactive, which fails for active-only objects) and any auth/permission context.

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 action and resource, then the return content. No filler or 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 simple read-only check with no output schema, the description adequately covers both what the tool does and what it returns. The remaining gap is the unmentioned version-default behavior, which matters for correct invocation but is documented in 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%: both parameters, including the tricky version enum, are thoroughly documented in the schema itself. The description adds no parameter meaning 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 ('perform syntax check') and resource ('ABAP data element'), which cleanly separates it from the many sibling Check* tools (CheckClass, CheckTable, CheckStructure). It does not explicitly name or contrast with those siblings, 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 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 use this tool versus alternatives such as GetDataElement, CheckTable, or RunATC, nor any note about prerequisites (e.g., the object must exist). The description is purely declarative.

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

CheckDdlA

Perform syntax check on an ABAP CDS view. Can check existing view (active/inactive) or validate hypothetical DDL source. Returns syntax errors, warnings, and messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to check: 'active' or 'inactive'. Default: inactive.
ddl_nameYesCDS view name to check, passed as ddl_name.
ddl_sourceNoOptional: DDL source code to validate instead of the saved version.

TDQS

A3.8/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 disclosure burden. It reveals the return payload (syntax errors, warnings, messages) and the two check modes, but never states that the operation is read-only/non-mutating, nor whether the target view must already exist or what happens if it does not.

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 two modes, then the return content. No filler and nothing restated twice.

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 annotations and no output schema, the description does the necessary work: what it checks, the two modes, and what comes back. The remaining gap is behavioral (read-only nature, requirements on the target object), which is a modest omission for a check-only 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 three parameters are already fully documented in the schema and the baseline is 3. The description confirms the active/inactive distinction and the 'instead of the saved version' semantics of ddl_source but adds no format or interaction 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?

States a specific verb+resource combination ('perform syntax check on an ABAP CDS view'), which cleanly separates it from the other Check* siblings (CheckClass, CheckTable, CheckStructure) by object type. It stops short of the explicit sibling-contrast phrasing that would earn 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?

Makes the two operating modes explicit: check an existing view (active or inactive) or validate a hypothetical DDL source. That tells the agent which mode to pick, though it offers no exclusions or pointers to adjacent tools (CreateDdl/UpdateDdl/ActivateDdl) that a check might precede.

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

CheckDomainB

Perform syntax check on an ABAP domain. Returns syntax errors, warnings, and messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoWhich 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.
domain_nameYesDomain name.

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 does disclose the return content (syntax errors, warnings, messages), which is useful, but says nothing about side effects, preconditions, or which versions are applicable; the version-import pitfall is documented only 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 short sentences, front-loaded with the action and resource, and the second sentence efficiently covers the return content. 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 simple check tool with no output schema, the description is adequate but leaves out the workflow context an agent needs — e.g., the relationship to ActivateDomain and the active/inactive version behavior, which matters given how many Check* tools 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 schema text is unusually detailed (defaults to inactive, active-only objects error out). The description adds no parameter meaning, so the baseline of 3 applies because the schema already 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?

The description names a specific verb (syntax check) and a specific resource (ABAP domain), so it is easily distinguished from the large Check* family (CheckClass, CheckTable, CheckDdl, etc.) by resource. It is clear but does not explicitly contrast itself with those siblings or with ActivateDomain.

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 guidance is given: it does not say to run this before ActivateDomain, nor that it operates against the active/inactive version. The only usage-relevant context lives in the version parameter's schema description, not in the tool description.

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

CheckFunctionGroupA

Perform syntax check on an ABAP function group. Returns syntax errors, warnings, and messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoWhich 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.
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?

No annotations are provided, so the description carries the full behavioral burden. It discloses the return content (syntax errors, warnings, messages), which is useful, but says nothing about whether the check mutates state, permission requirements, or how the omitted-version default behaves — the latter matters a lot and is only 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 short sentences, purpose first, return values second, with zero filler. Nothing could be removed without losing 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?

Adequate minimum for a simple read-style check tool: purpose, resource, and return content are covered, and the parameter nuance is handled by the schema. However, with no annotations and no output schema, the description could have said more about safety and how findings are scoped.

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 version parameter carries an unusually detailed description of the default-inactive pitfall. The description text adds no parameter meaning of its own, 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 (syntax check) and resource (ABAP function group), and names the return payload (errors, warnings, messages). This clearly separates it from sibling Check* tools that target classes, interfaces, tables, or function modules.

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 run this check versus RunATC or the other Check* tools, no mention of prerequisites, and no note about the active/inactive version decision (that trap lives only in the schema). The agent gets no routing help from the description itself.

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

CheckFunctionModuleA

Perform syntax check on an ABAP function module. Returns syntax errors, warnings, and messages.

ParametersJSON Schema
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.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 must carry the full load. It discloses that the check returns syntax errors, warnings, and messages, which is useful output context, but it does not state that the operation is read-only or mention any permission requirements. This partial disclosure warrants a mid-range score.

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 with zero waste, front-loading the action, followed by the return description. 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 check tool with no output schema and no annotations, the description covers the purpose and return values adequately. It lacks usage guidelines, but given the clear name and full schema, an agent can invoke it correctly. Minor gaps remain.

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 all three parameters. The description adds no additional parameter semantics beyond what is already in the structured data. 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 ('Perform syntax check') and resource ('ABAP function module'). It distinguishes itself from sibling Check* tools like CheckFunctionGroup by naming the exact object type. The second sentence clarifies the return values.

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 tool versus alternatives such as CheckFunctionGroup or GetFunctionModule. It simply states what it does without any conditions or exclusions.

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

CheckInterfaceB

Perform syntax check on an ABAP interface. Returns syntax errors, warnings, and messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoWhich 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.
interface_nameYesInterface name.

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 behavioral burden, and it delivers little: it never states that the check is non-mutating, that it does not change the object's state, or that the default target is the inactive version (that caveat lives only in the schema). Reporting the return content is the only behavioral information offered.

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 action and then the result. Nothing is redundant or 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 simple two-parameter check tool with no output schema and near-total schema coverage, the description is nearly sufficient: the agent knows the action, the subject, and the output category, and the schema supplies the version semantics. Only the absence of any usage/ordering context (e.g., relative to activation) keeps it from being 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%, and the 'version' parameter's schema text is far richer than anything in the description. The description adds no parameter meaning 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 ('Perform syntax check on an ABAP interface') and adds the shape of the result ('syntax errors, warnings, and messages'). Within a large Check* family (CheckClass, CheckTable, CheckDdl, CheckFunctionGroup), naming the resource makes it immediately distinguishable from 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 guidance on when to run this check (e.g., before ActivateInterface, or as an alternative to RunATC/GetATCFindings), no prerequisites, and no exclusions. Usage must be inferred from the tool name alone.

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

CheckMetadataExtensionA

Perform syntax check on an ABAP metadata extension (DDLX). Returns syntax errors, warnings, and messages.

ParametersJSON Schema
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

A3.5/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 discloses the return content (syntax errors, warnings, messages), which is useful, but it never states that this is a read-only, side-effect-free diagnostic or what permissions/state it requires. For a check tool this is adequate but thin.

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 action front-loaded and zero padding. The second sentence earns its place by stating the return shape, though it is fairly generic.

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 at least describe the nature of the output (errors, warnings, messages). For a two-parameter diagnostic tool this is close to complete, though it could say more about the object's expected state and that it does not mutate anything.

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 `name` and `version` (including the active/inactive behavior and no-fallback note) are already fully documented in the schema. The description adds no parameter meaning 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: a syntax check on an ABAP metadata extension (DDLX). This clearly separates it from the Create/Get/Update/Delete metadata-extension siblings by the 'check' verb. It doesn't explicitly differentiate from the other Check* siblings (e.g., CheckDdl), though the resource name does the work implicitly.

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: run this to validate a DDLX for syntax problems. There is no explicit when-to-use, no mention of prerequisites (e.g., an object must exist), and no routing against related tools like ActivateMetadataExtension or CheckDdl. A reader can infer intent but nothing is spelled out.

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

CheckPackageC

Perform syntax check on an ABAP package. Returns syntax errors, warnings, and messages.

ParametersJSON Schema
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

C2.9/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 full burden. It states the check is a read-only syntax check and lists return categories, but doesn't disclose whether the check is synchronous, whether it consumes ATC-style resources, whether it has side effects, or whether it depends on activation 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?

Two short sentences, front-loaded with the action and scope. No waste, though the second sentence is essentially a return-value list which overlaps with output expectations.

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 check tool with no output schema and no annotations, the description should explain result structure or usage context. It mentions error/warning/message categories but leaves prerequisites, side effects, and differentiation from sibling Check* tools 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 description coverage is 100% and the package_name and super_package parameters are already documented in the schema. The description adds no new parameter semantics beyond what's in 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 (syntax check) and resource (ABAP package), and names the return contents (errors, warnings, messages). It distinguishes itself from other Check* siblings by targeting a package specifically, though it doesn't explicitly reference CheckPackageLow or how it differs.

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 use this vs. alternatives. The schema's mention of CheckPackageLow hints at a sibling variant (low-level check), but the description itself offers no when-to-use or when-not-to-use context.

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

CheckStructureA

Perform syntax check on an ABAP structure. Can check existing structure (active/inactive) or validate hypothetical DDL code. Returns syntax errors, warnings, and messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to check: 'active' or 'inactive'. Default: inactive.
ddl_codeNoOptional: DDL source code to validate instead of the saved version.
structure_nameYesStructure name.

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 burden. 'Syntax check' and 'returns syntax errors, warnings, and messages' make clear this is a non-mutating validation and describes the result shape, but there is no mention of permissions, whether it triggers activation, or performance/rate 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?

Three short sentences, front-loaded with the core action, and no filler. The middle sentence is slightly redundant with the parameter schema but still earns its place by disambiguating the two modes.

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 validation tool with 100% schema coverage and no output schema, the description covers purpose, modes, and return content adequately. The only gap is behavioral detail on permissions and mode precedence, which is minor for this tool class.

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 enum for version, the ddl_code override, and structure_name are all documented in the schema. The description restates the active/inactive and DDL modes but adds no syntax, format, or precedence detail (e.g., what happens when both structure_name and ddl_code are given). 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 (syntax check) and resource (ABAP structure), and clarifies two modes (saved active/inactive version vs. hypothetical DDL). It distinguishes itself from the many other Check* siblings by naming the resource, though it never explicitly routes the agent away from CheckDdl even though the DDL-mode feature overlaps with 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 Guidelines3/5

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

The description explains the two usage modes (existing structure vs. hypothetical DDL code), which implies when to reach for it, but names no alternatives or exclusions and gives no prerequisites. An agent must still infer whether to use this or CheckDdl for DDL validation.

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

CheckTableA

Perform syntax check on an ABAP table. Can check existing table (active/inactive) or validate hypothetical DDL code. Returns syntax errors, warnings, and messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to check: 'active', 'inactive', or 'new'. Default: new.
ddl_codeNoOptional: DDL source code to validate instead of the saved version.
table_nameYesTable name.

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 the return content (syntax errors, warnings, messages), which implies a non-mutating check, but does not state whether checking a 'new' version has side effects or whether any state 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?

Three tight sentences, front-loaded with the core action and followed by the mode distinction and return content. No filler, though the second sentence slightly overlaps the schema's enum description.

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 check tool with no output schema and no annotations, the description covers purpose, modes, and return shape adequately. It would be stronger if it clarified side effects for the 'new' version mode.

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 version enum. The description restates the two modes but adds no format or syntax detail beyond what the schema provides; 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 ('Perform syntax check on an ABAP table') and explains the two modes of operation. It is clear, though it does not explicitly differentiate itself from close siblings like CheckDdl, which also validates DDL code.

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 use it: checking an existing table's active/inactive version, or validating hypothetical DDL. No explicit exclusions or sibling routing are given, 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.

CreateBehaviorDefinitionB

Create a new ABAP Behavior Definition (BDEF) in SAP system. Creates the behavior definition object in initial state.

ParametersJSON Schema
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/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 adds only that the object is created 'in initial state', but says nothing about required authorizations, transport-request obligations, failure modes when the name already exists, or whether creation is reversible. The 'initial state' claim also sits oddly against the schema's activate=true default.

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?

Two short sentences, but the second largely restates the first's verb+resource before tacking on 'initial state'. It is compact yet partially redundant rather than tightly value-bearing.

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 mutation tool with no annotations and no output schema, the description is too thin. It omits the activation relationship, transport handling, naming constraints relative to the root entity, and error conditions an agent must anticipate before invoking it.

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 each of the 9 parameters (including enums for detail and implementation_type) is already documented in the schema. The description adds no semantics 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.

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 (ABAP Behavior Definition / BDEF), making it trivially distinguishable from its Get/Update/Delete/CheckBehaviorDefinition siblings. An agent can identify exactly what object type is created 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 Guidelines2/5

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

No guidance on when to use this versus alternatives (e.g., UpdateBehaviorDefinition, CreateBehaviorImplementation) or prerequisites such as needing a root CDS entity to exist. The 'initial state' note implies a subsequent activation step but never says so, and doesn't reconcile with the `activate` parameter defaulting to true.

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

CreateBehaviorImplementationA

Create a new ABAP behavior implementation class for a behavior definition. Creates the object in initial state — no FOR BEHAVIOR OF main source and no implementations include yet. Use UpdateClass to write the main source and UpdateBehaviorImplementation (with a lock handle from LockClass) to write the implementations include.

ParametersJSON Schema
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

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 full burden and does disclose the key behavioral trait: the object is created in an initial state with no FOR BEHAVIOR OF main source and no implementations include. It also flags the lock-handle prerequisite for the follow-up write. It does not cover error cases (e.g., existing object) or return behavior, 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?

Three tight sentences, front-loaded with the core action, then scope of the created object, then the follow-up workflow. 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?

There is no output schema and no annotations, but the description compensates by explaining the initial-state semantics and the two-step write flow via sibling tools. It is nearly complete for a create tool; only error/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 description coverage is 100%, so the schema already documents all six parameters in detail, including behavior_definition's compatibility caveat and the transport_request requirement. The description adds no parameter-level meaning 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?

Specific verb+resource: 'Create a new ABAP behavior implementation class for a behavior definition.' It clearly distinguishes itself from CreateClass and CreateBehaviorDefinition by naming the exact artifact, and the follow-up sentence clarifies the scope of what is created.

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?

Explicitly routes the agent: use UpdateClass to write the main source, and UpdateBehaviorImplementation (with a lock handle from LockClass) to write the implementations include. This names alternatives and the conditions that select them, leaving nothing to inference.

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

CreateCdsUnitTestA

Create ABAP Unit tests for a CDS view: check the view supports CDS test doubles, create a test class holding the local test classes, activate it.

ParametersJSON Schema
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

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 burden. It usefully discloses that the tool mutates the system by creating and activating a class, and that it validates test-double support first, but it omits permission requirements, behavior when the view is not testable, and the role of the transport_request parameter.

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 sentence with a colon-delimited list of the three actions; no filler. Slightly dense, but every clause describes a distinct step of the operation.

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 main workflow but leaves gaps on prerequisites (active/package/transport state), failure modes when the view lacks test-double support, and the return shape. 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%, so all six parameters, including the enum for 'detail' and the transport_request note, are already documented in the schema; the description adds no parameter-level detail beyond the shared CDS-view wording. 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 (Create) and resource (ABAP Unit tests for a CDS view) and enumerates the three behaviors performed: test-double eligibility check, test class creation, activation. This distinguishes it from siblings CreateUnitTest and CreateFunctionGroupUnitTest, which target classes and function groups respectively.

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 internal step ordering ('check the view supports CDS test doubles, create a test class, activate it') implies the workflow, but the description never says when to pick this over CreateUnitTest or what prerequisite state the CDS view must be in beyond the schema hint 'must be active'.

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

CreateClassA

Create a new ABAP class in SAP system. Creates the class object in initial state. Use UpdateClass to set source code.

ParametersJSON Schema
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

A4/5.0
Behavior3/5

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

No annotations, so the description carries the burden. It usefully discloses that the object is created in initial (inactive) state, which is non-obvious behavior in SAP, but omits permission/authorization needs, the transport requirement implied by the transport_request param, and whether a subsequent activation is mandatory.

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 stated first and the sibling hand-off last. Nothing 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?

For a 10-parameter mutation tool with no output schema and no annotations, the description covers the essential post-creation state and the follow-up tool. It stops short of mentioning activation requirements or authorization/transport constraints that an agent would need to complete the workflow.

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 is already documented in the schema, including defaults, enum values, and the transport_request caveat. The description adds no parameter-level meaning beyond that, making the baseline 3 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+resource ('Create a new ABAP class'), names the target system, and describes the resulting state ('initial state'), which separates it from GetClass/UpdateClass/ActivateClass 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?

Explicitly routes the agent to UpdateClass for the follow-up source-code step, which is the natural next action after creation. It does not state when NOT to use it (e.g. class already exists, activation prerequisites), so it falls short of a full 5.

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.

ParametersJSON Schema
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.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 for a mutation tool. It discloses only that the object is created inactive; it says nothing about required authorizations, transport requirements, whether a partial failure leaves an orphaned object, 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?

Two short, front-loaded sentences with no filler. The verb+resource and the state outcome both land immediately.

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 schema compensates for parameter documentation, but the description omits the activation follow-up (ActivateDataElement), transport_request implications, and any failure semantics. It is minimally complete but leaves real workflow 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% across 18 parameters, so the schema already documents names, defaults, enum values, and the note that label/search-help fields apply 'during update step after creation.' The description adds nothing parameter-level 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 ('Create a new ABAP data element') and adds that the object is left in 'initial state', which distinguishes it from ActivateDataElement and UpdateDataElement. It doesn't explicitly name those siblings, but the name/verb pair 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?

The phrase 'in initial state' implicitly signals that a follow-up activation step is needed, but the description never names ActivateDataElement or states the workflow conditions. No prerequisites (package, transport) 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.

CreateDdlA

Create a new CDS View or Classic View in SAP system. Creates the DDL source object in initial state. Use UpdateDdl to set DDL source code.

ParametersJSON Schema
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.7/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 does add useful behavioral detail by stating the object is created in 'initial state' (i.e. without source content). However, it omits critical operational facts such as whether the result is inactive/requires ActivateDdl, transport/auth requirements, and 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?

Two short sentences, front-loaded with the action and immediately followed by the scope/state clarification and the next-step tool. Every sentence earns its place with 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 mutation tool with no annotations and no output schema, the description covers what is created and the follow-on write step, which is a solid core. It leaves out the activation requirement (a sibling ActivateDdl exists) and any indication of what the initial-state object contains, so an agent may not complete the full workflow.

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 detail, master_language and transport_request are already documented in the schema. The description adds no parameter-level 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.

Purpose4/5

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

States a specific verb+resource ('Create a new CDS View or Classic View', 'Creates the DDL source object') and clarifies the resulting state ('in initial state'). It distinguishes itself from UpdateDdl, which handles the source code, so an agent can separate the two DDL-mutating tools. It does not, however, differentiate itself from the broader family of Create* tools beyond the resource 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?

Explicitly names the follow-on alternative: 'Use UpdateDdl to set DDL source code,' which routes the agent correctly after creation. This gives clear context but stops short of stating when-not-to-use or prerequisites (e.g. that the object is created inactive and needs activation).

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

CreateDomainC

Create a new ABAP domain in SAP system. Creates the domain object in initial state.

ParametersJSON Schema
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

C2.9/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. Beyond 'creates the object in initial state', it says nothing about permissions required, what happens if the domain already exists, or the interaction between 'initial state' and the activate=true default — a significant gap for a 15-parameter 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?

Two short sentences, front-loaded with the core action. The second sentence is largely redundant restatement, but nothing is bloated.

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 15 parameters, no annotations, and no output schema, the description is far too thin. It omits creation-failure conditions, transport requirements, and the meaning of the initial vs activated state, leaving the agent reliant entirely on 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 all 15 parameters (datatype, length, decimals, fixed_values, transport_request, etc.) are already documented in the schema. The description adds no parameter meaning beyond it, 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?

States a specific verb+resource (create an ABAP domain) and adds a state note ('initial state'), which distinguishes it from GetDomain/UpdateDomain/DeleteDomain by name. However, it does not explicitly differentiate itself from the sibling CheckDomain or ActivateDomain, and the 'initial state' claim sits in tension with the schema's activate default of true.

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 guidance, no prerequisites (e.g., run CheckDomain first, or that transportable packages need a transport_request), and no alternatives named. The agent must infer everything 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.

CreateFunctionGroupC

Create a new ABAP function group in SAP system. Function groups serve as containers for function modules.

ParametersJSON Schema
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

C2.9/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, and it discloses almost nothing beyond the mutation itself. It does not say that creation requires a transport request for transportable packages, what activation does or that it defaults to true, whether the operation fails on an existing name, or what permissions are needed. The second sentence is domain education, not behavioral 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?

Two short sentences, front-loaded with the action, with no filler. The second sentence is arguably optional context but is cheap and aids the agent's understanding of the object type.

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 creation tool with no annotations and no output schema, the description is thin: it omits transport semantics, activation consequences, and collision behavior. The rich, fully documented schema compensates for the parameter gaps, keeping this at minimum-viable rather than inadequate.

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 seven parameters (including transport_request, activate, master_language, and detail) are already fully documented in the schema. The description adds no parameter-level meaning, which is acceptable given the coverage, 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 ("Create a new ABAP function group in SAP system") and adds a one-line domain gloss about what a function group is. Sibling tools like CreateFunctionModule, UpdateFunctionGroup, and DeleteFunctionGroup make the operation unambiguous by name, but the description itself 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 Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, no mention of prerequisites (package must exist, transport requirements), and no routing to alternatives such as UpdateFunctionGroup or CheckFunctionGroup. The agent is left to infer usage purely from the tool name and schema.

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

CreateFunctionGroupUnitTestB

Create ABAP Unit tests for a function group: a test include with its local test classes, activated with the group.

ParametersJSON Schema
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

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 usefully discloses that the include is created together with its local test classes and that it is activated with the group, which is a real side effect. However, it says nothing about permissions, error/exception behavior, or what happens when 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?

A single front-loaded sentence that names the action, the target, and the resulting artifact with no filler. It could have gone marginally further on lifecycle behavior, but every clause 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?

For a mutation tool with no annotations and no output schema, the description covers what is created and that it is activated, and the 100%-covered schema handles parameters. It omits conflict/overwrite behavior and any indication of what a caller gets back, leaving meaningful gaps for an agent invoking a 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 four parameters are already documented (including that test_class_source replaces the include contents and that transport_request is required for transportable objects). The description only loosely maps to test_class_source and 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?

States a specific verb ("Create") and resource ("ABAP Unit tests for a function group") and even describes the artifact produced: a test include with local test classes. This distinguishes it in substance from CreateUnitTest and UpdateFunctionGroupUnitTest, though it never names those siblings to route the agent 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 named alternative. The agent must infer from context that this is for function groups rather than the CreateUnitTest / CreateCdsUnitTest siblings, and the description offers no condition to select between them.

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

CreateFunctionIncludeB

Create a new ABAP include within an existing function group. Creates the include in initial state.

ParametersJSON Schema
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

B3.2/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 disclosure burden. 'Creates the include in initial state' is genuinely useful behavioral context (the result is likely inactive and will need activation), but permissions, transport behavior, failure modes, and side effects are not addressed.

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 core action front-loaded and no filler. The second sentence is slightly restating the first, but it contributes the 'initial state' detail, so the redundancy is minimal.

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 creation tool with no annotations and no output schema, the description covers what is created and its initial state but omits what the caller must do next (activation/check siblings) and what a successful result looks like. Adequate 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 the schema already documents all five parameters including transport_request and the detail enum. The description 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?

States a specific verb (Create), resource (ABAP include) and scope (within an existing function group), which cleanly separates it from CreateFunctionGroup/CreateFunctionModule. It does not explicitly name a sibling alternative, but the verb+resource 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?

No when-to-use guidance, no prerequisites, and no routing to alternatives such as CreateFunctionModule or UpdateFunctionInclude is provided. The parent-group constraint is embedded in the purpose statement rather than expressed as a usage rule.

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

CreateFunctionModuleB

Create a new ABAP function module within an existing function group. Creates the function module in initial state.

ParametersJSON Schema
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

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 adds one genuinely useful behavioral fact — the module is created 'in initial state' (implying activation is needed) — but omits transport/auth requirements, error behavior, and side effects on the parent group.

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 no filler; the action and its scope come first, and the state note follows. Nothing is repeated from the tool name or 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?

For a no-output-schema creation tool the description covers the core action and the resulting state, and the schema carries all parameter documentation. It stops short of mentioning the required subsequent activation or transport concerns, which an agent would benefit from knowing.

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, description) are already documented in the schema. The description only echoes the required function-group relationship, adding no syntax or format detail beyond 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?

States a specific verb and resource ('Create a new ABAP function module') and scopes it to an existing function group. It is distinguishable from CreateFunctionGroup/CreateFunctionInclude by naming the artifact type, though it never explicitly contrasts with 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?

Gives no when-to-use guidance, no prerequisites beyond the implied existence of a parent function group, and names no alternatives. An agent gets no signal about ordering relative to CreateFunctionGroup or the follow-up ActivateFunctionModule step.

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.

ParametersJSON Schema
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.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 burden. It does disclose one real behavioral trait — the object is created "in initial state," implying a separate activation step — which is valuable. However it says nothing about required authorizations, the transport requirements implied by the transport_request parameter, or behavior when the interface 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?

Two short sentences, front-loaded with the action and resource. The second sentence partly restates the first ("Creates the interface object"), but the "initial state" clause earns its place by adding a behavioral 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 6-parameter mutation tool with no annotations and no output schema, the description covers the action and the resulting object state but omits the create/activate lifecycle, permission needs, and transport handling. That is minimally adequate for an experienced SAP agent but not self-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%, and the schema already explains every parameter including the detail enum, master_language default, and the transport_request caveat. The description adds no parameter-level meaning, 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?

States a specific verb+resource ("Create a new ABAP interface in SAP system"), which cleanly separates it from GetInterface, UpdateInterface, and the many other Create* siblings. It stops short of explicitly naming its counterparts, so it lands just under the top mark.

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 when-to-use guidance, no prerequisites, and no mention of the natural follow-up (ActivateInterface) that a newly created ABAP object requires. The agent gets no help deciding between this and CreateClass/CreateFunctionGroup or understanding the create-then-activate workflow.

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

CreateMessageClassA

Create a new ABAP message class (T100) shell. Individual messages are added afterwards with CreateMessageClassMessage. Message classes are not activated.

ParametersJSON Schema
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.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 behavior burden and does disclose two meaningful traits: this creates only a shell (not a populated class) and the result is not activated. It omits permissions/auth requirements and what the response contains, but the non-activation caveat is exactly the kind of non-obvious 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.

Conciseness5/5

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

Two sentences, front-loaded with the core action, no filler. Each clause adds information: the shell nature, the follow-up sibling, and the non-activation 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 create operation with no annotations, no output schema, and fully documented parameters, the description covers what is created, what is left to a sibling tool, and the activation state. It is complete enough to invoke correctly, with only auth/response details 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 the schema already documents all six parameters including optionality, defaults, and the transport_request requirement. The description adds no parameter-level 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?

Specific verb+resource: "Create a new ABAP message class (T100) shell." It also distinguishes itself from CreateMessageClassMessage by stating that individual messages are added afterwards with that sibling, so an agent can route correctly without opening either 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?

It names the sibling CreateMessageClassMessage and the condition under which it is used (adding individual messages afterwards). It also implies a follow-up step by noting classes are not activated, but it does not explicitly point to an activation tool, so guidance is clear but not fully exhaustive.

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

CreateMessageClassMessageA

Add a message (number + text) to an existing ABAP message class (T100). The parent class must exist first (CreateMessageClass).

ParametersJSON Schema
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

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 behavioral burden. It discloses the key ordering constraint (parent class must pre-exist), which is genuinely useful, but says nothing about duplicate message-number behavior, transport/authorization requirements, or whether the message must be activated afterwards.

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 padding; the action is front-loaded and the prerequisite follows immediately. Every clause 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?

For a creation tool with no annotations and no output schema, the description covers the prerequisite but omits post-conditions such as activation state, duplicate handling, and transport implications. It is adequate but leaves meaningful gaps for an agent operating unattended.

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 placeholder syntax for msgtext and the optional fields, so the schema does the heavy lifting. The description only loosely maps to 'number + text' and adds nothing the schema does not already state.

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 — adding a numbered message text to an existing ABAP message class (T100). This is clearly distinguishable from sibling tools like CreateMessageClass, UpdateMessageClassMessage, and DeleteMessageClassMessage, so an agent can route correctly without opening a 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?

Provides a concrete prerequisite: the parent class must exist first, and it names CreateMessageClass as the tool that satisfies it. It does not, however, contrast with UpdateMessageClassMessage for editing an existing message number or note when this is inappropriate.

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

CreateMetadataExtensionC

Create a new ABAP Metadata Extension (DDLX) in SAP system. Creates the metadata extension object in initial state.

ParametersJSON Schema
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

C2.9/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 hints at a state outcome ('initial state') but says nothing about required permissions, transport locking, whether the object is inactive, or what happens on failure. Notably, the 'initial state' claim sits in mild tension with the schema's activate default of true, which the description does not reconcile.

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, front-loaded with the core action. The second sentence is largely a restatement of the first with only marginal added value ('initial state'), but nothing is verbose or buried.

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 seven parameters, no annotations, and no output schema, the description is too thin. It omits transport handling, activation behavior, and permission requirements that an agent would need to invoke this 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 seven parameters including the detail enum and the activate default. The description adds no parameter-level meaning 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?

The description states a specific verb and resource: 'Create a new ABAP Metadata Extension (DDLX)'. It distinguishes itself from siblings like GetMetadataExtension and UpdateMetadataExtension by the word 'new', though it 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 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 use this versus UpdateMetadataExtension, nor any mention of prerequisites such as needing a transport request or an existing package. The agent must infer usage entirely from the tool name.

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

CreatePackageC

Create a new ABAP package in SAP system. Packages are containers for development objects and are essential for organizing code.

ParametersJSON Schema
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

C2.9/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, and it discloses essentially nothing: no permission requirements, no transport/change-recording implications, no statement about whether creation is idempotent or fails on duplicate names. The second sentence is background description of ABAP packages, not behavioral context for the call.

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, front-loaded with the action. The second sentence is arguably filler for an agent that already knows SAP, but it costs little and never buries the operative content.

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 mutating, 11-parameter creation tool with no annotations and no output schema, so the description should at minimum cover preconditions (transport layer/request for transportable packages) and what constitutes success or failure. It covers none of that, leaving the agent to reconstruct prerequisites from scattered schema property 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?

With 11 parameters at 100% schema description coverage, the schema already documents each field, including the transport-related conditionals. 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 an ABAP package in an SAP system) and adds a one-line definition of what a package is. The purpose is unambiguous and separable from read-side siblings like GetPackage or GetPackageContents, though 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 Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives (e.g., CheckPackage to validate first, GetPackage to inspect an existing one). The agent must infer everything about invocation context from the name alone.

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

CreateServiceBindingB

Create an OData service binding (V2 or V4, UI or Web API) for a service definition, in initial state.

ParametersJSON Schema
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 and generate the service binding after create. 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

B3.3/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 does disclose that the binding is created "in initial state" (inactive), which is useful, but it omits transport/permission prerequisites, what happens on failure, and how the default activate=true interacts with that initial 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?

A single front-loaded sentence with no filler. For a 12-parameter mutation tool it is arguably too terse, which keeps it from a 5, but every word earns its place.

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 12-parameter write tool with no annotations and no output schema, the description is thin. It says nothing about which parameters are required, transport handling, activation semantics, or error behavior, so an agent lacks the context needed to invoke it confidently.

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 12 parameters are already documented in the schema. The description's variant naming (V2 or V4, UI or Web API) merely restates the binding_variant enum rather than adding new meaning. 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 (Create) and resource (OData service binding), and scopes it to a service definition with the V2/V4 and UI/Web API variants named. It is distinguishable from UpdateServiceBinding/DeleteServiceBinding by the verb, though it never explicitly names 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 Guidelines3/5

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

"in initial state" implies the object is created inactive and may need ActivateServiceBinding, but the description never states when to use this versus ActivateServiceBinding or ValidateServiceBinding. Usage is only implied, not spelled out.

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

CreateServiceDefinitionC

Create a service definition that exposes CDS views as an OData service, in initial state.

ParametersJSON Schema
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

C2.9/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 for a mutation tool. It says 'in initial state' but never clarifies what that means relative to the schema's activate=true default, nor whether a transport request is mandatory in practice, what permissions are required, or what happens on name collision.

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 sentence with no filler; the scoping phrase 'in initial state' is placed where it is most useful. It is efficient, though it could spend one more clause on behavior instead of being quite so terse.

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 8-parameter mutating tool with no annotations and no output schema, the description is thin: it does not explain the activation/transport implications or what is returned. The rich 100%-covered schema compensates on parameters, but the behavioral gap keeps this at minimum-viable.

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 defaults for detail, activate, description, source_code and master_language, so the schema does the heavy lifting. The description adds no parameter-level meaning beyond that, which is the expected baseline 3 when coverage is complete.

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 ("Create a service definition") plus scope detail ("exposes CDS views as an OData service, in initial state"). This clearly separates it from Get/Update/DeleteServiceDefinition and CreateServiceBinding, 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 Guidelines2/5

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

No when-to-use context, prerequisites, or alternatives are given. The Agent must infer that this is the creation counterpart to the sibling read/update/delete tools, and nothing explains when a service definition is needed versus e.g. CreateServiceBinding.

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

CreateStructureB

Create a new ABAP structure in SAP system. Creates the structure object in initial state.

ParametersJSON Schema
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

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, yet it only says the object is created in 'initial state.' It omits critical traits such as the two-step create-then-update workflow, activation behavior, transport/lock requirements, and idempotency, all of which matter 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.

Conciseness4/5

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

Two short sentences with the verb and resource front-loaded and no filler. There is mild redundancy between 'Create a new ABAP structure' and 'Creates the structure object,' keeping it just short of 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 create tool with 9 parameters and no output schema, the description should surface the critical 'metadata-only create, then UpdateStructure with ddl_code' workflow, but it leaves that to the schema. The schema compensates, so the definition is adequate but not self-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% and the schema even explains the non-obvious caveat that `fields` and `includes` do not reach creation. The description itself adds no parameter meaning, so the baseline 3 applies as the schema does all 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?

The description states a specific verb and resource ('Create a new ABAP structure') and adds the scope qualifier that it lands in 'initial state,' which distinguishes it from sibling mutations like CreateTable and from UpdateStructure. It does not explicitly name those siblings, 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 phrase 'initial state' implies a follow-up step is expected, but the description never says when to prefer this over UpdateStructure or CreateTable. The important routing advice (use UpdateStructure with ddl_code after creating) 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.

CreateTableC

Create a new ABAP table in SAP system. Creates the table object in initial state.

ParametersJSON Schema
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

C2.9/5.0
Behavior2/5

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

There are no annotations, so the description carries the full disclosure burden. 'Creates the table object in initial state' usefully implies the object is not yet active, but the description says nothing about permissions, transport requirements, collision behavior when the table already exists, or reversibility — much of that is buried in the parameter 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 short sentences, front-loaded with the action and then the resulting state. Nothing is wasted, though the brevity leaves it thin for a mutation tool with six parameters.

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 description should ideally cover the creation-to-activation workflow and transport implications. 'Initial state' gestures at the activation step but the transport-request prerequisite and the follow-up UpdateTable flow are only implied, leaving moderate gaps for a mutating 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 parameter descriptions are rich (transport request caveat, description-not-reaching-creation note, master language defaulting), so the schema does the heavy lifting. The tool description adds no parameter meaning beyond it, matching 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 and resource ('Create a new ABAP table in SAP system') and adds a state qualifier ('initial state') that distinguishes it from ActivateTable and UpdateTable. It doesn't explicitly name a sibling, but the create-vs-modify distinction is clear from the repository of sibling verbs.

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 use CreateTable versus CheckTable, ActivateTable, or the UpdateTable follow-up. The only usage hint lives in the schema's `description` parameter, not in the tool description itself, so an agent gets no tool-level context on preconditions or next steps.

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

CreateTransportC

Create a new ABAP transport request in SAP system for development objects.

ParametersJSON Schema
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

C2.9/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 burden. It implies a mutation but does not disclose required authorizations, whether the request is immediately released/usable, side effects, or whether a task is auto-created. For a write operation with zero annotation coverage, this is a substantial 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 sentence with no filler. It is efficient, though it could carry one more routing or prerequisite clause without becoming bloated.

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 5-parameter mutation tool with no annotations and no output schema, the description should explain prerequisites, permissions, and what is returned/created. It provides only the bare purpose, leaving the agent without the information needed to call it safely in context.

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 (owner, detail, description, target_system, transport_type) are already documented. The description adds no parameter 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?

States a specific verb (Create) and resource (ABAP transport request) with scope ('for development objects'), so an agent knows exactly what is produced. It does not differentiate from closely related siblings like CreateTransportTask or AddTransportObject, which also act on the transport workflow.

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 guidance on when to create a transport versus a task, when to add objects, or any prerequisite (e.g., must a transport exist first). The agent is left to infer usage from the name alone.

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

CreateTransportTaskA

Create a task under an existing transport request, owned by a named user, and give it a type. The task is itself a request resource — it reads, writes and releases like one — and is what AddTransportObject and RemoveTransportObject address, since a request's objects live on its tasks. target_user is required: without it the server resolves an empty owner and refuses with SCTS_ADT_MSG 009. The task is typed Development/Correction (S) by default, because an Unclassified task refuses AddTransportObject on premise with SCTS_ADT_MSG 009 / TK127.

ParametersJSON Schema
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_userYesSAP 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.
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.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 well: it discloses that omitting target_user makes the server resolve an empty owner and fail with SCTS_ADT_MSG 009, and that an Unclassified task refuses AddTransportObject with SCTS_ADT_MSG 009/TK127. It omits permissions/idempotency behavior for this write, 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?

Front-loaded with the core action, then prerequisites and defaults, with no filler sentences. The error-code details are dense but each clause supports a decision the caller must make, though the passage could be trimmed 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 mutation tool with no annotations and no output schema, the description covers the critical failure modes, the required parameter and the default typing, and notes that the returned number is the task to be used downstream. Permission and rollback behavior are the only notable omissions.

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 it by explaining why target_user is required (empty owner causes a server refusal) and why task_type defaults to S (Unclassified breaks AddTransportObject). It adds no new syntax for detail, but the consequence framing is real added value.

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 task under an existing transport request) plus the ownership and typing constraints in the first sentence. It explicitly distinguishes itself from siblings CreateTransport, AddTransportObject and RemoveTransportObject by explaining that objects live on tasks, so an agent can route correctly 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 clear conditions: the request must already exist, target_user is mandatory, and the task is the resource that AddTransportObject/RemoveTransportObject operate on. It stops short of naming an explicit alternative ('if you only want a request, use CreateTransport') or a when-not-to-use case, but the context is strong.

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

CreateUnitTestB

Create ABAP Unit tests for a class: write its local test classes and activate the class.

ParametersJSON Schema
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

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 one important side effect: the class is activated as part of the call. However, it does not state whether existing test classes are overwritten (that detail lives only in the schema), whether the write is reversible, or what permissions/transport requirements apply.

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 sentence, front-loaded with the verb and resource, that also conveys the two-step effect. 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 mutation tool with no annotations and no output schema, the description is minimally adequate: it covers the core action and the activation side effect, and the rich schema covers inputs. It is still thin on failure behavior, overwrite semantics, and how it relates to the Update/Delete unit-test 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 description coverage is 100%, so the schema already documents all four parameters (class_name, test_class_source, transport_request, detail) thoroughly. The description adds no parameter-level meaning beyond the schema, which is the baseline-3 case 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 states a specific verb (Create) and resource (ABAP Unit tests for a class), and adds the concrete action of writing local test classes and activating the class. The 'for a class' qualifier implicitly distinguishes it from CreateCdsUnitTest and CreateFunctionGroupUnitTest, 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 Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no routing to alternatives such as UpdateUnitTest (for existing tests) or CreateCdsUnitTest (for CDS entities). The agent must infer that 'Create' is only for classes that lack tests and that the class must already exist.

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.

ParametersJSON Schema
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?

No annotations are provided, so the description carries the full behavioral burden. It implies destruction via 'Delete' and adds the transport-vs-local nuance, but says nothing about permissions required, irreversibility, or what happens to dependent objects. Some value added, but significant gaps remain 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?

Two short sentences, zero filler, with the action front-loaded and the transport caveat following. 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?

With no output schema and no annotations, the description is the only behavioral source. It covers the operation and the transport conditional adequately, but omits failure behavior, permission requirements, and post-deletion state for what is an irreversible 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%, so all three parameters are already documented in the schema, including the transport_request optionality note the description repeats. The description adds no syntax, format, or constraint detail 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+resource ('Delete an ABAP behavior definition') and names the underlying mechanism (ADT deletion API). The name is unambiguous against siblings like DeleteBehaviorImplementation and DeleteMetadataExtension, but the description itself doesn't call out those distinctions.

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 conditional hint about when a transport is needed, which is genuinely useful routing information. However, there is no explicit when-to-use guidance, no prerequisites (e.g., object must be inactive), and no mention of alternatives such as deactivating instead of deleting.

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

DeleteBehaviorImplementationC

Delete an ABAP behavior implementation from the SAP system via ADT deletion API. Transport request optional for local objects.

ParametersJSON Schema
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

C2.9/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 for a destructive operation. It notes that a transport is optional for local objects, but says nothing about irreversibility, required authorization, behavior on a failed delete, or error handling.

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 operation front-loaded and no filler. Nothing is wasted, though it is brief enough that the reader is left wanting more behavioral detail.

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?

A destructive tool with no annotations and no output schema should disclose more than it does. The description omits what deletion affects, whether the object must be inactive, and what the return contains – gaps that matter 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 all three parameters are already documented in the schema, including the terse/full/raw enumeration and the transport-vs-task distinction. The description adds only a slight restatement of the transport optionality, 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 (Delete) and resource (ABAP behavior implementation) along with the mechanism (ADT deletion API). It is clearly distinguishable from the CRUD siblings (Create/Get/UpdateBehaviorImplementation), 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 when-not-to-use guidance, no prerequisites, and no routing to alternatives. The only usage-adjacent hint is the transport-request note, which is about parameters, not about when to select this tool over siblings.

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

DeleteCdsUnitTestC

Delete the ABAP Unit tests of a CDS view: delete its test class.

ParametersJSON Schema
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

C2.9/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 implies a destructive operation but does not state irreversibility, permission/auth requirements, or the consequence of deleting the test class. The only added context is that the deletion targets the test class specifically.

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 tight sentence with the verb and target front-loaded and zero filler. Nothing wasted.

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 destructive tool with no annotations and no output schema, the description is too thin: it omits irreversibility warnings, transport-request implications, and any failure modes. The schema covers parameters, but behavioral completeness for a delete operation is lacking.

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 (detail, class_name, transport_request) are already documented in the schema. The description adds only the hint that class_name is the test class, 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?

States a specific verb and resource: 'Delete the ABAP Unit tests of a CDS view', and clarifies the scope with 'delete its test class'. This distinguishes it from generic DeleteUnitTest and DeleteFunctionGroupUnitTest by naming the CDS view target, though it does not explicitly reference 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?

The description gives no when-to-use vs alternatives guidance, no mention of prerequisites (e.g. a transport request for transportable objects), and no exclusions. An agent must infer usage from the name alone.

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.

ParametersJSON Schema
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.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. Beyond naming the API and the transport rule, it says nothing about irreversibility, authorization requirements, dependency/in-use checks, or error behavior for a destructive operation. The word 'Delete' alone implies permanence but the definition adds little beyond it.

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 zero filler; the core action is front-loaded and the transport qualifier follows immediately after. Every clause 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?

With no annotations and no output schema, the description should do more for a destructive tool: what happens on success/failure, whether deletion is recoverable, and how dependencies are handled are all unstated. It covers the parameters adequately but leaves behavioral context thin.

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 class_name, transport_request, and the detail enum. The description's note on transport_request ('optional for local objects') merely repeats what the schema already states, so no meaning is added. 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 ('Delete an ABAP class') and names the mechanism (ADT deletion API), so an agent can distinguish it from the many Delete* siblings by resource. However, it does not explicitly contrast itself with the alternative delete tools (DeleteInterface, DeleteLocalTestClass, etc.), leaving that differentiation to the resource noun 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' gives a conditional usage hint tied to the nature of the target class. It does not say when to prefer this tool over siblings, nor state prerequisites or when deletion is inappropriate (e.g., class in use, active vs inactive).

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.

ParametersJSON Schema
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.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, but it only states the action and a transport nuance. It does not disclose irreversibility, authorization requirements, what happens to the object in packages/transports, or error/edge conditions 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?

Two short sentences with the core action front-loaded. The "via ADT deletion API" phrase is a minor, slightly redundant addition but overall the entry is tight.

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 delete with a fully documented schema and no output schema, the essentials are present. But with no annotations and a destructive action, more on behavior (reversibility, permissions, failure modes) would complete it.

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% (all three params documented, including the transport_request conditional), so the baseline is 3. The description adds nothing about parameter semantics beyond what the schema already 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+resource ("Delete an ABAP data element") which is distinguishable from siblings like DeleteDomain, DeleteTable, DeleteStructure by the resource. However "via ADT deletion API" is implementation trivia that doesn't sharpen the purpose.

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 "Transport request optional for local objects" gives one conditional usage cue, but there is no when-to-use vs alternatives guidance (e.g. relative to UpdateDataElement or conditions under which deletion fails or should be deferred). 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.

DeleteDdlC

Delete a DDL source from the SAP system via ADT deletion API. Transport request optional for local objects.

ParametersJSON Schema
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

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure for a destructive operation, yet only hints at transport-request handling. It says nothing about permissions, irreversibility, cascade effects, or what a successful deletion returns.

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 no wasted words, front-loading the core action. Slightly telegraphic, but appropriately sized for the tool's simplicity.

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 definition is thin. Parameters are fully covered by the schema, but the lack of behavioral context (irreversibility, prerequisites) leaves a gap an agent would want filled 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 description coverage is 100%, so all three parameters are already documented in the schema. The description's note about transport_request being optional for local objects echoes the schema rather than adding new meaning, matching 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 and resource ('Delete a DDL source') and names the mechanism (ADT deletion API). This cleanly separates it from sibling tools like GetDdl, CreateDdl, UpdateDdl and ActivateDdl, though it doesn't explicitly call out 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?

The description offers no when-to-use or when-not-to-use guidance relative to alternatives such as UpdateDdl or ActivateDdl. The only contextual note ('Transport request optional for local objects') concerns a parameter, not tool selection.

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

DeleteDomainB

Delete an ABAP domain from the SAP system via ADT deletion API. Transport request optional for local objects.

ParametersJSON Schema
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

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 destructive operation. It does not disclose irreversibility, required authorizations, what happens if the domain is referenced by other objects, or error behavior; it only notes the API used and the transport-request conditional.

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 action front-loaded and no filler. Slightly under-informative rather than verbose, but structurally clean.

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 destructive mutation tool with no annotations and no output schema, the description is thin: it omits destructive-nature warnings, prerequisites, failure modes, and any mention of the detail response control. An agent has enough to select it but not enough to invoke it 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 baseline is 3. The description's 'transport request optional for local objects' merely restates what the transport_request schema field already says, adding no new syntax or format detail, and it says nothing about domain_name or the detail enum.

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 (Delete) and resource (ABAP domain) and names the mechanism (ADT deletion API). The 'Delete' prefix cleanly separates it from the sibling CreateDomain/GetDomain/UpdateDomain/ActivateDomain/CheckDomain without ambiguity.

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 use this tool versus alternatives, nor any precondition (e.g., object must exist, must be inactive or already activated). The transport note is contextual color rather than usage 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.

ParametersJSON Schema
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.1/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 notes the transport caveat but does not disclose consequences of deletion (whether includes and function modules are removed, reversibility, required authorization, or whether a prior CheckFunctionGroup is needed). For a destructive mutation this is a significant 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?

Two tight sentences with no filler, and the core action is front-loaded before the transport caveat. Efficient and readable.

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 destructive operation with no annotations and no output schema, the description is thin. It omits deletion consequences, permission requirements, and error/failure behavior, leaving the agent under-informed about a high-impact action.

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, setting the baseline at 3. The description reinforces transport_request semantics (required for transportable, optional for local) but adds nothing for function_group_name or 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: 'Delete an ABAP function group ... via ADT deletion API.' An agent can immediately tell what the tool does. It does not, however, distinguish itself from sibling delete tools (DeleteFunctionModule, DeleteFunctionInclude) beyond the resource 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?

Adds a conditional about transport_request ('optional for local objects'), which is useful invocation guidance, but offers no explicit when-to-use vs alternatives (e.g., when to delete vs activate, or how it relates to DeleteFunctionModule/Include). 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.

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.

ParametersJSON Schema
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?

With no annotations, the description carries the full burden and does add real behavior: the backend rejects function-module include deletions and transport requests are optional for local objects. However, it omits whether the delete is irreversible, what confirmation or permissions are needed, and what gets destroyed — significant gaps for a destructive 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 tightly scoped sentences with the core action front-loaded and the critical exclusion immediately following. 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-param destructive tool with no annotations and no output schema, the description covers purpose, a key exclusion, and transport handling well. It falls short of complete because it never addresses irreversibility or required preconditions for the 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 all four parameters including the transport_request/optional-for-local semantics. The description's transport note merely echoes the schema and adds no syntax or format detail beyond it; 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 (Delete) and resource (ABAP function group include) and clarifies the mechanism (ADT deletion API). An agent can distinguish this from DeleteFunctionModule and DeleteFunctionGroup without opening a 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?

Provides a clear exclusion — function module includes must be deleted via Function Builder and the backend rejects such deletions. It gives prerequisite context but does not name a specific MCP sibling to route to for the excluded case, 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.

DeleteFunctionModuleB

Delete an ABAP function module from the SAP system via ADT deletion API. Transport request optional for local objects.

ParametersJSON Schema
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.1/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 for a destructive operation. It discloses the transport-request nuance but says nothing about irreversibility, whether the deletion can be undone, required authorizations, or what happens on failure for a tool that permanently removes an object.

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, front-loaded with the verb and resource, with no filler. Efficiency is good, though the second sentence is somewhat redundant with the schema's transport_request description.

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 destructive, non-annotated tool with no output schema, the description is thin: it omits irreversibility, authorization requirements, and error/return behavior. The transport note is useful but does not compensate for the missing safety and 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 four parameters are documented in the schema itself, including the transport_request local/transportable distinction. The description merely restates that transport nuance rather than adding syntax, format, or constraints 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 (delete an ABAP function module) plus the mechanism (ADT deletion API), which cleanly separates it from siblings like DeleteFunctionGroup and DeleteFunctionInclude. It stops short of explicitly naming those siblings as alternatives, so it falls 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?

The only usage signal is that the transport request is optional for local objects, which implies when a transport is needed. There is no explicit when-to-use guidance, no discussion of alternatives (e.g. deactivating vs deleting), and no stated prerequisites or confirmation expectations.

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

DeleteInterfaceA

Delete an ABAP interface from the SAP system via ADT deletion API. Transport request optional for local objects.

ParametersJSON Schema
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

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 that deletion goes through the ADT deletion API and that transport requests are optional for local objects, but says nothing about irreversibility, required permissions/locks, or what happens on a partial/failed delete 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?

Two short sentences, zero filler, with the core action front-loaded before the transport caveat. Every sentence 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?

For a destructive tool with no annotations and no output schema, the description covers the action and the transport nuance but omits failure/rollback behavior, permission requirements, and confirmation semantics. Adequate but with clear gaps given the operation's risk profile.

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, transport_request, and the detail enum thoroughly. The description repeats the optional-transport nuance from the schema without adding new parameter semantics, which is the baseline 3 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 (Delete) and resource (ABAP interface) plus the mechanism (ADT deletion API), which readily distinguishes it from the CreateInterface/GetInterface/UpdateInterface siblings. It stops short of explicitly naming those siblings as alternatives, so it is clear but not maximally 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 clause 'Transport request optional for local objects' implies usage context for when a transport_request is needed, but there is no explicit when-to-use vs when-not guidance or reference to alternatives like UpdateInterface or DeleteFunctionModule.

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.

ParametersJSON Schema
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?

With no annotations, the description carries the full behavioral burden, and it does add real value by disclosing the lock/update/unlock lifecycle and optional activation. However, it omits key traits for a destructive operation: whether deletion is reversible, what happens if the object is locked by another session, and whether it fails on inactive parents.

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 purpose front-loaded and mechanism/behavior following. 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 4-parameter mutation tool with no annotations and no output schema, the description covers purpose, mechanism and lock handling but leaves error/permission behavior and return expectations unaddressed. Adequate 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 every parameter is already documented in the schema. The description adds almost nothing beyond the schema, apart from echoing 'optional activation' for activate_on_delete. Baseline 3 is appropriate 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 (Delete) and resource (local definitions in an ABAP class) and even names the mechanism, 'clearing the definitions include.' This clearly separates it from siblings like DeleteLocalTypes, DeleteLocalMacros and DeleteLocalTestClass, which target different include types.

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 says what the tool does but gives no when-to-use guidance, no prerequisites, and never references the obvious pairings (UpdateLocalDefinitions to modify instead, or GetLocalDefinitions before deleting). The agent must infer usage entirely from the name.

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 are supported in older ABAP versions but not in newer ones.

ParametersJSON Schema
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.9/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 real behavior: lock/update/unlock handling and optional post-delete activation, plus the version-support caveat. It stops short of stating required permissions, transport/lock prerequisites, or what happens when no macros include exists, which matters 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 short sentences, front-loaded with the verb+resource+mechanism before the behavioral and version notes. No filler, though the lock/update/unlock clause is slightly cryptic without elaboration.

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 destructive tool with no annotations and no output schema, the description covers purpose, mechanism, side effects, and the important version caveat. Remaining gaps (error behavior, authorization, whether the parent class must be inactive) are moderate rather than critical.

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; the description adds a small amount by tying "optional activation" to activate_on_delete and framing the operation as a mutation that manages locks. The transport_request and detail parameters get no additional 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?

States a specific verb and resource ("Delete local macros from an ABAP class") and goes further by naming the mechanism ("by clearing the macros include"). This distinguishes it from the other Delete* siblings (DeleteLocalTypes, DeleteLocalDefinitions, DeleteLocalTestClass) without needing to open a 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?

There is no explicit when-to-use/when-not-to-use guidance or named alternative among the DeleteLocal* siblings. The closing note that macros exist only in older ABAP versions is an implied precondition, but the agent must infer that this tool is effectively a no-op or error on newer systems.

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

DeleteLocalTestClassC

Clear the local test classes include of a class under the class lock, and optionally activate the class.

ParametersJSON Schema
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

C2.9/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 does disclose that the operation happens 'under the class lock' and mentions an optional activation, but it omits that this is a destructive/irreversible delete, whether permissions are required, and what happens to the parent class afterwards. The activation detail largely restates the activate_on_delete parameter.

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 the core action front-loaded. It is efficient, though the phrasing 'local test classes include' is slightly awkward 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?

For a destructive 4-parameter tool with no annotations and no output schema, the description is minimally adequate. It conveys the operation and lock context but leaves the destructive nature, side effects on the parent class, and error conditions 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 description coverage is 100%, so all four parameters (class_name, transport_request, activate_on_delete, detail) are already documented in the schema. The description adds no format or semantic 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 specific verb+resource ('Clear the local test classes include of a class'), which distinguishes it from read/update siblings like GetLocalTestClass and UpdateLocalTestClass. However, the wording is jargon-heavy and it does not differentiate itself from nearby delete siblings such as DeleteUnitTest or DeleteCdsUnitTest.

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 use this tool versus alternatives, nor any prerequisites such as the class needing to exist or be unlocked. The agent must infer usage entirely from the name.

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

DeleteLocalTypesB

Delete local types from an ABAP class by clearing the implementations include. Manages lock, update, unlock, and optional activation.

ParametersJSON Schema
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

B3.3/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 does disclose real internal behavior ('Manages lock, update, unlock, and optional activation'), which is useful context an agent cannot get from the schema. However, it omits critical detail for a destructive operation: irreversibility, permission requirements, transport handling, and what happens when activation 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?

Two tight sentences with no waste; purpose is front-loaded and the behavioral note follows. Every clause earns its place and there is no 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 4-parameter tool with no annotations and no output schema, the description covers the core mechanism and lifecycle but leaves gaps around permissions, transport behavior, and return expectations. It is minimally 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 four parameters (including the 'detail' enum and 'transport_request') are already fully documented in the schema. The description only echoes the optional activation concept covered by 'activate_on_delete', adding no syntax or format 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 ('Delete local types from an ABAP class') plus the exact mechanism ('clearing the implementations include'), which is well beyond restating the name. It does not, however, explicitly contrast itself with siblings like DeleteLocalDefinitions, DeleteLocalMacros, or DeleteLocalTestClass, leaving the agent to rely on the name to disambiguate.

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 no when-to-use guidance, no prerequisites, and no routing to alternatives such as UpdateLocalTypes or GetLocalTypes. Nothing tells the agent under what circumstances local types should be cleared versus other local-type operations.

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.

ParametersJSON Schema
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

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 it does disclose the most important behavioral fact: deletion is cascading and destroys all contained messages, not just the class header. It also flags the transport dependency. It stops short of stating irreversibility, permission requirements, or failure behavior for non-existent classes.

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, no filler, with the destructive scope front-loaded before the transport caveat. Every 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 three-parameter delete with no output schema, the description covers the essential agent-facing facts: what is destroyed and the transport requirement. It is slightly thin on post-deletion behavior and error conditions, 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 description coverage is 100%, including the enum for 'detail' and the transport-request semantics, so the schema already documents all three parameters. The description's transport sentence essentially restates the schema text rather than adding format, default, or validation detail. 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 (Delete), the exact resource (ABAP message class / MSAG), the mechanism (ADT deletion API), and the cascade scope ('and all of its messages'). This last clause cleanly separates 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?

It gives one prerequisite condition — transport request required for transportable objects, optional for local ones — which tells the agent when the parameter is needed. However, it never routes the agent between this tool and DeleteMessageClassMessage or other delete siblings, leaving the when-to-use decision implied.

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.

ParametersJSON Schema
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

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 the transport-request requirement for transportable objects and the non-destructive scope (other messages retained), but says nothing about reversibility, authorization needs, or the effect of omitting transport_request for a transportable object.

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, zero filler, with the core action and scope front-loaded and the transport prerequisite following. Every 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 3-param delete tool with full schema coverage and no output schema, the definition covers the action, scope, and the one non-obvious prerequisite (transport request). It stops short of the irreversibility/permission context that a destructive tool with no annotations ideally supplies.

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, message_class_name, and transport_request are already documented with examples and the transportable/local distinction. The description's 'by number' and transport note merely echo the schema, adding no syntax or format detail beyond it.

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 (Remove) + resource (one message in an ABAP message class/T100) + key differentiator: it keeps the class and its other messages, which cleanly separates it from the sibling DeleteMessageClass. An agent can distinguish it from Get/UpdateMessageClassMessage 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?

The clause 'keeping the class and its other messages' implicitly routes the agent away from DeleteMessageClass and toward this tool when only a single message must go. However, it never explicitly names an alternative or states a when-not condition, so the routing is inferred rather than declared.

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.

ParametersJSON Schema
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.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 must carry the full behavioral burden. It states that the tool deletes an object, but it does not disclose whether deletion is irreversible, what permissions are required, how dependent objects are affected, or what happens if the object does not exist. The transport note is minimal and mirrors schema-level information.

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, front-loads the core action, and contains no filler. Every sentence contributes directly to identifying the operation and one relevant condition.

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 destructive operation with no annotations and no output schema, the description is too thin. It does not explain behavioral consequences, permission requirements, or side effects, leaving an agent without enough context to invoke the tool safely and correctly beyond the schema's 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%, so the schema already documents all three parameters. The description's note that "Transport request optional for local objects" repeats what the schema says for transport_request and adds no new semantic detail beyond the structured fields.

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 ("Delete") and resource ("ABAP metadata extension") with scope ("from the SAP system"). This clearly distinguishes it from sibling tools such as CreateMetadataExtension, GetMetadataExtension, UpdateMetadataExtension, and CheckMetadataExtension.

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 guidance on when to use this tool versus alternatives, nor does it state prerequisites or exclusions. The only contextual note, "Transport request optional for local objects," is a parameter condition rather than usage guidance.

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.

ParametersJSON Schema
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 bears the full burden for a destructive operation. It does disclose that deletion goes through the ADT deletion API and that the transport request is only needed for non-local objects, adding real behavioral context. It omits permissions/prerequisites, irreversibility, and cascading effects, so it is only partially transparent for a delete 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, no filler, and the core action (delete) is front-loaded ahead of the transport nuance. Every sentence 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?

For a destructive delete with no annotations and no output schema, the description covers the essential action and transport conditionality but does not explain what is returned or what preconditions/permissions are required. Adequate but with clear gaps given the operation's risk.

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 are already documented in the schema, including the enums for detail and response_format (the latter explicitly noted as a no-op kept for backward compatibility). The description only restates the transport_request conditionality, adding little beyond the schema, matching the baseline-3 expectation.

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 a precise resource (ABAP service binding via ADT deletion API), which cleanly distinguishes it from GetServiceBinding, CreateServiceBinding, UpdateServiceBinding, and the other Delete* siblings. It does not explicitly name an alternative, but the resource naming 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?

The clause 'Transport request optional for local objects' gives a conditional usage hint for one parameter, which is useful. However, there is no explicit when-to-use guidance versus alternatives such as deactivating the binding (ActivateServiceBinding) or the delete-vs-update decision, leaving selection largely implied by the tool name.

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

DeleteServiceDefinitionC

Delete an ABAP service definition from the SAP system via ADT deletion API. Transport request optional for local objects.

ParametersJSON Schema
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

C2.9/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 behavioral burden. It conveys that this is a real deletion on the SAP system but never states that it is irreversible, whether it applies to active or inactive versions, what happens to the transport entry, or what permission/auth is needed. Only the transport-request nuance adds 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?

Two short sentences with the core action front-loaded and no filler. Nothing is wasted, though the second sentence is only a partial constraint rather than a complete usage statement.

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 destructive, annotation-free tool with no output schema, the description omits the essentials an agent needs: irreversibility, side effects on active objects or transports, and failure behavior. The transport hint is the sole compensating 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?

Schema description coverage is 100%, so all three parameters (including the detail enum) are already documented in the schema; baseline 3 applies. The description's transport note duplicates the schema's own wording 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 service definition) plus the mechanism (ADT deletion API), which is unambiguous against the many Get*/Update* siblings. It does not, however, differentiate itself from the parallel Delete* family (DeleteServiceBinding, DeleteDomain) beyond the resource name.

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 signal is 'Transport request optional for local objects,' which is a partial prerequisite. There is no statement of when to delete vs. other lifecycle operations, no preconditions (must the object be inactive/unlocked?), and no mention of what to do if the deletion fails.

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.

ParametersJSON Schema
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.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 says the tool deletes via the ADT deletion API but does not disclose irreversibility, permission requirements, whether the object must be inactive, what happens on failure, or what the response contains — significant gaps 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?

Two short sentences, with the core action front-loaded and the transport caveat following. Nothing is wasted, though it is lean to the point of omitting useful destructive-operation 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 simple 3-parameter delete tool with one required argument and fully-described schema, the basics are covered. But with no annotations and no output schema, the description should at least warn about destructive/irreversible behavior and any prerequisites, which it omits.

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 structure_name, transport_request, and the detail enum fully. The description's 'transport request optional for local objects' merely restates what the schema says, adding no format or syntax 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?

The description gives a specific verb and resource ('Delete an ABAP structure from the SAP system') plus the mechanism (ADT deletion API), which cleanly separates it from DeleteTable, DeleteInterface, and CreateStructure/UpdateStructure siblings. It stops short of explicitly naming the sibling boundaries, but the resource 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?

The clause 'Transport request optional for local objects' gives conditional context for one parameter, implying when a transport is required. However, there is no explicit when-to-use guidance, no preconditions (e.g. object must be inactive/unlocked), and no note on irreversibility of a delete.

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

DeleteTableB

Delete an ABAP table from the SAP system via ADT deletion API. Transport request optional for local objects.

ParametersJSON Schema
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

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. For a destructive, irreversible operation it discloses nothing about whether the delete is permanent, what happens to dependent artifacts, required authorizations, or confirmation requirements -- only that the transport request is optional.

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 core action and scope, with no filler. It could still be slightly richer, 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 mutating operation with no annotations and no output schema, the description is minimally adequate: it identifies the action, target, and one parameter nuance, but omits consequences, permissions, and side effects 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 description coverage is 100%, so the schema already documents all three parameters (including the transport/table distinction). The description's transport note duplicates the schema's own wording, adding no meaning beyond it. 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 (delete) and resource (ABAP table) and adds the mechanism (ADT deletion API). The resource naming inherently distinguishes it from the many sibling Delete* tools (DeleteStructure, DeleteDomain, DeleteDataElement).

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' gives a usage condition for one parameter, but the description never says when to reach for DeleteTable versus alternatives, nor any precondition such as object must exist or be unlocked. Usage is only implied by the tool name.

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

DeleteUnitTestA

Delete the ABAP Unit tests of a class: remove its local test classes, keeping the class.

ParametersJSON Schema
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

A3.7/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 does disclose the key destructive scope (local test classes removed, class retained), which is genuinely useful. However it says nothing about reversibility, required authorizations, transport/lock implications, or the effect of the transport_request parameter on 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.

Conciseness5/5

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

A single front-loaded sentence that states the action, the target, and the boundary in one clause. 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 mutation tool with no annotations and no output schema, the description covers what is deleted and what survives, which is the essential fact. It omits prerequisites, authorization/transport requirements, and error behavior, so it 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%, so all three parameters (class_name, transport_request, detail) are already documented in the schema, including the enum values for detail. The description adds no per-parameter meaning beyond 'of a class', 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?

Names a specific verb (Delete) and a precise resource (ABAP Unit tests / local test classes of a class), and explicitly scopes the operation with 'keeping the class', which disambiguates it from DeleteClass and approaches DeleteLocalTestClass. An agent can identify the target 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 when it applies by specifying it removes only local test classes while retaining the class, but it never states prerequisites, when to prefer DeleteUnitTest over DeleteLocalTestClass, or any exclusions. 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.

DescribeByListB

[read-only] Batch description for a list of ABAP objects. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectsYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations provided. Description only notes [read-only], but does not disclose additional behaviors such as output format, pagination, or limits. Minimal transparency beyond 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.

Conciseness5/5

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

Two sentences, no wasted words. Front-loaded with read-only and purpose. Highly concise for the information conveyed.

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 description omits return format. For a batch tool, missing information about what 'description' entails (e.g., structure of each object's description). Adequate 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 0% per context. Description adds the input structure and lists possible types, providing meaning beyond the bare schema. However, it does not explain parameter constraints or defaults.

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?

Description clearly states 'Batch description for a list of ABAP objects,' specifying verb and resource. It lists object types, distinguishing it from siblings that target single objects or actions.

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?

Description implies use for batch description but lacks explicit guidance on when to use this tool over alternatives like GetObjectInfo or GetClass. No when-not-to-use or alternative mentions.

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.

ParametersJSON Schema
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?

The description explicitly marks the tool as '[read-only]', which signals no side effects. It also states the output format ('JSON AST'). Since annotations are absent, the description adequately covers behavioral traits for a simple parse 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 a single, well-structured sentence. It front-loads the read-only nature, uses clear verb-object structure, and defines the acronym AST. Every word contributes to understanding.

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 tool with one required parameter and no output schema, the description covers input, operation, and output format. It doesn't address error handling or size limits, but these are not critical for understanding core functionality.

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?

With 100% schema coverage, the input schema already describes the 'code' parameter. The description does not add further detail beyond rephrasing the schema, so it meets but does not exceed 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?

The description clearly states the tool's purpose: parsing ABAP code and returning an AST in JSON format. It uses precise verbs ('Parse', 'return') and specifies the resource ('ABAP code', 'AST'). Among many sibling 'Get' tools, it uniquely identifies its function without confusion.

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 is for obtaining an AST from ABAP code, but it does not explicitly state when to use this tool over alternatives like GetAbapSemanticAnalysis or GetAbapSystemSymbols. No when-not or conditions are provided.

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

GetAbapSemanticAnalysisB

[read-only] Perform semantic analysis on ABAP code and return symbols, types, scopes, and dependencies.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesABAP source code to analyze

TDQS

B3.4/5.0
Behavior3/5

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

The description includes '[read-only]' explicitly indicating no destructive side effects, which adds transparency beyond the absence of annotations. However, it does not disclose other behavioral traits such as performance implications, required permissions, or whether the analysis requires complete/valid code. The read-only hint is useful but minimal.

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 concise sentence with the read-only tag front-loaded. Every word is meaningful, and there is no redundancy or extraneous information. It efficiently conveys the tool's purpose.

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 has only one required parameter and no output schema, the description adequately explains what it returns (symbols, types, scopes, dependencies). It does not mention handling of incomplete or erroneous code, but overall it provides sufficient context for an AI agent to understand the tool's function.

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 input schema has 100% description coverage for the single 'code' parameter. The description adds no additional meaning beyond the schema's description ('ABAP source code to analyze'). Since the schema already clearly defines the parameter, the description does not provide extra semantic value.

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 states it performs semantic analysis on ABAP code and returns symbols, types, scopes, and dependencies. It uses a specific verb ('perform semantic analysis') and identifies the resource. However, among sibling tools like GetAbapAST and GetTypeInfo, the description does not differentiate when to use this over alternatives, which slightly reduces clarity.

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 is provided on when to use this tool versus alternative tools such as GetAbapAST or CheckClass. The description lacks any context about prerequisites, limitations, or scenarios where this tool is preferred, leaving the AI agent without direction.

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

GetAbapSystemSymbolsB

[read-only] Resolve ABAP symbols from semantic analysis with SAP system information including types, scopes, descriptions, and packages.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesABAP source code to analyze and resolve symbols for

TDQS

B3.4/5.0
Behavior3/5

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

The '[read-only]' prefix discloses a key behavioral trait. However, with no annotations provided, the description does not cover other aspects like permissions, rate limits, or side effects. It is adequate but minimal.

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 sentence with a tag, containing only essential information with no wasted words. It is perfectly concise and front-loaded.

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?

Despite no output schema, the description gives a good idea of what symbols are returned (types, scopes, descriptions, packages). For a simple single-parameter read tool, this is nearly complete, though explicit output format would be beneficial.

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 parameter description in the schema is clear ('ABAP source code to analyze'), and the tool description adds context about output contents but not about the parameter itself.

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 states it resolves ABAP symbols from semantic analysis, listing included information (types, scopes, descriptions, packages). It is specific and informative, though it does not explicitly differentiate from sibling tools like GetAbapSemanticAnalysis.

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 is provided on when to use this tool over alternatives or when not to use it. The sibling tools are listed but without explanation, leaving the agent to infer usage context.

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.

ParametersJSON Schema
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.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 behavioral burden; it declares the operation read-only via the '[read-only]' prefix, which is genuinely useful. Beyond that it says nothing about return format, validation-failure behavior, or error semantics, leaving the read-only marker as its main behavioral contribution.

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 sentence with no filler; the parenthetical example list is long but earns its place by supplying valid domain values. Slightly dense, 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 two-parameter, zero-required lookup tool with no output schema, the description conveys both modes (list-all and validate-one) and the resource being returned. It does not describe the shape of a validation result, a minor gap given the absent output schema.

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 enum for 'detail' is fully documented and the baseline is 3. The description goes beyond the schema by listing actual valid type codes (CLAS, TABL, PROG, DDLS, ...), which materially helps an agent populate 'validate_type' with a legal value.

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 (ADT object types) and enumerates concrete type codes, so the agent knows exactly what the tool returns. It does not explicitly differentiate itself from the similarly named sibling GetTypeInfo, but the scope ('all valid ADT object types') 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?

The 'or validate a specific type name' clause implies the second mode of use, but the description never states when to prefer this over GetTypeInfo, GetObjectsByType, or any Check* tool. Usage is inferable from the phrasing 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.

GetATCFindingsA

Read what an ATC run found, by the worklist_id RunATC answered. Works whether or not the run waited. 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.

ParametersJSON Schema
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
worklist_idYesWorklist identifier answered by RunATC.

TDQS

A4.1/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 it delivers: it discloses that results are available regardless of whether the run waited (async-tolerant read) and enumerates the finding payload contents. It does not mention permissions or any cost/limit considerations, 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 action and its key input; the remaining sentences describe the return shape and async tolerance. Slightly padded (the long list of returned fields) but each clause adds 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 usefully enumerates the returned fields (object, position, priority, check, message, coverage counts), and it covers async behavior. Nothing critical for calling the tool is missing, though the detail parameter's effect on output is left entirely to 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% and the detail enum is fully documented in the schema, so the baseline of 3 applies. The description adds the provenance of worklist_id (answered by RunATC) but nothing about the detail levels, which the schema already handles.

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 (Read) and resource (what an ATC run found) and keys it to the sibling RunATC, making the read-vs-run distinction obvious without opening either 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?

The phrase 'by the worklist_id RunATC answered' ties usage directly to a preceding RunATC call, and 'Works whether or not the run waited' tells the agent it is safe to call regardless of run completion. However, no explicit when-not or alternative-retrieval path is named.

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

GetATCRunStatusA

Ask whether an ATC run has ended. Takes the run_id from RunATC (only a run started with wait=false has one). Answers the status the server reports and whether it is finished — finished means ended, not that the checks passed. Read what it found with GetATCFindings, by worklist_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYesRun identifier answered by RunATC when wait was false.

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 full burden, and it delivers a genuinely non-obvious behavioral clarification: 'finished means ended, not that the checks passed.' That prevents a serious misinterpretation of the return value. It still omits whether the call blocks or must be polled, and what happens for an unknown/expired run_id.

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 question, then the precondition, then the interpretation caveat and the follow-up tool. No filler or restated boilerplate.

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 output schema and no annotations, the description covers purpose, provenance of the ID, semantics of the result, and the handoff to GetATCFindings. The only remaining gap is polling/blocking behavior and error handling for stale run IDs.

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 description already says the run_id is 'answered by RunATC when wait was false.' The description's 'only a run started with wait=false has one' largely restates that, so it adds little parameter-level meaning 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 and resource: 'Ask whether an ATC run has ended' tells the agent exactly what it retrieves, and it explicitly separates itself from RunATC (which starts the run) and GetATCFindings (which returns results). An agent can pick it out of a 100+ sibling list 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 Guidelines5/5

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

States the precondition (run_id comes from RunATC, and only a run started with wait=false produces one) and the follow-up route (use GetATCFindings with worklist_id for results). Both the when and the next-step alternative are explicit.

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

GetBehaviorDefinitionA

Retrieve ABAP behavior definition definition. Supports reading active or inactive version.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
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, the description carries the full burden. It implies a read-only retrieval and discloses that both active and inactive versions can be read, which is useful context. However, it says nothing about permissions, behavior when the object does not exist, or whether inactive reads require special state — gaps that matter for an unannotated 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?

Two short sentences with the primary purpose front-loaded and no filler. The duplicated 'definition definition' is the only rough edge.

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 getter with no output schema and full schema coverage, the description supplies enough to call the tool correctly. Minor missing pieces (error/no-found behavior) are acceptable given 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% and both parameters are fully documented, including the active/inactive enum and default. The description's version sentence merely restates what the schema already says, adding no syntax or semantic value 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 (Retrieve) and resource (ABAP behavior definition), clearly distinguishable from siblings such as GetBehaviorImplementation or GetBehaviorDefinitionVersionSource. The phrasing 'behavior definition definition' is redundant but does not impair comprehension.

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 second sentence implies the tool is used when either the active or inactive version is needed, but there is no explicit when-to-use guidance, no mention of when to prefer GetBehaviorDefinitionVersionSource or GetBehaviorDefinitionVersions, and no prerequisites.

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

GetBehaviorDefinitionVersionDiffA

[read-only] Compute a unified diff between two RAP behavior definition versions, by their content_uris (taken from GetBehaviorDefinitionVersions entries).

ParametersJSON Schema
NameRequiredDescriptionDefault
content_uri_toYesOpaque content_uri of the NEW/compare version (from a GetBehaviorDefinitionVersions entry).
content_uri_fromYesOpaque content_uri of the OLD/base version (from a GetBehaviorDefinitionVersions entry).

TDQS

A4.1/5.0
Behavior3/5

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

The description includes '[read-only]' indicating non-destructive behavior, but with no annotations, it does not disclose other traits like output format, error handling, or performance implications, leaving gaps for an agent.

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 concise sentence, front-loaded with '[read-only]', and every part provides essential information without 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?

Missing an output schema, the description does not specify the format or structure of the unified diff result. While it hints at a unified diff, it lacks details on what the agent can expect as output, which is needed for full completeness.

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% with parameter descriptions. The description adds value by clarifying that content_uris are derived from GetBehaviorDefinitionVersions entries, enhancing context beyond the schema's 'opaque' description.

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 explicitly states it computes a unified diff between two RAP behavior definition versions using content_uris from GetBehaviorDefinitionVersions, clearly distinguishing it from other version diff tools for 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 Guidelines4/5

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

It specifies that content_uris should be taken from GetBehaviorDefinitionVersions entries, providing input provenance. However, it lacks explicit guidance on when to use this tool versus alternative diff tools or contexts where it should not be used.

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

GetBehaviorDefinitionVersionsA

[read-only] List the SAP version history of a RAP behavior definition. Returns each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and an opaque content_uri to fetch that version's source via GetBehaviorDefinitionVersionSource.

ParametersJSON Schema
NameRequiredDescriptionDefault
behavior_definition_nameYesRAP behavior definition name.

TDQS

A3.9/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It declares the tool as '[read-only]', which is critical behavior. It lists all return fields including the opaque content_uri and references a related tool for fetching source. Does not cover auth or rate limits, but for a read operation this is sufficient.

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 sentence packs key info: read-only flag, purpose, returned fields. Efficient but could benefit from splitting into multiple lines for readability. No redundant words.

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 provided, but description lists all returned fields. Covers purpose, parameter, and outcome. References a sibling tool for further action (fetching source). For a list operation, this is fairly 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% with a single parameter described as 'RAP behavior definition name.' The description adds no new information beyond the schema, so baseline score 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?

Description clearly states 'list the SAP version history of a RAP behavior definition' with specific verb+resource. Distinguishes from sibling version tools by specifying 'RAP behavior definition', making it unique among many Get...Versions 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?

No explicit guidance on when to use vs alternatives. The description implies usage for listing versions of a behavior definition, but does not mention when not to use or point to sibling tools like GetBehaviorDefinitionVersionDiff for comparison purposes.

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

GetBehaviorDefinitionVersionSourceA

[read-only] Fetch the source of a specific RAP behavior definition version by its content_uri (taken from a GetBehaviorDefinitionVersions entry).

ParametersJSON Schema
NameRequiredDescriptionDefault
content_uriYesOpaque content_uri taken from a GetBehaviorDefinitionVersions entry.

TDQS

A4.2/5.0
Behavior3/5

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

The description includes a '[read-only]' tag upfront, which is a behavioral hint. It states it fetches source, but does not disclose potential errors, rate limits, or output format. Without annotations, the description provides basic but not comprehensive 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 a single, well-structured sentence front-loaded with the read-only indicator. Every part is useful and there is no unnecessary 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?

Given the low complexity (one parameter, no output schema, no annotations), the description adequately explains the input source and basic function. It could be improved by mentioning what the source output looks like (e.g., source code text) but is sufficient for a simple fetch operation.

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 input schema has 100% coverage with a description for content_uri. The tool description adds the context that the content_uri is from GetBehaviorDefinitionVersions, which is valuable beyond the schema's 'opaque' description.

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 tool fetches the source of a specific RAP behavior definition version using a content_uri. It distinguishes from sibling Get*VersionSource tools by specifying the object type (RAP behavior definition).

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 indicates that the content_uri comes from a GetBehaviorDefinitionVersions entry, providing clear context for usage. However, it does not explicitly state when not to use or mention alternative tools, though the sibling list contains many similar tools.

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

GetBehaviorImplementationB

Retrieve ABAP behavior implementation definition. Supports reading active or inactive version.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
behavior_implementation_nameYesBehaviorImplementation name.

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 must carry the behavioral burden. It discloses that this is a retrieval operation and that active/inactive versions are supported, but it does not state permissions required, error behavior, side effects, or return characteristics.

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 two short sentences and is front-loaded with the core purpose. The second sentence largely restates the schema's version parameter, which is minor redundancy but not enough to make the definition bloated.

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 simple two-parameter retrieval tool with no output schema and full schema coverage, the description is minimally adequate: it states purpose and version support. However, with no annotations, it lacks any behavioral detail about permissions, safety, or error handling, and it provides no sibling differentiation.

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 both parameters, including the active/inactive enum and default. The description repeats the version support but adds no syntax or meaning beyond what the schema provides, 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 uses a specific verb ('Retrieve') and resource ('ABAP behavior implementation definition'), making the tool's basic function clear. However, it does not explicitly differentiate this tool from close siblings like GetBehaviorDefinition, so an agent must rely on the name alone for that distinction.

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 for reading a behavior implementation and notes that both active and inactive versions are supported, which gives some context. But it offers no explicit when-to-use guidance, no exclusions, and no comparison to alternative tools such as GetBehaviorDefinition or GetBehaviorDefinitionVersionSource.

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

GetClassB

Retrieve ABAP class source code. Supports reading active or inactive version.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
class_nameYesClass name.

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 burden. "Retrieve" signals a non-mutating read, and the active/inactive note clarifies that both states are readable, but there is no disclosure of error behavior (e.g., class not found), permission requirements, or result size limits. Minimum-viable rather than strong.

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, with the core purpose front-loaded ahead of the version qualifier. Every 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 simple two-parameter read getter with 100% schema coverage and no output schema, the description is nearly sufficient. The remaining gap is routing context (when to prefer GetClassVersions/GetClassVersionSource), which would make it self-sufficient in this large sibling namespace.

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% – both class_name and the version enum (with default and active/inactive semantics) are fully documented in the schema. The description's version sentence merely restates this, adding no syntax or format detail beyond the structured fields. 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 class source code." This is clearly distinguishable from write siblings like CreateClass/UpdateClass and from analysis tools. However, it does not differentiate itself from version-oriented siblings such as GetClassVersions, GetClassVersionSource, or GetClassVersionDiff, which overlap in subject matter.

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 guidance and no named alternatives, despite a crowded sibling set (GetClassVersions, GetClassVersionSource, GetClassVersionDiff, GetLocalTestClass). The only contextual hint is the version parameter, which is already in the schema. The agent must infer that this fetches the current source rather than a historical version.

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

GetClassVersionDiffA

[read-only] Compute a unified diff between two ABAP class versions, by their content_uris (taken from GetClassVersions entries).

ParametersJSON Schema
NameRequiredDescriptionDefault
content_uri_toYesOpaque content_uri of the NEW/compare version (from a GetClassVersions entry).
content_uri_fromYesOpaque content_uri of the OLD/base version (from a GetClassVersions entry).

TDQS

A4.4/5.0
Behavior4/5

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

The description marks the tool as read-only with '[read-only]' and states it computes a unified diff, which is useful behavioral context beyond the schema. No annotations exist, so the description carries the burden; missing details like authorization or error handling prevent a perfect score.

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, well-structured sentence that front-loads the read-only behavior and uses precise language. No unnecessary words.

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 absence of an output schema and no nested objects, the description adequately covers purpose and parameter origin. It explains the diff format (unified diff) but could mention prerequisites or response structure for completeness.

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% with descriptions, providing baseline 3. The description adds value by specifying that content_uris come from GetClassVersions entries, which directly informs parameter usage and source.

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 verb 'Compute', the resource 'unified diff between two ABAP class versions', and the method 'by their content_uris', distinguishing it from sibling version-listing tools like GetClassVersions and other object-specific diff 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?

The description explicitly ties parameter values to GetClassVersions entries, guiding when to use this tool. However, it does not mention when not to use it or contrast with other version comparison tools, though the sibling list provides implicit differentiation.

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

GetClassVersionsA

[read-only] List the SAP version history of a ABAP class. Returns each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and an opaque content_uri to fetch that version's source via GetClassVersionSource.

ParametersJSON Schema
NameRequiredDescriptionDefault
class_nameYesABAP class name.

TDQS

A4/5.0
Behavior4/5

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

The description begins with '[read-only]' indicating non-destructive behavior. It lists all returned fields (versionId, author, etc.) and notes conditional availability of transport info. No annotation provided, so description carries the burden well. However, no mention of authentication or rate limits.

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 sentence plus a list of returned fields, all front-loaded. No wasted words; every part adds value. Perfectly concise for the information conveyed.

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 one parameter, full schema coverage, no output schema, and many sibling tools, the description explains the output fields and links to GetClassVersionSource. It lacks mention of pagination or limits, but for a version listing tool, it's largely 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% with parameter 'class_name' described as 'ABAP class name.' The description adds context by framing it as 'SAP version history of a ABAP class' and hints at output, but does not add new meaning 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?

The description clearly states the tool lists SAP version history of an ABAP class, specifying the returned fields. It distinguishes itself from sibling GetClassVersionSource by mentioning the content_uri for fetching source. A specific verb-resource pair with clear 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?

The description does not explicitly state when to use this tool versus alternatives like GetClassVersionDiff or other Get*Versions tools. It implies a follow-up action via GetClassVersionSource but lacks when-not-to-use guidance. With many sibling version tools, more differentiation would help.

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

GetClassVersionSourceA

[read-only] Fetch the source of a specific ABAP class version by its content_uri (taken from a GetClassVersions entry).

ParametersJSON Schema
NameRequiredDescriptionDefault
content_uriYesOpaque content_uri taken from a GetClassVersions entry.

TDQS

A4.2/5.0
Behavior4/5

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

Discloses read-only behavior upfront via '[read-only]' tag. Explains input dependency. No annotations exist, so description carries full burden; it sufficiently covers expected behavior for a simple fetch 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?

Single, front-loaded sentence of 20 words with no wasted text. The read-only flag is placed at the beginning, maximizing scannability.

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 one parameter and no output schema, the description clearly explains what the tool does and how to obtain the input. It does not describe the output format, but for a simple source fetch this is adequate.

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 description for content_uri already states 'Opaque content_uri taken from a GetClassVersions entry.' The tool description repeats this without adding new meaning, 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?

Description clearly states the verb 'Fetch' and resource 'source of a specific ABAP class version', and specifies the input source (content_uri from GetClassVersions). It distinguishes from sibling tools like GetClassVersionDiff.

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?

Explicitly states the prerequisite: content_uri taken from GetClassVersions. Provides clear context for when to use, though does not list alternative tools for other scenarios.

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

GetDataElementB

Retrieve ABAP data element definition. Supports reading active or inactive version.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
data_element_nameYesData element 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 burden. It discloses only the active/inactive version capability, which merely restates the schema's version parameter, and says nothing about read-only nature, permissions, error behavior, or what the definition 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 short sentences, front-loaded with the core action and with zero filler. Appropriately sized for a simple getter, though brief enough that it under-delivers on context rather than being padded.

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 read tool with no output schema this is minimally adequate, but the absence of any annotations or safety/behavioral detail leaves gaps an agent must fill by inference.

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 is fully documented in the schema, so the baseline is 3. The description adds no syntax, format, or default 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.

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 data element definition") that clearly matches the tool name and distinguishes it from the Create/Update/Delete/Check/Activate DataElement siblings. It does not explicitly name a sibling, so no credit for routing, but the purpose 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?

"Supports reading active or inactive version" implies a use case (fetching either version state) but gives no when-to-use, prerequisites, or alternative routing among the many Get/Check/Activate siblings. Usage is inferred rather than stated.

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

GetDdlB

Retrieve ABAP DDL source definition. Supports reading active or inactive version.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
ddl_nameYesDDL source 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. 'Retrieve' implies a read-only operation, but the description says nothing about permissions, whether the caller must be authenticated, or what the response contains. The only behavioral note (active/inactive version) duplicates 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 short sentences, zero filler, with the core purpose front-loaded. Nothing wastes space.

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 simple read-only getter with no output schema and fully covered parameters, the description is minimally adequate. However, given numerous similar Get*Ddl* siblings, an agent lacks enough context to confidently select this tool over them.

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 well documented with an enum and default for version. The description adds no syntax, format, or naming conventions for ddl_name 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 (Retrieve) and resource (ABAP DDL source definition), and adds that it can read active or inactive versions. It is clear what the tool does, but it does not differentiate itself from close siblings like GetDdlVersionSource or GetDdlVersions, which also surface DDL source/version data.

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 mention of active vs inactive version implies a use case, but there is no explicit when-to-use guidance, no prerequisites, and no reference to the alternative sibling tools. 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.

GetDdlVersionDiffA

[read-only] Compute a unified diff between two CDS view (DDL source) versions, by their content_uris (taken from GetDdlVersions entries).

ParametersJSON Schema
NameRequiredDescriptionDefault
content_uri_toYesOpaque content_uri of the NEW/compare version (from a GetDdlVersions entry).
content_uri_fromYesOpaque content_uri of the OLD/base version (from a GetDdlVersions entry).

TDQS

A3.9/5.0
Behavior3/5

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

Declares '[read-only]' but does not elaborate on behavioral traits beyond annotations (none provided). No disclosure of output format, permissions, or error conditions. With no output schema, description should provide more 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?

Single concise sentence with front-loaded behavioral hint. Every word earns its place; no 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?

Tool is simple with only two string params and no output schema. Description covers purpose and parameter origin but lacks output format details and error handling. Incomplete for full contextual understanding.

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?

Adds value beyond schema by specifying that content_uris originate from GetDdlVersions entries. Schema coverage is 100%, so baseline 3; the extra context of opaque URIs and their source justifies a 4.

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?

Description clearly specifies verb ('Compute a unified diff'), resource ('CDS view (DDL source) versions'), and distinguishes from siblings like GetDdlVersions and GetDdlVersionSource. The '[read-only]' tag further clarifies its nature.

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 context by stating content_uris are taken from GetDdlVersions entries, but does not explicitly say when to use this tool versus alternatives (e.g., GetDdlVersionSource). No exclusions or prerequisites beyond the implied dependency.

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

GetDdlVersionsA

[read-only] List the SAP version history of a CDS view (DDL source). Returns each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and an opaque content_uri to fetch that version's source via GetDdlVersionSource.

ParametersJSON Schema
NameRequiredDescriptionDefault
ddl_nameYesCDS view (DDL source) name.

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description correctly marks the tool as [read-only] and lists the returned fields (versionId, author, etc.). However, it does not disclose potential behavioral traits such as result ordering, pagination limits, or error conditions, which would be helpful for safe invocation.

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 exceptionally concise: two sentences, no filler. The first sentence front-loads the purpose and read-only nature; the second enumerates return fields. Every word adds value, making it efficient for an agent to parse.

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 no output schema, the description adequately lists return fields. However, it lacks context on result ordering (e.g., by version descending), potential pagination, or how to interpret the content_uri. For a version history tool, these gaps reduce completeness.

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 input schema provides 100% coverage with a clear description for the sole parameter 'ddl_name'. The tool description does not add additional meaning beyond the schema, such as formatting expectations or examples, so it meets 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?

The description clearly states 'List the SAP version history of a CDS view (DDL source)', specifying the verb 'List' and the resource 'version history'. It distinguishes from the sibling GetDdlVersionSource by noting that the returned content_uri is used to fetch source via that tool, and also from other version tools by naming DDL source specifically.

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 for listing versions but does not explicitly state when to use this tool versus alternatives like GetDdlVersionDiff or other object version tools. There is no guidance on prerequisites or exclusions, leaving the agent to infer from context.

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

GetDdlVersionSourceA

[read-only] Fetch the source of a specific CDS view (DDL source) version by its content_uri (taken from a GetDdlVersions entry).

ParametersJSON Schema
NameRequiredDescriptionDefault
content_uriYesOpaque content_uri taken from a GetDdlVersions entry.

TDQS

A4.2/5.0
Behavior3/5

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

The description includes '[read-only]' to indicate safety. Since no annotations are provided, this helps. However, it does not detail return format, permissions, or potential costs. The minimal disclosure is adequate for a simple read operation but lacks depth.

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 sentence with a read-only tag. It is extremely concise, front-loaded with the key verb and resource, and contains no superfluous 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?

Given the tool's simplicity (one parameter, no output schema, read-only), the description provides enough context to use it correctly. It could mention the output is ABAP DDL source, but this is implicit from the name and 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?

The schema has 100% description coverage for the only parameter. The description adds context by specifying that content_uri comes from GetDdlVersions, which clarifies its provenance beyond the schema's generic description.

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 tool fetches the source of a specific CDS view version using a content_uri. It references GetDdlVersions as the source of the URI, which distinguishes it from similar tools like GetDdlVersions and GetDdlVersionDiff.

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 implies usage after GetDdlVersions to retrieve source for a specific version. It does not explicitly state when not to use or list alternatives, but the context and named sibling provide sufficient guidance.

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

GetDomainB

Retrieve ABAP domain definition. Supports reading active or inactive version.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
domain_nameYesDomain name.

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 burden. "Retrieve" implies a read-only operation and the version scope is disclosed, but there is no mention of error behavior, auth requirements, or what happens with a non-existent/inactive domain. Reasonable but thin for an un-annotated 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?

Two short, front-loaded sentences with no padding. Slightly weakened because the second sentence largely restates the version information already carried by 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 simple two-parameter read tool this is minimally viable, but with no annotations and no output schema the description gives no guidance on return shape, error cases, or interaction with the activate/check siblings. Adequate without being 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% and the version enum is fully documented with its default and semantics, so the schema does the heavy lifting. The description adds nothing beyond what the schema already states (active/inactive versions). 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 (Retrieve) and resource (ABAP domain definition), which cleanly distinguishes it from data-element/table/structure getters in the sibling list. However it does not distinguish itself from near-siblings like CheckDomain or the version-diff getters, 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 Guidelines2/5

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

"Supports reading active or inactive version" hints at a usage choice, but there is no explicit when-to-use, when-not, or naming of alternatives such as CheckDomain or CreateDomain/UpdateDomain. 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.

GetEnhancementImplA

[read-only] Retrieve source code of a specific enhancement implementation by its name and enhancement spot.

ParametersJSON Schema
NameRequiredDescriptionDefault
enhancement_nameYes[read-only] Name of the enhancement implementation
enhancement_spotYesName of the enhancement spot

TDQS

A3.5/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 full responsibility. It declares '[read-only]' indicating a safe read operation, but discloses no other behavioral traits such as authentication needs, rate limits, or side effects. This is minimal beyond the read-only hint.

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 sentence with the [read-only] prefix front-loaded. Every word earns its place; no redundancy or 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?

While the tool is simple (2 required params, no nested objects, no output schema), the description does not explain what the 'source code' looks like (e.g., format, multiline string) or confirm that it returns the code text. It is adequate but could be more complete for agent understanding.

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 descriptions in the schema already provide meaning for 'enhancement_name' and 'enhancement_spot'. The description adds 'by its name and enhancement spot' which largely repeats the schema. Baseline score of 3 is appropriate as the description adds minimal value 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 clearly states the verb 'retrieve', the resource 'source code of a specific enhancement implementation', and the distinguishing parameters (name and enhancement spot). It differentiates from sibling tools like GetEnhancements (which likely lists) and GetEnhancementSpot (which retrieves spot details).

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 for retrieving source code of an enhancement implementation but provides no explicit guidance on when to use vs alternatives, no context or exclusions. It is adequate but lacks direction.

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

GetEnhancementsB

[read-only] Retrieve a list of enhancements for a given ABAP object.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameYesName of the ABAP object
object_typeYes[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?

The description includes '[read-only]' indicating non-destructive behavior, which adds transparency beyond the absent annotations. However, it does not disclose error handling, empty results behavior, or performance 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?

Single sentence with front-loaded read-only hint. No wasted words. Efficient and clear.

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?

No output schema provided and description omits details about the returned enhancement list (format, fields, pagination). For a retrieval tool, this leaves significant gaps for an agent to understand the return value.

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 clear parameter descriptions. The tool description adds no additional semantic meaning beyond restating the parameters' purpose. Baseline 3 is appropriate as the schema already documents the parameters adequately.

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?

Clearly states it retrieves a list of enhancements for a given ABAP object. The verb 'retrieve' and resource 'enhancements' are specific. Distinguished from siblings like GetEnhancementImpl which retrieves a specific implementation.

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 guidance on when to use this tool versus alternatives. No mention of when not to use or any prerequisites. Implied usage from description is insufficient for an agent to decide between this and similar Get* tools.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
enhancement_spotYesName of the enhancement spot

TDQS

A3.8/5.0
Behavior4/5

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

The description explicitly includes '[read-only]', which transparently indicates that the operation does not modify state. Since annotations are absent, this self-disclosure is effective and there are no contradictions or hidden side effects 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 a single sentence that is direct and free of redundancy. It communicates the essential function without unnecessary elaboration.

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 adequately summarizes the expected output ('metadata and list of implementations') for a simple read operation, even without an output schema. It does not mention prerequisites or error cases, but these are not critical given the tool's straightforward nature.

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 sole parameter 'enhancement_spot' is described in the schema as 'Name of the enhancement spot', which is clear but adds no additional meaning beyond the schema. The description itself does not elaborate on the parameter's context or format, so it does not exceed the baseline for full 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 ('Retrieve'), a clear resource ('metadata and list of implementations'), and a target ('specific enhancement spot'), making the purpose immediately obvious. It also differentiates from sibling tools like GetEnhancements and GetEnhancementImpl by focusing on a single spot.

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 mention when to use this tool versus alternatives such as GetEnhancements or GetEnhancementImpl. There is no explicit guidance on selection criteria or when to prefer this tool over related ones.

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

GetFunctionGroupB

Retrieve ABAP function group definition. Supports reading active or inactive version.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
function_group_nameYesFunctionGroup 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, yet it discloses only that the tool reads the definition and which versions exist. It says nothing about permissions, whether inactive reads require special state, or the shape/size of what is returned. 'Retrieve' implies a non-destructive read, but that is inference, not 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?

Two short, front-loaded sentences with no filler; the core action leads and the version capability follows. Every clause carries information and nothing is padded.

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 read tool with fully documented schema, the description covers the essentials. However, with no annotations and no output schema, the agent gets no insight into the returned definition's structure or any behavioral constraints, leaving a modest gap for a tool with zero structured behavioral 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 description coverage is 100%, so both function_group_name and the version enum are already documented in the schema, including the active/inactive semantics and default. The description restates the version capability but adds no format, naming-convention, or edge-case 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?

The description names a specific verb and resource: 'Retrieve ABAP function group definition.' That clearly separates it from siblings like GetFunctionModule, ListFunctionGroupIncludes, DeleteFunctionGroup, and CheckFunctionGroup without ambiguity about which object type it targets. It stops short of an explicit comparative statement against those siblings, 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?

'Supports reading active or inactive version' tells the agent the tool exposes version state, but it offers no when-to-use guidance or alternatives (e.g., when to prefer GetFunctionModule or ListFunctionGroupIncludes instead). Usage is only implied by the read nature of the tool.

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

GetFunctionModuleB

Read an ABAP function module, BAPI or RFC-enabled ones included: its source code, which declares the parameter signature. Active or inactive version.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
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 provided, the description carries the full burden, but it does disclose useful behavior: it is a read operation, returns source code with parameter signature, and can target active or inactive versions. It omits permissions, error behavior, and output format details, which are significant gaps without 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?

The description is short and front-loads the core purpose immediately. The final fragment about active/inactive versions is slightly abrupt but still concise and 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 read-only source retrieval tool with no output schema, the description adequately explains what is returned: the source code and its parameter signature. It could mention output format or error cases, but given the low-complexity read operation, it is largely 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 documents all three parameters. The description reinforces that the function module source declares the parameter signature and that active/inactive versions are selectable, but it adds no parameter 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?

States a specific read operation and resource: ABAP function module, including BAPI and RFC-enabled ones, and specifies that the source code is returned. It is clear, but it does not explicitly distinguish this tool from sibling versioning tools such as GetFunctionModuleVersionSource or GetFunctionModuleVersions.

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 implies usage by saying it reads source code and offers active/inactive versions, but it gives no explicit when-to-use guidance, prerequisites, or alternatives. An agent must infer that this is the tool for current or inactive source rather than historical version retrieval.

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

GetFunctionModuleVersionDiffA

[read-only] Compute a unified diff between two ABAP function module versions, by their content_uris (taken from GetFunctionModuleVersions entries).

ParametersJSON Schema
NameRequiredDescriptionDefault
content_uri_toYesOpaque content_uri of the NEW/compare version (from a GetFunctionModuleVersions entry).
content_uri_fromYesOpaque content_uri of the OLD/base version (from a GetFunctionModuleVersions entry).

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It opens with [read-only], which is a key behavioral trait. Beyond that, it adds no details about potential errors, size limits, or what happens if URIs are invalid. This is adequate but minimal.

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 sentence, front-loaded with [read-only], and contains only essential information. Every part is relevant: the verb, the resource, the input method, and the source of the URIs. No wasted words.

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 diff tool with only 2 parameters and no output schema, the description covers the purpose, input source, and safety. It does not explain the output format (unified diff details) or any limitations, but the core functionality is clearly communicated. Slightly lacking but generally 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 baseline is 3. The parameter descriptions already state 'Opaque content_uri of the OLD/base version (from a GetFunctionModuleVersions entry).' The tool description adds no additional parameter meaning beyond what the schema provides. It does not compensate with extra context because schema already has it.

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?

Description clearly states the verb 'Compute' and resource 'unified diff between two ABAP function module versions'. It specifies the input source (content_uris from GetFunctionModuleVersions) and uses [read-only] prefix to indicate safety. This is specific and distinct from sibling diff tools for other 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 Guidelines4/5

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

Description explicitly says to use content_uris taken from GetFunctionModuleVersions entries, providing clear context on prerequisite. However, it does not mention when not to use this tool or list alternative tools for similar purposes, though the tool's name and description differentiate it sufficiently.

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

GetFunctionModuleVersionsA

[read-only] List the SAP version history of a ABAP function module. Returns each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and an opaque content_uri to fetch that version's source via GetFunctionModuleVersionSource.

ParametersJSON Schema
NameRequiredDescriptionDefault
function_group_nameYesOwning function group name (required).
function_module_nameYesABAP function module name.

TDQS

A4/5.0
Behavior4/5

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

Declares read-only with '[read-only]' and lists all returned fields. Without annotations, it describes the operation well, though misses potential limitations like pagination.

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?

Single tight sentence, front-loaded with read-only annotation, no redundant words.

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 purpose, output structure, and links to related tool. Lacks details on sorting, filtering, or error handling, but sufficient for a version list.

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 description adds no new meaning to parameters beyond naming. Baseline 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 clearly states it lists SAP version history of a function module, including specific fields. It distinguishes itself from sibling tools like GetFunctionModuleVersionDiff and GetFunctionModuleVersionSource.

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 explicit when-to-use or when-not-to-use guidance. It implies GetFunctionModuleVersionSource for source fetching, but lacks clear direction compared to alternatives.

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

GetFunctionModuleVersionSourceA

[read-only] Fetch the source of a specific ABAP function module version by its content_uri (taken from a GetFunctionModuleVersions entry).

ParametersJSON Schema
NameRequiredDescriptionDefault
content_uriYesOpaque content_uri taken from a GetFunctionModuleVersions entry.

TDQS

A4.3/5.0
Behavior3/5

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

The tool is marked [read-only], indicating no side effects, but no annotations are provided. The description does not elaborate on authentication, rate limits, or other behavioral traits beyond the read-only hint.

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, concise sentence that front-loads the [read-only] tag. Every word is necessary and no redundant information is present.

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 read-only tool with one parameter and no output schema, the description fully explains the purpose and origin of the input. It is complete for an agent to invoke 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 single parameter 'content_uri' is described in both the schema and the description as an opaque URI from GetFunctionModuleVersions. With 100% schema coverage, the description adds useful context about the source of the URI.

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 tool fetches the source of an ABAP function module version using a content_uri from GetFunctionModuleVersions. It uses specific verb 'Fetch' and identifies the resource, distinguishing it from sibling tools that handle activation, deletion, or listing.

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 explains the prerequisite of having a content_uri from GetFunctionModuleVersions, providing context for when to use this tool. However, it does not explicitly state when not to use it or mention alternatives.

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 but not yet activated, pending activation. Shows classes, tables, CDS views, and other objects awaiting activation.

ParametersJSON Schema
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

A3.8/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; it does disclose the read-only nature via the '[read-only]' tag and explains the object set returned, which is genuine behavioral context. However, it omits anything about the return shape, whether the list is scoped to a session/system or paginated, and any auth or rate considerations.

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, zero filler, and the read-only marker plus core definition are front-loaded. Every 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 simple, zero-required-param read-only list tool with no output schema, the description is nearly sufficient: it identifies the resource, its scope, and the object types. It could go one step further by noting the relationship to the Activate* tools (i.e., what you do with the result), which is the only 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% and the single 'detail' enum is fully documented in the schema with per-value meaning. The description adds nothing about the parameter, 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 (Get) plus resource (inactive ABAP objects) and defines the term inline — 'modified but not yet activated, pending activation' — so an agent knows exactly what set it returns. It also names the concrete object kinds (classes, tables, CDS views) covered, which distinguishes it from the many Activate* siblings that mutate rather than list.

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 use case (surveying pending activations) but never explicitly says when to call this versus alternatives such as ActivateObjects or GetObjectsList, nor does it state prerequisites. Usage is inferable but not spelled out.

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). This is the correct tool for include names (PROG/I) — ReadProgram does not read includes.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_nameYesName of the ABAP Include

TDQS

A4.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. It marks the operation as '[read-only]' and clarifies the repository-wide scope. However, it does not mention potential errors, return format, or side effects, which for a read-only source fetch are minimal. The read-only marker and scope add useful transparency beyond a bare statement.

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, no redundancy. The primary purpose is stated first, followed by a critical usage caveat. Every word 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 single-parameter read tool with no output schema, the description covers purpose, scope, and routing. It omits explicit return value description, but the read nature makes it implicit. Overall, it provides sufficient context for an agent to call 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% (the only parameter 'include_name' is described). The description does not add any detail beyond the schema, such as format, case-sensitivity, or examples. Baseline of 3 is appropriate since the schema already documents the parameter adequately.

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 ('Read'), resource ('ABAP include source'), and scope ('by name, from anywhere in the repository'). It also distinguishes itself from the likely sibling ReadProgram, making its 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 Guidelines5/5

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

Explicitly states when to use this tool: 'This is the correct tool for include names (PROG/I)'. It also provides an exclusion: 'ReadProgram does not read includes'. This gives clear routing between tools.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNo[read-only] Timeout in ms for each ADT request.
detailedNo[read-only] If true, returns structured JSON with metadata and raw XML.
object_nameYesName of the ABAP program or include
object_typeYes[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

A3.6/5.0
Behavior3/5

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

The description discloses that the operation is read-only and recursive, which are behavioral traits not covered by annotations (none are provided). However, it does not describe the output format, pagination, or side effects beyond listing, and the detailed parameter's behavior is only documented in the schema, not the description. Given the lack of annotations, the description carries the burden and only partially fulfills it.

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, efficient sentence that front-loads the read-only hint and core recursive behavior. There is no redundancy or filler; every word contributes to the purpose.

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?

The tool has no output schema, so the description should explain what the return value looks like. It only says 'list ALL include files' without specifying whether it returns names, full metadata, or how the 'detailed' parameter changes the response. The schema covers parameters but not return structure, leaving an agent uncertain about the expected output. For a tool with four parameters and no output schema, this is a significant 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%, so all four parameters are already documented with descriptions, including the detailed flag and object_type enum. The tool description adds no extra meaning about parameters beyond what the schema provides, so a baseline 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 (discover and list), a clear resource (all include files within an ABAP program or include), and the recursive scope. It distinguishes itself from generic listing tools like GetStructuresList by focusing on includes, making the purpose unmistakable.

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: an agent would use this when they need to enumerate include files for a given ABAP object. However, there is no explicit guidance on when not to use it or which alternative sibling tools (e.g., GetStructuresList, GetPackageContents) might be more appropriate for different scenarios.

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

GetInterfaceC

Retrieve ABAP interface definition. Supports reading active or inactive version.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
interface_nameYesInterface name.

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 carries the full behavioral burden, and it discloses almost nothing: no permission/authorization requirements, no statement of what happens if the interface does not exist, and no note on return behavior. 'Supports reading active or inactive version' merely echoes the schema enum, adding no 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?

Two short sentences with the core action front-loaded and no filler. It is efficient, though the second sentence is largely redundant with 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 simple two-parameter read tool with full schema coverage and no output schema, the definition is minimally adequate. However, with zero annotations and a crowded sibling set, it omits any distinction from the version/diff tools and any behavioral notes, leaving 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 both parameters (interface_name and version, including the enum values) are already fully documented in the schema. The description's version sentence duplicates that information rather than adding format, casing, or naming-convention details.

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 (ABAP interface definition), so the operation is unambiguous. It implies a read of the current interface but never explicitly distinguishes itself from the many version-oriented siblings (GetInterfaceVersions, GetInterfaceVersionSource, GetInterfaceVersionDiff) or from CheckInterface/DeleteInterface.

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 or when-not-to-use guidance and no alternative tools named. The clause about active/inactive versions is a capability statement restated from the schema rather than routing guidance, and it does not tell the agent when to prefer a version-history sibling instead.

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

GetInterfaceVersionDiffA

[read-only] Compute a unified diff between two ABAP interface versions, by their content_uris (taken from GetInterfaceVersions entries).

ParametersJSON Schema
NameRequiredDescriptionDefault
content_uri_toYesOpaque content_uri of the NEW/compare version (from a GetInterfaceVersions entry).
content_uri_fromYesOpaque content_uri of the OLD/base version (from a GetInterfaceVersions entry).

TDQS

A4/5.0
Behavior3/5

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

The description includes the '[read-only]' hint, signaling no side effects. However, it does not detail the output format (e.g., unified diff text) or specify behavioral constraints like required permissions or error handling. Given no annotations, additional information would improve transparency.

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 a single sentence that efficiently conveys purpose and parameter context. It is well-structured and front-loaded with the read-only hint, though it could include a brief note on output without losing conciseness.

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 main purpose and parameter sources but lacks details on return value format (unified diff), potential errors, or limitations. Given no output schema and low complexity, additional completeness would be beneficial but not critical.

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%, and the description adds value by clarifying which parameter is the old/base (content_uri_from) and which is new/compare (content_uri_to), and that values come from GetInterfaceVersions. This context goes beyond 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?

The description explicitly states the action ('Compute a unified diff'), the resource ('two ABAP interface versions'), and the source of parameters ('from GetInterfaceVersions entries'). It differentiates from sibling tools like GetClassVersionDiff by specifying the 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 Guidelines4/5

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

The description indicates that content_uris should be taken from GetInterfaceVersions, providing clear context on prerequisites. It does not explicitly mention when not to use the tool or list alternatives, but the naming and sibling tools imply it is interface-specific.

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

GetInterfaceVersionsA

[read-only] List the SAP version history of a ABAP interface. Returns each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and an opaque content_uri to fetch that version's source via GetInterfaceVersionSource.

ParametersJSON Schema
NameRequiredDescriptionDefault
interface_nameYesABAP interface 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 adds value by marking the tool as read-only and explaining the opaque content_uri for fetching source versions. It does not cover error handling or edge cases, but the core behavioral trait 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?

The description is three sentences, front-loaded with purpose and read-only flag. Every sentence adds value, with no redundancy or unnecessary words.

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 output schema, the description adequately lists return fields and references a sibling tool for source retrieval. It is slightly lacking in error or edge-case description, but sufficient for typical use.

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 a clear description of 'interface_name'. The description adds no further semantic detail beyond what the schema already provides, 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?

The description clearly states the verb 'List' and the resource 'SAP version history of a ABAP interface', and enumerates returned fields. It distinguishes itself from siblings like GetInterfaceVersionDiff and GetInterfaceVersionSource by mentioning the content_uri link.

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 provide explicit when-to-use or when-not-to-use guidance relative to sibling tools. It implies usage through purpose but lacks explicit exclusions or alternatives.

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

GetInterfaceVersionSourceA

[read-only] Fetch the source of a specific ABAP interface version by its content_uri (taken from a GetInterfaceVersions entry).

ParametersJSON Schema
NameRequiredDescriptionDefault
content_uriYesOpaque content_uri taken from a GetInterfaceVersions entry.

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 carries full burden. It includes '[read-only]' indicating safety. However, it does not disclose other behavioral traits such as rate limits, authentication, or side effects. For a simple read operation, this is adequate but not rich.

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 sentence with no fluff. It conveys the purpose, input source, and nature (read-only) efficiently.

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 no output schema and no annotations, the description explains the input source but does not describe the output format or what 'source' entails (e.g., code, XML). It is minimally complete for a simple tool but could be more informative.

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% for the single parameter. The description repeats the schema's explanation ('content_uri taken from a GetInterfaceVersions entry'), adding no new meaning beyond the schema. Baseline 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 clearly states the action ('Fetch the source') and the resource ('a specific ABAP interface version'), including the prerequisite source of the parameter (from GetInterfaceVersions). It distinguishes from sibling tools by specifying the resource type (interface) and the parameter naming.

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 explicitly states to use the content_uri from GetInterfaceVersions, which provides clear context on how to obtain the input. It does not mention when not to use or alternatives, but for a simple fetch tool, this is sufficient.

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

GetLocalDefinitionsC

Retrieve local definitions source code from a class (definitions include). Supports reading active or inactive version.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
class_nameYesParent class name.

TDQS

C2.9/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. "Retrieve" implies a read, and the active/inactive version note is useful, but there is no disclosure of error behavior (e.g., class not found), whether the result is empty when no local definitions exist, or any access 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 core action front-loaded and no filler. The orphaned "(definitions include)" fragment is a minor blemish that could be removed without loss.

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 does not describe the shape of the returned source (raw lines, structured sections, etc.) or what happens when the class has no local definitions. For a two-parameter read tool this is adequate but leaves an agent guessing about the 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% — both class_name and the active/inactive version enum are fully documented in the schema. The description adds nothing beyond what the schema already states, 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 ("Retrieve") and resource ("local definitions source code from a class"), which distinguishes it from siblings like GetLocalTypes and GetLocalMacros that fetch other local sections. The parenthetical "(definitions include)" is garbled and adds no clarifying value, but the core purpose is discernible.

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 guidance, no named alternatives, and no prerequisites. The agent must infer from the name alone that this is the read counterpart to UpdateLocalDefinitions/DeleteLocalDefinitions rather than being told.

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

GetLocalMacrosA

Retrieve local macros source code from a class (macros include). Supports reading active or inactive version. Note: Macros are supported in older ABAP versions but not in newer ones.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
class_nameYesParent class name.

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 behavioral burden. It conveys read-only intent via 'Retrieve' and adds a genuinely useful caveat that macros are only supported in older ABAP versions, but it says nothing about permissions, error behavior, or what happens when macros do not exist in a newer system.

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 followed by the version option and the compatibility caveat. No filler, though the parenthetical '(macros include)' is slightly awkward.

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 full schema coverage, the description covers the action, the version option, and the important ABAP-version limitation. Nothing critical to a correct call is missing, though a note on what is returned when no macros exist would round it 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 description coverage is 100%, with the version enum and default already fully documented in the schema. The description only restates the active/inactive choice and does not add syntax or format detail 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?

The description states a specific verb and resource ('Retrieve local macros source code from a class'), which cleanly separates it from siblings like GetLocalTypes, GetLocalDefinitions, and GetLocalTestClass that operate on the same parent class. It does not explicitly name those siblings as alternatives, 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 mentions that active or inactive versions can be read and adds a version-support caveat, which implies usage context, but it never states when to choose this tool over GetLocalTypes/GetLocalDefinitions or any prerequisite for use. Usage 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.

GetLocalTestClassC

Read the local test classes include of a class. Active or inactive version.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
class_nameYesParent class name.

TDQS

C2.9/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, yet it only says 'Read ... Active or inactive version.' It does not confirm the operation is read-only, mention required authorization, or describe the returned content shape for a read 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.

Conciseness4/5

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

Two short sentences with no filler, and the core action is front-loaded in the first sentence. Slight awkwardness in 'the local test classes include of a class' costs it the top mark.

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 read tool with no annotations and no output schema, the description should explain what a local test class include is and what the read returns. It leaves both implicit, relying entirely on the schema for the only two parameters.

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, so the schema does the heavy lifting. The description's 'Active or inactive version' merely echoes the version enum and adds no syntax or format detail beyond it, 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 (Read) and resource (the local test classes include of a class), and the name plus description together identify exactly what is fetched. It does not, however, distinguish itself from close siblings like GetLocalTypes, GetLocalDefinitions, or GetLocalMacros, which fetch other local include kinds.

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 when-to-use guidance, no indication of when to prefer this over GetClass, GetClassVersions, or the other local-include getters. The only usage signal is the 'active or inactive version' phrase, which is really a parameter restatement rather than routing advice.

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

GetLocalTypesB

Retrieve local types source code from a class (implementations include). Supports reading active or inactive version.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
class_nameYesParent class name.

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 only partly meets it: it discloses that implementations are included and that active/inactive versions are readable, but says nothing about read-only safety, permissions, or return shape. It adds meaningful behavioral context beyond the name but leaves notable gaps for a zero-annotation 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?

Two short sentences, front-loaded with the action and resource; the version capability follows. Slight awkwardness in '(implementations include)' costs it a point but there is no wasted 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 simple two-parameter read tool it is adequate, and no output schema means return values need not be described. Still, with no annotations the description should say more about the safety profile and what 'local types' means in this codebase to be fully self-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 coverage is 100%, so class_name and version (with its active/inactive enum semantics) are already fully documented in the schema. The description's mention of 'active or inactive version' merely echoes 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 (Retrieve) and resource (local types source code from a class), which distinguishes it from siblings GetLocalDefinitions and GetLocalMacros by resource. However, it does not explicitly name or contrast with those siblings, so it stays 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 resource name and the version option, but there is no explicit statement of when to use this versus GetLocalDefinitions/GetLocalMacros or the Update/Delete variants, and no prerequisites (e.g., needing the parent class to exist) are given.

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

GetMessageClassA

Retrieve an ABAP message class (MSAG/T100) as its ADT metadata document (XML), under the message_class field. adt-clients 19 no longer parses it into named fields (name, description, package, master language, message list) — the caller reads the document itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_class_nameYesMessage class 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 burden, and it discloses a genuinely important behavior: the payload arrives as an unparsed ADT metadata XML document under the `message_class` field, and that adt-clients 19 stopped parsing it into named fields. This is exactly the kind of format-change disclosure an agent needs. It omits error/permission behavior, but for a read tool this is solid coverage.

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 verb and resource in the first clause, then adds a single focused sentence about the format change. No filler, though the version-history remark slightly lengthens an otherwise tight statement.

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 explain what comes back, and it does: the raw XML document under `message_class`. The description of the unparsed return shape, including the former named fields, is complete for an agent to consume the result 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 single `message_class_name` parameter is already documented by the schema. The description references the `message_class` field but that is the output field, not the input parameter, so it adds no additional semantic detail about the parameter itself. 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 ('Retrieve') and resource ('ABAP message class (MSAG/T100)') with the exact technical identifiers, so the agent knows what object type is fetched. It does not explicitly contrast itself with GetMessageClassMessage, which fetches a single message rather than the class, but the resource naming is precise enough to distinguish 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 only implied: 'the caller reads the document itself' hints at when the raw-document output is expected. There is no explicit when-to-use or when-not-to-use guidance versus GetMessageClassMessage or the Create/Update/Delete variants.

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

GetMessageClassMessageA

Retrieve a single message (by number) from an ABAP message class (MSAG/T100). There is no per-message resource: ADT answers the ENTIRE parent class document (XML) under the message field, which the caller must search for msgno — adt-clients 19 no longer extracts one message from it. msgno itself IS validated server-side (a number absent from the class refuses as not-found); it is the text that is not parsed out for you.

ParametersJSON Schema
NameRequiredDescriptionDefault
msgnoYesMessage number (e.g., "001").
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?

With no annotations, the description carries the full burden and delivers a genuinely non-obvious trait: the server returns the ENTIRE parent class XML under `message`, so the caller must search for `msgno` themselves. It also discloses that `msgno` is validated server-side and that a missing number refuses as not-found. This is exactly the behavioral context an agent cannot get from 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?

Front-loaded with the core purpose, then two follow-up sentences that each earn their place by disclosing the non-obvious return-shape pitfall and the validation behavior. Slightly dense, but 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?

Given no annotations and no output schema, the description still conveys the critical return-shape gotcha and validation semantics, which is what an agent most needs. It omits auth requirements and richer error behavior, 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.

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 by explaining that `msgno` is validated server-side and that its text is not parsed out for the caller. That behavioral nuance on the parameter exceeds the schema's simple 'Message number (e.g., "001")'.

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 (retrieve a single message by number from an ABAP message class, citing MSAG/T100). It implicitly distinguishes itself from the sibling GetMessageClass by clarifying that this is per-message retrieval while the parent document is what's actually returned.

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 this is useful (fetching a specific message number), and contrasts with the whole-class document, but never explicitly names GetMessageClass as the alternative or states the condition for choosing it. Guidance is present but left to inference.

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

GetMetadataExtensionA

Retrieve ABAP metadata extension definition. Supports reading active or inactive version.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
metadata_extension_nameYesMetadataExtension name.

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 burden. It implies a read-only retrieval and discloses the active/inactive version capability, but says nothing about permissions, error behavior when the object is missing, or what the returned definition 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?

Two short sentences, front-loaded with the verb and resource, then the version capability. 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 simple two-parameter read tool with full schema coverage this is nearly adequate, but with no output schema the description could say more about what a metadata extension definition looks like on return, leaving 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%, and the schema already documents both the enum values and their meanings ('active' for deployed, 'inactive' for modified but not activated). The description's mention of active/inactive merely repeats this, 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 metadata extension definition.' It is clear what the tool returns, though it does not differentiate itself from the similarly named sibling GetMetadataExtensionVersionSource, 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 notes it supports reading active or inactive versions, which implies the usage context, but gives no explicit when-to-use guidance versus alternatives like GetMetadataExtensionVersions, GetMetadataExtensionVersionSource, or GetMetadataExtensionVersionDiff.

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

GetMetadataExtensionVersionDiffA

[read-only] Compute a unified diff between two CDS metadata extension versions, by their content_uris (taken from GetMetadataExtensionVersions entries).

ParametersJSON Schema
NameRequiredDescriptionDefault
content_uri_toYesOpaque content_uri of the NEW/compare version (from a GetMetadataExtensionVersions entry).
content_uri_fromYesOpaque content_uri of the OLD/base version (from a GetMetadataExtensionVersions entry).

TDQS

A4/5.0
Behavior3/5

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

The description includes a [read-only] hint but does not disclose the output format or any side effects. Since annotations are absent, the description carries the burden but provides minimal behavioral context beyond the read-only hint.

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, well-structured sentence that front-loads the read-only hint and conveys all necessary information without unnecessary words. It is appropriately concise.

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 explains the tool's purpose and input source clearly, but it does not describe the output format. Given the output schema is absent and the tool's complexity is moderate, a brief note on the diff output would improve completeness.

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?

With 100% schema coverage, the description adds value by specifying that content_uris come from GetMetadataExtensionVersions entries and labeling them as OLD/base and NEW/compare. This supplements 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?

Description clearly specifies the verb 'Compute a unified diff', the resource 'CDS metadata extension versions', and how to specify versions via content_uris from GetMetadataExtensionVersions. It distinguishes from sibling diff tools by being specific to metadata extensions.

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 for comparing two metadata extension versions but does not explicitly state when not to use it or mention alternatives. The context is clear but lacks exclusions or comparisons with similar diff tools like GetClassVersionDiff.

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

GetMetadataExtensionVersionsA

[read-only] List the SAP version history of a CDS metadata extension. Returns each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and an opaque content_uri to fetch that version's source via GetMetadataExtensionVersionSource.

ParametersJSON Schema
NameRequiredDescriptionDefault
metadata_extension_nameYesCDS metadata extension name.

TDQS

A4/5.0
Behavior4/5

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

Explicitly marks as [read-only] and enumerates return fields. No annotations, so description carries full burden. Does not disclose auth/rate limits, but read-only is key behavioral trait.

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?

Single dense sentence with no fluff. Purpose, return fields, and follow-up tool are all included. Highly efficient.

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?

Adequate for a list tool with one parameter and no output schema. Mentions key fields and next step. Missing pagination/ordering details, but not critical.

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 parameter. Description adds no further semantic value beyond the schema's description. 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?

Clearly states it lists the version history of a CDS metadata extension, specifying the resource and action. Distinguishes from related tools like GetMetadataExtensionVersionDiff and GetMetadataExtensionVersionSource.

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 a workflow by mentioning content_uri and GetMetadataExtensionVersionSource, but lacks explicit when-to-use/avoid guidance or differentiation from numerous similar sibling tools.

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

GetMetadataExtensionVersionSourceA

[read-only] Fetch the source of a specific CDS metadata extension version by its content_uri (taken from a GetMetadataExtensionVersions entry).

ParametersJSON Schema
NameRequiredDescriptionDefault
content_uriYesOpaque content_uri taken from a GetMetadataExtensionVersions entry.

TDQS

A4/5.0
Behavior3/5

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

No annotations are present, so the description carries full burden. It marks the tool as [read-only], but does not describe the return format or any other behavioral traits such as side effects or error conditions.

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 sentence, 20 words, front-loaded with the [read-only] hint, and contains no unnecessary 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 fetch tool with no output schema, the description references the prerequisite parent tool but does not specify the format of the source returned. Slightly incomplete, but adequate for typical usage.

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 only parameter content_uri is fully described in the schema (100% coverage). The description adds no additional meaning beyond restating the schema's description, so baseline 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 clearly states the tool fetches the source of a CDS metadata extension version using a content_uri, and references the parent tool GetMetadataExtensionVersions. It distinguishes from siblings like GetMetadataExtensionVersions and GetMetadataExtensionVersionDiff.

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 explains that the content_uri comes from a GetMetadataExtensionVersions entry, providing clear prerequisite context. It does not explicitly state when not to use, but the usage intention is well-defined.

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

GetNodeStructureLowB

[low-level] Fetch node structure from ADT repository. Used for object tree navigation and structure discovery. Can use session_id and session_state from GetSession to maintain the same session.

ParametersJSON Schema
NameRequiredDescriptionDefault
node_idNoOptional node ID (default: "000000", the root). Use to fetch child nodes. "0000" is not the root: the server answers it with an empty body.000000
session_idNoSession ID from GetSession. If not provided, a new session will be created.
parent_nameYesParent object name
parent_typeYesParent object type (e.g., "CLAS/OC", "PROG/P", "DEVC/K")
session_stateNoSession state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.
with_short_descriptionsNoInclude short descriptions in response

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 discloses one useful trait (session can be carried over from GetSession to reuse the same connection) but says nothing about read-only nature, permissions, response shape, or what 'low-level' implies versus the higher-level variant.

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 the '[low-level]' marker and purpose before the usage and session notes. No filler, though the bracketed tag is never explained.

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 fetch tool with a nested session_state object and no output schema, the description is adequate but thin — it doesn't characterize the returned node structure or hierarchy depth, which an agent calling this for tree navigation would benefit from knowing.

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 subtle notes like node_id '0000' returning an empty body, so the schema already does the heavy lifting. The description only repeats the session_id/session_state usage, adding no format or 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?

States a clear verb+resource: 'Fetch node structure from ADT repository,' plus a use case ('object tree navigation and structure discovery'). However, it does not distinguish itself from near-identical siblings such as GetObjectStructureLow or GetObjectStructure, and the '[low-level]' tag is left unexplained.

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?

'Used for object tree navigation and structure discovery' implies the scenario but gives no when-to-use vs when-to-avoid guidance, and never names an alternative like GetObjectStructureLow. The GetSession/session-reuse note is helpful but is invocation mechanics, not selection guidance.

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

GetObjectInfoA

[read-only] Return ABAP object tree structure for packages (DEVC), classes (CLAS), programs (PROG), function groups (FUGR), and other objects. Shows root, group nodes, and terminal leaves up to maxDepth. Enrich each node with description and package via SearchObject if enrich=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
enrichNo[read-only] Whether to add description and package via SearchObject (default true)
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_nameYes[read-only] Parent object name
parent_typeYes[read-only] Parent object type (e.g. DEVC/K, CLAS/OC, PROG/P)

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 it does disclose non-obvious behavior: read-only intent, the enrich-via-SearchObject step, and the subtle rule that non-package types are capped at one tier while only PACKAGES recurse deeper regardless of maxDepth. It stops short of covering error behavior, permission requirements, or caching/performance characteristics.

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 that front-load the core purpose and follow with the depth/enrichment specifics. No filler or restatement of the name; the only mild compression cost is that the depth nuance 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?

With no output schema and no annotations, the description does the necessary work: it names supported object types, the tree node categories returned, depth semantics, and the enrichment toggle. It would be stronger with a note on failure modes or when the tree may be empty/truncated, but nothing essential for calling it 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 baseline is 3. The description reinforces enrich and maxDepth semantics ('up to maxDepth', 'if enrich=true') but adds no syntax or format detail beyond what the schema already states, particularly for parent_type/parent_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 and resource ('Return ABAP object tree structure') and names the concrete object types supported (DEVC, CLAS, PROG, FUGR). It also describes the tree shape (root, group nodes, terminal leaves), so the agent knows exactly what comes back. It does not, however, distinguish itself from close siblings like GetObjectStructure, GetPackageTree, or GetNodeStructureLow.

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 guidance and no routing to alternatives, which is a real gap given the many overlapping structure/tree tools in the sibling list (GetObjectStructure, GetObjectStructureLow, GetPackageTree). The enrich flag is explained behaviorally but that is not usage guidance.

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

GetObjectNodeFromCacheA

[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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tech_nameYes[read-only] Technical name
object_nameYes[read-only] Object name
object_typeYes[read-only] Object type

TDQS

A3.7/5.0
Behavior3/5

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

The description reveals it accesses an in-memory cache and is read-only, adding behavioral context beyond the schema. However, it does not disclose what happens if the node is missing, or if expansion always occurs.

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, well-structured sentence that front-loads the read-only status and efficiently conveys the tool's purpose and parameter usage.

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 no output schema, the description mentions return of a node and URI expansion, but lacks details on the return format, optionality of expansion, or error handling.

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 input schema already describes all three parameters with 100% coverage. The description adds value by explaining they are used as lookup keys to retrieve a specific node.

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 it is a read-only operation that returns a node from a specific cache, using three exact parameters and mentions URI expansion. This distinguishes it from sibling create/update/delete and other get tools.

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 provide any guidance on when to use this tool versus alternatives like other get/read tools. No exclusion criteria or use-case hints are given.

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

GetObjectsByTypeA

[read-only] Retrieves all ABAP objects of a specific type (classes, tables, programs, interfaces, etc.) under a given parent node. Useful for listing all objects of one type within a package or composite object.

ParametersJSON Schema
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

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 behavioral burden; it does disclose the read-only nature via the '[read-only]' tag, which is genuine value. Beyond that it says nothing about return shape, pagination, ordering, or whether node_id has side effects, leaving sizable gaps for a zero-annotation 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?

Two compact sentences with zero filler, and the core action plus scope is front-loaded in the first sentence before the use-case hint. Efficient and well-ordered, though not maximally tight.

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 listing tool with no output schema, the description tells the agent what it retrieves, the type dimension, and the parent-node scope, which is enough to call it correctly. The absence of any mention of result volume or pagination and of differentiation from sibling listers is a minor gap rather than a blocking one.

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 required node_id, parent_name, parent_tech_name, parent_type) are documented in the schema itself. The description only restates 'specific type' and 'parent node' without adding format, ordering, or default semantics beyond what the schema gives, 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 ('Retrieves all ABAP objects of a specific type') and enriches it with concrete examples (classes, tables, programs, interfaces) plus the scoping constraint ('under a given parent node'). It is clear, but it does not distinguish itself from the close sibling GetObjectsList or GetPackageContents, 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 second sentence gives implied usage ('listing all objects of one type within a package or composite object'), which tells the agent the scenarios where this fits. However, it never states when to prefer this over sibling listings like GetObjectsList, nor any prerequisite or exclusion, 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.

GetObjectsListA

[read-only] Recursively retrieves all child ABAP repository objects for a given parent — programs (PROG), function groups (FUGR), classes (CLAS), packages (DEVC), and other composite objects — including nested includes and subcomponents.

ParametersJSON Schema
NameRequiredDescriptionDefault
parent_nameYes[read-only] Parent object name
parent_typeYes[read-only] Parent object type (e.g. PROG/P, FUGR)
parent_tech_nameYes[read-only] Parent technical name
with_short_descriptionsNo[read-only] Include short descriptions (default: true)

TDQS

A4.2/5.0
Behavior3/5

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

The description labels the tool as '[read-only]' and describes retrieval behavior, but since no annotations exist, it lacks details on side effects, performance, rate limits, or authorization requirements. This is adequate but not comprehensive.

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 sentence that is front-loaded with the read-only hint and conveys all key information without extraneous words.

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 listing tool with no output schema, the description indicates the type of content returned (child objects, includes, subcomponents) but does not detail the structure or format. This is sufficient for most use cases but could be more 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 100% with minimal parameter descriptions. The tool description adds value by explaining the recursive retrieval and listing example object types, providing context beyond the schema's basic field names.

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 verb 'retrieves', the resource 'child ABAP repository objects', and specifies recursive behavior including nested includes and subcomponents. It lists object types (PROG, FUGR, CLAS, DEVC) distinguishing it from sibling tools like GetClass or GetFunctionGroup that retrieve single objects.

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 explains the tool's recursive nature and that it retrieves all children, implying use when a full tree is needed. However, it does not explicitly mention alternatives or when not to use it, though the context of siblings provides implicit differentiation.

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

GetObjectStructureB

[read-only] Retrieve ADT object structure as a compact JSON tree.

ParametersJSON Schema
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

B3.3/5.0
Behavior3/5

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

No structured annotations are provided, so the description must carry the burden. It does disclose the read-only ([read-only]) safety profile and notes the output is a 'compact JSON tree', which is useful context, but it says nothing about depth/recursion behavior, error cases for invalid object types, or how 'structure' is bounded.

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 zero waste; the [read-only] tag is placed first and the core action follows immediately. Nothing could be trimmed without losing meaning.

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 3-parameter read-only retrieval with full schema coverage and no output schema, the description is adequate but thin: it does not clarify what the returned tree contains or how it relates to GetObjectStructureLow, leaving an agent to infer the distinction.

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 well-documented enum (terse/full/raw) and examples for objecttype/objectname, so the schema does the heavy lifting. The description adds no parameter meaning beyond what the schema already provides, which is 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 (Retrieve) and resource (ADT object structure) plus the return shape (compact JSON tree), so the agent knows what it does. However, it does not distinguish itself from the near-identical sibling GetObjectStructureLow, nor from GetNodeStructureLow/GetStructure, leaving ambiguity about which retrieval 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 when-to-use guidance, no prerequisites, and no mention of alternatives. An agent cannot tell from the text why it should call GetObjectStructure rather than GetObjectStructureLow or GetObjectInfo.

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

GetObjectStructureLowC

[low-level] Retrieve ADT object structure as compact JSON tree. Returns XML response with object structure tree. Can use session_id and session_state from GetSession to maintain the same session.

ParametersJSON Schema
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
session_idNoSession ID from GetSession. If not provided, a new session will be created.
object_nameYesObject name
object_typeYesObject type (e.g., "CLAS/OC", "PROG/P", "DEVC/K", "DDLS/DF")
session_stateNoSession state from GetSession (cookies, csrf_token, cookie_store). Required if session_id is provided.

TDQS

C2.6/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 disclosure burden. It mentions session reuse but does not state permissions required, whether a new session is implicitly created (schema hints this but description omits the behavior), or clarify the conflicting JSON/XML output claim.

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?

Three short sentences are front-loaded with the '[low-level]' tag, which is good structure. However, the second sentence's JSON-vs-XML contradiction wastes a line and actively confuses rather than informs.

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 would ideally describe the actual return shape, but it instead gives a contradictory one. For a read tool with a nested session_state object, it is minimally adequate but leaves the meaning of 'low-level' and the true response format unresolved.

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 detail enum and session fields. The description adds only a light restatement of the session_id/session_state linkage, which is baseline-level value at most.

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 description states a specific verb and resource ('Retrieve ADT object structure') and flags itself as '[low-level]', but it does not differentiate from the sibling GetObjectStructure, so an agent cannot tell when 'Low' applies. It also self-contradicts on output ('compact JSON tree' vs 'Returns XML response'), which muddies the purpose.

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 when-to-use guidance and no comparison against the obvious alternative, GetObjectStructure (or GetNodeStructureLow). The only conditional hint is about reusing session_id/session_state, which is a continuity note rather than usage routing.

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

GetObjectVersionDiffA

[read-only] Compute a unified diff between two object versions. Pass the two opaque content_uris from GetObjectVersions entries; returns the unified diff (jsdiff) of their sources.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_typeYesObject type (same value used in GetObjectVersions).
content_uri_toYesOpaque content_uri of the NEW/compare version (from a GetObjectVersions entry).
content_uri_fromYesOpaque content_uri of the OLD/base version (from a GetObjectVersions entry).

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It declares read-only behavior and confirms output type (jsdiff unified diff). No further behavioral details (e.g., permissions, side effects) 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 a single, front-loaded sentence with no unnecessary words. Every element adds value, including the [read-only] tag and the output description.

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 covers inputs, output type, and read-only nature. With no output schema, it adequately explains the return value (unified diff). Minor omission: no example diff format, but sufficient for agent usage.

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?

Although schema coverage is 100%, the description adds meaningful context beyond schema descriptions: it explains where to obtain content_uris and ties object_type enum to GetObjectVersions, enhancing parameter understanding.

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 tool computes a unified diff between two object versions, specifying both inputs (content_uris) and output. It distinguishes from type-specific version diff siblings by being generic and accepting an object_type parameter.

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 explicitly instructs to pass content_uris from GetObjectVersions entries, providing clear usage context. It lacks explicit mention of when to use this generic tool vs type-specific alternatives, but the context is sufficient.

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

GetObjectVersionsA

[read-only] List the version history of an ABAP object. Returns each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and an opaque content_uri to fetch that version source via GetObjectVersionSource.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameYesObject name.
object_typeYesObject type.
function_group_nameNoOwning function group name. Required when object_type is function_module.

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 behavioral burden and does state '[read-only]', covering the safety profile. It also discloses the return shape in detail, including that transportRequest/transportDescription are 'when available' and that content_uri is opaque and consumed by GetObjectVersionSource. It omits any statement about version limits, ordering, or pagination.

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 scope marker '[read-only]' and the core action, then a compact enumeration of return fields with the chaining target. Every clause earns 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?

With no output schema, the description compensates well by enumerating the returned fields and the follow-on tool. It is nearly complete for calling the tool, though it does not state whether results are bounded/paginated or sorted, which an agent listing a long history 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%, so all three parameters (object_name, object_type enum, function_group_name with its function_module conditional) are already documented in the schema. The description adds no additional parameter meaning, 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?

States a specific verb (List) plus resource (version history of an ABAP object) and enumerates the returned fields (versionId, author, updatedAt, title, transportRequest, content_uri). It names GetObjectVersionSource as the follow-on tool, but does not distinguish itself from the type-specific siblings (GetClassVersions, GetTableVersions, GetInterfaceVersions), leaving the agent to infer which version-list 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 description implies usage by describing the returned content_uri as the hand-off to GetObjectVersionSource for fetching source, which is helpful chaining context. However, it gives no explicit when-to-use/when-not guidance and never mentions the existence of the per-type version tools an agent might otherwise pick.

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

GetObjectVersionSourceA

[read-only] Fetch the source code of a specific object version. Pass the opaque content_uri from a GetObjectVersions entry.

ParametersJSON Schema
NameRequiredDescriptionDefault
content_uriYesOpaque content_uri taken from a GetObjectVersions version entry.
object_typeYesObject type (same value used in GetObjectVersions).

TDQS

A3.9/5.0
Behavior3/5

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

The description includes '[read-only]' tag, indicating no destructive side effects. No annotations are provided, so the description covers the safety profile adequately but could elaborate on return format or permissions.

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?

Extremely concise: one sentence plus a short instruction. No extraneous information; every word adds value.

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 is minimal and sufficient for basic usage, but given no output schema, it could explain what the returned source code contains. However, context signals show no output schema, so it is adequate.

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% for both parameters. The description adds the instruction to use content_uri from GetObjectVersions, which is already in the schema description. Since high coverage, a 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 clearly states it fetches source code of a specific object version, using a content_uri from GetObjectVersions. The verb 'Fetch' and specific resource 'source code' are well-defined, and it distinguishes from type-specific version source tools by being generic.

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?

Explicitly instructs to pass the content_uri from GetObjectVersions, providing clear usage context. However, it does not mention when not to use or alternative tools, but the instruction is sufficient.

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

GetPackageB

Retrieve ABAP package metadata (description, super-package, etc.). Supports reading active or inactive version.

ParametersJSON Schema
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

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. 'Retrieve' implies a non-destructive read and it discloses the active/inactive version capability, which is real behavioral context. However, it says nothing about permissions, whether inactive reads require special state, or volume/limits of the response.

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 core purpose front-loaded and the version capability second. No filler and nothing to trim.

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 3-parameter read tool with no output schema, the description covers purpose, example returned fields, and the version dimension. A brief pointer to the related content-listing tools would make it fully self-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 the schema already documents package_name, detail and version thoroughly; baseline is 3. The description adds only the active/inactive version note, which is largely redundant with the version enum's own 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?

States a specific verb (Retrieve) and resource (ABAP package metadata) and enumerates what comes back (description, super-package, etc.). It does not explicitly distinguish itself from siblings like GetPackageContents, GetPackageTree or CreatePackage, but 'metadata' about the package itself is clear enough to separate it from contents/tree lookups.

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 when-to-use or when-not-to-use guidance and names no alternative among the many package-related siblings (GetPackageContents, GetPackageTree, CheckPackage). 'Supports reading active or inactive version' hints at capability but not at the condition for choosing it.

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

GetPackageContentsB

[read-only] Retrieve objects inside an ABAP package as a flat list. Supports recursive traversal of subpackages.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_depthNoMaximum depth for recursive package traversal (default: 5)
package_nameYesName of the ABAP package
include_subpackagesNoInclude contents of subpackages recursively (default: false)
include_descriptionsNoInclude object descriptions in response (default: true)

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 burden. It does disclose read-only status and that the result is a flat list supporting recursive traversal, which is useful. However it omits volume/ordering concerns and any note on how deeply nested packages affect the response.

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 read-only marker before the purpose. No wasted wording, though it is nearly minimal.

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 simple 4-parameter getter with no output schema and no annotations, the description covers purpose, read-only status, and result shape. It could say more about what object kinds are returned, but it is adequate for 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 all four parameters are already documented, establishing a baseline of 3. The description only loosely echoes the recursion behavior tied to include_subpackages/max_depth without adding format or default 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 (Retrieve) and resource (objects inside an ABAP package) plus the output shape (flat list). It is largely distinguishable from tree-oriented siblings like GetPackageTree, but does not explicitly name or 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 Guidelines2/5

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

The mention of recursive subpackage traversal hints at a use case but gives no explicit when-to-use guidance and names no alternatives (GetPackageTree, GetObjectsList, GetObjectsByType). The agent is left to infer selection.

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

GetPackageTreeC

[high-level] Retrieve complete package tree structure including subpackages and objects. Returns hierarchical tree with object names, types, and descriptions.

ParametersJSON Schema
NameRequiredDescriptionDefault
debugNoInclude diagnostic metadata in response (counts, types, hierarchy info). Default: false
max_depthNoMaximum depth for recursive package traversal. Default: 5
package_nameYesPackage 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 object descriptions in response. Default: true

TDQS

C2.9/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 reveals the return shape (hierarchical tree of names/types/descriptions) but says nothing about read-only safety, permissions, performance cost of deep traversal, or pagination/truncation behavior at max_depth.

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 and the return shape second. The '[high-level]' tag is slightly noisy but does signal abstraction level without wasting much space.

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 five-parameter traversal tool with no annotations and no output schema, the description should do more to explain the return contract and depth/subpackage tradeoffs. It gestures at the return structure but leaves behavioral and routing gaps, making it only minimally adequate.

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 max_depth, include_subpackages, and debug. The description's phrase 'including subpackages and objects' loosely maps to include_subpackages but 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.

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 (complete package tree structure) with scope ('including subpackages and objects'). However, it does not distinguish itself from close siblings like GetPackageContents or GetObjectStructure, which an agent must differentiate 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 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 tool versus GetPackageContents, GetPackage, or the *Low structure variants. The agent is left to infer usage purely from the name and description.

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

GetServiceBindingC

Retrieve ABAP service binding source/metadata by name via ADT Business Services endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
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

C2.9/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, and it does not say whether this is a read-only fetch, what happens when the binding does not exist, whether the active/inactive version is returned, or whether authentication/session context is required. It only names the endpoint, which is metadata about implementation rather than agent-relevant 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?

A single front-loaded sentence with no filler, so it is efficient and readable. It is arguably too terse given the unaddressed behavioral and routing questions, but as a conciseness artifact it holds up.

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 simple two-parameter read tool with full schema coverage and no output schema, the description covers the essential what and how-to-address-it. It leaves gaps around return content, missing-object behavior, and sibling disambiguation that would matter 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 coverage is 100%, so both parameters are already documented, including the response_format enum and its effect. The description adds only 'by name', which maps to the required parameter but provides no extra semantics; 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 (Retrieve) and resource (ABAP service binding source/metadata) plus the lookup key (by name) and the backing endpoint. It does not, however, distinguish itself from close siblings such as GetServiceDefinition or GetServiceBindingPreviewUrl, leaving boundary questions 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 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 tool versus the many sibling GET/ListServiceBindingTypes/ValidateServiceBinding tools, nor any prerequisite or exclusion. Usage must be inferred entirely from the tool name.

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 says what is missing rather than guessing. A Web API binding has no preview page and answers the service URLs instead.

ParametersJSON Schema
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 structured annotations, the description carries the full burden and does so well: it self-labels [read-only], explains that it reads the binding plus service definition, discloses the failure behavior ('says what is missing rather than guessing'), and notes the Web API binding branch (no preview page, returns service URLs instead). It omits auth/permission requirements but covers the key behavioral branches.

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 verb and the delivered artifacts, then layers the intent phrases and edge cases. The 'Answers:' list runs slightly long but each item earns its place as a retrieval cue, and there is 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, so the description must explain return values and it does (preview URL, service URL, $metadata URL) plus the Web API fallback. Combined with fully documented input params, an agent has what it needs, though permission/auth context for building a logon URL 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 every parameter, including defaults and the empty-string client behavior, is already documented in the schema. The description reinforces why entity_set matters (the preview URL needs an entity set) but adds no syntax or semantics beyond what the schema provides, 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 (Build) and resource (browser URL previewing a published service binding), and clarifies it also returns the service and $metadata URLs. This is clearly distinguishable from the sibling GetServiceBinding, which fetches the binding object rather than composing preview 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?

Maps explicit user intents to the tool ('open the service in a browser', 'preview this service binding', 'what is the OData URL of this binding'), which is strong routing guidance. However, it never names a competing sibling or states when NOT to use it, so it stops short of the explicit alternative-routing bar.

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

GetServiceDefinitionC

Retrieve ABAP service definition definition. Supports reading active or inactive version.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
service_definition_nameYesServiceDefinition name.

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 carries the full behavioral burden. 'Retrieve' implies a read, but nothing is said about permissions needed, what happens when the name does not exist, or what the returned payload 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 short, front-loaded sentences with the resource named first and the version note second. The only blemish is the redundant 'definition definition'.

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 simple two-parameter getter with a fully documented schema and no output schema, the description is adequate: it names the resource and the version axis. It stops at minimum viable because error behavior and typical usage context 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 the version enum is fully documented in the schema, so the baseline of 3 applies. The description echoes the active/inactive distinction without adding format or defaulting 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 (Retrieve) and resource (ABAP service definition), and the companion Create/Update/Delete/ActivateServiceDefinition siblings make the read scope obvious. The phrasing 'service definition definition' is redundant, and it does not explicitly name a sibling to distinguish from, 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?

Only states that active or inactive versions are supported, which is a capability rather than guidance. There is no statement of when to prefer this over GetObjectVersionSource, GetServiceBinding, or the version-diff siblings, and no exclusions.

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

GetSessionA

[read-only] Get a new session ID and current session state (cookies, CSRF token) for reuse across multiple ADT operations. Use this to maintain the same session and lock handle across multiple requests.

ParametersJSON Schema
NameRequiredDescriptionDefault
force_newNoForce creation of a new session even if one exists. Default: false

TDQS

A4.3/5.0
Behavior4/5

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

The description includes '[read-only]' upfront, signaling the tool is non-destructive. It also explains the output includes session ID and state. No annotations are provided, so the description carries the full burden and does so adequately.

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 concise sentence front-loaded with '[read-only]'. Every phrase adds value with no redundant 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?

For a tool with low complexity (one optional parameter, no output schema), the description fully covers purpose, usage, and behavioral transparency. It even mentions what is returned (session ID, state, cookies, CSRF token), making it 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% as the only parameter 'force_new' has a description in the schema. The tool description does not add additional 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 clearly states the verb 'Get' and the resource 'Session', specifying it retrieves a new session ID and current session state (cookies, CSRF token). It distinguishes itself from sibling 'Get*' tools by being the only session-related 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?

The description explicitly says 'Use this to maintain the same session and lock handle across multiple requests,' giving clear context for when to use it. It implies it should be called before other ADT operations but does not explicitly state when not to use or provide alternative tools.

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.

ParametersJSON Schema
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
sql_queryYesSQL query to execute
row_numberNo[read-only] Maximum number of rows to return

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 does disclose read-only semantics ("[read-only]") and that only SELECT queries are executed, which is meaningful. But it omits what happens on a non-SELECT statement, any authorization requirements, and row/result-size limits, leaving real gaps for a query-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?

Two sentences, with the read-only tag and the core action front-loaded before the usage hint. No filler, and the sentences each carry distinct 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 and no annotations, so the description must carry more weight. It covers what the tool does and when to use it, but says nothing about the SQL dialect/subset supported, error behavior, or result limits beyond the row_number parameter. Adequate but with noticeable gaps for an arbitrary-query 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 (sql_query, detail, row_number) are already documented in the schema, including the enum values and default. The description adds no parameter-level detail beyond that. 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: executes ABAP SQL SELECT queries against database tables and CDS views, and names the underlying mechanism (SAP ADT Data Preview API). This distinguishes it from read tools like GetTableContents, though it never explicitly names that sibling as the alternative. Clear enough to select 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?

"Use for ad-hoc data retrieval, row counts, and filtered queries" gives concrete usage contexts. However, it offers no when-not guidance and does not point to GetTableContents for the simpler table-read case, so the boundary with siblings is left implicit.

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

GetStructureC

Retrieve ABAP structure definition. Supports reading active or inactive version.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
structure_nameYesStructure name.

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 carries the full behavioral burden and delivers little: it implies a read but says nothing about permissions, error behavior, or what the returned definition contains. 'Supports reading active or inactive version' adds a minor capability note but is already covered by 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 short, front-loaded sentences with no filler or repetition. It is efficient, though the second sentence spends words on a capability the schema already documents.

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 simple two-parameter read tool with fully described params this is close to adequate, but with no annotations and no output schema the description should say more about what is returned (full source, metadata) and whether inactive reads have any prerequisites.

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 self-documenting enum for 'version' with default and meaning, so the baseline of 3 applies. The description's version sentence merely restates what the schema already explains in more 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+resource ('Retrieve ABAP structure definition'), which cleanly distinguishes it from the plural sibling GetStructuresList and from Create/Update/DeleteStructure. However, it does not explicitly name any alternative for routing purposes, 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?

No guidance on when to use this versus adjacent siblings such as GetStructuresList, GetStructureVersions, or GetStructureVersionSource. The only conditional hint is 'Supports reading active or inactive version,' which is a capability statement rather than usage guidance.

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. Refused outright on legacy systems (BASIS < 7.50): AdtClientLegacy.getStructure()/getTable() both throw — the DDIC structure/table endpoints this needs are not present there (issue #207).

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNo[read-only] Timeout in ms for each ADT request.
versionNoVersion to read: "active" (default) or "inactive".active
structure_nameYesStructure 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

A3.7/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 burden, and it does disclose meaningful behavior: it is read-only, output is a recursive tree, and it hard-fails on legacy systems with a concrete justification (missing DDIC endpoints, issue #207). Gaps remain around permissions/return shape, but the failure-mode disclosure is well above average for an annotated-bare 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?

Two sentences, front-loaded with the core action; the legacy-system constraint follows the purpose cleanly. The parenthetical method names and issue reference are mildly verbose but earn their place as a real limitation.

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 listing tool with a fully documented schema and no output schema, the description covers purpose, structural scope, and a blocking environmental constraint. Nothing critical to invoking it correctly is missing, though when-to-prefer-it guidance would round it 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 description coverage is 100%, so the schema already documents all four parameters (timeout, version, structure_name, include_extensions). The description reinforces the append/include concept but adds no format or semantics 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: recursively list the structures embedded in an ABAP structure, returned as a tree, with .INCLUDE / append noted. This distinguishes it conceptually from GetStructure (which fetches the structure itself), but it never names a sibling, so differentiation is implied 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?

It gives one important eligibility constraint (refused on BASIS < 7.50), but offers no guidance on when to reach for this versus GetStructure, GetIncludesList, or GetObjectStructure. Usage is inferable from the purpose but not spelled out.

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

GetStructureVersionDiffA

[read-only] Compute a unified diff between two ABAP structure versions, by their content_uris (taken from GetStructureVersions entries).

ParametersJSON Schema
NameRequiredDescriptionDefault
content_uri_toYesOpaque content_uri of the NEW/compare version (from a GetStructureVersions entry).
content_uri_fromYesOpaque content_uri of the OLD/base version (from a GetStructureVersions entry).

TDQS

A4/5.0
Behavior3/5

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

Marked as [read-only], which is appropriate. No annotations provided, so description carries burden. It does not disclose auth needs, rate limits, or any side effects beyond read-only nature. Acceptable but minimal.

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?

Single sentence with [read-only] tag. Every word earns its place. Front-loaded with key info.

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?

Simple tool with 2 params, no output schema. Description conveys essential info. Could mention output format (unified diff) but not critical given common understanding.

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?

Both parameters have clear descriptions in schema, and description adds context about being from GetStructureVersions entries. 100% schema coverage plus extra context. Description adds value beyond 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?

Description clearly states the verb 'Compute' and resource 'unified diff between two ABAP structure versions', with clear input sources ('content_uris taken from GetStructureVersions entries'). It distinguishes from sibling tools like GetStructureVersions.

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 explicit when-to-use or when-not-to-use guidance. The description mentions input source (GetStructureVersions), but does not compare with sibling diff tools or provide alternatives. Adequate but lacks formal guidelines.

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

GetStructureVersionsA

[read-only] List the SAP version history of a ABAP structure. Returns each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and an opaque content_uri to fetch that version's source via GetStructureVersionSource.

ParametersJSON Schema
NameRequiredDescriptionDefault
structure_nameYesABAP structure name.

TDQS

A4/5.0
Behavior3/5

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

The description explicitly marks the tool as read-only with '[read-only]' and describes the returned fields. Since annotations are absent, the description carries full burden but lacks details on error handling, permissions, or pagination. It adds value beyond a minimal definition but is 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.

Conciseness5/5

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

The description is two sentences, well-structured, and front-loaded with '[read-only].' Every sentence provides essential 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?

The description explains what the tool returns (version list with specific fields) and mentions the content_uri for source retrieval. It does not cover ordering or pagination, but given the simple read operation and absence of output schema, it is mostly 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?

The sole parameter 'structure_name' is documented in the schema with 'ABAP structure name.' The description does not add additional meaning beyond that. With 100% schema description coverage, the baseline is 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 description clearly states the tool's action: 'List the SAP version history of a ABAP structure.' It specifies the resource (ABAP structure) and what is returned (version list with fields). It distinguishes from sibling tools like GetStructureVersionDiff and GetStructureVersionSource by noting the content_uri for fetching source via a separate 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?

The description provides clear context for when to use this tool (to list versions) and implicitly points to GetStructureVersionSource for fetching source content. However, it does not explicitly mention when not to use it or list alternatives like GetStructureVersionDiff for diffing versions.

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

GetStructureVersionSourceA

[read-only] Fetch the source of a specific ABAP structure version by its content_uri (taken from a GetStructureVersions entry).

ParametersJSON Schema
NameRequiredDescriptionDefault
content_uriYesOpaque content_uri taken from a GetStructureVersions entry.

TDQS

A4.4/5.0
Behavior4/5

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

The description includes '[read-only]' tag upfront, disclosing the non-destructive nature. With no annotations, it effectively communicates the safe read behavior, though it does not detail return format or potential errors.

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?

Single sentence with 15 words, front-loaded with the [read-only] tag. No wasted words; every part 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-only tool with full schema coverage, the description adequately explains what it does and the input source. It does not describe the output, but given no output schema, that is a minor 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%. The description adds value by clarifying the parameter is 'opaque' and linking it to a GetStructureVersions entry, going beyond the schema's 'Opaque content_uri' description. This provides practical usage context.

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 verb 'Fetch' and the resource 'source of a specific ABAP structure version', specifying the input 'content_uri' from a prior call. It distinguishes itself from sibling tools like GetStructureVersionDiff 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?

The description explicitly instructs to take the content_uri from a GetStructureVersions entry, providing clear prerequisite context. It does not explicitly mention when not to use, but the requirement of a prior call implicitly limits usage.

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

GetTableB

Retrieve ABAP table definition. Supports reading active or inactive version.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) for deployed version, "inactive" for modified but not activated version.active
table_nameYesTable name.

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 behavioral burden. 'Retrieve' implies a read-only operation and the version support is useful, but it omits auth requirements, error behavior, and what the returned definition contains. Adequate but with clear gaps.

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 no wasted words. The core action is front-loaded, followed by the version-support detail. Appropriately sized for a simple retrieval 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?

Given the low complexity, 100% schema coverage, and no output schema, the description covers the essential purpose and version handling. It could clarify the return format or relation to sibling tools, but it is sufficient 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 coverage is 100%, so both parameters are fully documented in the schema. The description's mention of active/inactive versions repeats what the enum and its description already provide, adding no new semantic 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 (ABAP table definition), clearly distinguishing it from GetTableContents and GetStructure by scope. It does not explicitly name sibling tools or contrast them, but the purpose 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?

The description gives no when-to-use guidance, no exclusions, and does not point to alternatives like GetTableContents or GetStructure. It merely states what the tool does, leaving the agent to infer usage context.

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

GetTableContentsA

[read-only] Retrieve contents (data preview) of an ABAP database table or CDS view. Returns rows of data like SE16/SE16N.

ParametersJSON Schema
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
max_rowsNoMaximum number of rows to retrieve
table_nameYesName of the ABAP table

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 must carry the behavioral load. It usefully declares '[read-only]' and that output is row-oriented like SE16/SE16N, but says nothing about permissions, default/maximum row limits, or performance considerations for large tables.

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 read-only tag and core purpose front-loaded. Nothing is redundant and every phrase (data preview, SE16/SE16N, rows of data) contributes to understanding.

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, the description should characterize the return value; it does so loosely ('returns rows of data'). Combined with fully documented params this is adequate but leaves gaps around row limits, pagination, and result format that an agent might want.

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 each of the three parameters is documented in the schema, including the detail enum and max_rows meaning. The description adds no parameter-level detail beyond what the schema already supplies, 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: retrieves data contents/preview of an ABAP table or CDS view, with the SE16/SE16N analogy making the intent concrete. It implicitly distinguishes from the metadata-oriented GetTable sibling via "contents (data preview)", though it does not name that 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?

Usage is only implied: the SE16/SE16N reference and "data preview" framing suggest ad-hoc browsing of table rows rather than schema inspection or activation. There is no explicit statement of when to use this versus GetTable, GetTableVersionSource, or other read siblings.

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

GetTableVersionDiffA

[read-only] Compute a unified diff between two ABAP table versions, by their content_uris (taken from GetTableVersions entries).

ParametersJSON Schema
NameRequiredDescriptionDefault
content_uri_toYesOpaque content_uri of the NEW/compare version (from a GetTableVersions entry).
content_uri_fromYesOpaque content_uri of the OLD/base version (from a GetTableVersions entry).

TDQS

A3.7/5.0
Behavior3/5

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

The description includes a '[read-only]' tag, indicating no state modifications, which is a key behavioral trait. However, it lacks details on output format, error handling, or what happens with invalid URIs. With no annotations, the description provides minimal behavioral context beyond the read-only hint.

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 sentence with essential information. No unnecessary words, and the read-only hint is placed first for quick scanning.

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?

While the description covers purpose and input source, it does not describe the output format (e.g., unified diff string) or any limitations. Given the simplicity of the tool and absence of an output schema, more detail on the return value would improve completeness.

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 input schema already covers both parameters with descriptions that mention they come from GetTableVersions entries (100% coverage). The tool description's mention of GetTableVersions is redundant, adding no new semantic 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 clearly states the tool computes a unified diff between two ABAP table versions using content_uris. It specifies the resource (table versions) and verb (compute), and the mention of GetTableVersions distinguishes it from similar diff tools for other objects.

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 after retrieving content_uris from GetTableVersions, but it does not explicitly state when to use this tool over alternatives or provide exclusion criteria. Usage guidance is only implicitly provided.

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

GetTableVersionsA

[read-only] List the SAP version history of a ABAP table. Returns each version with its versionId, author, updatedAt, title, the transportRequest (and transportDescription) that produced it when available, and an opaque content_uri to fetch that version's source via GetTableVersionSource.

ParametersJSON Schema
NameRequiredDescriptionDefault
table_nameYesABAP table name.

TDQS

A4/5.0
Behavior4/5

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

The description starts with '[read-only]', clearly indicating it's a non-destructive read operation. It lists the exact return fields and notes that the content_uri is opaque, which helps manage expectations. However, it does not mention error conditions, permissions, or ordering, leaving some gaps.

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 concise: a one-sentence purpose statement followed by a sentence enumerating return fields. Both sentences provide essential information without unnecessary fluff.

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 covers the tool's purpose, return fields, and links to a related tool. It does not discuss ordering, limits, or error handling, but for a simple listing operation it is largely adequate.

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 already fully describes the single parameter 'table_name' with the description 'ABAP table name.' The description does not add additional semantics beyond that, but given 100% schema coverage, a 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 clearly states the verb (List), resource (SAP version history of an ABAP table), and distinguishes from sibling version tools by specifying 'table'. It also mentions the specific return fields, including the opaque content_uri linking to GetTableVersionSource, further clarifying its role.

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 does not explicitly state when to use this tool over its siblings (like GetTableVersionDiff or GetTableVersionSource). While it implies usage when needing a list of versions, it could provide more guidance on alternatives and exclusions.

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

GetTableVersionSourceA

[read-only] Fetch the source of a specific ABAP table version by its content_uri (taken from a GetTableVersions entry).

ParametersJSON Schema
NameRequiredDescriptionDefault
content_uriYesOpaque content_uri taken from a GetTableVersions entry.

TDQS

A4.2/5.0
Behavior4/5

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

Opens with '[read-only]' explicitly marking the operation as safe and non-destructive. With no annotations provided, the description carries the full burden and adequately signals no side effects beyond fetching data.

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?

Single sentence, front-loaded with critical '[read-only]' marker, every word adds value. No fluff or 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?

Adequate for a read-only fetch tool with one parameter. Lacks description of return format (e.g., 'returns the source code as a string'), but this is consistent with other Get*VersionSource siblings and does not 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 coverage is 100% with description already explaining the parameter as 'Opaque content_uri taken from a GetTableVersions entry.' The tool description repeats this but adds no new meaning 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?

Explicit verb 'fetch', resource 'source of a specific ABAP table version', and method 'by its content_uri (taken from a GetTableVersions entry)'. Clearly distinguishes from sibling Get*VersionSource tools which target different resource types.

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?

States prerequisite: 'taken from a GetTableVersions entry', indicating when to invoke. Does not explicitly state when not to use or mention alternatives, but the sibling context implies this is the correct tool for retrieving a table version's source after obtaining its content_uri.

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

GetTransactionA

[read-only] Retrieve ABAP transaction (t-code) details — program, screen, authorization object, and transaction type (dialog, report, OO).

ParametersJSON Schema
NameRequiredDescriptionDefault
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?

Description starts with '[read-only]' indicating non-destructive behavior. It lists exactly what details are retrieved (program, screen, etc.), providing clear behavioral insight 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.

Conciseness5/5

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

Single, front-loaded sentence with no redundant words. Efficiently conveys purpose and scope.

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?

Tool has one required parameter and no output schema; description covers the returned details sufficiently. Lacks mention of error conditions or authorization, but adequate for its 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 coverage is 100% with one parameter ('transaction_name') described adequately. The description adds no extra meaning beyond the schema, meeting baseline expectation.

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 'Retrieve ABAP transaction (t-code) details' with specific attributes (program, screen, authorization object, transaction type). It distinguishes itself from sibling tools by targeting transactions uniquely.

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 for retrieving transaction details but lacks explicit guidance on when to use this tool versus alternatives. No when-not or alternatives mentioned.

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

GetTransportB

[read-only] Retrieve ABAP transport request information including metadata, included objects, and status from SAP system.

ParametersJSON Schema
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

B3.2/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, and it does declare '[read-only]' plus the scope of retrieved data — useful safety context. It stops short of permission requirements, whether the transport must be released/modifiable, or error behavior for an invalid transport 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?

One front-loaded sentence with the read-only marker up front and zero padding. It is efficient, though the sentence could have used a second clause to route the agent away from the overlapping siblings.

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 read tool with three fully documented parameters and no output schema, the description adequately signals the shape of the return (metadata, objects, status) and the read-only nature. Only routing against sibling transport tools 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 transport_number, include_tasks and include_objects are already fully documented, including the 'not a task' caveat. The description adds no syntax or format detail 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?

Specific verb+resource: 'Retrieve ABAP transport request information' with a clear enumeration of what comes back (metadata, included objects, status). It does not, however, differentiate itself from near-siblings like ReadTransportObjects or ListTransports, 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 Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no alternatives named despite several transport-related siblings (ListTransports, ReadTransportObjects, ReadTransportActionLog, CreateTransport). Usage is only implied by the noun 'transport request'.

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 domains (DOMA), data elements (DTEL), table types, and structures. Returns field definitions, value ranges, fixed values, and DDIC metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
type_nameYesName of the ABAP type
include_structure_fallbackNoWhen true (default), tries DDIC structure lookup only if type lookup returns 404/empty.

TDQS

A4/5.0
Behavior3/5

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

The description labels the operation as '[read-only]' and states what is returned, but omits details like error behavior (e.g., on invalid type_name), permissions needed, or potential performance considerations. Since no annotations are provided, the description carries the full burden but leaves gaps.

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 sentence that is front-loaded with '[read-only]' and efficiently communicates purpose, scope, and output with no extraneous words.

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 retrieval tool with 2 parameters and no output schema, the description sufficiently covers what the tool does and returns. It lacks explicit instructions for error conditions or system prerequisites, but overall it is adequate.

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?

Both parameters have schema descriptions (100% coverage). The tool description adds value by listing supported types for 'type_name' (DOMA, DTEL, etc.) and clarifying the fallback behavior of 'include_structure_fallback', enriching the schema's meaning.

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 starts with '[read-only]' and clearly states it retrieves ABAP type information for specific object types (DOMA, DTEL, table types, structures) and lists the returned data (field definitions, value ranges, fixed values, DDIC metadata). This distinguishes it from sibling tools that perform other operations.

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 enumerates supported types (domains, data elements, etc.) implying when to use this tool, but it does not explicitly contrast with other 'Get' sibling tools like GetDataElement or GetDomain, nor does it state when to prefer this over those.

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

GetUnitTestResultA

Get the result of an ABAP Unit test run by its run_id, for a run that had not finished when it was started. Waits for it within a bound.

ParametersJSON Schema
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 behavioral burden. It usefully discloses the key trait that the call blocks 'within a bound' while waiting for an unfinished run, but says nothing about timeout/error behavior or what happens if the run never completes.

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 primary purpose and the blocking behavior front-loaded; nothing is redundant. It could be slightly more compact but is efficiently 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?

For a Get tool with no output schema and no annotations, the description covers when and how to call but does not describe return content or the meaning of the detail levels beyond what the schema states, 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 detail enum is fully documented in-schema, so the schema does the heavy lifting. The description adds no syntax or format meaning beyond it, 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 (Get) and resource (ABAP Unit test run result) keyed on run_id, and distinguishes itself from the run-creation siblings by scoping to 'a run that had not finished when it was started.' It is clear but does not name a sibling alternative to fully disambiguate from RunUnitTest.

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 supplies a clear context condition for use ('for a run that had not finished when it was started'), telling the agent this is the retrieval/polling counterpart to running a test. It stops short of explicitly naming alternatives or stating 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.

GetVirtualFoldersLowB

[low-level] Retrieve hierarchical virtual folder contents from ADT information system. Used for browsing ABAP objects by package, group, type, etc.

ParametersJSON Schema
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
facet_orderNoOrder of facets in response (e.g., ["package", "group", "type"]). Default: ["package", "group", "type"]
preselectionNoOptional preselection filters (facet-value pairs for filtering)
with_versionsNoInclude version information in response
object_search_patternNoObject search pattern: "*" matches any name, and a trailing "*" matches a prefix. Default: "*"*
ignore_short_descriptionsNoIgnore short descriptions in response

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. 'Retrieve' implies a read operation, but it does not disclose the result shape, pagination/volume behavior, the effect of the '[low-level]' marker, or whether the operation is safe and side-effect free. For a 6-parameter discovery tool this is thin.

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 padding, with the '[low-level]' qualifier and the core verb front-loaded. It is appropriately sized, though the second sentence is doing only light work and neither sentence arrives at the specifics (facets, filtering) the tool actually exposes.

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 6 parameters, no output schema, and no annotations, the description is only barely sufficient: it names the domain and the browsing intent but omits the virtual-folder/facet model, the meaning of the detail levels, and how it differs from sibling tree tooling. Adequate to start, incomplete for reliable 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?

Schema description coverage is 100%, so the schema already explains detail, facet_order, preselection, object_search_pattern, and the rest; the baseline of 3 applies. The description adds no parameter semantics of its own (e.g., no guidance on when to use 'full' vs 'raw' or how preselection interacts with facet_order).

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 combo ('Retrieve hierarchical virtual folder contents') and adds the domain ('from ADT information system') plus an example use ('browsing ABAP objects by package, group, type'). However it does not distinguish itself from close siblings such as GetPackageTree, GetNodeStructureLow, or GetObjectStructureLow, so an agent cannot route between the 'Low' variants on the description 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?

'Used for browsing ABAP objects by package, group, type, etc.' implies the usage context, but there is no explicit when-to-use vs. when-not, no mention of when the non-low GetVirtualFolders variant or alternate tree tools should be picked, and no prerequisites. Usage is inferable but not navigational.

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

GetWhereUsedA

[read-only] Where-used list of an ABAP object: every object that uses, calls or references it, with its type and package.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameYesName of the ABAP object. For function modules the name MUST be in the form 'GROUP|FM_NAME' (function group name, pipe, function module name).
object_typeYesType 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.8/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 behavioral disclosure. It marks the operation as [read-only] and describes the returned rows, but it does not mention permissions, pagination, result limits, or performance characteristics such as the slowdown noted for enable_all_types 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?

It is a single front-loaded sentence with no wasted wording. The read-only marker and the core where-used scope are both immediately visible.

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 query tool with no output schema, the description succinctly explains what is returned. The schema richly documents filtering parameters, and no annotations exist, so the description is adequate though it could add more usage or performance context.

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, defaults and type codes are already fully documented in the schema. The description adds no parameter-level details beyond schema content, which matches the baseline of 3 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 resource and purpose: a where-used list of an ABAP object, returning every object that uses, calls or references it along with type and package. This is immediately distinguishable from sibling tools like SearchObject, GetObjectInfo or GetObjectStructure.

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 name and description: call this when you need references to an ABAP object. However, the description gives no explicit when-to-use guidance, prerequisites, or comparison against alternatives such as SearchObject or GetObjectInfo.

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

ListFunctionGroupIncludesB

[read-only] List the includes (TOP, custom) of an ABAP function group.

ParametersJSON Schema
NameRequiredDescriptionDefault
function_group_nameYesFunction group name.

TDQS

B3.2/5.0
Behavior3/5

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

No structured annotations are provided, but the description manually tags the tool as [read-only], which conveys the safety profile. It adds nothing about return format, pagination, or whether the function group must exist, leaving some behavioral burden unmet for an annotation-free 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 efficient sentence with the [read-only] qualifier front-loaded. No wasted words, though the parenthetical is slightly terse.

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 simple read-only list tool with one fully documented parameter and no output schema, the description is mostly adequate. It omits any hint of what the returned include list looks like or how it relates to sibling list tools, which would help an agent act with confidence.

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 documents function_group_name. The description adds no syntax, format, or naming detail 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 (List) and resource (includes of an ABAP function group) and even clarifies what the includes are (TOP, custom). However, it does not distinguish itself from closely related siblings such as ListFunctionModules or GetIncludesList, so an agent must infer the distinction from 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 Guidelines2/5

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

There is no explicit guidance on when to use this tool versus alternatives like ListFunctionModules or GetInclude. The usage is only implied by the name and description; 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.

ListFunctionModulesB

[read-only] List the function modules of an ABAP function group.

ParametersJSON Schema
NameRequiredDescriptionDefault
function_group_nameYesFunction group name.

TDQS

B3.1/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 disclosure burden. It does self-declare '[read-only]', which is a useful trait, but says nothing about return shape, ordering, empty-result behavior, or error conditions on an unknown 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.

Conciseness5/5

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

A single efficient sentence with the read-only marker front-loaded. Nothing is wasted and nothing 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?

For a one-parameter list tool with no output schema, the definition is minimally sufficient but thin: it never hints at what the returned entries contain (module names only vs. signatures) or how results are ordered, which an agent may want before choosing it over GetFunctionModule.

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 a single self-documenting parameter (function_group_name), so the schema already carries the semantic load. The description adds no syntax, format, or case-sensitivity detail 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 (List) and resource (function modules of an ABAP function group), so the agent knows exactly what it returns. However, it does not distinguish itself from close siblings like ListFunctionGroupIncludes or GetFunctionModule, leaving the boundary 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 Guidelines2/5

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

No guidance on when to use this versus the many sibling list/get tools (e.g., ListFunctionGroupIncludes, GetFunctionGroup, GetFunctionModule). The agent must infer the context entirely from the tool name.

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

ListServiceBindingTypesB

List available service binding types (for example ODataV2/ODataV4) from ADT Business Services endpoint.

ParametersJSON Schema
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

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 behavioral burden. 'List available' implies a non-mutating read and it names the ADT Business Services endpoint as the data source, which is useful. However, it says nothing about permissions, result size, or whether the enumeration is cached or complete.

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 that names the action, the resource, examples, and the origin endpoint with no filler. Nothing could be trimmed without losing 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 simple read-only enumeration with no output schema, the description covers the essentials but leaves the return shape and any environment requirements to inference. It 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?

Only one parameter (response_format) exists and schema description coverage is 100%, so the schema already explains the xml/json/plain semantics fully. The description adds no parameter-level 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?

States a specific verb ('List') and resource ('service binding types') with concrete examples (ODataV2/ODataV4) and the source endpoint. It is distinguishable from the sibling GetServiceBinding, which fetches a single binding rather than enumerating available types.

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 indication of when to use this versus alternatives such as GetServiceBinding or CreateServiceBinding, and no prerequisites or exclusions are stated. Usage must be inferred entirely from the name.

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 — not sent to ADT as filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
userNoSAP 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.
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
modifiable_onlyNoOnly return modifiable (not yet released) transports; applied client-side. Default: true.

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 burden and does useful work: it self-declares read-only and, importantly, discloses that the user and modifiable-only filters are applied client-side over the server's default search configuration rather than being pushed to ADT. That is a non-obvious behavioral trait affecting result semantics and volume. It stops short of covering auth needs or result-size 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?

Front-loads the read-only marker and the core purpose, then qualifies filtering behavior in two efficient sentences. Slightly dense but every sentence earns its place; no redundant fluff.

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 no-output-schema, no-annotation list tool, the description covers read-only nature, scope, filter semantics, and the kind of requests returned. It does not describe the returned fields or default result ordering, but 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 description coverage is 100%, so the schema already documents all three parameters (including the client-side note). The description largely restates that filtering is client-side and adds only the nuance about the server's default search configuration, so it hovers at the baseline rather than adding real new meaning.

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?

Opens with a specific verb+resource ("List transport requests") and scopes it to the current or specified user, then narrows content to modifiable/released workbench and customizing requests. This clearly separates it from the singular GetTransport and the write-oriented CreateTransport/CreateTransportTask 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?

Gives clear context for when an unfiltered call is appropriate (defaults to the session user, so it answers only that user's transports without extra args), and states the modifiable-only caveat. It does not explicitly contrast with GetTransport, so it lacks named alternatives/exclusions.

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

ReadFunctionIncludeA

[read-only] Read ABAP function group include source code and metadata. Answers: "show function group include code", "display include source", "view include of function group". Returns source code and include metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to read: "active" (default) or "inactive".active
include_nameYesInclude name.
function_group_nameYesFunction group name containing the include.

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 must carry the safety profile itself, and it does by declaring '[read-only]' up front. It also adds behavioral context by stating the return content is source code plus include metadata. It omits error behavior, permission requirements, and whether inactive-version reads behave differently, keeping it out of 5 territory.

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, followed by briefly useful trigger phrases and return summary. The 'Answers:' list is mild redundancy but does aid retrieval; nothing is padded at length.

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 is returned (source code and metadata), and it discloses read-only status in the absence of annotations. Complete enough to invoke correctly, though a note on version handling or error cases would round it 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 description coverage is 100%, so all three parameters (including the active/inactive enum) are already documented in the schema. The description adds no extra parameter meaning, which is the baseline-3 case 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: 'Read ABAP function group include source code and metadata.' This is clearly distinct from the mock-style siblings CreateFunctionInclude/UpdateFunctionInclude/DeleteFunctionInclude and from ListFunctionGroupIncludes. It does not explicitly name those alternatives, so it stays 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?

The 'Answers:' phrase list ('show function group include code', 'display include source') gives concrete trigger conditions for selecting this tool over siblings. However, it offers no when-not guidance or explicit routing to alternatives such as ListFunctionGroupIncludes for enumeration or GetInclude for generic includes.

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

ReadTransportActionLogA

[read-only] Read the action log of a transport request: one entry per lifecycle event — created, object added, object deleted, owner changed. This is what confirms a RemoveTransportObject landed, since that call answers by echoing what it was asked.

ParametersJSON Schema
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

A4.2/5.0
Behavior4/5

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

With no annotations present, the description still carries useful behavioral weight: it declares the operation read-only and explains that RemoveTransportObject's response is not authoritative, making this log the source of truth. It omits return format, pagination, or permissions detail, but provides real insight 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.

Conciseness5/5

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

Two tightly written sentences, front-loaded with the read-only tag and purpose, with the verification rationale placed last. Every 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?

No output schema exists, but the description explains what the log contains (entries per lifecycle event), covering the return content adequately. Minor gaps around entry format and ordering keep it just 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% and the 'detail' enum plus 'transport_number' semantics (request vs task) are fully documented in the schema. The description adds no additional parameter meaning, 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+resource (read the action log of a transport request) and describes the granularity precisely: one entry per lifecycle event (created, object added, object deleted, owner changed). This clearly distinguishes it from siblings that read transport objects or transport headers.

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 concrete usage scenario — verifying that RemoveTransportObject landed — and explains the rationale (that call merely echoes its input). This is strong contextual guidance, though it doesn't state exclusions or survey other alternatives.

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

ReadTransportObjectsA

[read-only] List the objects a transport request or task holds, each with the position that RemoveTransportObject needs. Objects live on TASKS: a request shows its tasks' entries, but a removal addressed at the request is refused. Read a task number to get entries that can be acted on.

ParametersJSON Schema
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. 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.

TDQS

A4.1/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, and it does flag the read-only nature and a non-obvious behavioral rule (request-addressed removals are refused; entries live on tasks). However it says nothing about result size, pagination, or the cost of the 'full'/'raw' detail modes beyond what the schema already states.

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, and every sentence is load-bearing. The request-vs-task point is stated twice (description and again via the param doc), which is mild redundancy rather than 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?

With no output schema, the description usefully names the key returned field (`position`) and the task-vs-request entry model, which is what an agent needs to chain into RemoveTransportObject. It stops short of describing the entry shape beyond `position`.

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 (transport_number, detail enum) are fully documented in the schema itself, including the request-vs-task distinction. The description largely restates 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?

Specific verb + resource ('List the objects a transport request or task holds') with the added detail that each entry carries the `position` field RemoveTransportObject consumes. This cleanly separates it from ListTransports, AddTransportObject, and RemoveTransportObject, so an agent can pick it without opening a schema.

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?

Explicitly routes the agent: read a REQUEST to find WHICH task holds an object, read a TASK to get entries that can actually be acted on, and warns that a removal addressed at the request is refused. This is when-to-use plus a named downstream tool and a failure condition.

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

RemoveTransportObjectC

Remove an object's entry from the transport task that holds it.

ParametersJSON Schema
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

C2.9/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 doesn't disclose whether removal is reversible, what permissions or lock state are required, what happens to the underlying object, or whether the entry must be at the given position. For a mutation tool this is a significant 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 efficient sentence that is front-loaded with the action and resource and contains no filler. It is short but not padded, though it sacrifices completeness for brevity.

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 no annotations, no output schema, and four required parameters including a positional index, the description omits critical context: required lock/state, reversibility, error behavior on missing or mismatched entries, and the effect on the transport task.

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 the position, object_type, and detail enum are already documented in the schema. The description adds no additional meaning, 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 (Remove) and resource (an object's entry from its transport task), which is precise enough to distinguish it from AddTransportObject and ReadTransportObjects. It does not explicitly name siblings, 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 guidance on when to use this versus AddTransportObject or ReadTransportObjects, nor any mention of prerequisites such as the task needing to be modifiable or the object having to already be in the task. The agent must infer the usage context from the name alone.

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

RunATCA

Run ABAP Test Cockpit checks over one or more objects. Creates a worklist for the check variant, then starts the run. Answers worklist_id always — findings stay readable with GetATCFindings whether or not the run waited. With wait=false it also answers run_id, for GetATCRunStatus; with wait=true the server holds the request until the checks finish and answers the finding counts.

ParametersJSON Schema
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.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 well: it discloses the side effect of creating a worklist, that the server blocks on wait=true versus returning a run_id on wait=false, and that findings remain readable either way. It omits authorization/permission requirements and any cost or runtime caveats for large 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?

Three tight sentences with the action front-loaded, followed by the mechanism and then return-value behavior. No filler, and each sentence carries new 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?

No output schema exists, so the description correctly compensates by specifying exactly what is returned (worklist_id always, run_id when wait=false, finding counts when wait=true) and which siblings read those values. An agent has everything needed to call it and chain follow-ups.

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 wait, objects, max_findings and check_variant are already documented in the schema. The description restates the wait semantics (mildly redundant) and does not mention max_findings or check_variant at all, so it adds little beyond the structured fields. 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 ('Run ABAP Test Cockpit checks over one or more objects') plus the internal mechanism (worklist creation then run start). It differentiates itself from siblings by naming GetATCFindings and GetATCRunStatus as the consumers of its output.

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 wait=true/false sentence gives concrete selection guidance, and naming GetATCFindings and GetATCRunStatus tells the agent where to go next. It stops short of stating when not to run ATC at all (e.g., versus the per-object Check* tools), so it is clear context rather than explicit exclusions.

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

RunCdsUnitTestB

Run the ABAP Unit tests of a CDS view and return the result.

ParametersJSON Schema
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

B3.4/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 does not disclose whether the test class must be active, whether the operation has side effects, whether failures produce errors or a partial result, or any auth/rate constraints. 'Return the result' is the only behavioral claim.

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+resource first and the outcome second. No filler; every word earns its place.

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?

There is no output schema, so the description should describe the shape of the returned result (pass/fail counts, messages, raw ADT document) and it does not. For a test-runner tool with no annotations and no output schema, this leaves key invocation-time context 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 both parameters (class_name, detail) are fully documented in the schema, so the description adds nothing on parameters. Baseline 3 is appropriate when structured fields do 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 (Run) and resource (ABAP Unit tests of a CDS view), and the qualifier 'of a CDS view' cleanly distinguishes it from the sibling runners RunUnitTest, RunFunctionGroupUnitTest, and RunFunctionModuleUnitTest. An agent can route to it 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 (use this to run tests for CDS views) but there is no explicit when-to-use, when-not-to-use, or named alternative among the many sibling runners. The agent must infer the boundary from the resource name alone.

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

RunFunctionGroupUnitTestC

Run all ABAP Unit tests of a function group and return the result.

ParametersJSON Schema
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 whose tests run.

TDQS

C2.9/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, yet it omits key traits: whether running tests has side effects or mutates state, permission requirements, and whether execution is synchronous or can time out. All it discloses is that it runs all tests and returns a result.

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 that front-loads the verb and resource with no wasted words. It is appropriately sized for the tool but so terse that it leaves obvious informational gaps.

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 simple two-parameter test-execution tool, the description is minimally adequate, but with no output schema present it should say more about what "the result" contains (pass/fail counts, messages, detail levels). It stops at restating the purpose without covering the return surface.

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 function_group_name and the detail enum are already documented in the schema. The description adds nothing about parameter meaning or the terse/full/raw choice, so it meets the baseline-3 threshold rather than exceeding 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 (Run) and resource (all ABAP Unit tests of a function group) and clarifies scope with "all". It does not, however, explicitly distinguish itself from the close siblings RunFunctionModuleUnitTest, RunUnitTest, or RunCdsUnitTest, leaving the agent to infer the difference from the names.

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 implies the context (running tests for a function group) but gives no when-to-use versus when-not-use guidance and never names an alternative such as RunFunctionModuleUnitTest or RunUnitTest. With so many near-identical Run*UnitTest siblings, the routing burden is left entirely to the agent.

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

RunFunctionModuleUnitTestC

Run the ABAP Unit tests of a function module and return the result.

ParametersJSON Schema
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_module_nameYesFunction module whose tests run.

TDQS

C2.9/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. 'Run the ABAP Unit tests' implies execution, but the description says nothing about side effects, whether the object must be active, runtime cost, or what 'the result' actually contains — a notable gap for a test-execution 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.

Conciseness4/5

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

A single tight sentence with the action front-loaded and zero waste. It is efficient, though the brevity comes at the cost of the context noted elsewhere rather than through disciplined editing of richer content.

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?

With no output schema, the description should explain what 'the result' looks like (pass/fail, messages, counts) but does not. It also omits prerequisites and any notion of scope relative to the function-group and class test runners, leaving the agent to guess.

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 with its three modes, so the schema does the heavy lifting. The description adds nothing about either parameter; 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 ('Run') plus specific resource ('ABAP Unit tests of a function module'), and it states what it returns. It is distinguishable from RunUnitTest, RunCdsUnitTest, and RunFunctionGroupUnitTest by scope, though it never explicitly contrasts itself with 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 when-to-use guidance, no mention of prerequisites (e.g. tests exist via CreateFunctionGroupUnitTest, object activated), and no pointer to alternatives or to GetUnitTestResult for retrieving results. Only the implied usage from the tool name is available.

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

RuntimeAnalyzeProfilerTraceB

[runtime] Read profiler trace view and return compact analysis summary (totals + top entries).

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoNumber of top rows for summary. Default: 10.
viewNohitlist
trace_id_or_uriYesProfiler trace ID or full trace URI.
with_system_eventsNoInclude system events.

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 full burden for behavioral disclosure. The description states 'Read' implying read-only, but does not disclose side effects, permissions required, or error behavior (e.g., when trace not found). It mentions 'compact analysis summary' but does not specify format or pagination.

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?

Single sentence with key information front-loaded: purpose, action, and output type. No extraneous words. Every part 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?

Given the tool's complexity (4 parameters, no output schema, no annotations), the description provides a high-level purpose but lacks details on output format, error handling, or usage examples. Context signals show many sibling tools, but description does not differentiate. Adequate but with 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 75% (3 of 4 parameters have descriptions). The description adds general context about the output (totals + top entries) but does not add meaning beyond schema for parameters. For high coverage, 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 clearly states the tool reads a profiler trace view and returns a compact analysis summary with totals and top entries. It uses specific verbs ('Read') and resource ('profiler trace view') and distinguishes from siblings like RuntimeGetProfilerTraceData which likely returns raw data.

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 guidance on when to use this tool versus alternatives. No mention of prerequisites (e.g., trace must exist) or context for using different 'view' options. The description implicitly suggests it for summaries, but lacks explicit when-to-use or when-not-to-use instructions.

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

RuntimeCreateProfilerTraceParametersC

[runtime] Schedule ABAP profiler trace parameters and return profilerId (the request id) for profiled execution.

ParametersJSON Schema
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

C2.4/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 behavioral burden, yet it does not say that this is a state-mutating server-side operation, whether the trace configuration persists, whether it must be cleaned up, or what happens if one already exists. With 14 parameters and no annotation coverage, important behavioral context is missing.

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?

One front-loaded sentence with no filler, which is structurally clean, but for a 14-option scheduling tool it is under-specified rather than genuinely concise; the single sentence cannot cover what an agent needs.

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-adjacent, 14-parameter tool with no annotations, no output schema, and near-zero schema coverage, the description should at minimum explain the parameter families and the lifecycle of the returned profilerId. It only covers the purpose and return value, leaving the calling details incomplete.

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

Parameters1/5

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

Schema description coverage is 7% (only the 'description' field is documented) across 14 parameters. The description mentions no parameter at all, not even the required 'description' or the meaning of the various trace flags (aggregate, sql_trace, amdp_trace, explicit_on_off), so the agent gets no help understanding what any option does.

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 even names the return value ('profilerId (the request id)'), which sets it apart from read-side siblings like RuntimeGetProfilerTraceData and RuntimeListProfilerTraceFiles. It does not explicitly differentiate itself from RuntimeRunClassWithProfiling, which is presumably the consumer of that id, 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?

There is no when-to-use guidance, no stated prerequisite (e.g. that the returned id is needed by a subsequent profiled execution), and no mention of alternatives or limits such as how many trace configurations may be active. The clause 'for profiled execution' hints at the workflow but leaves the agent to infer it.

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

RuntimeGetDumpByIdA

[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.

ParametersJSON Schema
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.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 behavioral burden. It usefully discloses that both a summary (error, exception, program, time, user, termination position) and a parsed dump are returned, but says nothing about permissions, mutation risk, size limits, or why one might choose summary vs payload.

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 namespace tag and the verb+resource, then a compact clause describing the two return parts. Efficient with no filler, though the em-dash enumeration is a touch 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?

No output schema exists, so the description's enumeration of returned summary fields is doing real work and adequately signals the response shape. With all three params documented in the schema and no annotations to explain, it is complete enough to call correctly, missing only guidance on view/response_mode trade-offs.

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 baselines at 3. The description adds no syntax or format detail for the id/URI beyond what the schema says, and the view/response_mode enums are already fully explained 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 ('Read') and resource ('ABAP runtime dump') scoped by dump_id or URI, and even enumerates what the summary contains. It does not explicitly differentiate itself from adjacent runtime siblings like RuntimeListFeeds (which likely produces the dump feed), but the purpose 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?

'Read ... by its dump_id or URI' implies the precondition (you must already have an id or feed-entry URI), which is a usable usage cue. However, it never names an alternative tool or states when-not to use it, so guidance remains implicit rather than explicit.

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

RuntimeGetProfilerTraceDataA

[runtime] Read profiler trace data by trace id/uri: hitlist, statements, or db accesses. Returns parsed JSON payload.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoStatement node ID (for statements view).
viewYesTrace view to retrieve.
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

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 full burden. It states the tool is read-only ('Read') and returns parsed JSON, but does not disclose potential constraints like required permissions, rate limits, or the absence of side effects beyond the implied read 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 a single, front-loaded sentence that efficiently communicates the tool's purpose and key aspects without any wasted words.

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 (6 parameters, no output schema), the description adequately covers the input and output (returns parsed JSON). It is missing explicit mention of no side effects, but overall is complete for a read-only data retrieval 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 parameters are fully described in the schema. The description adds minimal context by grouping views and mentioning trace_id_or_uri, but does not provide additional meaning beyond what is already 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 clearly states the tool reads profiler trace data by trace id/uri, listing three specific views (hitlist, statements, db accesses) and indicating a parsed JSON return. It distinguishes from siblings like RuntimeAnalyzeProfilerTrace which imply analysis rather than raw reading.

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 is provided on when to use this tool versus sibling tools such as RuntimeListProfilerTraceFiles or RuntimeAnalyzeProfilerTrace. The description does not mention when not to use it or any prerequisites.

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

RuntimeListFeedsA

[runtime] List the ADT runtime feeds and their variants, or read one: ABAP short dumps, system messages or SAP Gateway errors, filtered by user and time range; dumps also by runtime error, exception, object, package and application component. 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.

ParametersJSON Schema
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.
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.descriptors
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

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 full behavioral burden and delivers real value: entries come newest first, each dump carries its dump_id, next_to is the 'to' value to continue reading, and incomplete_second signals a second holding more entries than SAP returns in one request. It stops short of stating permissions, error behavior, or the shape of the descriptors/variants output, but the pagination semantics are unusually well 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?

Purpose and defect categories are front-loaded before the filter and pagination details, and no sentence is pure filler. The final sentence on incomplete_second is dense and jargon-heavy, slightly taxing on first read, but it conveys a genuinely needed pagination 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 10-parameter, no-required-argument tool with no output schema, the description covers ordering, the dump_id key, pagination continuation, and per-feed filter applicability, which is most of what an agent needs. It does not describe the descriptors/variants output structure or how large a variant list can be, leaving a small 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 all ten parameters and a baseline of 3 applies. The description adds genuine meaning beyond the schema by scoping which filters apply to which feed (dumps additionally filterable by runtime error, exception, object, package, application component) and by explaining the next_to-to-`to` continuation pattern.

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 (list ADT runtime feeds and variants, or read one) and enumerates the concrete feeds covered: ABAP short dumps, system messages, SAP Gateway errors. That is far more specific than the name alone, but it does not differentiate from the nearby RuntimeListSystemMessages sibling, which overlaps with the system_messages feed.

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 usage through the feed_type default ('descriptors' lists available feeds) and notes which filters apply to which feed, so an agent can infer how to start. However, there is no explicit when-to-use/when-not or routing statement pointing at alternatives such as RuntimeGetDumpById or RuntimeListSystemMessages.

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

RuntimeListProfilerTraceFilesA

[runtime] List ABAP profiler trace files available in ADT runtime. Returns structured entries with id, recordedAt, user, objectName, state, expiresAt, and sizing/timing fields.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 behavioral burden but only partially: it discloses return fields (id, recordedAt, user, objectName, state, expiresAt, sizing/timing). It implies a safe read via 'List' but says nothing about auth requirements, whether traces are user-scoped, or result size/ordering.

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, action front-loaded, and the field enumeration in the second sentence each earns its place with 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?

There is no output schema, so the description must carry the return-value burden, which it does by naming the entry fields. For a parameterless, read-only list tool this is close to complete, missing only scoping/pagination or follow-up-tool guidance.

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. There is no parameter surface to clarify, and the description correctly avoids inventing argument 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 (List) and resource (ABAP profiler trace files in ADT runtime), which is clear and distinct in intent from neighbors like RuntimeGetProfilerTraceData and RuntimeAnalyzeProfilerTrace. It does not explicitly name those siblings, so the differentiation is inferrable rather than spelled 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 description implies the tool is used to enumerate available traces, but it offers no explicit when-to-use, prerequisites, or alternative (e.g., that getting/analyzing a specific trace goes through RuntimeGetProfilerTraceData). Usage must be inferred from the verb.

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

RuntimeListSystemMessagesB

[runtime] List SM02 system messages. Returns structured entries with id, title, text, severity, validity period, and author.

ParametersJSON Schema
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

B3/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It only states return fields but fails to mention whether the operation is read-only, any side effects, authorization needs, or rate limits.

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 short but lacks structure. It is not overly verbose, but it omits important details. Could be more concise while adding value.

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?

Given 4 parameters and no output schema, the description is incomplete. It doesn't explain SM02, behavior with no parameters, or how time ranges work. More context is needed for a list with filters.

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 descriptions for all parameters. The description adds no additional parameter meaning beyond what is in the schema, so 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 clearly states the tool lists SM02 system messages and specifies the return fields (id, title, text, severity, validity period, author). It distinguishes from sibling Runtime tools like RuntimeListDumps by focusing on 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 Guidelines2/5

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

No guidance on when to use this tool versus alternatives like RuntimeListDumps or other list tools. No mention of prerequisites or context for system messages.

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

RuntimeRunClassA

[runtime] Execute an ABAP class implementing if_oo_adt_classrun and return its 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 has not appeared within that bound, the run still answers success with output and profiler_id but no trace_id — poll RuntimeListProfilerTraceFiles or RuntimeAnalyzeProfilerTrace afterwards. No run_status or trace_requests_status field is returned — the client exposes no transport status for a run.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileNoWhen true, run with the profiler and search the profiler feed for the resulting traceId. Default false.
aggregateNo
sql_traceNo
amdp_traceNo
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.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 load and does so unusually well: it discloses the trace scheduling/polling flow, the bounded retry via max_trace_attempts/trace_retry_delay_ms, the partial-success semantics (success with output and profiler_id but no trace_id), and the absence of run_status/trace_requests_status fields. It omits permission/auth requirements, 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.

Conciseness4/5

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

Front-loaded with the core action, then dense but purposeful detail on the profiling branch and its failure mode. Every sentence carries information; the long parenthetical clauses are justified by real edge-case semantics rather than 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 19-parameter tool with no output schema, the description covers the important profiling semantics and return-shape caveats well, but the many undocumented boolean trace flags make it incomplete for fully informed invocation. Adequate 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 coverage is only 32% across 19 parameters, so the description must compensate. It explains profile, max_trace_attempts, and trace_retry_delay_ms within the flow narrative, but leaves roughly a dozen trace-configuration parameters (aggregate, sql_trace, amdp_trace, all_*_events, explicit_on_off, etc.) undocumented in both schema and 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?

States a specific verb and resource: execute an ABAP class implementing if_oo_adt_classrun and return its output. Clear what the tool does and its precondition on the class interface. It does not differentiate from the sibling RuntimeRunClassWithProfiling, which appears to overlap, 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 Guidelines4/5

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

Explicitly tells the agent when to set profile=true, what that flow does, and which tools to use afterwards if the trace is missing (RuntimeListProfilerTraceFiles or RuntimeAnalyzeProfilerTrace). Good routing to follow-up tools, though it never addresses the overlap with the dedicated profiling sibling tool.

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

RuntimeRunClassWithProfilingA

[runtime][deprecated] Execute ABAP class with profiler enabled: schedules a trace, runs the class under it, then searches the profiler feed for the trace id this run produced (bounded by max_trace_attempts/trace_retry_delay_ms). trace_id is absent if the trace has not appeared within that bound. No run_status or trace_requests_status field is returned — the client exposes no transport status for a run. Prefer RuntimeRunClass with profile=true; this tool is kept for backward compatibility and will be removed in a future major release.

ParametersJSON Schema
NameRequiredDescriptionDefault
aggregateNo
sql_traceNo
amdp_traceNo
class_nameYesABAP class name to execute.
descriptionNoProfiler trace description.
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). Increase for slow systems (e.g. SAP trial cloud).
all_procedural_unitsNo
max_time_for_tracingNo
trace_retry_delay_msNoDelay in ms between profiler-feed polling attempts (default 2000).
max_size_for_trace_fileNo
all_misc_abap_statementsNo
all_system_kernel_eventsNo
all_internal_table_eventsNo

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 well: it discloses the trace scheduling flow, the bounded polling via max_trace_attempts/trace_retry_delay_ms, the failure mode (trace_id absent), and explicitly states that no run_status or trace_requests_status is returned. This is unusually rich behavioral context for a deprecated 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?

Front-loaded with the action, then the mechanism, then the deprecation guidance. Efficient despite the density; every sentence adds information, though the run_status/trace_requests_status sentence 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 18-parameter tool with no output schema, the description covers the important runtime semantics and the return-value caveat (trace_id may be absent, no status fields). The main gap is the unexplained boolean trace-configuration parameters, but the core behavior is complete.

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 28% with 18 parameters, so the description should compensate but mostly does not. It references max_trace_attempts/trace_retry_delay_ms, but those already have schema descriptions, and the many undocumented boolean trace flags (aggregate, sql_trace, amdp_trace, all_db_events, etc.) get no explanation here.

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 (execute ABAP class with profiler enabled) and goes further by describing the mechanism: schedule trace, run class, poll profiler feed. It also explicitly distinguishes itself from the sibling RuntimeRunClass with profile=true.

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?

Directly names the preferred alternative (RuntimeRunClass with profile=true) and states the condition for still using this one (backward compatibility, removal in a future major release). Both when-to-use and when-not-to-use are explicit.

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

RunUnitTestB

Run the ABAP Unit tests of a class and return the result.

ParametersJSON Schema
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 whose tests run.

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, yet it only says tests run and a result returns. It omits whether the run is read-only, whether it can be long-running, whether it requires the object to be activated, and what failure/timeout behavior 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?

A single front-loaded sentence with no filler; the verb and scope appear immediately. It is efficiently sized, though it is arguably a touch thin rather than padded.

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 no output schema, the description is serviceable but thin: it does not hint at what 'the result' contains (pass/fail counts, messages) or that the detail parameter controls response depth. An agent can call it, but context around the run result 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%, with both class_name and the detail enum fully documented in the schema itself, so the baseline is 3. The description adds no syntax, format, or selection guidance beyond what the schema already supplies.

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 ('Run the ABAP Unit tests of a class') and returns a result, which cleanly scopes it against the sibling unit-test runners (RunCdsUnitTest, RunFunctionGroupUnitTest, RunFunctionModuleUnitTest) by naming the object type. It stops short of explicitly naming those alternatives, but the 'of a class' scope already differentiates it.

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: an agent can infer it runs tests on an existing class, but there is no statement of prerequisites (e.g. class must exist/be active) or when to prefer it over the CDS/function-group/function-module variants. No exclusions or alternatives are given.

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.).

ParametersJSON Schema
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
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.1/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 disclosure burden; it does state '[read-only]' itself, which is real value. It says nothing about result truncation at maxResults, ordering, whether only identifiers or metadata are returned, or any rate/timeout behavior for large wildcard scans — notable gaps for a search tool with no annotation coverage.

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, verb, resource, and wildcard syntax before elaborating on type filtering. The quoted user-intent list is slightly listy but every item maps to a distinct real use case, so little 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 4-parameter, no-output-schema search tool, the description covers matching semantics, wildcard usage, scope (all repository types), and type filtering. The remaining gap is what the result payload actually contains beyond the detail enum, which is not explained anywhere.

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 goes further than the schema by enumerating concrete object_type codes (PROG, CLAS, INTF, DEVC, TABL, DDLS, DTEL, FUGR, SRVD, SRVB, BDEF, DDLX) where the schema only offers two examples. The detail and maxResults parameters are left to the schema, which handles them adequately.

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 (search) and resource (ABAP repository object) plus the supported matching modes (name or wildcard like 'Z*'). The listed example queries — 'find object X', 'does X exist', 'list objects matching' — make it immediately distinguishable from retrieval siblings such as GetObjectInfo or GetTable, which fetch a known object rather than locate one.

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?

Maps natural-language intents to this tool explicitly, which is effectively strong when-to-use guidance. It does not, however, contrast itself against nearby siblings like GetObjectsByType or GetObjectsList, leaving the agent to infer that this is the name-pattern search route.

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.

ParametersJSON Schema
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.7/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 does disclose a real behavioral trait beyond the schema: 'Locks, updates, unlocks, and optionally activates,' which tells the agent about the lock lifecycle and the default activation side effect. However, it says nothing about permission requirements, transport coupling, or what happens to the lock if the update 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?

Two sentences, zero filler, and the resource and scope are front-loaded ahead of the behavioral note. Nothing could be cut without losing 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 6-parameter mutation tool with no annotations and no output schema, the description is only marginally sufficient: it conveys the lifecycle but omits failure/lock-release behavior, permission or transport prerequisites, and the consequence of the default activation. It is adequate but leaves 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 all six parameters are already documented in the schema. The description's 'optionally activates' merely restates the activate parameter's default, adding no format or syntax detail beyond structured data, 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?

Specific verb + resource: 'Update source code of an existing ABAP Behavior Definition (BDEF).' The word 'existing' and the 'source code' scope cleanly separate it from CreateBehaviorDefinition, ActivateBehaviorDefinition, and CheckBehaviorDefinition in the sibling list.

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 'existing' (the object must already exist) and by the activate flag, but there is no explicit when-to-use vs. when-not guidance and no mention of using ActivateBehaviorDefinition separately or of CheckBehaviorDefinition as a pre-flight alternative.

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

UpdateBehaviorImplementationA

Update source code of an existing ABAP behavior implementation class. Updates the implementations include. Manages lock, update, unlock, and optional activation.

ParametersJSON Schema
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

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 discloses genuinely non-obvious behavior beyond the schema by stating the tool "Manages lock, update, unlock, and optional activation" and that it always writes a single include. It still omits permission requirements, failure/rollback behavior, and what happens to pending edits.

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 operation and its scope, with zero filler. Slightly terse in that the lifecycle sentence could name the activation default, but every sentence 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?

For a 3-required-parameter mutation tool with no annotations and no output schema, the description covers purpose and transaction lifecycle but omits error conditions, transport/permission prerequisites, and what the caller receives back. Adequate 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 each of the six parameters is already documented in the schema. The description adds no syntax, format, or constraint detail beyond that, 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 ("Update source code of an existing ABAP behavior implementation class") and further narrows scope by naming the exact artifact written ("the implementations include"), which cleanly separates it from UpdateBehaviorDefinition and UpdateBehaviorImplementation 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 only implied: the agent can infer this is for an existing behavior implementation class, but there is no explicit when-to-use, no prerequisites (e.g., object must be inactive/checked first), and no routing to alternatives such as CreateBehaviorImplementation or CheckBehaviorDefinition. It gives context but no exclusions.

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

UpdateCdsUnitTestB

Update the ABAP Unit tests of a CDS view: replace the local test classes in its test class and activate it.

ParametersJSON Schema
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

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 behavioral burden. It usefully discloses that the include contents are replaced and that the object is activated as a side effect—meaningful mutation context. However, it says nothing about permission requirements, activation failure behavior, or whether the replacement is reversible.

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 sentence, front-loaded with the verb and resource, with no filler. It is dense but every clause (replace, activate) contributes to understanding the operation.

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 framing. It covers the mutation itself but omits return behavior, activation outcomes, and transport implications, leaving meaningful gaps for a mutation tool of this kind.

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 only marginal mapping by naming the test class and local test classes it operates on, 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 gives a specific verb+resource (update ABAP Unit tests of a CDS view) and clarifies the exact operation: replacing the local test classes in the test class and activating it. An agent can distinguish this from CreateCdsUnitTest or DeleteCdsUnitTest by the update/replace semantics, 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 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 guidance or reference to alternatives such as CreateCdsUnitTest or UpdateLocalTestClass. The word 'replace' implies the test class already exists, but this is left to inference and the schema field note rather than stated as a selection criterion.

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

UpdateClassB

Update source code of an existing ABAP class. Locks, updates, unlocks, and optionally activates.

ParametersJSON Schema
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

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 does disclose the operation sequence: locks, updates, unlocks, and optional activation. However, it omits key behavioral facts such as whether the source replaces the entire class, permission requirements, and that transport_request may be mandatory 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?

Two short sentences that are front-loaded with the core action, followed by the behavioral sequence. No filler, though the telegraphic lock/update/unlock list reads slightly like a changelog rather than agent guidance.

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 mechanics but not the full picture: transport/permission prerequisites, error behavior, and what the operation returns are unaddressed. The schema does cover the parameters well, so the gap is behavioral rather than structural.

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 flag, detail enum, and transport_request. The description only echoes the activation option ('optionally activates') without adding format or constraint detail, which matches the baseline 3 for schema-documented 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 (update) and resource (source code of an existing ABAP class), and the scope qualifier 'existing' separates it from CreateClass. It never names a sibling explicitly, but the Update/Create/Delete family pattern makes the distinction obvious from 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 only implied: 'existing' class signals this is for modification rather than creation, and 'optionally activates' hints that ActivateClass may not be needed separately. There is no explicit when-to-use, no prerequisites (e.g. transportable package requirements), and no when-not guidance.

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.

ParametersJSON Schema
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

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 full behavioral disclosure and does well by naming locking, complete replacement of parameters, unlocking, and optional activation. It omits permission/transport prerequisites (covered in schema) and error behavior, 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.

Conciseness5/5

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

Two sentences, front-loaded with purpose then behavior. No filler; every clause ('locks', 'complete replacement', 'optionally activates') earns its place and directly informs the caller.

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 18 parameters, no annotations, and no output schema, the description provides the key behavioral traits. It could mention transport request requirements or authorization needs, but the schema covers transport_request and there is no return value to explain.

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 phrase 'complete replacement' adds critical semantics: provided parameters replace the existing definition rather than patching it. This meaning is not present in the schema and is essential for correct invocation.

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 resource (ABAP data element), and clarifies it must already exist. It does not explicitly differentiate from siblings like CreateDataElement or ActivateDataElement, but the name and 'existing' qualifier make the scope largely 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?

No explicit guidance on when to use this tool versus alternatives such as CreateDataElement, ActivateDataElement, or DeleteDataElement. Usage is only implied by 'Update an existing ABAP data element' and the tool name, leaving the agent to infer prerequisites and exclusions.

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

UpdateDdlA

Update DDL source code of an existing CDS View or Classic View. Locks, updates, unlocks, and optionally activates. Use CreateDdl to create a new DDL source.

ParametersJSON Schema
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

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. It discloses the lock/update/unlock cycle and that activation is optional, which is valuable behavioral context beyond a simple 'updates'. It does not cover permission requirements, transport prerequisites, or failure modes, leaving some gaps.

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, each earning its place: purpose, behavioral sequence, and alternative tool. The most important information is front-loaded, with zero 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?

With no output schema and no annotations, the description covers purpose, key behavior, and an alternative. It is complete enough for an agent to call the tool correctly, though it could mention transport request prerequisites or activation side effects that the schema only hints at.

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. The description adds no syntax or format details 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?

States a specific verb (Update) and resource (DDL source code of an existing CDS View or Classic View). Explicitly names the sibling tool CreateDdl for the creation case, so an agent can distinguish it without opening either 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?

Provides a clear alternative for the creation scenario ('Use CreateDdl to create a new DDL source'), which implicitly tells the agent when to use this tool (to modify existing DDL). It does not give explicit when-not conditions beyond that, 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.

UpdateDomainA

Update an existing ABAP domain. Locks, updates with provided parameters (complete replacement), unlocks, and optionally activates.

ParametersJSON Schema
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.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 well: it discloses the full procedure (lock, update, unlock, optional activate) and the critical semantic that updates are a complete replacement rather than a merge. It omits auth/permission requirements and lock-contention or failure behavior, 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.

Conciseness5/5

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

Two tight sentences, front-loaded with the operation and scope, followed by the exact read-modify-write lifecycle. No wasted words.

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-param mutation tool with no annotations and no output schema, the description supplies the essential behavioral contract (destructive replacement + activation). It could say more about activation failure or transport implications, but an agent has enough to call it correctly, and the schema covers the parameters.

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 14 parameters are already documented; the baseline is 3. The description adds only the "complete replacement" framing, which matters for parameter behavior but is not tied to any specific field.

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 ("Update an existing ABAP domain") that clearly distinguishes it from siblings like CreateDomain, GetDomain, and DeleteDomain. It does not explicitly name alternatives, 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?

Usage is implied by "existing" (not for creation) and by the note that parameters are a "complete replacement," which warns against partial updates. However, there is no explicit when-to-use vs. ActivateDomain/CheckDomain guidance or prerequisite statement, so routing relies on inference.

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 and don't have source code to update directly. Uses stateful session with proper lock/unlock mechanism.

ParametersJSON Schema
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

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 disclose a genuinely non-obvious trait: a stateful session with a lock/unlock mechanism, plus the fact that only metadata (not source) can change. It stops short of stating permissions/auth needs, whether the change is reversible, or whether activation follows.

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 container clarification and session behavior. Every sentence adds something; minor room to be tighter on the final clause.

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 metadata mutation with no output schema, the description covers purpose, scope limitation, and session/locking behavior adequately. Gaps remain around return value and post-update activation expectations, but for a 4-param tool this is close to 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 enum'd 'detail' and transport_request) are already documented in the schema; the description adds only the framing that the update targets the description field. Baseline 3 is appropriate 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?

States a specific verb+resource ('Update metadata (description) of an existing ABAP function group') and correctly scopes it to metadata only, explicitly noting function groups have no source code. This implicitly separates it from UpdateFunctionModule/UpdateFunctionInclude, but it never names a sibling outright.

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 clarification that function groups 'don't have source code to update directly' hints at when this tool (vs. module/include updates) applies, but there is no explicit when-to-use, when-not, or alternative routing, nor prerequisites such as needing activation afterward.

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

UpdateFunctionGroupUnitTestB

Update the ABAP Unit tests of a function group: replace the local test classes in its test include and activate it.

ParametersJSON Schema
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

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 behavioral load. It does disclose two useful traits: the existing test classes are REPLACED (destructive overwrite) and the include is ACTIVATED as a side effect. It says nothing about permissions, transport/authorization requirements, or failure behavior when the include is missing.

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 sentence that leads with the verb and resource before the scoping detail. No filler, though the trailing 'and activate it' clause could be slightly more clearly framed as a 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?

For a mutation tool with no annotations and no output schema, the description covers the core action and its two key side effects but omits preconditions and side-effect specifics (transport need, permission requirements, behavior on a missing test include). Since the schema already documents parameters fully, this is minimally sufficient but not rich.

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 transport_request and the detail enum. The description only loosely maps to test_class_source ('replace the local test classes') 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.

Purpose4/5

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

The description gives a specific verb+resource ('Update the ABAP Unit tests of a function group') and adds concrete scope ('replace the local test classes in its test include and activate it'), which distinguishes it from siblings like CreateFunctionGroupUnitTest and UpdateLocalTestClass. It does not name those siblings outright, but the resource and operation are 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?

Usage is implied rather than stated: the operation clearly applies to an existing function group whose test include already exists, but there is no explicit when-to-use/when-not guidance or routing to alternatives such as CreateFunctionGroupUnitTest or UpdateLocalTestClass. Adequate but with a clear gap.

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

UpdateFunctionIncludeC

Update source code of an existing ABAP function group include.

ParametersJSON Schema
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

C2.9/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 does not disclose that this overwrites existing source, whether the change needs activation to take effect, or that transport_request is required for transportable includes – all of which are critical 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?

A single efficient sentence with the verb and resource front-loaded. Nothing wasteful, though it is arguably too terse for a mutation tool.

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 no annotations and no output schema, the description should at least note that it overwrites source and interacts with transport/activation. Instead it leaves the agent to infer everything 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 all six parameters including activate, transport_request, and detail are already documented. The description adds no parameter meaning beyond what the schema provides, 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 (Update) and resource (source code of an ABAP function group include), and the word 'existing' implicitly distinguishes it from CreateFunctionInclude. It does not name a sibling explicitly, 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 Guidelines2/5

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

No guidance on when to use this over alternatives such as CreateFunctionInclude, DeleteFunctionInclude, or UpdateFunctionGroup. The only hint is the precondition 'must already exist' inside 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.

UpdateFunctionModuleA

Update source code of an existing ABAP function module. Locks, updates, unlocks, and optionally activates.

ParametersJSON Schema
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, the description carries the full burden and does disclose the operation sequence: locks, updates, unlocks, and optionally activates. This is meaningful behavioral detail beyond the schema. It omits permission requirements, reversibility, and transport implications (though transport_request is documented in 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 compact sentences with the core purpose front-loaded and the behavioral sequence second. Every clause earns its place; nothing is redundant or padded.

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 no annotations and no output schema, the description covers the mutation behavior adequately but stops short of the prerequisites an agent would want: transport requirement context, error conditions, and what a lock failure means. Adequate but with clear gaps 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 schema already documents all six parameters including the detail enum default and the activate flag. The description adds no parameter-level detail beyond this, 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 (update) and resource (source code of an existing ABAP function module), with 'existing' implicitly distinguishing it from CreateFunctionModule. It does not explicitly name any sibling, 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?

Usage is implied by 'existing function module' and the optional activation, which hints at the ActivateFunctionModule sibling, but no explicit when/when-not or alternative routing is given. An agent can infer the context but gets no guidance on prerequisites or when to prefer ActivateFunctionModule.

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.

ParametersJSON Schema
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

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 discloses the internal sequence (locks, updates, unlocks, optionally activates), which is important context beyond the schema and indicates state changes. It does not mention permission requirements, concurrency behavior, or failure modes. Given the absent annotations and the mutation nature, this is a solid but incomplete 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 that front-loads the main action and then lists the operational steps; no filler or redundant restatement of the name. Efficient and complete.

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 essential lifecycle (lock-update-unlock-activate) and distinguishes from siblings reasonably well. It could be stronger with explicit prerequisites or error behavior, but it meets the needs 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 schema already documents each parameter, including default values for activate and detail. The description adds no new parameter-level information. Baseline 3 is appropriate when structured fields are complete.

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 (Update) and resource (source code of an existing ABAP interface). The sibling set contains GetInterface, CreateInterface, DeleteInterface, and ActivateInterface, so 'Update source code' cleanly distinguishes this from get/create/delete/activate.

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 is for modifying existing interfaces (interface_name must exist). However, it does not tell the agent when to use UpdateInterface vs ActivateInterface (especially since activate defaults to true) or when to use DeleteInterface. Some guidance is implied by 'existing', but no explicit alternatives are named.

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.

ParametersJSON Schema
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

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 behavioral burden and does disclose meaningful context: it manages lock, update, unlock, and optional parent-class activation. That tells the agent the tool handles locking automatically and that activation is a separate optional step. It still omits permission/authorization needs and failure behavior, 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?

Two tight sentences, front-loaded with the core action and resource, followed by the operational behavior. No wasted text; it could be marginally more informative without becoming bloated, but it is well-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 no annotations and no output schema, the description covers the action, the target, and the lock/activation lifecycle. Combined with full schema coverage of parameters, it is largely complete, though it could note transport or error-handling context.

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 detail enum and transport_request note. The description adds no additional parameter meaning beyond what the schema provides, 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 (Update) and resource (local definitions) scoped to an ABAP class, with a parenthetical clarifying it means class-local types/constants. This distinguishes it from siblings like UpdateLocalTestClass and UpdateLocalMacros, though 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?

Usage is only implied — the agent can infer this is for modifying existing local definitions. There is no explicit when-to-use guidance versus UpdateLocalTypes/UpdateLocalMacros, and no prerequisites (e.g. transport_request requirements for transportable objects) are surfaced in the description.

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.

ParametersJSON Schema
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.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. The second sentence usefully discloses the lock/update/unlock lifecycle and that activation of the parent class is optional, which is real context beyond the schema. It does not cover permissions, transport handling implications, or failure/rollback 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?

Two tight sentences with zero filler, and the core action is front-loaded before the behavioral note. Every clause 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?

For a mutation tool with no annotations and no output schema, the description is adequate but thin: it omits transport requirements tied to the transport_request parameter, error/rollback semantics, and what the update returns. The lock-lifecycle note is the one piece of genuinely helpful completeness.

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 enum values for 'detail' and the meaning of 'activate_on_update'. The description adds no syntax, format, or constraint detail beyond what the schema provides, 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 states a specific verb+resource: 'Update local macros in an ABAP class.' The resource (macros) is distinct from the nearest siblings UpdateLocalTypes, UpdateLocalDefinitions, and UpdateLocalTestClass, so an agent can tell them apart. It does not explicitly name or contrast against those siblings, keeping it below 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?

There is no when-to-use guidance, no prerequisites, and no routing to alternatives. The agent is left to infer that this is the mutation counterpart to GetLocalMacros/DeleteLocalMacros purely from the name pattern shared by ~150 siblings.

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

UpdateLocalTestClassB

Write the local test classes include of a class under the class lock, and optionally activate the class.

ParametersJSON Schema
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

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 useful behavioral traits: the operation runs under the class lock, and activation is optional. However, it omits overwrite semantics, transport/permission requirements, failure behavior, and whether the existing test class is replaced, so transparency is partial.

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?

It is a single, front-loaded sentence with no filler or redundant restatement. The only minor flaw is the slightly garbled grammar, but it is efficient overall.

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 5-parameter mutation tool with no annotations and no output schema, the description is thin. It does not explain transport requirements, what happens to existing test class content, or error/lock-failure behavior, leaving significant gaps 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 all five parameters (including detail, class_name, test_class_code, transport_request, activate_on_update) are already documented in the schema. The description adds no format, syntax, or constraint details 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?

The description names a specific verb+resource: write the local test class include for a class, with optional activation. This distinguishes it from sibling tools like GetLocalTestClass and DeleteLocalTestClass. The phrasing is awkward ('the local test classes include of a class'), which slightly blurs the exact object being written, so it falls short of a crisp 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?

There is no explicit when-to-use guidance, no mention of prerequisites or alternatives, and no stated conditions distinguishing it from UpdateClass or UpdateUnitTest. The only contextual cue is 'under the class lock,' which is behavioral rather than routing guidance.

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

UpdateLocalTypesB

Update local types definitions in an ABAP class. Manages lock, update, unlock, and optional activation of parent class.

ParametersJSON Schema
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

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 the lock/update/unlock lifecycle and optional parent-class activation, which is genuine behavioral context. However, it omits error/failure behavior, permission requirements, and reversibility, leaving significant gaps 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?

Two short sentences with no filler, and the core action is front-loaded before the lifecycle detail. Efficient, though it could have used the space to add param or usage guidance.

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 five-parameter mutation tool with no annotations and no output schema, the description covers the operation and its lock/activation lifecycle but leaves transport_request, the detail response option, and failure handling unexplained. Adequate but 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 are already documented in the schema, including the enum and the activate_on_update flag. The description adds no format or syntax detail beyond what the schema 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 (Update) and resource (local types definitions in an ABAP class), which is clear. It implicitly distinguishes from siblings like UpdateLocalDefinitions and UpdateLocalMacros by naming 'local types', though it 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?

The description implies usage (updating an existing local types definition) but gives no explicit when-to-use guidance, prerequisites, or routing to alternatives such as UpdateLocalDefinitions for a different include type. Usage is only inferable.

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

UpdateMessageClassA

Update a message class header (e.g. its description). To add or change individual messages use CreateMessageClassMessage / UpdateMessageClassMessage.

ParametersJSON Schema
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

A3.7/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 behavioral burden. It conveys only that this mutates a header; it says nothing about required permissions, object locking, activation afterwards, or whether the change is transportable/reversible, which matters for a write 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?

Two tight sentences, front-loaded with the core action and immediately followed by the sibling-routing note. 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?

With a fully documented schema and no output schema, the description only needs to cover purpose and routing, which it does. However, for a mutation tool with zero annotations, the absence of any behavioral context (activation, locking, transport implications) leaves a 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%, so all four parameters (including transport_request and detail) are already documented in the schema. The description's note about 'description' as an example field 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?

States a specific verb and resource ('Update a message class header') and clarifies scope with an example ('e.g. its description'). It explicitly disambiguates itself from the sibling message-level tools, so an agent can pick it apart from CreateMessageClassMessage/UpdateMessageClassMessage without reading schemas.

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 routing rule: use this for header-level updates, use CreateMessageClassMessage/UpdateMessageClassMessage for individual messages. No explicit prerequisites (e.g. lock/transport needs) are stated, but the when-not guidance is strong.

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). Upserts the message if it does not exist yet.

ParametersJSON Schema
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.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 behavioral burden. It does disclose a genuinely useful trait — that the operation upserts rather than failing when the message is absent — which is meaningful idempotency context. However, it omits transport/lock behavior, whether unmentioned fields (like description) are reset, and any authorization prerequisites.

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 tightly written sentences with no filler; the primary action is front-loaded and the important upsert caveat follows immediately. Every clause 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?

For a mutation tool with no annotations, no output schema, and six parameters, the description covers the basic action and the upsert edge case but says nothing about transport handling, locking, or side effects on unspecified fields. Adequate as a minimum-viable definition, but incomplete for safe 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 schema already documents all six parameters, including the placeholder syntax for msgtext and the transport_request caveat. The description only loosely gestures at 'text / flags', adding little beyond what the schema fields already say, 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 (Change) plus resource (text/flags of a message in an ABAP message class) and names the underlying table (T100), so the agent knows exactly what is being modified. It does not explicitly differentiate itself from the sibling CreateMessageClassMessage — in fact the upsert clause partly overlaps with it — but the core purpose 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?

The word 'existing' implies the intended case, but there is no explicit guidance on when to use this versus CreateMessageClassMessage or GetMessageClassMessage. The upsert caveat actually muddies the boundary with the create sibling rather than clarifying when each should be chosen.

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.

ParametersJSON Schema
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

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 does usefully disclose the lifecycle ('Locks, updates, unlocks, and optionally activates'), which tells the agent this is a mutating, lock-acquiring operation. However, it omits permissions/auth needs, lock-conflict behavior, failure/rollback semantics, and transport implications that matter for a write 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?

Two tightly packed sentences with no filler; the purpose is front-loaded and the behavioral summary follows immediately. Every clause 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?

For a 6-parameter mutation tool with no annotations and no output schema, the description covers the core lifecycle but leaves gaps around locking workflow (lock_handle vs internal lock), transport requirements, and error behavior. The rich schema offsets some of this, making it 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%, so all six parameters are already documented in the schema. The description adds only the vague 'optionally activates' mapping to the activate param and no syntax/format detail, 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?

States a specific verb+resource: 'Update source code of an existing ABAP Metadata Extension (DDLX)', which clearly separates it from Create/Delete/Get/CheckMetadataExtension siblings by name. It does not explicitly call out those siblings, but the purpose 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?

Usage is only implied — the tool updates an existing DDLX, and the phrase 'optionally activates' hints at the activate flag. There is no explicit when-to-use/when-not guidance, no mention of prerequisites (transport_request for transportable packages), and no routing to alternatives.

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

UpdateServiceBindingC

Update publication state of an existing ABAP service binding.

ParametersJSON Schema
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

C2.9/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 full responsibility for behavioral disclosure. It states the operation is an update, but does not describe permissions, side effects, reversibility, prerequisites, or what the 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?

The description is a single front-loaded sentence with no filler. It is concise, though its brevity contributes to a lack of operational detail.

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 seven parameters, no annotations, and no output schema, a single sentence is insufficient. The description should at least note that this is a write operation with side effects and what inputs are required, even if the schema carries most parameter 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?

Schema description coverage is 100%, so the schema already documents all seven parameters in detail. The description only echoes the concept of 'publication state' and adds no parameter-specific meaning 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?

The description states a specific verb and resource: 'Update publication state of an existing ABAP service binding.' This clearly separates the tool from read, create, delete, and activate siblings, though it does not explicitly name any alternative.

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 use this tool versus alternatives such as ActivateServiceBinding, ValidateServiceBinding, or CreateServiceBinding. The only usage signal is the implied need to change publication state.

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.

ParametersJSON Schema
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

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 meaningful work: it discloses the lock/update/unlock sequence and that activation is optional, which is real behavioral context beyond the schema. It still omits transport/permission implications for an object-mutating write.

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, front-loaded with the verb and target, with the lock/activate behavior as a compact second clause. Zero 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 5-param mutation tool with no output schema, the description plus the fully documented schema cover the essentials. It could note that the return content is governed by the 'detail' parameter or mention transport handling, but nothing critical to invoking 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 description coverage is 100%, so all five parameters (including the enum 'detail' and 'activate' default true) are already documented. The description's 'optionally activates' echoes the activate parameter but 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 (Update) and resource (existing ABAP service definition) plus scope ('source code of an existing'). An agent can distinguish this from CreateServiceDefinition, DeleteServiceDefinition, GetServiceDefinition, and ActivateServiceDefinition 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 word 'existing' implies the object must already be present, but the description gives no explicit when-to-use vs alternatives (e.g., when to call ActivateServiceDefinition separately instead) 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.

UpdateStructureB

Update DDL source code of an existing ABAP structure. Locks, updates, unlocks, and optionally activates.

ParametersJSON Schema
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

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 burden, and it does disclose the meaningful lifecycle: "Locks, updates, unlocks, and optionally activates." That is genuine behavioral context beyond the schema. However, it omits failure/recovery behavior (is the lock released if the update fails?), permission requirements, and transport implications for a mutation on a persisted object.

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 verb and resource, followed immediately by the operational behavior. No filler, no redundancy, nothing an agent has to skip past.

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 a rich 5-parameter schema at 100% coverage and no output schema, the description needs mainly to convey the action and its side effects, which the lock/update/unlock/activate sentence does. It is close to sufficient for a mutation tool, but with zero annotations it could reasonably say more about safety and authorization before the agent invokes it.

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 structure_name, ddl_code, activate, detail, and transport_request is already documented in the schema with examples and defaults. The description's phrase "optionally activates" only restates what the activate parameter already declares, adding no new meaning. 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: "Update DDL source code of an existing ABAP structure." An agent can distinguish this from UpdateTable, UpdateDdl, and CreateStructure without opening a schema. It stops short of naming which sibling to prefer in a given situation, but the purpose 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 when-to-use or when-not-to-use guidance. The description does not explain how this differs from UpdateTable or UpdateDdl, nor how the implicit activation interacts with the sibling ActivateStructure. The only precondition (structure must already exist) 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.

UpdateTableA

Update DDL source code of an existing ABAP table. Locks, updates, unlocks, and optionally activates.

ParametersJSON Schema
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

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 disclose a key behavioral trait: it locks, updates, unlocks, and optionally activates the table, which tells the agent about side effects, state transitions, and that activation is optional. It omits auth/transport requirements and error behavior, but the lock/activate lifecycle is valuable disclosure 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.

Conciseness5/5

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

Two sentence fragments, front-loaded with the object of the update, zero waste. The lifecycle verbs are packed efficiently.

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, but for a mutation tool the description covers what happens behaviorally (lock/update/unlock/activate) and the schema fully documents all five parameters with defaults and examples. Missing transport/authorization context and return promise keep it from a 5.

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 enums, defaults, and examples already documented, so the baseline is 3. The description adds nothing about parameter syntax or interaction (e.g., how activate relates to activation tooling), so it does not exceed 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 (Update) and resource (DDL source code of an existing ABAP table), and it is easily distinguished from siblings like UpdateDdl, UpdateStructure, and CreateTable. An agent can route correctly 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 usage (update an existing table) but gives no explicit when-to-use guidance or alternatives, such as distinguishing it from UpdateDdl, UpdateStructure, or ActivateTable. 'Existing' and 'Table must already exist' in the schema are the only scoping hints.

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

UpdateUnitTestB

Update the ABAP Unit tests of a class: replace its local test classes and activate the class.

ParametersJSON Schema
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

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, and it does disclose two important traits: existing local test classes are replaced (destructive overwrite) and the class is activated as a side effect. It says nothing about transport requirements, permission needs, or what happens if activation fails.

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 well-formed sentence with the action front-loaded and the two effects (replace, activate) clearly appended. No filler, though it is arguably terse given the mutation's weight.

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 mutation tool with no annotations and no output schema, the description covers the core behavior but omits transport/lock requirements, error behavior, and differentiation from UpdateLocalTestClass. Adequate 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 all four parameters (including the 'detail' enum and 'transport_request') are already documented in the schema. The description adds the replacement semantics of test_class_source but nothing about detail or transport handling, 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 the ABAP Unit tests of a class') plus the concrete mechanism ('replace its local test classes and activate the class'). It is clear what the tool does, but it never distinguishes itself from the adjacent UpdateLocalTestClass, UpdateCdsUnitTest, or CreateUnitTest 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 choose this tool over UpdateLocalTestClass, CreateUnitTest, or UpdateClass, nor any precondition beyond what the schema implies. The only usage signal is implied: it overwrites existing local test classes, so it is for modifying tests that already exist.

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

ValidateServiceBindingC

Validate service binding parameters (name, service definition, package, version) via ADT validation endpoint.

ParametersJSON Schema
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

C2.9/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 and does not say whether the call is read-only, whether it mutates state, what permissions it needs, or what a failed validation looks like. It only discloses the mechanism ('via ADT validation endpoint'), which is not enough to predict 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?

A single front-loaded sentence with no wasted words. It is efficient, though so terse that it leaves behavioral questions unanswered rather than over-explaining.

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 validation tool with no output schema and no annotations, the description should at least sketch the return shape or the validation outcome, and it does not. The purpose is covered, but the agent lacks guidance on results and on interaction with the create/activate workflow.

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 six parameters, including the backward-compatibility caveats for version and definition name. The description merely lists four of them without adding syntax, format, or interaction detail, so it earns only 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 (Validate) and resource (service binding) and enumerates the parameters being validated, which cleanly separates it from the Get/Create/Update/Delete/Activate service-binding siblings. It does not explicitly name which sibling to use instead in what situation, but the operation itself 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?

The description gives no when-to-use guidance, no prerequisites, and no indication of how this relates to CreateServiceBinding or ActivateServiceBinding. An agent must infer that validation is a pre-flight step rather than a mutation.

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. 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."
  2. 3 tool updatesv9.0.0
    • AddedGetEnhancementSpot
    • AddedGetInclude
    • AddedGetIncludesList
  3. 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
  4. 8 tool updatesv8.6.1
    • AddedCreateMessageClass
    • AddedCreateMessageClassMessage
    • AddedDeleteMessageClass
    • AddedDeleteMessageClassMessage
    • AddedGetMessageClass
    • AddedGetMessageClassMessage
    • AddedUpdateMessageClass
    • AddedUpdateMessageClassMessage
  5. 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
  6. 2 tool updatesv8.2.0
    • AddedGetObjectVersions
    • AddedGetObjectVersionSource
  7. 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"
        +}
  8. 12 tool updatesv8.0.0
    • AddedActivateDdl
    • RemovedActivateView
    • AddedCheckDdl
    • RemovedCheckView
    • AddedCreateDdl
    • RemovedCreateView
    • AddedDeleteDdl
    • RemovedDeleteView
    • AddedGetDdl
    • RemovedGetView
    • AddedUpdateDdl
    • RemovedUpdateView
  9. 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"
        +}
  10. 7 tool updatesv7.1.0
    • AddedCreateFunctionInclude
    • AddedDeleteFunctionInclude
    • AddedGetStructuresList
    • AddedListFunctionGroupIncludes
    • AddedListFunctionModules
    • AddedReadFunctionInclude
    • AddedUpdateFunctionInclude
  11. 2 tool updatesv7.0.0
    • AddedActivateServiceDefinition
    • AddedCreatePackage
  12. 2 tool updatesv6.11.3
    • RemovedActivateServiceDefinition
    • RemovedCreatePackage

TDQS

B3.1/5.0

Scored across 202 tools

Disambiguation3/5

The set contains many overlapping retrieval and versioning tools—e.g., generic GetObjectVersions/Source/Diff vs type-specific GetClassVersions/Source/Diff, and multiple object-tree readers such as GetObjectStructure, GetObjectStructureLow, GetObjectInfo, and GetPackageTree. Detailed descriptions help, but an agent must still choose among several plausible tools for the same intent, creating meaningful misselection risk.

Naming Consistency4/5

Names are overwhelmingly PascalCase and follow a predictable verb+resource pattern (CreateClass, GetClass, UpdateClass, DeleteClass, ActivateClass, CheckClass), with type-specific lifecycle groups that are internally consistent. Deviations such as GetIncludesList, GetObjectsList, ListFunctionModules, ReadFunctionInclude, and the Runtime* prefix are minor and remain readable.

Tool Count1/5

202 tools far exceeds any reasonable tool surface for an agent, even for a large domain like ABAP ADT. The sheer count creates severe selection burden and practical context limits, making the set poorly scoped despite the domain's breadth.

Completeness4/5

The surface covers an enormous ABAP ADT domain: object CRUD for classes, interfaces, tables, structures, CDS/DDL, behavior definitions/implementations, metadata extensions, service definitions/bindings, domains, data elements, message classes, function groups/modules/includes, plus tests, transports, version history, ATC, runtime, and SQL/data preview. Some gaps exist—notably no program (PROG/P) main source CRUD or program execution—but agents can work around many of these, and coverage is otherwise extensive.

Maintenance

ActivityActive
ResponsivenessResponsive

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
    163 npm
    MIT