mcp-abap-abap-adt-api
Provides tools for interacting with SAP ABAP systems via ADT, enabling management of ABAP objects, dictionary definitions, transports, code analysis, function modules, class members, tests, and more.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-abap-abap-adt-apiRun ABAP snippet to test function module ZCALC"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
DISCLAIMER: This server is still in experimental status! Use it with caution!
ABAP-ADT-API MCP-Server
177 tools, read-only guardrails and 679 tests. See the CHANGELOG for how it got there. Not published to npm — clone the repository and build it from source.
Description
The MCP-Server mcp-abap-adt-api is a Model Context Protocol (MCP) server designed to facilitate seamless communication between ABAP systems and MCP clients. It is a wrapper for abap-adt-api and provides a suite of tools and resources for managing ABAP objects, handling transport requests, performing code analysis, and more, enhancing the efficiency and effectiveness of ABAP development workflows.
The server is not published to a package registry: clone the repository, build it, and point your MCP client at dist/index.js. Installation has the details.
Related MCP server: vibing-steampunk
Features
Objects: read, write and create ABAP objects, including
patchObjectSourcefor changing part of an object instead of re-uploading all of it,editObjectfor the whole lock/patch/unlock/activate sequence in one call,createAndWritefor create + write + activate, andcreateIncludefor report includes.Dictionary:
createDataElementandcreateDomaincreate a DDIC object and give it its definition in one call, andget/setDataElementPropertiesandget/setDomainPropertiesread and change one.createObjectalone leaves a DDIC object with no type, which cannot be activated.Reading source:
sourceOutlinelists the blocks of a program or class with their line numbers, andfindInSourcesearches a source - and the includes of a report - for text or a regular expression. ADT itself can only locate a class method.Class members:
addMethod,addAttributeanddeleteMethodchange a class as one operation. A method lives in two places in one source - the declaration in a visibility section, the implementation before the closing ENDCLASS - so adding one by hand is two edits whose line numbers must both survive the first of them.Function modules:
getFunctionModuletakes the module name alone, finds its group and answers with the signature as data;listFunctionGrouplists a group without the SAPGUI paddingnodeContentspads every row with;createFunctionModulecreates one with its interface, which is how a signature is set at all, since ADT keeps it in the source text.Running ABAP:
runSnippetwraps a piece of ABAP in a throwaway class implementingIF_OO_ADT_CLASSRUN, runs it and deletes it again - the only way ADT executes code. It answers what no read can: what a function module returns for these inputs, what a method does with this data. A dump comes back as its ST22 header rather than as a bare 500.Calling what is there:
callFunctiontakes a function module name and values, reads its signature, generates the call and runs it - the answer carries the exporting, changing and tables parameters by name,sy-subrcturned back into the name of the classic exception it stood for, and a class-based exception with its text.callMethoddoes the same for a static method, whose parametersclassComponentsdoes not report at all. Both execute code, and both end inROLLBACK WORKunlesscommitis set.The dictionary, read whole:
tableFieldsanswers a table with its includes spliced in where they sit - forEKPOthat is 702 fields rather than the 307 its own definition lists - each with its data element, domain, type, length, check table, unit or currency field, conversion exit and text.tableIndexesandtableKeysanswer the secondary indexes and the foreign keys with the fields they are built on. All three read dictionary tables and execute nothing.History:
revisionsreads the version history by name (the "version" a revision carries is the transport request; the number is therevisionfield), andcompareRevisionsdiffs two of them - or the active version against the inactive one, which shows an edit that is written but not activated.Impact:
impactOfrolls a where-used answer up into the objects that depend on one, with the places inside them and their packages. Raw, that answer is a flat list that is really a tree - on a widely used class it runs to hundreds of rows and past the response cap.snippetsfetches the source of the places actually listed, in the same call.abapPathwalks that same data as a chain instead of a roll-up, breadth-first from the target back through its callers, to answer whether and how one object's code reaches another.Activation:
activateSafeactivates and then verifies, because activation can report success without having activated anything.Tests:
runTestsactivates the object first and reports which test methods ran, which passed, and every failure with its ABAP Unit message - a bare test run against an inactive object answers with an empty list that reads like success.Locks:
listLocksandunlockAllmake the locks this server holds visible, and they are released when it shuts down.Transports: filterable transport lists,
transportDetailsfor the objects and tasks of one request, plus creation, release and ownership tools.Code analysis: syntax check (reusing the source last read or written), code completion, references, ATC -
atcCheckruns the checks over an object or a package and reports the findings,atcDocumentationgives the rule text - traces and the debugger.whereUsedMethodandtypeHierarchytake a method or class name and work the cursor position out themselves.Enhancements and texts:
objectEnhancementsshows the enhancement implementations injected into a source, which the source itself does not reveal;get/setTextElementsreach the text symbols and selection texts that live outside it - the write locks the text pool rather than the object, and activates both rows it leaves inactive.Whole packages:
packageTreewalks a package and its sub-packages and resolves where each object's source lives,readSourcesreads many objects in one call, andsearchInPackagesearches every source in a package.nodeContentsanswers one level and hands most objects a SAPGUI bridge URI that serves no content.Messages (SE91):
getMessages,setMessagesandcreateMessageClassread and write the messages aMESSAGEstatement raises. They come inside the message class document, whichobjectStructurereads and then discards, so until now a report could be written raising messages that did not exist.Diagnosable errors: SAP's own exception type, T100 key and localized message are passed through instead of an axios status line.
Session recovery: the ADT session is re-established automatically, and read-only calls are retried once.
Guardrails: a read-only mode, tool profiles, per-tool read-only/destructive annotations and a cap on oversized answers.
Prerequisites
An SAP ABAP System reachable via ADT (ABAP Development Tools). You'll need the system URL, a username and password, and the client number. Ensure the
/sap/bc/adtservice is active in transactionSICF(your basis administrator can help).Node.js and npm — download the LTS version from nodejs.org. Verify with
node -vandnpm -v.
Installation
The server runs over stdio. Clone it, build it, and give your MCP client the path to dist/index.js together with the environment variables below.
Environment variables
Variable | Meaning |
| Connection; required. The user variable is |
| Logon client and language. |
|
|
| Groups or tool names let through the read-only fence, e.g. |
| Groups or tool names to hide, comma or space separated, e.g. |
| Cap on a single answer (default 200000). Over it, the answer is replaced by an envelope with the size and a preview. |
|
|
|
|
Connection settings can also come from a .env file next to the server, but that is only a fallback: when several instances run against different systems, a typo in one client entry would silently connect to whatever .env points at. The server prints its target system and where the settings came from on startup, and healthcheck reports both.
Windows tip: give
commandthe full path tonode.exeandargsthe absolute path todist/index.js— a barenodeis not always on the PATH an MCP client starts with.
Build from source
Clone the Repository
git clone https://github.com/Hollway/mcp-abap-adt-api.git cd mcp-abap-adt-apiInstall Dependencies
npm installConfigure Environment Variables
An
.env.examplefile is provided in the root directory as a template for the required environment variables. To set up your environment:a. Copy the
.env.examplefile and rename it to.env:cp .env.example .envb. Open the
.envfile and replace the placeholder values with your actual SAP connection details:SAP_URL=https://your-sap-server.com:44300 SAP_USER=YOUR_SAP_USERNAME SAP_PASSWORD=YOUR_SAP_PASSWORD SAP_CLIENT=YOUR_SAP_CLIENT SAP_LANGUAGE=YOUR_SAP_LANGUAGENote: The SAP_CLIENT and SAP_LANGUAGE variables are optional but recommended.
If you're using self-signed certificates, you can also set:
NODE_TLS_REJECT_UNAUTHORIZED="0"IMPORTANT: Never commit your
.envfile to version control. It's already included in.gitignoreto prevent accidental commits.Build the Project
npm run buildRun the Server
npm run startWhen integrating a source build into an MCP client, point
commandatnodewith an absolute path to the build output:{ "mcpServers": { "mcp-abap-adt-api": { "command": "node", "args": ["PATH_TO_YOUR/mcp-abap-adt-api/dist/index.js"], "disabled": false, "autoApprove": [] } } }
Custom Instruction
Use this instruction to explain the server to your model:
## mcp-abap-adt-api Server
Tools for working on an SAP system through ADT: reading and changing ABAP
objects, activating them, running tests, and handling transports.
**Finding things**
* `searchObject` resolves a name to an object URI, e.g.
/sap/bc/adt/oo/classes/zcl_invoice. `objectStructure` describes an object,
`nodeContents` lists a package, `usageReferences` finds callers.
* `getObjectSource` takes the URI plus /source/main. It serves the INACTIVE
version by default, so reading your own edit back proves nothing about what
the system runs - pass version="active" for that. Use startLine/maxLines
to page through a large object instead of pulling all of it.
* `sourceOutline` is the table of contents of a source: every REPORT, CLASS,
METHOD, FORM, MODULE, FUNCTION, INCLUDE and event block with its line.
`findInSource` searches for text or a regular expression and answers with
line numbers; searchIncludes follows a report's INCLUDE statements. Use
these to find a FORM or a MODULE - `fragmentMappings` only knows class
fragments (CLAS/OM), and a type it does not know is answered with 400.
**Changing an object**
`editObject` does the whole sequence below in one call - lock, patch, unlock,
activate, verify - and reports each step. Nothing is rolled back if a step
fails; the source stays in the inactive version, which is not what the system
executes. The steps by hand:
1. `lock` the object URI (without /source/main). Keep the lockHandle; the
server also remembers it, and `listLocks` shows what is held.
2. `patchObjectSource` with the source URI and the edits: a line range
({startLine, endLine, replacement}), exact text ({anchor, replacement}) or
an insertion ({insertAfterLine, insertion}). It reads the current source,
applies the edits and returns a diff. Pass dryRun first if unsure.
`setObjectSource` still exists, but it replaces the whole object.
3. `unLock` **before activating**: activating while holding the lock fails
with "user X is already processing Y". This differs from the ADT editor.
4. `activateSafe` with the object name. It activates every inactive part -
the class, its changed method fragments, its sections, its test include -
and then checks that nothing is left inactive. Do not trust
`activateByName`: it has answered success:true without activating.
5. Verify with `getObjectSource` version="active", or `inactiveObjects`
returning an empty list.
**Creating an object**
`createAndWrite` creates the object and writes its source in one call, then
activates it: validate the name, create, lock, write, unlock, activate. It
knows where the source of a CLAS/OC, INTF/OI, PROG/P, PROG/I, FUGR/F, FUGR/FF
or FUGR/I lives; anything else is `createObject` plus `setObjectSource`. A
package other than $TMP needs a transport request - ask the user which one.
Objects are created in the logon language. That matters: the underlying
library defaults to EN and makes it the master language, and SAP then answers
a read in any other language with an empty description.
**The dictionary**
`createDataElement` and `createDomain` create and define in one call. The type
of a data element comes either from a domain or from a built-in ABAP type, not
both, and the four field labels are cut to the lengths SAP allows (10/20/40/55)
with the answer saying which were cut. `setDataElementProperties` and
`setDomainProperties` change an existing one: the backend PUT replaces the
whole definition, so anything not passed is kept as the system has it. They
take the lock themselves and give it back, and `activate` finishes the job -
demanding a separate `lock` call made a one-field change a three-call sequence.
Not every release serves these over ADT. On a classic ERP system data elements
work while domains answer 404 for every path including validation - the tools
say so instead of looking like a wrong name, and the domain has to be
maintained in SE11. On S/4 both work, and the whole cycle - create with fixed
values, patch the description, patch the values, build a data element on the
domain - was verified there.
**Working on a package**
`packageTree` walks a package and its sub-packages breadth-first and answers
with every object, its type, the package it sits in and the URL that serves
its source. That last part is the point: `nodeContents` answers one level and
gives most objects a SAPGUI bridge URI
(/sap/bc/adt/vit/wb/object_type/tabldt/object_name/ZFOO) which serves
properties and no content. A limit reached leaves the upper levels complete
and names the packages it did not open. An unknown package is told apart from
an empty one - both answer with an empty node list, so existence is checked
separately.
`readSources` reads many objects in one call, by name and type or by URL, each
reported on its own so one unreadable object does not lose the rest.
`searchInPackage` searches every source in a package for text or a regular
expression - one call instead of a listing plus a read and a search per
object. It reads what it walks, so narrow a large package with objectTypes and
maxObjects.
**Messages**
`getMessages` reads the messages of a message class: number, text, whether the
message is self-explanatory and whether it has a long text. They live inside
the class document and nowhere else - `objectStructure` on the same class asks
the very endpoint that carries them and keeps only the metadata. Standard
classes are big (class 00 holds 875 messages in one 478 KB document), so
narrow the answer with numbers, fromNumber/toNumber or search.
`getMessageLongtext` reads the cause and procedure of one message; the text is
stored per language with no fallback.
`setMessages` adds or changes messages, `createMessageClass` creates the class
and fills it in one call. Only the messages passed are touched - the backend
upserts by number - and a field left out keeps its current value. The class
description is read first and carried over, because the write replaces the
class header. Text is capped at 73 characters, what T100 holds, and the answer
says what was cut. No activation is involved: the message is in T100 as soon
as the call returns.
Two things the backend does not allow, and neither is worked around here: a
message cannot be removed (a PUT or DELETE on the per-message resource is
refused whatever lock handle it is given), and a long text cannot be written
(that resource has no PUT). Both need SE91.
**Tests**
`runTests` is the one to use: it activates the object first, because no test
runs against an inactive one, and then reports how many methods ran, how many
passed, and each failure with its class, method and ABAP Unit message.
`unitTestRun` returning an empty result does NOT mean the tests passed - it
means none ran. The answer explains why: the object is inactive, or the test
include does not compile. Fix that and run it again.
**ATC**
`atcCheck` is the one to use: it takes the check variant from the system
customizing, opens a worklist, starts the run and reads the findings back -
each with its priority (1 is the worst), the check that raised it, the message
and the source line it points at. Narrow a large answer with minPriority and
maxFindings, and read the rule behind a finding with `atcDocumentation` and the
documentationUri the report carries.
The steps by hand are a trap worth knowing about. `createAtcRun` wants a
WORKLIST ID in the parameter the library calls `variant`; given a variant name
it answers 500 with nothing to go on. The id comes from `atcCheckVariant`,
which - despite its name - opens a worklist rather than describing a variant.
A package is checked through its SAPGUI bridge URI, because
/sap/bc/adt/packages/ZFOO is refused with "No URI-Mapping defined for URI".
`findingUri` in the report is what `atcContactUri` and the exemption tools
take - but those are built on /sap/bc/adt/atc/items, which an older system
answers with a plain 404. The same goes for the abapGit tools: without the
abapGit ADT plugin, /sap/bc/adt/abapgit/repos is simply not there. Neither is
a fault in the tool.
**Traces**
`tracesList` reports every trace with its `expiration` and `state`, and both
matter: a trace past its expiration date, one still being written (`Active`),
and one that overran its size limit (`Size violation`) are all listed but none
of them can be read. `tracesHitList`, `tracesDbAccess` and `tracesStatements`
answer "wrong input data" or "Data is invalid" for those - the id is not the
problem, and no encoding of it helps.
`tracesStatements` also refuses an aggregated trace, whatever its state: a
trace to be read statement by statement has to be recorded with
`aggregate: false`.
A readable trace is still a large one - a single ADT call came to 8051
statements and a 2548-entry hit list - so `tracesHitList` and
`tracesStatements` cap what they report (`limit`, default 100) and can sort by
gross time first (`heaviestFirst`), which is the order to ask for when the
question is where the time went.
Recording one takes two steps: `tracesSetParameters` answers with a parameters
URI, and `tracesCreateConfiguration` records the next run of that user under
it. Keep the process type narrow - `ANY` records the ADT calls of the session
that set it up and fills the file with them. Tracing an ADT call is expensive
either way: one `runSnippet` under `ANY` filled 60 MB, and the same run
recorded statement by statement overran 400 MB.
**The debugger**
`debuggerListeners` leaves `checkConflict` off. Asking the backend to check for
a conflict when no listener exists at all raises a short dump, so turn it on
only once a listener is known to be there.
**Transports**
`userTransports` lists a user's requests, filterable by status (D
modifiable, R released), owner, number and description. `transportDetails`
answers what is inside one request - its tasks and every object recorded in
it - and resolves a task number to the request holding it. `transportInfo` on
an object URI shows which request would take a change. Ask the user which
request to use rather than creating one.
Pass the number of the request, not of a developer task: a task number is
refused by a write with "not a change request".
**Errors**
Failures carry SAP's own diagnosis: adtType (the ADT exception), t100 (the
message key), localizedMessage, status, and diagnostic - "sap" for a real
rejection, "transport" for an HTTP failure with no answer from SAP. A dead
session is recovered automatically for read-only calls, which then come back
marked sessionRecovered; a call that writes is never repeated for you,
because its lock handle died with the session - re-lock and retry.
**Notes**
* SAP is decoupled from the local file system. Reading source returns it as a
tool result only; local copies are for your own reference.
* Writes land in the inactive version, so a botched write never touches what
is running until it is activated.Efficient Database Access
SAP systems contain vast amounts of data. It's crucial to write ABAP code that accesses the database efficiently to minimize performance impact and network traffic. Avoid selecting entire tables or using broad WHERE clauses when you only need specific data.
Use
WHEREclauses: Always useWHEREclauses in yourSELECTstatements to filter the data retrieved from the database. Select only the specific rows you need.UP TO 1 ROWS: If you only need a single record, use theSELECT SINGLEstatement, if you can guarantee that you can provide ALL the key fields for theSELECT SINGLEstatement. Otherwise, use theSELECTstatement with theUP TO 1 ROWSaddition. This tells the database to stop searching after finding the first matching record, improving performance. Example:SELECT vgbel FROM vbrp WHERE vbeln = @me->lv_vbeln INTO @DATA(lv_vgbel) UP TO 1 ROWS. EXIT. " Exit any loop after this. ENDSELECT.
Checking Table and Structure Definitions
When working with ABAP objects, you may encounter errors related to unknown field names or incorrect table usage. Use the following tools to inspect DDIC (Data Dictionary) objects:
tableFields: The fields of a table or structure as the dictionary knows them, with the.INCLUDEs expanded: data element, domain, type, length, decimals, key and not-null flags, check table, the field holding a unit or a currency, the conversion exit and the text in the connection language. Start here when the question is what is in a table.keysOnly,fieldsandmaxFieldsnarrow the answer for a table with hundreds of them.tableIndexes,tableKeys: The secondary indexes with the fields they are built on, and the foreign keys with the check table, what fills its key, the cardinality and whether the check is enforced.getStructureSource: The definition of a table or structure as DDL text, plus the parsed field list with types and key flags. The definition rather than the dictionary: a field's type is the name of its data element, and an.INCLUDEstays a line of text. It is the one to read - or write - when the definition itself is the point; both TABL/DT and TABL/DS come from the same endpoint.objectStructure: Retrieves the structure/metadata of an ABAP object (including DDIC tables and structures) from its object URI. UsesearchObjectfirst to resolve the object name to a URI. For a table it answers metadata only - no fields.ddicElement: Retrieves details of a DDIC element (e.g. a data element or domain).ddicRepositoryAccess: Reads DDIC repository information for a given path.tableContents: Retrieves the contents (rows) of a table, not its definition. UserunQueryfor ad-hocSELECTs.
Troubleshooting
The client won't start the server: ensure Node.js is installed (
node -v,npm -v) and thatnpm run buildhas produceddist/index.js. Give the client absolute paths for bothnodeand the script — the PATH an MCP client starts with is not always your shell's.SAP connection errors: verify your credentials (
SAP_URL,SAP_USER,SAP_PASSWORD,SAP_CLIENT), confirm the system is reachable, that your user has ADT authorizations, and that/sap/bc/adtis active inSICF.TLS / self-signed certificate errors: for development only, set
NODE_TLS_REJECT_UNAUTHORIZED=0(env var or in the clientenvblock).Every call suddenly fails with status 400: the ADT session died. The server detects that shape (an HTTP failure with no
exc:exceptionbody), re-authenticates and retries read-only calls, marking the answersessionRecovered. A call that writes is not repeated: re-lock the object and try again.healthchecksays whether the session is alive.A change seems to have no effect: it is probably still inactive.
getObjectSourceserves the inactive version by default - read it withversion="active", and checkinactiveObjectsis empty after activating. PreferactivateSafe.logoutand then nothing works: the underlying client cannot log in again afterlogout; restart the server process. UsedropSessionto release a session instead.An answer comes back as
{"status":"truncated"}: it exceededSAP_MAX_RESPONSE_CHARS. Narrow the request (startLine/maxLines,rowNumber, theuserTransportsfilters) or raise the limit.A tool is missing from the list: check
SAP_READONLYandSAP_TOOLS_EXCLUDE-healthcheckreports the active profile.
Development
npm install
npm run build # compile src/ to dist/
npm test # unit tests (no SAP system needed)
npm run smoke # end-to-end checks against a real system, read-onlynpm run smoke takes the same environment variables as the server and never
locks, writes or activates anything:
SAP_URL=... SAP_USER=... SAP_PASSWORD=... SMOKE_CLASS=CL_SALV_TABLE npm run smokeSMOKE_ATC_OBJECT=ZCL_SOMETHING adds the ATC checks to the run. They are off
by default: ATC over a large class takes minutes. SMOKE_TRACE_ID=... adds the
trace-reading checks, which need a trace that is closed, unexpired and not
aggregated - no system is guaranteed to hold one.
The changelog
One working session, one version. Each session of work on this server adds a
new version section at the top of CHANGELOG.md: how the tool and test counts
moved, what it added, and - separately - what the live runs proved wrong. That
last part is the useful one. Every defect listed there had passed the unit
tests before a real system rejected it, so the entry records what the backend
does rather than what its documentation implies.
Contributing
Contributions are welcome! Please follow these steps to contribute:
Fork the Repository
Create a New Branch
git checkout -b feature/your-feature-nameCommit Your Changes
git commit -m "Add some feature"Push to the Branch
git push origin feature/your-feature-nameOpen a Pull Request
License
This project is licensed under the MIT License.
Available Tools
177 toolsabapDocumentationARead-only
The ABAP keyword or object documentation for a position in a source - the F1 of ADT. Answers with the help text as it is written for that release, which is worth reading before guessing at a statement variant.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| line | Yes | ||
| column | Yes | ||
| language | No | ||
| objectUri | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context: the response is release-specific help text, and it is worth reading before guessing. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with the core purpose front-loaded. The 'F1 of ADT' analogy is economical and illustrative, and every sentence adds value without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no parameter descriptions in the schema, and 0% schema coverage, the description carries a heavy burden. It explains the core purpose and release-specific behavior, but it does not define the required parameters or describe the return value shape, leaving an agent to guess how to construct a valid call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the five undocumented parameters. It only implies the notion of 'a position in a source' (line/column/body/objectUri) but never explains individual parameters, their formats, or how they relate. This is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning ABAP keyword/object documentation for a position in source code, reinforced by the analogy 'the F1 of ADT'. This distinguishes it from sibling tools like findDefinition or codeCompletion by naming the specific resource (documentation/help text) and action (answers with help text).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear contextual guidance: use it to read release-specific help text before guessing at a statement variant. It does not explicitly name alternatives or state when not to use it, but the use case is clear enough for an agent to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
abapPathARead-only
Whether one object's code reaches another, and through what. Walks usageReferences backwards from "to" through its callers, breadth-first, until it reaches "from" or runs out of budget - the same data impactOf uses, just followed as a chain instead of rolled up one level. Pure ADT data, no ABAP parsing: a call made only dynamically (CALL METHOD (name)) is invisible to it, same as usageReferences itself.
| Name | Required | Description | Default |
|---|---|---|---|
| toUrl | No | ADT object URL for the target, for a type toName cannot address. | |
| toName | No | Target object, e.g. ZCL_APP_RETURN. Use with toType. | |
| toType | No | ADT type of toName. Defaults to CLAS/OC. | |
| fromUrl | No | ADT object URL for the start, for a type fromName cannot address. | |
| fromName | No | Starting object, e.g. ZR_APP_REPORT. Use with fromType. | |
| fromType | No | ADT type of fromName. Defaults to CLAS/OC. | |
| maxDepth | No | How many hops to try before giving up (default 8). | |
| maxNodes | No | Total objects to fetch usageReferences for across the whole search before giving up (default 300). A widely used interface as an intermediate hop can otherwise turn this into a wide, expensive search. | |
| onlyCustom | No | Only walk through Z*, Y* and /namespace/ objects (default true). A path through standard SAP code is rare and usually means the two objects are not really related. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint=true and destructiveHint=false, so the description does not need to restate safety, and it still increases value by revealing non-obvious behavior: the traversal is breadth-first, budget-limited, and entirely based on ADT static data with no ABAP parsing. It explicitly calls out that dynamic CALL METHOD is invisible, a critical blind spot for the agent. These are behaviors not derivable from the annotations or schema, so the description carries its weight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense, purposive sentences: what, how, and limitation. Every phrase earns its place—the impactOf comparison is a second reference, and the dynamic-call caveat is a valuable nuance. There is no filler or repetition of schema content, and the most operative detail comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with no output schema, the description covers the core algorithm, traversal budget, data-source purity, and a key missed edge case. It does not explicitly describe the shape of the returned path or result with no path found, but that is a moderate gap given the tool's complexity and absence of an output schema. Overall the description is complete enough for an agent to call it effectively and interpret the main semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The 9-parameter schema has 100% description coverage, giving the baseline of 3. The description adds multi-dimensional context by explaining the budget-driven traversal and the 'same data as impactOf' relationship, which helps verify parameters like maxDepth and maxNodes. But it doesn't enumerate or simplify per-parameter semantics beyond what the schema already provides, so a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise purpose, 'Whether one object's code reaches another, and through what,' which immediately distinguishes reachability analysis from simpler lookup tools. It further clarifies the method by stating it walks usageReferences backward from 'to' through callers, explicitly contrasting it with impactOf's roll-up approach. This leaves no ambiguity about what the tool does or which sibling it relates to.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly tells the agent when to use this tool: when you need a specific 'from' to 'to' path through callers, rather than a rolled-up impact analysis. It references impactOf and usageReferences as the underlying data source, giving context, but it does not explicitly name alternatives or provide explicit when-not conditions. The mechanism is clear enough to infer the right call timing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
activateByNameA
Activate an ABAP object by name and URL, then check the inactive list to see whether it really happened. The backend call behind this answers success:true for objects that stay inactive - notably a freshly created class - so the answer carries verified/stillInactive as well, and success is lowered to false when anything is left inactive. activateSafe is still the better tool: it activates exactly the rows inactiveObjects reports, including method fragments.
| Name | Required | Description | Default |
|---|---|---|---|
| objectUrl | Yes | URL of the object | |
| objectName | Yes | Name of the object | |
| mainInclude | No | Main include context | |
| preauditRequested | No | Whether to perform pre-audit checks |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false, which is minimal. The description goes well beyond by disclosing a critical behavioral quirk: the backend may return success:true even when the object remains inactive, and the tool compensates by returning verified/stillInactive and lowering success to false when anything is left inactive. This is exactly the kind of behavioral context an agent needs and that annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core action, then explains the verification behavior and the alternative. Every sentence earns its place, though the middle sentence is a bit dense with success:true/verified/stillInactive details. Still, it's appropriately sized for the complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the key behavioral caveat (false success), the verification mechanism, and the recommended alternative. It doesn't describe the exact return shape beyond the mentioned fields, but the description's job is to add value beyond structured fields, and it does so well. The missing return format is a minor gap given the behavioral warning is the critical context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds context about objectName and objectUrl (the required ones) by tying them to the activation action, but it doesn't add meaning beyond the schema for mainInclude or preauditRequested. Baseline 3 is appropriate since the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool activates an ABAP object by name and URL, and explicitly distinguishes it from the sibling activateSafe. It names the specific resource (ABAP object) and the action (activate), and even explains the verification step via the inactive list. This is a specific verb+resource with clear differentiation from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool vs alternatives: it warns that the backend can answer success:true for objects that stay inactive (e.g., freshly created class), and recommends activateSafe as the better tool for activating exactly the rows inactiveObjects reports. This is explicit when/when-not guidance with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
activateObjectsA
Activate the objects you name, as rows shaped like the ones inactiveObjects returns. Prefer activateSafe, which activates and then proves it: this call can answer success:true while the object stays inactive, and activating only the class row leaves changed method fragments behind, so the old implementation keeps running under an already-active signature. Every row needs a non-empty adtcore:parentUri, which the inactive list leaves empty for programs.
| Name | Required | Description | Default |
|---|---|---|---|
| objects | Yes | Objects to activate, ideally exactly the rows returned by inactiveObjects. A JSON string is accepted too. | |
| preauditRequested | No | Whether to perform pre-audit checks |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses critical behavioral traits: the call can report success:true while the object remains inactive, and activating only the class row can leave stale method fragments executing. This 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each carrying distinct value: what the tool does, the safety warning and preferred alternative, and an input constraint. It is front-loaded and dense without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and absence of an output schema, the description covers input shape, a critical failure mode, and a safer alternative. It does not explain the full return payload, but mentions success:true, and the rest is sufficiently inferable from the sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful context by telling the agent to use rows from inactiveObjects and that adtcore:parentUri must be non-empty and is left empty for programs. It does not discuss preauditRequested, but the schema already covers that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Activate the objects you name' and defines the expected row shape via inactiveObjects. It distinguishes itself from activateSafe but does not explicitly differentiate from the similarly named sibling activateByName.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit guidance to prefer activateSafe and explains why, covering the main alternative. It lacks a crisp 'use this when...' statement, but the warning context clearly implies this tool is the less-safe variant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
activateSafeA
Activate an object and prove it worked. Reads inactiveObjects, activates exactly those entries (class plus its method fragments, sections and test include), then re-reads inactiveObjects and fails if anything is still inactive. Prefer this over activateByName, which can answer success:true without activating anything.
| Name | Required | Description | Default |
|---|---|---|---|
| objects | No | Explicit entries to activate instead of what inactiveObjects reports. Same shape as activateObjects. | |
| objectUrl | No | Object URL, e.g. /sap/bc/adt/oo/classes/zcl_app. An alternative way to select the rows. | |
| parentUri | No | Package URI (/sap/bc/adt/packages/<package>), used to fill in adtcore:parentUri where the inactive list leaves it empty - activation rejects entries with an empty parentUri. | |
| objectName | No | Name of the object to activate, e.g. ZCL_APP. Used to pick its rows out of the inactive list; omit to activate everything inactive. | |
| preauditRequested | No | Ask the backend to list the fragments it would activate. Useful on a large live class: it is the only diff available here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a detailed behavioral contract: it reads inactiveObjects, activates exactly those entries, re-reads and fails if anything is still inactive. This goes far beyond the annotations (readOnlyHint=false, destructiveHint=false) and provides crucial safety information about verification and failure handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loads the core purpose, and provides both process details and usage guidance without redundancy. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool and the absence of an output schema, the description adequately explains the verification behavior and usage guidance. It does not explicitly cover error scenarios (e.g., lock requirements), but the key behavioral aspects are well covered, making it sufficient 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 5 parameters have descriptions in the schema (100% coverage), so the baseline is 3. The tool description itself does not add parameter-specific meaning beyond what the schema provides, but it does not need to given full schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('activate') and resource ('object'), and further clarifies what 'activate' means (class plus its method fragments, sections and test include). It explicitly contrasts itself with activateByName, making its unique purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly recommends this tool over activateByName, explaining the risk of the alternative returning success without activating. It also implies when to use it (when you need verified activation) by referencing inactiveObjects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
addAttributeB
Add an attribute or a constant to a class - DATA, CLASS-DATA or CONSTANTS - into the section you name, then activate. Defaults to a private DATA, which is what an attribute usually is; a constant needs a value, and READ-ONLY is only accepted on a public one. Pass dryRun to see the diff without writing.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ABAP type, e.g. string, i, mara-matnr, ztt_foo. | |
| value | No | VALUE for the declaration, written as ABAP: 'X' with the quotes, or 42. | |
| dryRun | No | Show the diff without locking or writing. | |
| static | No | CLASS-DATA rather than DATA. | |
| activate | No | Activate afterwards (default true). | |
| constant | No | CONSTANTS rather than DATA; needs a value. | |
| readOnly | No | READ-ONLY. Public attributes only. | |
| className | Yes | Class name, e.g. ZCL_APP. | |
| transport | No | Transport request for the change. | |
| visibility | No | public, protected or private. Default private. | |
| attributeName | Yes | Name of the new attribute. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, so the agent knows it is a write operation but not destructive. The description adds that it activates by default and that dryRun can preview the diff without writing, which is useful. However, it does not mention locking, transport implications, or failure handling, so transparency is only partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, concisely leading with the action, then covering defaults and special cases. It avoids repetition of schema details and is efficiently structured, though the last sentence about dryRun could be seen as an afterthought rather than front-loaded. Still, it is well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 params, no output schema), the description covers key constraints: default visibility, requirement of value for constants, readOnly restriction, and dryRun behavior. It does not mention return values or edge cases, but the schema covers parameter syntax. The essential guidance for correct invocation is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all 11 parameters have descriptions. The description adds some interaction notes (constant needs value, readOnly only on public, dryRun preview), which slightly enriches parameter understanding. Yet it does not dramatically extend beyond the schema, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool adds an attribute or constant to a class, enumerating the kinds (DATA, CLASS-DATA, CONSTANTS) and that it activates. It is specific enough to distinguish from method-related tools, though it does not explicitly name a sibling alternative. 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives parameter-level guidance (e.g., constants need a value, READ-ONLY only for public) but does not state when to prefer this tool over alternatives like addMethod, nor any exclusions. There is no explicit 'use this when...' or 'use that instead' guidance, leaving the agent to infer the tool's role from its name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
addMethodA
Add a method to a class: the declaration goes into the visibility section, the implementation before the closing ENDCLASS, and the whole lock/write/unlock/activate sequence follows. The signature is passed as data and the ABAP is built here, in the indentation the class already uses. This is otherwise two patchObjectSource edits into two different parts of one source, with line numbers that both have to be right. A method that is already there is refused with the line it is on, rather than declared twice. Pass dryRun to see the diff without writing.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | Show the diff without locking or writing. | |
| static | No | CLASS-METHODS rather than METHODS. | |
| raising | No | Exception classes, e.g. ["cx_sy_zerodivide"]. | |
| activate | No | Activate afterwards (default true). | |
| changing | No | Parameters as data: [{name, type, optional?, default?}]. | |
| className | Yes | Class name, e.g. ZCL_APP. | |
| exporting | No | Parameters as data: [{name, type, optional?, default?}]. | |
| importing | No | Parameters as data: [{name, type, optional?, default?}]. | |
| returning | No | Returning parameter: {name, type}. Becomes RETURNING VALUE(name) TYPE type. | |
| transport | No | Transport request. The number of the REQUEST, not of a task inside it. | |
| methodName | Yes | Name of the new method. | |
| visibility | No | public, protected or private. Default public. | |
| declaration | No | Declaration text to use verbatim instead of building one from the parameters above. For a signature this cannot express. | |
| implementation | No | Body lines, without METHOD/ENDMETHOD. Omit and a TODO comment is left in their place. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations being minimal (both false), the description discloses the full write sequence: lock/write/unlock/activate. It also warns about duplicate methods being refused with a line numbercars, and that dryRun shows a diff without writing. This is rich, non-obvious behavior that an agent needs to know before invoking, far beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. The core purpose and mechanics are front-loaded, the comparison to patchObjectSource is a one-line distinction, and the duplicate-handling and dryRun behaviors are compactly stated. Every sentence carries load.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex token with 14 parameters nested objects and no output schema, the description covers the crucial operational flow (lock/write/unlock/activate), the refusal on duplicates, the dryRun option, and how the generated code is constructed. The parameter schema fills in the rest, so an agent has everything needed to safely call the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for every parameter, so the baseline is 3 per the rubric. The description adds useful semantics by clarifying that the signature is passed as data and the ABAP is built internally, plus noting indentation is preserved. It explains how parameters like importing/exporting/changing relate to the generated code, which adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Add a method to a class') and immediately details what that entails (declaration into visibility section, implementation before ENDCLASS). It explicitly differentiates itself from the generic patchObjectSource route, which is a sibling tool, so an agent can select it correctly without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that this tool replaces two patchObjectSource edits, making the use case clear. It also mentions the dryRun option to preview without writing Poisson. However, it does not explicitly state when not to use it (e.g., for deleting methods, which has a dedicated sibling deleteMethod), though the comparison to patchObjectSource gives solid context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adtCompatibiliyGraphARead-only
The ADT compatibility graph of this system: which protocol versions its collections speak. Diagnostic, for a call refused as an unsupported version.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description doesn't need to repeat that. It adds the diagnostic purpose and the fact it's about protocol versions, which is useful. However, it doesn't describe the output format or whether any parameters are needed (though there are none). The description adds context beyond annotations but could be richer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that conveys the purpose and usage context without any fluff. It is front-loaded with the main purpose and then clarifies the use case. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (zero parameters, no output schema, read-only annotations), the description is adequate for an agent to know when to invoke it)Skip. It tells the agent the trigger (unsupported version call) and what it provides (compatibility graph). Could perhaps mention that it requires no input, but that's inferable from the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description doesn't need to explain any. The 'Diagnostic' qualifier adds context about what the tool returns (diagnostic info), which is helpful. Since there are no parameters, the description fully covers any semantic need.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: it provides the ADT compatibility graph of protocol versions for collections. It is specific about the resource (ADT compatibility graph) and the diagnostic context (for a call refused as unsupported version). This distinguishes it from siblings, though it doesn't 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly specifies when to use this tool: when a call is refused due to an unsupported version. This gives the agent a concrete trigger condition. It does not explicitly mention not using it in other scenarios, but the diagnostic context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adtCoreDiscoveryBRead-only
The core discovery document of the ADT service - what healthcheck calls to prove the connection is alive.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, and the description is consistent with these (a read-only discovery document). It adds a small behavioral hint that this is a lightweight connection-proving call, but does not enrich beyond that; there is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core fact that this is the core discovery document. The trailing clause about healthcheck is slightly redundant but the overall length is appropriate and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description conveys the resource and its connection-verification purpose, which is adequate. However, it leaves ambiguity about what the agent does with the returned document and how it differs from the adtDiscovery sibling, so completeness is moderate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty with 100% coverage trivially satisfied, so the description carries no burden to document parameters. Per the baseline for zero-parameter tools, a 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific resource (the ADT discovery document) and notes it's used for connection verification. However, the phrasing 'what healthcheck calls to prove the connection is alive' muddles whether this is a tool for the agent to use directly or an internal mechanism, and it does not differentiate from the closely named sibling adtDiscovery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used for proving a connection is alive, giving some context for when to call it. But it offers no explicit when-to-use guidance, no exclusions, and no mention of alternatives such as adtDiscovery or the healthcheck sibling, so the agent is left to infer the intended invocation scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adtDiscoveryARead-only
The ADT service document: every collection this system offers, with its URL and the object types it serves. This is where the address of an unfamiliar collection comes from.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds that it returns the service document with collections, URLs, and object types, which is useful context. However, it doesn't disclose details like whether the response is large, whether it requires authentication, or how the document is structured beyond the basics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no waste. The core purpose is front-loaded, and the practical use case ('where the address of an unfamiliar collection comes from') is stated efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only discovery tool, the description is largely complete. It explains what the tool returns and why an agent would use it. The only minor gap is not clarifying the relationship to adtCoreDiscovery, but the description is otherwise sufficient for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics burden on the description. The schema is trivially complete (100% coverage with an empty object), and the description correctly implies no inputs are needed. Baseline 4 is appropriate for a zero-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as the ADT service document, explaining that it lists every collection with its URL and object types. This is a specific resource and purpose, though it doesn't explicitly distinguish itself from the sibling adtCoreDiscovery, which likely serves a similar discovery role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when you need the address of an unfamiliar collection, this is where it comes from. However, it doesn't explicitly state when to use this tool versus adtCoreDiscovery or other discovery-related siblings, nor does it mention any alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
annotationDefinitionsARead-only
The CDS annotations this system defines, with their value ranges - what may be written in a DDLS source before an activation refuses it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful context that these definitions are what activation refuses against, but it does not disclose return structure, pagination, or other behavioral traits. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-structured sentence that front-loads the resource and then explains its role in activation. Every word earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameter-free read-only tool, the description communicates what the tool returns (CDS annotations and value ranges) and why it matters. It stops short of describing the exact return format or data structure, but this is a minor gap given the tool's simplicity and the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters against an empty schema (100% coverage), so the baseline is 4. The description has no parameter details to add, and none are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('CDS annotations this system defines') and conveys the tool's purpose: returning supported annotation value ranges. It is not a tautology and avoids ambiguity, but it does not explicitly distinguish itself from sibling tools like syntaxCheckCdsUrl or codeCompletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The clause 'what may be written in a DDLS source before an activation refuses it' implies the tool is relevant when authoring or validating DDLS source, giving a clear context of use. However, it does not state when to use this tool versus an alternative, nor does it provide any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
atcChangeContactA
Change who is responsible for an ATC finding - it moves the finding into another worklist.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | The ID of the user. | |
| itemUri | Yes | The URI of the item. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, so the tool is known to mutate but not destroy. The description adds context by explaining the specific effect (moves the finding to another worklist). It does not disclose permission requirements, reversibility, or what happens to the old worklist beyond the move. This is a moderate disclosure beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the core action ('Change who is responsible') followed by a clarifying clause ('moves the finding into another worklist'). Every word earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation with two parameters and no output schema, the description explains the action and its primary effect. It does not mention the response format or potential errors, but these are less critical for a straightforward reassignment. The description is sufficient for an agent to know what the tool does and what inputs are needed, given the schema already documents parameter meanings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema provides descriptions for both parameters: userId (The ID of the user) and itemUri (The URI of the item). The tool description adds meaning by clarifying that itemUri refers to an ATC finding and that changing responsibility implies userId is the new responsible user. This goes beyond the schema's generic labels, enriching parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Change), resource (who is responsible for an ATC finding), and clarifies the effect (moves the finding into another worklist). This clearly distinguishes it from siblings like atcContactUri (likely retrieves contact info) and atcWorklists (lists worklists). The action and outcome are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when you need to reassign an ATC finding to a different user. However, it provides no explicit when-not-to-use guidance or references to alternative tools. It is not misleading, but the guidance is only implicit and lacks exclusions or sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
atcCheckARead-only
Run the ATC checks over an object or a whole package and report what they found: for each object, every finding with its priority, the check that raised it, the message, and the source line it points at. This is the whole sequence in one call - the check variant from the system customizing, a worklist, the run, the worklist read back - and getting it wrong is what made a run answer 500 (the run needs a worklist id where the library asks for a variant). Findings are ordered by priority, 1 being the worst.
| Name | Required | Description | Default |
|---|---|---|---|
| variant | No | Check variant to use. Defaults to the system check variant from atcCustomizing. | |
| objectUrl | No | Escape hatch: the ADT URI to check, if it is neither an object name nor a package. | |
| maxResults | No | Cap on the verdicts the backend produces, default 100. A single old report can hold 900. | |
| objectName | No | Object to check, e.g. ZCL_APP or ZR_APPO_NEW. | |
| objectType | No | ADT type of that object: CLAS/OC, INTF/OI, PROG/P, FUGR/F, DDLS/DF, TABL/DS. Defaults to CLAS/OC. | |
| maxFindings | No | Cap on the findings reported back, default 100. The counts are always for everything found. | |
| minPriority | No | Report only findings at least this severe: 1 is the worst, 3 the mildest. Default is all of them. | |
| packageName | No | Check a whole package instead of one object - every object in it, sub-packages included. | |
| includeExempted | No | Include findings that carry an approved exemption. Off by default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, and the description adds value by explaining the execution flow (variant, worklist, run, readback) and the risk of misuse (500 error). It also describes output ordering ('findings are ordered by priority, 1 being the worst'), which is behavioral context beyond the safety annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but every sentence carries necessary information. It front-loads the core purpose, clarifies the internal workflow, and includes a practical warning. No redundancy or filler; it earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters and no output schema, the description covers key aspects: what the tool does, the expected output content, ordering, severity semantics, and a known failure mode. It does not detail exact return structure (no schema exists), but it provides enough for an agent to invoke correctly. The only minor gap is absence of explicit mention of authentication or rate limits, which are not indicated in annotations either.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds meaningful context: explains the variant default ('Defaults to the system check variant from atcCustomizing'), the cap semantics ('maxResults' and 'maxFindings' with counts always for everything found), minPriority severity ordering, and the escape-hatch purpose of objectUrl. This enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run the ATC checks') with explicit scope ('over an object or a whole package') and detailed description of the output (findings with priority, check, message, source line). Clearly distinguishes itself from sibling tools by positioning as the whole sequence in one call, not requiring separate steps like variant selection or worklist creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context on when to use the tool ('the whole sequence in one call') and warns about a specific pitfall ('getting it wrong is what made a run answer 500 (the run needs a worklist id where the library asks for a variant)'). It implicitly differentiates from component tools but does not explicitly name alternatives or state when not to use, hence not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
atcCheckVariantARead-only
Opens a worklist for an ATC check variant and answers with its id. It reads nothing about the variant, whatever the name suggests: the id it returns is what createAtcRun needs as its worklistId - passing the variant name there is what makes the run answer 500. atcCheck does this and the run and the report in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| variant | Yes | The name of the ATC check variant. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, it discloses that the tool reads nothing about the variant and only returns a worklist id. It also surfaces the 500 failure mode. It does not describe the exact response shape, but that is a minor gap for a read-only one-parameter tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, with the main purpose front-loaded and every subsequent sentence adding useful caveats or routing information. There is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description covers what it returns, why it is needed, and the critical failure mode. It could clarify whether the worklist is newly created or must already exist, but the core calling contract is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'variant' parameter is already fully documented in the schema with 100% coverage. The description reinforces that it expects a variant name rather than a worklist id, but adds no format or constraint details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Opens a worklist'), a target resource (ATC check variant worklist), and a return value (its id). It also explicitly contrasts with atcCheck, making the tool's standalone role clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool: when you need a worklistId for createAtcRun. It warns that passing the variant name to createAtcRun causes a 500 and names atcCheck as the combined alternative, so an agent can route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
atcContactUriBRead-only
The contact URI of an ATC finding - who is responsible for it.
| Name | Required | Description | Default |
|---|---|---|---|
| findingUri | Yes | The URI of the ATC finding. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds that the tool retrieves the responsible party's contact URI, which is useful context. However, it doesn't disclose behavior on invalid input or what happens when no contact exists, which would be valuable given 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused phrase with no redundant words. It front-loads the key concept (contact URI) and adds the responsibility context. It's efficient and avoids repetition of the parameter details already present in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 accessor, the description is mostly adequate. It explains the conceptual meaning of the result and the parameter is fully documented. However, with no output schema, it would be helpful to at least imply the response format (e.g., a URI string) or note possible empty results, which is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage for findingUri with a clear description ('The URI of the ATC finding'). The tool description does not add further semantics about the parameter—it only implies the relationship to the result. Since the schema already handles the parameter, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource (ATC finding) and the attribute being accessed (contact URI), plus the semantic meaning ('who is responsible for it'). It distinguishes itself from siblings like atcChangeContact which imply a mutation. The only minor weakness is that it's phrased as a noun phrase rather than an explicit verb, but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit usage guidance is provided. The description does not mention when to use this tool versus alternatives, nor does it state any exclusions or prerequisites. While it's a simple accessor, the absence of any context about when to invoke it leaves the agent to infer from the name and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
atcCustomizingARead-only
How ATC is set up on this system: the check variants and their priorities - what atcCheck runs against by default.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, and the description is fully consistent with them. The description adds that it describes 'how ATC is set up', which is useful context but does not provide return format or further behavioral details. Since annotations already cover the safety profile, the description adds only marginal value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant words. It immediately states the subject and the key content, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only query tool with no output schema, the description provides the essential content: check variants and their priorities, and the default behavior of atcCheck. It is sufficient for an agent to understand what the tool returns. It could be more precise about the output format, but given the simplicity, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description does not add parameter-related information, but none is needed since there are no parameters to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource (ATC configuration) and the specific aspect (check variants and their priorities, what atcCheck runs against by default). It does not use an imperative verb like 'get' or 'retrieve', but the purpose is unambiguous. It hints at differentiation from atcCheck and atcCheckVariant by focusing on system-wide defaults, 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.
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 siblings such as atcCheckVariant or atcCheck. The phrase 'what atcCheck runs against by default' implies a specific use case, but it does not state 'use this when you need the default configuration' or mention alternative tools. Given the large number of ATC-related siblings, this is a significant gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
atcDocumentationARead-only
The documentation of one ATC finding: what the check means and what it wants instead. Takes the documentation URI that atcWorklists reports for a finding. Returns the document as it comes from the backend, which is HTML.
| Name | Required | Description | Default |
|---|---|---|---|
| docUri | Yes | Documentation URI of the finding, from the atcWorklists answer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful context by stating the response is HTML as it comes from the backend and explaining the semantic content of the finding, but it does not disclose error behavior or other edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The purpose is front-loaded, and each clause serves a distinct function: clarifying what the documentation contains, where the input comes from, and what the output looks like.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only tool with no output schema, the description gives the essential workflow: URI origin, the action performed, and the response format. Minor omissions like error handling or URI validation 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes docUri fully with 100% coverage, so the baseline is 3. The description repeats that the URI comes from atcWorklists, which reinforces the schema, but it does not add substantive 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation: it takes a documentation URI and returns the documentation of one ATC finding as HTML. It also distinguishes itself from atcWorklists by explicitly referencing it as the source of the URI, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Takes the documentation URI that atcWorklists reports for a finding' gives clear context for when to use this tool, tying it to a prior workflow step. It does not explicitly discuss alternatives or situations where this tool should not be used, but the workflow implication is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
atcExemptProposalARead-only
The exemption proposal for an ATC finding: what would be requested, before requesting it.
| Name | Required | Description | Default |
|---|---|---|---|
| markerId | Yes | The ID of the marker. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds semantic context by indicating this is a proposal and not the actual request, which is helpful. It does not disclose error cases, permissions, or response format, but given the lightweight annotations and simple read-only nature, this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that front-loads the core concept and immediately clarifies the tool's purpose. There is no redundant wording or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read-only preview tool with annotations and full schema coverage, the description provides enough context. It could mention what the returned proposal contains or how it relates to atcRequestExemption, but the core usage is understandable and nothing critical is missing for invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for markerId with a clear explanation ('The ID of the marker.'), so the schema carries the parameter semantics. The description does not add any meaning about how markerId is used or why it is needed, but it does not need to due to full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (exemption proposal for an ATC finding) and clarifies its role as a pre-request preview. It is not a tautology, but it lacks a clear verb like 'get' or 'preview', so the action is implied rather than stated. It distinguishes itself from a real exemption request by saying 'before requesting it', though it does not explicitly name the sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'before requesting it' gives an implied usage context: call this to preview before submitting an actual exemption request. However, it does not explicitly name the alternative tool (e.g., atcRequestExemption) or state when not to use this tool. The guidance is useful but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
atcRequestExemptionA
Ask for an ATC finding to be exempted, with a reason - it goes to an approver, it is not granted here.
| Name | Required | Description | Default |
|---|---|---|---|
| proposal | Yes | The ATC exemption proposal. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations: it reveals that the action is asynchronous and routed to an approver, with no immediate grant. This is valuable because readOnlyHint=false and destructiveHint=false alone do not convey that this is a request/approval handoff rather than a direct state change.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the primary action, then immediately clarifies the workflow and the non-granting nature. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool, purpose and workflow are covered well. However, the nested proposal object is left structurally undefined, and there is no output schema to clarify what the caller should expect after the request is submitted. This leaves an agent needing to guess at the proposal shape despite the 100% schema coverage being only a superficial label.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds a small hint that the proposal must include a reason, but it does not explain the structure of the nested 'proposal' object or how to identify the ATC finding. It provides only marginal semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Ask') and a clear resource ('ATC finding') with a purpose ('to be exempted') and a key qualifier ('with a reason'). The phrase 'it goes to an approver, it is not granted here' sharply distinguishes it from any approval/granting tool, making its role unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates this is for requesting an exemption rather than granting one, and the workflow context ('goes to an approver') makes the use case obvious. It does not explicitly name neighboring sibling tools like atcExemptProposal, but its usage context is strong and unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
atcUsersARead-only
The users ATC knows for exemption approval - who can be named as an approver. Search with filter rather than reading the whole address book of the system.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Cap on the users reported, default 50. The counts are always for everything found. | |
| filter | No | Case-insensitive substring, matched against both the user id and the name. Without it the whole list comes back, which on a real system is several hundred entries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to restate the safety profile. It adds context that these are the known exemption approvers and that unfiltered searches can be large, but it does not disclose additional response behavior or auth requirements; the annotations carry part of that burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, purpose-first, and contains no schema repetition or filler. The added advisory about using a filter earns its place, making this well-structured and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple read-only tool with two optional, fully documented parameters and read-only annotations, so the description does not need extensive extra context. The approver-related purpose and the filter advice are enough for an agent to invoke it correctly, although a true output schema is also absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, explaining limit's default/count behavior and filter's case-insensitive substring matching over user id and name. The description adds only a general reason to filter, so it aligns with the baseline rather than meaningfully enriching the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence identifies the tool as the users ATC knows for exemption approval, specifically who can be named as an approver. This is a clear resource-and-purpose match, but it does not explicitly differentiate it from siblings such as systemUsers, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use context, exemption approval, and explicitly advises searching with a filter rather than pulling back the whole address book. This is concrete enough for an agent to know when and how to use it, though it does not name alternative tools or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
atcWorklistsARead-only
An existing ATC worklist by id, with the findings it holds. Prefer atcCheck, which opens a worklist, runs the checks and reports them in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| timestamp | No | The timestamp. | |
| runResultId | Yes | The ID of the ATC run result. | |
| usedObjectSet | No | The used object set. | |
| includeExempted | No | Whether to include exempted findings. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds behavioral context by emphasizing the worklist is 'existing' and by contrasting with atcCheck, making clear this tool does not run checks and only returns findings already held by the worklist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the core purpose and the routing guidance without redundancy. The most important scoping fact, that this is an existing worklist lookup, is front-loaded, and the sibling preference is stated efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only retrieval tool, the description covers what it returns, the key identifier concept, and the preferred alternative. Optional parameters are fully documented in the schema, so nothing essential is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 input schema. The description only clarifies the core lookup concept ('by id'), which mostly aligns with the schema's own 'ID of the ATC run result' description, adding no substantial new parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as an existing ATC worklist and says it contains the findings it holds, which is specific enough to understand the tool's function. It lacks an explicit verb like 'retrieves' or 'returns,' so it stops just short of a 5, but it does distinguish itself from atcCheck by naming that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs the agent to prefer atcCheck, which 'opens a worklist, runs the checks and reports them in one call.' This clearly implies atcWorklists is for retrieving an existing worklist without running checks, giving both an alternative and 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.
bindingDetailsARead-only
What a service binding exposes: its services, versions and the entities behind them - read before publishing or unpublishing one.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | The index of the service binding. | |
| binding | Yes | The service binding. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds context about the content returned (services, versions, entities) but does not disclose additional behavioral traits such as potential side effects, auth requirements, or rate limits. Since annotations carry the safety burden, the description's added value is moderate, aligning with the baseline for annotated read-only tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence. The core purpose is front-loaded ('What a service binding exposes'), followed by the usage caveat ('read before publishing or unpublishing one'). There is zero fluff or redundancy, and every word contributes to understanding the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, 1 required, no output schema) and the annotations covering safety, the description is largely complete. It states the purpose and the usage context. The only minor gap is the exact structure of the return data, but since there is no output schema and the description hints at the content, it is adequate for an agent to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented in the input schema (index and binding). The description does not add any additional meaning or usage hints for these parameters, and given the baseline of 3 for full schema coverage, no extra points are warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: revealing what a service binding exposes (services, versions, entities). It uses a specific noun ('service binding') and a distinct purpose, differentiating it from sibling tools like publishServiceBinding and unPublishServiceBinding without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'read before publishing or unpublishing one.' This tells an agent exactly when to invoke this tool (as a prerequisite to mutation) and by implication when not to (when intending to publish/unpublish directly). It also establishes it as a read-only inspection step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
callFunctionA
Call a function module with values and get what it returned, as data. Takes the module name alone - the function group is looked up - reads its signature, generates the call and runs it through a throwaway class in $TMP. The answer carries the exporting, changing and tables parameters by name, sy-subrc turned back into the name of the classic exception it stood for, a class-based exception with its text, and the true row count of every table. Values are checked against the signature before anything is sent: an unknown parameter name and a missing mandatory one are refused with the list of what the module takes. IMPORTANT: this executes the module on the target system as the connected user. Nothing it changed is kept - the call is followed by ROLLBACK WORK - unless commit is set, and a module that commits internally cannot be taken back at all. It counts as a writing tool and is refused in read-only mode.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Function module, e.g. Z_APP_GET_INVOICE. The group is found by search. | |
| commit | No | Keep what the call did: COMMIT WORK AND WAIT instead of ROLLBACK WORK. Default false. Ask before setting this on a module that posts. | |
| dryRun | No | Return the generated class source without touching the system - the way to see what would run. | |
| values | No | Values by parameter name: {"IV_LGNUM": "101", "IT_ITEMS": [{"MATNR": "4711"}]}. A structure is an object, a table an array; a scalar can be a string, a number or a boolean. Only importing, changing and tables parameters can be supplied. | |
| maxRows | No | Rows of each table kept in the answer, default 20. The true count is reported either way. | |
| keepClass | No | Leave the generated class on the system instead of deleting it. Default false. | |
| snippetClass | No | Name for the throwaway class. Default ZMCP_CALL_<timestamp in base 36>. | |
| functionGroup | No | The group, when the search does not find the module. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations (readOnlyHint=false, destructiveHint=false) by detailing side effects: it executes on the target system as the connected user, rolls back changes unless commit is set, warns that modules with internal commits cannot be rolled back, and states it is a writing tool refused in read-only mode. It also discloses input validation behavior and output structure, providing rich behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured, starting with a clear purpose, then mechanics, output details, validation, and finally safety. Every sentence adds useful information for a complex tool with 8 parameters. While it could be trimmed, the density of technical details is appropriate for a low-level function module caller in an ABAP environment.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all critical aspects an agent needs to invoke the tool correctly: how to specify the module (name), what happens with signature validation, output format (exporting/changing/tables, exceptions, row counts), side effects (rollback, commit, internal commits), and the restriction to read-only mode. Combined with a fully described input schema)Skiping nothing major is missing. The lack of an output schema is compensated by a detailed description of the return value structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline for parameter semantics is 3. However, the description adds meaningful context that goes beyond the schema: it explains the role of commit (default rollback, override to keep changes) and clarifies that values are validated against the signature before sending. While dryRun, maxRows, keepClass, and snippetClass are not elaborated in the description, the schema descriptions for those parameters are already sufficient, so the description still adds value for the core parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific statement: 'Call a function module with values and get what it returned, as data.' It identifies the exact resource (function module) and differentiates from sibling tools like callMethod by naming the resource type. The subsequent details about looking up the function group and generating the call reinforce the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but never states when to use it over alternatives. It does not mention any exclusions, prerequisites, or comparisons to sibling tools such as callMethod, runClass, or runSnippet. The only contextual clue is the function module emphasis, which implies a use case but is not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
callMethodA
Call a static method of a class with values and get what it returned, as data. The signature is read from the class source, because classComponents lists methods without their parameters. Returns the returning parameter, the exporting and changing ones by name, and any exception with its text. Static methods only: an instance method needs a constructor call, and runSnippet is the way to do that. IMPORTANT: this executes the method on the target system as the connected user. Nothing it changed is kept - the call is followed by ROLLBACK WORK - unless commit is set. It counts as a writing tool and is refused in read-only mode.
| Name | Required | Description | Default |
|---|---|---|---|
| commit | No | Keep what the call did: COMMIT WORK AND WAIT instead of ROLLBACK WORK. Default false. | |
| dryRun | No | Return the generated class source without touching the system. | |
| values | No | Values by parameter name, same shapes as callFunction takes. Only importing and changing parameters can be supplied. | |
| maxRows | No | Rows of each table kept in the answer, default 20. | |
| className | Yes | Class holding the method, e.g. ZCL_APP. | |
| keepClass | No | Leave the generated class on the system instead of deleting it. Default false. | |
| methodName | Yes | Static method to call, e.g. GET_STAWN. | |
| snippetClass | No | Name for the throwaway class. Default ZMCP_CALL_<timestamp in base 36>. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state readOnlyHint=false and destructiveHint=false. The description goes much further: it discloses that execution happens as the connected user, that changes are rolled back unless commit is set, and that the tool counts as a writing tool. This is critical behavioral context an agent needs, and it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: purpose first, then mechanics, then constraints, then the IMPORTANT caveat. Every sentence adds value—no redundancy or fluff. It is longer than average but justified by the complexity of the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains what is returned (returning, exporting, changing parameters, and exception text). It covers rollback/commit behavior, static-only limitation, and read-only refusal. The remaining details (maxRows, dryRun, snippetClass) are sufficiently described in the schema, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter is already documented. The description adds minimal parameter-specific meaning beyond what the schema provides; the note about 'values' referencing callFunction shapes is helpful but not essential. The baseline of 3 applies because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Call a static method of a class with values and get what it returned, as data.' It distinguishes itself from siblings by explicitly noting static-only scope and pointing to runSnippet for instance methods. The mention that the signature is read from class source because classComponents lacks parameters adds useful context and separates it from related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage guidance: 'Static methods only: an instance method needs a constructor call, and runSnippet is the way to do that.' This names the alternative and the condition that selects it. It also warns that the tool is refused in read-only mode, clarifying when it cannot be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
changePackagePreviewARead-only
What moving an object to another package would involve: the refactoring the backend proposes, with the old and new package and the transport it would be recorded in. Preview only - this server does not execute the move, because the library offers no evaluate step and the payload has to be assembled here, which is not something to run unverified against a real package. Do the move itself in ADT or SE80 once the preview looks right.
| Name | Required | Description | Default |
|---|---|---|---|
| objectUrl | Yes | Object to move, e.g. /sap/bc/adt/oo/classes/zcl_app_foo. | |
| transport | No | Transport request the move would be recorded in - the request itself, not a developer task. | |
| newPackage | Yes | Target package, e.g. ZAPP_BASE. | |
| objectName | No | Object name; looked up when omitted. | |
| objectType | No | ADT object type, e.g. CLAS/OC; looked up when omitted. | |
| oldPackage | No | Current package; looked up when omitted. | |
| ignoreSyntaxErrors | No | Ask the backend to propose the move even with syntax errors (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description goes beyond by explaining the nature of the preview: it does not execute the move, and why (no evaluate step, payload must be assembled and cannot be run unverified). This adds context beyond the annotation, making the tool's behavior fully transparent. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a first sentence stating the purpose, and subsequent sentences explaining limitations and next steps. It is front-loaded with the core purpose and uses only three sentences. It is slightly longer than necessary but every sentence adds value, so it earns a 4 rather than a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a preview tool with read-only annotations and no output schema, the description is quite complete. It explains what the preview shows, that it does not execute, and where to perform the actual move. It lacks details about the exact response structure, but that is implied by 'what moving an object... would involve'. Overall, it covers the essential context an agent needs to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. The description adds a high-level context that the preview includes old and new package and transport, but it does not provide per-parameter details beyond what the schema already states. It does not compensate for any coverage gaps because there are none, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool provides a preview of what moving an object to another package would involve, including the proposed refactoring, old/new package, and transport. It explicitly distinguishes itself from an actual move by saying 'Preview only' and 'this server does not execute the move', which separates it from sibling tools like renamePreview or extractMethodPreview. The verb 'preview' and resource 'package move' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: to see the refactoring proposal without executing. It also gives when-not-to-use: 'Do the move itself in ADT or SE80 once the preview looks right.' This clearly routes the agent to external tools for the actual move, and explains why the server cannot execute it. This is a strong usage guideline with explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
checkRepoARead-only
Check an abapGit repository before pulling: what would change, and whether anything local stands in the way.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | The Git repository. | |
| user | No | The username. | |
| password | No | The password. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds useful behavioral context: it reports what would change and whether local changes block the pull. However, it doesn't disclose details like whether it performs a fetch, how it handles authentication, or what the output format looks like. With annotations covering the safety profile, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, zero waste, and the core purpose is front-loaded. It states the action, the resource, and the two key outputs (what would change, local obstacles) in a compact form.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only check tool with annotations covering safety and a 100% schema coverage, the description is nearly complete. It tells the agent what the tool does and what it reports. The only minor gap is that it doesn't describe the output structure, but since there is no output schema and the tool is a check/preview, the description's summary of outputs ('what would change' and 'whether anything local stands in the way') is sufficient for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 (repo, user, password). The description doesn't add parameter-specific meaning beyond the schema, but it does imply that repo is the target and user/password are likely for authentication. Baseline 3 is correct 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: checking an abapGit repository before pulling, specifically what would change and whether local changes stand in the way. It uses a specific verb ('check') and resource ('abapGit repository'), and the pre-pull context distinguishes it from generic repository tools. However, it doesn't explicitly name sibling tools like gitPullRepo or stageRepo, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a clear usage context: use this before pulling to preview changes and detect local obstacles. It doesn't explicitly state when not to use it or name alternatives, but the pre-pull framing and the mention of 'what would change' and 'local stands in the way' give an agent enough context to select it over gitPullRepo or gitRepos. The lack of explicit exclusions or alternative names keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classComponentsARead-only
What a class is made of: its methods with their visibility, its attributes, its types and its interfaces - read from the class rather than from its source. This is the cheap answer to "what can this class do"; the source of one method is then found with fragmentMappings or read whole with getObjectSource.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL of the class |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful behavioral context beyond annotations: it reads from class metadata rather than source ('read from the class rather than from its source') and characterizes the operation as 'cheap', implying lightweight execution. It doesn't divulge error behavior, but given annotation coverage, this is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with zero redundancy. The core purpose is front-loaded, and the alternative guidance is placed in the second sentence without clutter. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with one well-documented parameter and no output schema, the description fully covers what the agent needs: what is returned, the lightweight nature, and how to get the actual source. No critical gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 'url' parameter ('The URL of the class'). The description adds no additional meaning about the parameter or its format, so it rests at the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('read') and resource ('class') and enumerates the exact contents returned: methods with visibility, attributes, types, and interfaces. It explicitly distinguishes itself from source-reading tools like getObjectSource and fragmentMappings, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: 'the cheap answer to what can this class do', and directs to alternatives for source retrieval ('fragmentMappings or read whole with getObjectSource'). This is concrete, actionable routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classIncludesCRead-only
The includes a class is made of - definitions, implementations, macros, test classes - with the URL of each. That is how the test class of a class is read or written separately from its main source, and which include names revisions and getTextElements take.
| Name | Required | Description | Default |
|---|---|---|---|
| clas | Yes | The class name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds that URLs are returned for each include and explains the separation of test classes, which provides some behavioral context. It does not describe response format or other traits, and there is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single run-on sentence that is grammatically awkward and hard to parse. It packs multiple ideas without clear structure, making it less concise and more confusing than it should be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 clearly specify the return format. It mentions URLs but does not indicate whether the result is a list, array, or object structure. It also lacks any prerequisites or additional context needed for correct usage, leaving the tool under-described for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the single parameter 'clas' with 'The class name', achieving 100% coverage. The description does not add any additional meaning about the parameter, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states that the tool returns the includes of a class (definitions, implementations, macros, test classes) with their URLs, which conveys the core purpose. However, it lacks a clear verb (e.g., 'list' or 'retrieve') and the phrasing is convoluted. It hints at a connection to revisions and getTextElements but does not explicitly differentiate from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It mentions that this is how test classes are read/written separately and that include names are used by revisions and getTextElements, giving some contextual guidance. However, it does not explicitly state when to use this tool versus alternatives or when not to use it, leaving the guidance implicit rather than prescriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codeCompletionARead-only
Completion proposals for a cursor position: what may be written at line/column of this source. Needs the source and the position, exactly like the editor, so it is worth having when composing a call against an unfamiliar interface; codeCompletionFull adds the insert text and codeCompletionElement the details of one proposal.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | ||
| column | Yes | ||
| source | Yes | ||
| sourceUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is established. The description adds that the tool 'needs the source and the position, exactly like the editor,' which clarifies the stateless, read-only nature and input prerequisites. But it does not disclose potential failure modes, rate limits, or what happens on invalid input, so the added behavior context is moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence with no filler. The core purpose is front-loaded, and the sibling comparisons are placed after the main definition. Slightly run-on but still concise and well-organized for the amount of context it conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the purpose and input relationship to the editor, and differentiates siblings, which is helpful. But with no output schema and 0% schema coverage, it fails to specify the return shape or how results are represented, and leaves the sourceUrl parameter semantically dark. This is adequate for deciding when to call it, but not complete for reliably invoking it with full understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description must compensate for the undocumented parameters. It maps 'source' and 'position' to source, line, and column, and 'exactly like the editor' gives some context for line/column indexing. However, sourceUrl is left unexplained, and the description does not clarify the units or whether line/column are zero-based. Thus compensation is partial at best.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: 'Completion proposals for a cursor position: what may be written at line/column of this source.' It names the resource (source code) and the specific operation (completion proposal). It also distinguishes itself from siblings by explicitly contrasting with codeCompletionFull (adds insert text) and codeCompletionElement (details of one proposal), so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives context for when this tool is valuable: 'worth having when composing a call against an unfamiliar interface.' It also implies selection guidance by noting what the siblings add, which helps an agent choose between this and codeCompletionFull/codeCompletionElement. However, it does not explicitly state conditions for preferring the alternatives or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codeCompletionElementARead-only
The details behind one completion proposal: its type, its documentation, where it comes from. Follows codeCompletion for the entry you want to know more about.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | ||
| column | Yes | ||
| source | Yes | ||
| sourceUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to restate safety. The description adds that the tool returns details such as type, documentation, and source, and implies a dependency on a prior codeCompletion response. It does not disclose any further behavioral traits such as failure modes or prerequisites beyond the input parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. It front-loads the tool's purpose and then gives the usage context. Every sentence contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool's role as a follow-up detail lookup for codeCompletion is clear, and the annotations cover its read-only safety profile. However, with four required parameters, zero schema-level descriptions, and no output schema, the description should explain parameter roles more fully. It is minimally adequate but leaves meaningful gaps for an agent trying to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the four required parameters: sourceUrl, source, line, and column. 'Where it comes from' vaguely hints at source/sourceUrl, but the coordinates and their relationship to a completion entry are undocumented. This forces the agent to guess parameter semantics from names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as providing details for a single code completion proposal: its type, documentation, and origin. It also ties itself to codeCompletion, which helps an agent understand its role in the completion workflow. However, it lacks a strong imperative verb and does not explicitly distinguish itself from the codeCompletionFull sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Follows codeCompletion for the entry you want to know more about' gives explicit contextual guidance on when to invoke this tool. It tells the agent this is a follow-up detail lookup after a codeCompletion call. It does not mention when not to use it or compare against similar siblings like codeCompletionFull, but the core usage condition is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codeCompletionFullBRead-only
Completion proposals with the text to insert and the position to insert it at, for a cursor position in a source. The fuller form of codeCompletion.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | ||
| column | Yes | ||
| source | Yes | ||
| sourceUrl | Yes | ||
| patternKey | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds that the tool returns both the text to insert and the insertion position, which is useful behavioral context. However, it does not disclose details like whether the completion is context-sensitive, how the position is represented, or any rate-limit/performance traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core purpose is front-loaded and the sibling distinction is included. It is appropriately concise, though it could have used the second sentence to explain parameters instead of only naming the sibling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 required parameters, no output schema, and 0% schema description coverage, the description is too thin. It does not explain the meaning of sourceUrl or patternKey, nor what the completion response structure looks like. The sibling distinction helps, but an agent would still be guessing about critical inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden of explaining the 5 required parameters. The description only mentions 'cursor position in a source' and 'text to insert', which maps to line/column/source but leaves sourceUrl and patternKey unexplained. With zero schema descriptions and no parameter details in the description, an agent cannot confidently determine what patternKey or sourceUrl mean.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it provides completion proposals with the text to insert and the position to insert it at, for a cursor position in a source. It also distinguishes itself from the sibling codeCompletion by calling itself 'the fuller form of codeCompletion', which helps an agent differentiate the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (cursor position in a source) and names the sibling codeCompletion as the alternative, but it does not explicitly state when to use this tool versus codeCompletion or codeCompletionElement. The phrase 'fuller form' gives some guidance but leaves the selection criteria to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
collectionFeatureDetailsBRead-only
What one collection of the discovery document offers: its capabilities, its supported types and its versions.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL of the collection feature. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Because annotations already mark the tool readOnlyHint=true and destructiveHint=false, the description does not need to re-state safety. It adds value beyond annotations by disclosing what the operation exposes: capabilities, supported types, and versions. This is useful context given there is no output schema declared.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words and front-loads the main subject (collection) and the key return contents. However, the wording 'What one collection ... offers' is slightly unusual for a command-oriented tool; a clearer phrasing such as 'Retrieve the details of a single collection...' would be more direct.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low parameter count, the explicit annotation of a safe read-only operation, and the absence of an output schema, the description covers the basics well. It states what a caller will get (capabilities, types, versions) and the resource domain (discovery document). It could mention how to obtain the URL (e.g., via a discovery endpoint), but the parameter schema already describes the URL input.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the only parameter, url, already has a clear schema description. The tool description mentions 'collection' and 'discovery document', which loosely relates to the url parameter, but it does not add meaningful detail about the URL format or how the URL identifies the collection. Therefore it sits at the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific resource (a collection in the discovery document) and its content (capabilities, supported types, versions), but it never states an explicit verb such as 'retrieve' or 'get.' It reads more like a statement about the resource than a clear operation description. It does not explicitly distinguish itself from the closely named sibling featureDetails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'what one collection of the discovery document offers' implies the intended use is to fetch details for a single collection, but it gives no explicit guidance about when to choose this over featureDetails or findCollectionByUrl. There is no when-not-to-use direction or mention of alternatives, so the guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compareRevisionsARead-only
What changed between two versions of one object, as a unified diff. Name each side by a revision number from revisions, by a transport request, or by "active" (what the system executes), "inactive" (the working version) or "latest" (newest in the history). With neither side given it compares the two newest versions, which answers "what did the last change do"; "active" against "inactive" shows an edit that is written but not activated. The diff anchors on lines that occur once on each side, so an inserted method reads as an insertion instead of two rewritten methods.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | The newer side, same forms. Defaults to the newest version. | |
| from | No | The older side: a revision number ("00087"), a transport request, "active", "inactive" or "latest". Defaults to the second newest version. | |
| context | No | Lines of context around each change. Default 3. | |
| objectUrl | No | ADT object URL, e.g. /sap/bc/adt/oo/classes/zcl_app. Only needed for a type objectName cannot address. | |
| clsInclude | No | For a class, which include to compare: definitions, implementations, macros, testclasses or main (the default). | |
| objectName | No | Object name, e.g. ZCL_APP. Use with objectType. | |
| objectType | No | ADT type: CLAS/OC, INTF/OI, PROG/P, PROG/I, FUGR/F, DDLS/DF, TABL/DS. Defaults to CLAS/OC. | |
| maxDiffChars | No | Cut the diff off after this many characters, keeping the summary. Default 40000. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, so the safety profile is already covered. The description adds valuable behavioral detail beyond that: the default behavior when neither side is given, the meaning of 'active' and 'inactive' (what the system executes vs the working version), and the diff anchoring rule that avoids treating an inserted method as two rewritten methods. This goes well beyond a simple 'compares versions' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but every sentence carries unique information: purpose, side specifiers, defaults and a special case, and diff anchoring behavior. It is front-loaded with the core purpose and then layers on usage detail. No filler or repetition; the structure flows logically from what to how.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters and no output schema, the description covers the essential operational context: what the tool does, how to specify sides, defaults, and diff quality. It does not detail the output format beyond 'unified diff', but that is a well-known standard. The standard ADT addressing parameters (objectUrl, objectName, objectType) are self-explanatory from the schema. The description is sufficient for an agent to call it correctly without missing critical information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter descriptions already list the allowed forms for 'from' and 'to'. The tool description enriches these by explaining the semantics of each side specifier: 'active' means what the system executes, 'inactive' is the working version, and 'latest' is the newest in history. It also clarifies the defaults for both parameters (newest and second newest). This adds meaning beyond the schema's terse enum-like lists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb+resource: 'What changed between two versions of one object, as a unified diff.' It explicitly names the operation (compare) and the resource (object), and distinguishes itself from sibling tools like 'revisions' (which lists versions) by focusing on the diff. The specific side-naming forms (revision, transport request, active, inactive, latest) make its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains several concrete use scenarios: comparing the two newest versions to answer 'what did the last change do', and comparing 'active' against 'inactive' to see an unactivated edit. It gives clear context for when to invoke the tool, though it does not explicitly name alternative tools or state when not to use it. The guidance is implicit in the scenarios but not exclusionary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createAndWriteA
Create an object and put its source in it, in one call: validate the name, create, lock, write the source, unlock, activate with verification. Creating and writing are separate calls in ADT, and an object created without source is an empty shell that fails activation - this keeps the two halves together. Report includes (PROG/I) are created the way createInclude does it, so they work here too; pass mainProgram. Nothing is rolled back on failure: the answer says which step stopped it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Object name, e.g. ZCL_APP_FOO. | |
| dryRun | No | Validate the name and report the URLs that would be used, creating nothing. | |
| source | Yes | The complete source of the object. For a class this is the whole CLASS ... ENDCLASS pair, definition and implementation. | |
| objtype | Yes | ADT type: CLAS/OC, INTF/OI, PROG/P, PROG/I, FUGR/F, FUGR/FF or FUGR/I. | |
| activate | No | Activate at the end (default true). | |
| language | No | Language of the description, and the master language of the object. Defaults to the logon language - the underlying library would use EN, which files the texts under a language the developer may never read. | |
| transport | No | Transport request number - the request itself, not a developer task. Not needed in $TMP. | |
| description | Yes | Short description. | |
| mainProgram | No | For PROG/I: the program the include belongs to. Required for an include, ignored otherwise. | |
| packageName | Yes | Development package. $TMP needs no transport. | |
| responsible | No | Responsible user; defaults to the logon user. | |
| functionGroup | No | For FUGR/FF and FUGR/I: the function group holding the object. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations by disclosing the internal sequence (validate, create, lock, write, unlock, activate with verification), the non-rollback behavior ('Nothing is rolled back on failure'), and the empty-shell consequence of creating without source. It also clarifies language default behavior, which is important for object creation. Annotations only indicate not read-only and not destructive, so the description adds substantial behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences that are dense with information: the main purpose is front-loaded, followed by the reason for combining steps, a special case, and failure behavior. No wasted words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (12 params, 5 required) and no output schema, the description covers the process, failure handling, and key parameter interactions (mainProgram, language, transport). It does not describe the success response format, but it does say the answer indicates the failing step on failure. For a complex tool, this is fairly complete, though the exact response structure remains undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters have descriptions. The tool description adds context beyond the schema: it explains mainProgram's role for PROG/I, the language default logic, and that transport is not needed in $TMP. This enhances understanding of how parameters interact, though the schema already carries the basic definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create an object and put its source in it, in one call' and outlines the steps (validate, create, lock, write, unlock, activate). It distinguishes from siblings by noting that 'Creating and writing are separate calls in ADT' and that this combines them, differentiating it from createObject, setObjectSource, and similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the tool is for creating an object with source in one step, and mentions when to use it (e.g., for PROG/I with mainProgram) and the failure behavior. However, it doesn't explicitly name alternatives like createObject + setObjectSource as the alternative for separate calls, so while usage context is clear, exclusions are only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createAtcRunA
Starts an ATC run over one object. The first parameter has to be a WORKLIST ID, not a check variant name, whatever it is called here: the backend answers 500 for a variant name. Get the id from atcCheckVariant, or use atcCheck which does the whole sequence.
| Name | Required | Description | Default |
|---|---|---|---|
| mainUrl | Yes | The main URL for the ATC run. | |
| variant | Yes | Worklist id, as atcCheckVariant returns it - NOT the check variant name. | |
| maxResults | No | The maximum number of results to retrieve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as non-read-only and non-destructive, and the description adds useful behavioral context by warning about the 500 error for a variant name. It could go further into side effects or what starting the run entails, but with annotations present the bar is lower and this description clears it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with the essential caveat front-loaded and no real filler. The 'whatever your are still calling it' wording is slightly informal and 'first parameter' could be tighter, but the structure is clear and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no output schema, it covers the key workflow: use atcCheckVariant to get the worklist id, call this tool, or switch to the atcCheck sequence. It leaves mainUrl and maxResults semantics to the schema and does not fully describe the result of launching the run, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is already adequate. The description reinforces the critical variant semantics, tells the agent to get the id from atcCheckVariant, and rejects the variant-name alternative; it does not need to add much for mainUrl or maxResults given the schema already describes them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Starts an ATC run' over one object) and differentiates it from nearby siblings it mentions: atcCheckVariant produces the id and atcCheck does the whole sequence. An agent can tell this tool is the single-step launcher versus the alternatives without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It is explicitly stated that the first parameter must be a worklist id, not a check variant name, and it even names the failure mode: the backend answers 500 for a variant name. It also provides concrete routing rules: get the id from atcCheckVariant, or use atcCheck when the whole sequence is wanted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createDataElementA
Create a DDIC data element and give it its definition, in one call: validate, create, lock, write the type and the four field labels, unlock, activate. The type is either a domain or a built-in ABAP type, not both. createObject alone leaves an element with no type, which cannot be activated. Nothing is rolled back if a step fails - the answer reports each step.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Data element name, e.g. ZAPP_STATUS. | |
| label | No | Fills all four field labels at once, each cut to the length SAP allows (10/20/40/55); the answer says which were cut. | |
| domain | No | Domain the element takes its type from. Alternative to dataType. | |
| dryRun | No | Validate the name and show what would be written, creating nothing. | |
| length | No | Length, for a built-in type. | |
| activate | No | Activate at the end (default true). | |
| dataType | No | Built-in ABAP type, e.g. CHAR, NUMC, DEC. Alternative to domain. | |
| decimals | No | Decimal places, for a built-in type. | |
| language | No | Language the labels are stored in, and the master language of the object. Defaults to the logon language - not EN, which is what the underlying library would use and which makes the labels invisible to a developer logged on in another language. | |
| longLabel | No | Long label, up to 40 characters. | |
| transport | No | Transport request number - the request itself, not a developer task. Not needed in $TMP. | |
| searchHelp | No | Search help name. | |
| shortLabel | No | Short label, up to 10 characters. | |
| description | Yes | Short description. | |
| mediumLabel | No | Medium label, up to 20 characters. | |
| packageName | Yes | Development package. $TMP needs no transport. | |
| responsible | No | Responsible user; defaults to the logon user. | |
| headingLabel | No | Heading, up to 55 characters. | |
| changeDocument | No | Log changes in change documents. | |
| setGetParameter | No | SET/GET parameter id. | |
| searchHelpParameter | No | Search help parameter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=false, so the description carries the full burden. It discloses meaningful behavioral traits: nothing is rolled back if a step fails, the answer reports each step, labels are cut to SAP's per-label length limits, and the language defaults to the logon language rather than EN (which would hide labels from developers in other languages). This is rich context well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and pipeline; the most important behavioral caveats (no rollback, createObject alternative) come early. It is moderately long but every sentence carries information, and none of it repeats the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 21-parameter creation tool with no output schema, the description covers the workflow, the type exclusivity rule, rollback behavior, label truncation, and the language default. The schema itself is rich at 100% coverage, so the description need not repeat parameter definitions. Slightly more detail on the return/report structure would push it higher, but it is substantially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents every parameter individually. The description adds workflow-level meaning (the domain/dataType mutual exclusivity, the label-filling behavior) but does not add per-parameter detail 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a DDIC data element') and enumerates the full pipeline it performs (validate, create, lock, write type and four labels, unlock, activate). It explicitly distinguishes itself from the sibling createObject by noting that createObject leaves an element with no type that cannot be activated, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative (createObject) and the exact condition that selects it — createDataElement gives the type and definition in one call, createObject leaves the element typeless. Also states that type is either a domain or a built-in ABAP type, not both, which routes correct parameter choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createDomainA
Create a DDIC domain and give it its definition, in one call: validate the name, create the object, lock it, write the type and output format (and value table or fixed values), unlock, activate. createObject alone leaves a domain with no definition, which cannot be activated. Nothing is rolled back if a step fails - the answer reports each step, and a domain that was created but not written is still there to correct or delete.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Domain name, e.g. ZAPP_STATUS. | |
| style | No | Output style. | |
| dryRun | No | Validate the name and show the document that would be written, creating nothing. | |
| length | Yes | Field length. | |
| activate | No | Activate at the end (default true). | |
| datatype | Yes | DDIC data type, e.g. CHAR, NUMC, DEC, DATS. | |
| decimals | No | Decimal places (default 0). | |
| language | No | Language the texts are stored in, and the master language of the object. Defaults to the logon language - not EN, which is what the underlying library would use and which makes the texts invisible to a developer logged on in another language. | |
| fixValues | No | Fixed values: [{low, high, text}]. | |
| lowercase | No | Lower case allowed. | |
| transport | No | Transport request number - the request itself, not a developer task. Not needed in $TMP. | |
| ampmFormat | No | AM/PM time format. | |
| signExists | No | Value can be negative. | |
| valueTable | No | Value table for the check. | |
| description | Yes | Short description. | |
| packageName | Yes | Development package. $TMP needs no transport. | |
| responsible | No | Responsible user; defaults to the logon user. | |
| outputLength | No | Output length; defaults to the field length. | |
| conversionExit | No | Conversion exit, e.g. ALPHA. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the minimal annotations (readOnlyHint=false, destructiveHint=false), the description discloses the critical non-atomicity: 'Nothing is rolled back if a step fails - the answer reports each step, and a domain that was created but not written is still there to correct or delete.' This partial-failure behavior is exactly the kind of context an agent needs and is not derivable from the schema. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler. Purpose is front-loaded, differentiation comes second, and failure behavior is last. Each sentence earns its place. It is slightly dense but appropriate for the complexity of a 19-parameter mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 19 parameters, minimal annotations, and no output schema, the description carries a heavy burden. It covers the pipeline, the createObject pitfall, and the partial-failure/return-reporting behavior ('the answer reports each step'). It could mention transport handling or when to use setDomainProperties for modifications, but for a creation tool the coverage is strong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 19 parameters are already documented in the schema. The description adds marginal value by mapping the pipeline to parameter groups ('write the type and output format (and value table or fixed values)' → datatype, outputLength, valueTable, fixValues), but this is redundant with the schema's per-parameter descriptions. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'Create a DDIC domain and give it its definition, in one call.' It enumerates the exact pipeline (validate, create, lock, write, unlock, activate) and explicitly differentiates from the sibling createObject, which 'alone leaves a domain with no definition, which cannot be activated.' An agent can clearly tell what this does and how it differs from nearby tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when NOT to use the sibling createObject and implies this tool is the correct choice for a fully-defined domain. It does not enumerate every alternative (e.g., setDomainProperties for editing an existing domain, getDomainProperties for reading), but the primary routing decision is handled clearly. Strong guidance with minor gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createFunctionModuleA
Create a function module in an existing group and give it its signature and body in one call: create, write, activate, verify. The signature is passed as data and the ABAP interface is built here - which is how it is set at all, since ADT keeps the interface in the source text. The group has to exist (create one with createAndWrite for FUGR/F) and a group outside $TMP needs a transport request.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the new module, e.g. Z_APP_DO_THING. | |
| dryRun | No | Return the source that would be written, without creating anything. | |
| tables | No | Tables parameters as data: [{name, type, byValue?, optional?, default?}]. byValue writes VALUE(NAME); the default is by reference, which is what ADT writes for a bare name. | |
| changing | No | Changing parameters as data: [{name, type, byValue?, optional?, default?}]. byValue writes VALUE(NAME); the default is by reference, which is what ADT writes for a bare name. | |
| exporting | No | Exporting parameters as data: [{name, type, byValue?, optional?, default?}]. byValue writes VALUE(NAME); the default is by reference, which is what ADT writes for a bare name. | |
| importing | No | Importing parameters as data: [{name, type, byValue?, optional?, default?}]. byValue writes VALUE(NAME); the default is by reference, which is what ADT writes for a bare name. | |
| transport | No | Transport request - the REQUEST, not a task inside it. Not needed for a group in $TMP. | |
| exceptions | No | Classic exceptions, e.g. ["NOT_FOUND","NO_AUTHORITY"]. | |
| description | Yes | Short text for the module. | |
| functionGroup | Yes | The group it goes into. Must exist. | |
| implementation | No | Body lines, without FUNCTION/ENDFUNCTION. Omit and a TODO comment is left in their place. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=false and destructiveHint=false, annotations indicate a write operation but don't detail side effects. The description compensates by stating it creates, writes, activates, and verifies, and explains why the interface is built from data (ADT keeps it in source text). It also discloses the transport request requirement. This adds meaningful context beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero waste. The primary purpose is front-loaded, followed by the two critical constraints (group existence and transport requirement). Every clause earns its place, and it's concise for a tool with 11 parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write operation with complex parameters, the description covers the essential workflow (create/write/activate/verify) and prerequisites. The schema fully documents all parameters, and the description adds the mechanism and constraints. It doesn't describe return values, but there's no output schema, and the behavior is well covered. A complete guide for calling correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented. The description adds a high-level explanation that the signature is passed as data and the ABAP interface is built here, helping the agent understand how the parameter arrays map to the source. While it doesn't enumerate parameters, it adds conceptual value beyond the schema, justifying a score above the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a function module in an existing group, combining signature and body in one call (create, write, activate, verify). It differentiates from sibling createAndWrite by explicitly referencing it for group creation, so an agent can distinguish the two operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear prerequisites: the group must exist, and a group outside $TMP requires a transport request. It names createAndWrite as the alternative for creating groups, giving context for when to use this tool vs. another. However, it doesn't list other alternatives (e.g., getFunctionModule) or explicit 'when not to use' conditions, so it falls slightly 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.
createIncludeA
Create a report include (PROG/I). Use this instead of createObject for includes: abap-adt-api builds the creation body without the reference to the main program, so the backend rejects it (400/500) whatever parameters are passed. This posts the include document together with its context reference.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Include name, e.g. ZR_APP_FOO_F01. | |
| transport | No | Transport request. | |
| description | Yes | Short description. | |
| mainProgram | Yes | Main program the include belongs to, e.g. ZR_APP_FOO. This is the reference createObject fails to send. | |
| packageName | Yes | Development package, e.g. ZAPP_BASE. | |
| responsible | No | Responsible user; defaults to the logon user. | |
| masterLanguage | No | Master language; defaults to the logon language, or EN. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=false, which is minimal. The description adds meaningful behavioral context: it explains the failure mode of the alternative (createObject), the backend rejection, and the fact that this tool posts the include document together with its context reference. It doesn't fully disclose response behavior or side effects, but it goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste. The core purpose is front-loaded, the alternative is named, and the technical reason is given in one clause. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with no output schema, the description covers the key context: what it creates, why it exists, and how it differs from the sibling. It doesn't describe the response format or error cases, but the annotations already indicate it's not read-only and not destructive, and the schema covers all parameters. The main gap is the lack of return-value information, but that's minor given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 7 parameters. The description adds context for mainProgram ('This is the reference createObject fails to send'), which is valuable, but it doesn't add meaning for the other parameters. Baseline 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create'), a specific resource ('report include (PROG/I)'), and explicitly distinguishes it from createObject. It also explains the underlying reason (abap-adt-api builds the creation body without the main program reference, causing backend rejection). This is a clear, specific purpose that an agent can act on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this instead of createObject for includes' and explains why createObject fails (400/500 regardless of parameters). This is a direct when-to-use and when-not-to-use instruction with a named alternative. It also notes that the tool posts the include document with its context reference, which clarifies the correct usage path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createMessageClassA
Create a message class and fill in its messages in one call: validate the name, create the class, write the messages, read them back. No activation is involved. Nothing is rolled back - the answer says which step stopped and in what state the class was left. Outside $TMP a transport request is required.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the new message class, e.g. ZDEV_MCP_MSG. | |
| dryRun | No | Only validate the name and stop. | |
| language | No | Master language of the class. Defaults to the logon language - creating it in EN files every text where nobody will look for it. | |
| messages | No | Messages to write straight away: [{number, text, selfExplanatory}]. Optional - an empty class is valid. | |
| transport | No | Transport request number - the request itself, not a developer task. | |
| description | Yes | Description of the class. | |
| packageName | Yes | Package. $TMP for a local class; anything else needs a transport request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It adds meaningful behavioral detail beyond the annotations: no activation, no rollback, partial state on failure, and transport requirements. The description explains what happens when a step fails, which is critical for an agent to reason about consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense, purposeful sentences with no filler. The action is front-loaded, and every sentence adds operational or behavioral value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, no-output-schema tool, it explains the key behavioral risks, the execution sequence, and the transport constraint. It could be slightly more explicit about required-parameter relationships, but the schema fills most gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds a little semantic glue, such as 'validate the name' and 'write the messages', but most parameter meaning is already supplied in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'create a message class and fill in its messages in one call'. It clearly distinguishes this from single-step create or message-writing tools by emphasizing the combined workflow and the 'no activation' behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives practical context such as transport requirements and the non-transactional execution, which helps an agent decide where this tool fits. However, it does not explicitly state when to prefer this over related siblings like setMessages or createObject.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createObjectB
Create a new ABAP object. Report includes (PROG/I) are the one type this cannot create - it refuses them and points at createInclude.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| objtype | Yes | ||
| transport | No | ||
| parentName | Yes | ||
| parentPath | Yes | ||
| description | Yes | ||
| responsible | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, destructiveHint=false), so the description carries more weight. It reveals an important behavior: it refuses report include objects and points to createInclude, which is beyond what annotations provide. However, it doesn't disclose other behavioral traits like authorization requirements, error handling, or side effects, so it only moderately covers behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy. The core action is front-loaded, and the key exclusion is communicated clearly with a direct pointer to the alternative tool. Every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex with 7 parameters (5 required) and no output schema, yet the description only notes the include exception. It does not explain what ABAP object types are supported by applicable parameter values, parent/name semantics, or typical object creation workflow. This is seriously under-specified for an action with so many input fields and a broad domain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the input schema has no descriptions for any of the 7 parameters, and the description itself also gives no meaning for objtype, parentName, transport, parentPath, description, or responsible. The agent has nothing to infer the required format, constraints, or relationships between parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action 'Create a new ABAP object' and explicitly calls out the one type it cannot create, thereby distinguishing itself from sibling tools like createInclude. This is a clear verb+resource statement with practical evidence of differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides an explicit when-not and an alternative: report includes (PROG/I) are refused, and createInclude is pointed to. However, it doesn't give any broader guidance about when to prefer this tool over other create siblings such as createDomain or createStructure, so it's not fully complete guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createStructureA
Create a structure (TABL/DS) and give it its fields in one call: validate the name, create, write the definition, syntax check, activate, verify. Fields are passed as data - the DDL is built here, including the opening keyword, which differs between releases and is taken from the object the backend just created. A quantity or currency field needs its unit annotation or the activation refuses it: pass unitField or currencyField and the reference is built and qualified for you. A transparent table (TABL/DT) cannot be created over ADT at all on a classic ERP system - see the note in getStructureSource. Nothing is rolled back: the answer says which step stopped and in what state the object was left.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the new structure, e.g. ZDEV_MCP_STRUC. | |
| dryRun | No | Validate the name and show the DDL that would be written, without creating anything. | |
| fields | Yes | The fields, in order: [{name, type, keyField, notNull, annotations}]. type is a data element (WERKS_D) or a built-in type (abap.char(10)). | |
| activate | No | Set false to leave the structure inactive. | |
| language | No | Master language. Defaults to the logon language - creating in EN files the description where nobody will look for it. | |
| transport | No | Transport request number - the request itself, not a developer task. | |
| description | Yes | Description; becomes @EndUserText.label. | |
| packageName | Yes | Package. $TMP for a local object; anything else needs a transport request. | |
| enhancementCategory | No | Enhancement category, default NOT_EXTENSIBLE. Pass e.g. EXTENSIBLE_CHARACTER_NUMERIC. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses several critical behaviors beyond annotations: it is non-atomic ('Nothing is rolled back'), it reports the step where failure occurred and the resulting state, and it constructs the DDL internally (including opening keyword differences). It also explains the activation requirement for unit/currency fields and the platform restriction for TABL/DT. These are substantial behavioral details not captured in the annotations (which only indicate non-read-only and non-destructive - actually destructiveHint false is a bit ambiguous, but the description overrides with clear non-rollback).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but every sentence adds essential information. It front-loads the primary purpose and step sequence, then covers critical requirements (units, TABL/DT), and ends with a crucial caveat about rollback. There is no fluff; each sentence serves a distinct purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully covers the lifecycle of the creation: what happens, what can go wrong, what the response includes (step stopped and state), and how to avoid pitfalls (dryRun, units, language). With 9 parameters, the description provides enough guidance to call correctly, even without an output schema. The note about getStructureSource covers future inspection, and the warning about language helps avoid misuse.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents parameters well. However, the description adds significant semantic value beyond the schema: it explains the purpose of fields (passed as data to build the DDL), clarifies the unitField/currencyField requirement for activation, and warns about the interaction between packageName and transport. It also explains the opening keyword difference across releases, which is not in the schema. Thus, the description substantially enhances understanding of the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that it creates a structure (TABL/DS) and gives it fields in one call, listing the steps (validate, create, write, syntax check, activate, verify). This differentiates it from siblings like createDataElement, createDomain, and createObject, which create different object types. The specific verb 'create' and the resource 'structure' are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool: to create a new structure with fields in one callvon ABAP. It contrasts with getStructureSource for details on transparent tables over ADT, and it mentions the alternative of using dryRun for validation without creation. It also notes prerequisites like passing unitField/currencyField for quantity/currency fields and clarifies that the DDL is built here, implying that this tool is the primary creation path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createTestIncludeA
Create the test include of a class - the place ABAP Unit tests live, which a new class does not have. It writes an empty include; runTests then runs what is put in it.
| Name | Required | Description | Default |
|---|---|---|---|
| clas | Yes | The class name. | |
| transport | No | The transport. | |
| lockHandle | No | Lock handle for the class; omit to use the one this server recorded for it (see listLocks). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, meaning the tool is a non-destructive write operation. The description adds meaningful behavior beyond this: it writes an empty include and clarifies that runTests executes its contents. This provides insight into the tool's effect and expected usage, complementing the annotation profile without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundancy. The primary purpose is front-loaded ('Create the test include of a class'), and the second sentence adds essential behavioral detail about the empty include and the runTests relationship. Every word earns its place, making it exceptionally concise and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple creation tool with no output schema, the description covers the core behavior: creating an empty test include and its subsequent use with runTests. It does not mention prerequisites like the class existing or locking, but those are implied or covered by the schema parameters. The description is complete enough for an agent to understand the tool's role, though it could be more explicit about side effects or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters are documented in the input schema (100% coverage). The description does not add any parameter-specific information, but the schema already provides clear explanations for 'clas', 'transport', and 'lockHandle'. Since the schema fully covers parameter semantics, the description does not need to repeat them, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 the test include of a class'. It clearly differentiates this from a generic include by specifying 'test include' and explains why it is needed ('which a new class does not have'). However, it does not explicitly distinguish from sibling tools like createInclude, relying on the 'test' qualifier rather than naming alternatives. Thus, it is clear but lacks direct sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: to create a test include for a class that lacks one. It also mentions 'runTests' as the follow-up action, giving context. However, it provides no explicit guidance on when not to use it or alternatives such as createInclude for other include types. The usage context is implied but not formally contrasted with other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createTransportA
Create a workbench request. It becomes yours and stays open until it is released, so create one per piece of work rather than per object, and reuse the number for every write that belongs together. Ask first if the user has a request in mind - an unwanted request is visible to the whole team and has to be deleted by hand.
| Name | Required | Description | Default |
|---|---|---|---|
| DEVCLASS | Yes | Development class | |
| REQUEST_TEXT | Yes | Description of the transport request | |
| objSourceUrl | Yes | URL of the object source | |
| transportLayer | No | Transport layer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only say readOnlyHint=false and destructiveHint=false, so the description carries the behavioral disclosure burden. It explains ownership, open persistence until release, team visibility, and manual deletion, which are exactly the side effects an agent must understand before calling this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the primary action, and every sentence contributes either lifecycle, usage, or cautionary guidance. There is no filler or irrelevant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and absence of an output schema, the description covers purpose, lifecycle, and usage well. The only notable gap is that it signals the request number can be reused without explicitly stating what the tool returns, which would make the contract even clearer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already documented at a basic level. The description adds some workflow context about reusing the resulting request number, but it does not add deeper meaning about how the fields relate or their expected formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-resource pair: 'Create a workbench request' and adds lifecycle details ('becomes yours and stays open until it is released'). It is clear enough to distinguish from most siblings, though it does not explicitly contrast with createTransportsConfig.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: create one per piece of work, reuse the number for related writes, and ask the user first if a request already exists. It also warns about the consequence of unwanted requests, which strongly helps an agent decide correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createTransportsConfigA
Create a transport configuration for the organizer. Shared setup; most work needs only createTransport.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The create nature directly matches annotations (not read-only, not destructive), so no contradiction. However, beyond 'shared setup', the description does not disclose side effects, overwrite/idempotency behavior, or prerequisites; the behavioral burden is mostly carried by the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no filler; the main action is front-loaded and the alternative is delivered in the second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless create operation with no output schema, the description covers what is created, for whom, and when the simpler alternative is preferred. It could still say whether the operation is idempotent or what the success response is, but those are minor for such a simple invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are 0 parameters demonstrated by the schema, so the baseline is 4; no parameter-specific description is required. The description adds no param detail, which is fine because the schema already provides full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Create a transport configuration') and narrows scope to 'the organizer' / 'shared setup'. It also differentiates from the sibling `createTransport` by noting most work needs only that tool, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states this is for 'shared setup' and adds 'most work needs only createTransport', giving both a when-to-use signal and a named alternative. This is sufficient for tool selection even though it does not enumerate every transport-related sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddicElementARead-only
A dictionary element as the DDIC sees it: a data element, a domain or a type, with its properties. For a table or structure with its fields use getStructureSource.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | The path to the DDIC element. | |
| getExtensionViews | No | Whether to get extension views. | |
| getSecondaryObjects | No | Whether to get secondary objects. | |
| getTargetForAssociation | No | Whether to get the target for association. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds scope context (which element types it covers) but does not detail return format, pagination, or error behavior. This is acceptable given the read-only annotation, but it does not go beyond the basics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The core purpose is front-loaded, and the alternative tool is mentioned concisely. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 fully documented parameters, the description is complete enough. It clarifies scope and points to the right alternative. It could mention return structure, but without an output schema it is not strictly required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 well documented. The description adds no parameter-specific detail beyond what the schema provides, which is acceptable per the baseline of 3 when schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a dictionary element (data element, domain, or type) with its properties. It explicitly names the types covered and distinguishes from getStructureSource for tables/structures, so an agent can tell them apart without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a clear alternative for a different case (tables/structures should use getStructureSource), which implicitly tells the agent when to use this tool. However, it does not enumerate all other scenarios or exclusions, but the guidance is sufficient for common use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ddicRepositoryAccessBRead-only
Read dictionary metadata through the DDIC repository access endpoint - types, fields and domains as the dictionary itself sees them.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | The path to the DDIC element. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, and the description is consistent with them. It adds a small behavioral nuance by saying the metadata is exposed 'as the dictionary itself sees them,' but it does not disclose response shape, path semantics, or any special behavior beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no filler. It front-loads the action and resource, then adds a clarifying qualifier about the dictionary's own perspective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with read-only annotations, the description is mostly adequate, but it leaves the expected path format and the distinction from sibling DDIC tools unstated. The lack of an output schema makes the vague return scope slightly more noticeable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage: the single 'path' parameter is described as 'The path to the DDIC element.' The description adds only a slight clarification that the element is dictionary metadata, so it does not meaningfully go beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and resource ('dictionary metadata' via the DDIC repository access endpoint), and names the relevant content: types, fields, and domains. It is clear on its face, though it does not explicitly contrast with sibling tools like ddicElement or getDomainProperties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 instead of the many related DDIC read tools in the sibling list. The description implies a read-only metadata use case but does not state conditions, exclusions, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debuggerAttachA
Attach to the process that has stopped at a breakpoint, which is what debuggerListen reported. Only after this do the stack and the variables mean anything; the attachment holds the stopped process, so let it go (debuggerStep with terminate, or delete the listener) rather than leaving a work process frozen.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | The user. | |
| debuggeeId | Yes | The ID of the debuggee. | |
| debuggingMode | Yes | The debugging mode. | |
| dynproDebugging | No | Whether to enable Dynpro debugging. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, it discloses that attachment holds the process and that abandoning it can leave a work process frozen. It gives concrete cleanup paths (debuggerStep terminate or listener deletion).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, direct start with the action and immediate caveat. No filler; the cleanup warning is necessary context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and simple parameters, the description supplies the missing lifecycle context: attach after listen, read state after attach, and release via step/terminate or listener delete. Enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers all 4 parameters (100%), so the baseline is 3. Description doesn't add parameter-specific detail beyond the schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description names a specific verb, attach, and resource, the process stopped at a breakpoint reported by debuggerListen. It distinguishes itself from sibling debugger tools by explicitly referencing the listener and later stack/variable reads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells exactly when to use: after debuggerListen, before stack/variables are meaningful. It also says when serving as cleanup alternative: use debuggerStep with terminate or delete the listener.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debuggerChildVariablesBRead-only
Open one variable that has parts: the fields of a structure, the rows of an internal table, what a reference points at. Takes the variable id from debuggerVariables.
| Name | Required | Description | Default |
|---|---|---|---|
| parent | No | The parent variable name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds that it opens composite variables, but does not explain behavior like what happens if the variable has no parts, or whether it returns the parts or just expands them. Since annotations handle the main behavioral trait, the description provides modest additional context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, concise and front-loaded with the main purpose. It wastes no words and is easy to scan. It could be slightly more structured (e.g., bullet points) but is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple, but the description lacks details on the return value or output format (no output schema). The parameter ambiguity (array vs single id) and lack of explanation about what 'parts' means or how the tool behaves for different variable types leave an agent with insufficient information to call it reliably. Given the debugger context, more context is expected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes the parameter 'parent' as an array of 'The parent variable name', while the description says 'Takes the variable id from debuggerVariables' – a mismatch in terminology (name vs id) and no clarity on how the array is used. With 100% schema coverage, the baseline is 3, but the description introduces confusion about the parameter's meaning, so it actually detracts from clarity. The array type is also unexplained, suggesting possible multiple parents but not elaborated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool opens a variable that has components (structure fields, internal table rows, reference targets). This is a specific verb and resource. However, it does not explicitly distinguish itself from the sibling debuggerVariables, which might also list variables, so it does not fully differentiate from likely alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 obtaining a variable id from debuggerVariables, giving a prerequisite context. However, it does not explicitly say when to use this tool versus other debugger tools (e.g., debuggerStep) or when not to use it. The guidance is 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.
debuggerDeleteBreakpointsADestructive
Remove breakpoints that were set earlier - the ids come from debuggerSetBreakpoints. Worth doing even after a failed session: a forgotten breakpoint stops a productive program the next time it runs.
| Name | Required | Description | Default |
|---|---|---|---|
| ideId | Yes | The IDE ID. | |
| scope | No | The debugger scope. | |
| breakpoint | Yes | The breakpoint to delete. | |
| terminalId | Yes | The terminal ID. | |
| requestUser | Yes | The requesting user. | |
| debuggingMode | Yes | The debugging mode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive, and the description adds meaningful context by explaining the real-world consequence of not cleaning up breakpoints. It also links this tool to the lifecycle of debuggerSetBreakpoints, which is useful behavioral information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core action is stated first, then the source of ids, then a practical motivational note. Everything earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive cleanup operation with no output schema, the description explains what it does and why it matters. It does not specify return values or exact breakpoint object shape, but given the simple deletion action and the cross-reference to the setter, this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the generic parameter descriptions already exist. The main added value is clarifying that breakpoint ids come from debuggerSetBreakpoints, which helps understand the 'breakpoint' parameter, but no additional detail is given for the other parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Remove breakpoints') and clearly states where the ids come from ('debuggerSetBreakpoints'). This distinguishes it from related sibling tools like debuggerSetBreakpoints and debuggerDeleteListener.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear practical context: cleanup is worthwhile even after a failed session to avoid forgotten breakpoints interfering later. It does not explicitly list when-not-to-use cases or alternatives, but the use case is precise enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debuggerDeleteListenerADestructive
Stop listening for breakpoints and free the session. Do it when a debug session is over or abandoned - a listener left behind blocks the next one for the same user.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | The user. | |
| ideId | Yes | The IDE ID. | |
| terminalId | Yes | The terminal ID. | |
| debuggingMode | Yes | The debugging mode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a destructive operation (destructiveHint=true), and the description adds concrete behavioral context: it frees the session and warns that a stale listener can block future sessions for the same user. This goes beyond the structured annotations and helps the agent understand side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences with no filler. The action is front-loaded, and the timing/consequence are stated in the second sentence. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple cleanup operation with four parameters and no output schema, the description gives enough context: what the tool does and when it is needed. Missing return-value or error behavior is minor for this kind of action, and the annotations already cover the destructive profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 at a basic level. The description adds no per-parameter detail beyond the schema, so the baseline of 3 applies here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Stop listening for breakpoints and free the session') and clearly ties it to the tool's resource and lifecycle role. It also distinguishes this tool from sibling debugger tools like debuggerListen and debuggerDeleteBreakpoints by focusing on session cleanup rather than breakpoint manipulation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use the tool ('when a debug session is over or abandoned') and gives the consequence of not using it ('a listener left behind blocks the next one for the same user'). It does not explicitly name sibling alternatives, but the usage context is clear enough for an agent to decide correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debuggerGoToStackA
Move the debugger view to another frame of the stack, so that debuggerVariables shows what is visible THERE. It changes the view, not the position of the program - the process still stands where it stopped.
| Name | Required | Description | Default |
|---|---|---|---|
| urlOrPosition | Yes | The URL or position of the stack entry. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description clarifies a key behavioral nuance: this changes only the viewed frame, not the suspension point. This prevents a common misconception and adds real value about the tool's effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, tightly written. The primary purpose is front-loadedeb8 and the clarifying contrast ('changes the view, not the position') is concise and valuable. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one well-documented parameter and no output schema, the description fully covers the behavioral essentials. It explains the purpose, the effect on debuggerVariables, and what it does not do, which is sufficient for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the single parameter with 100% coverage, describing it as 'The URL or position of the stack entry.' The description adds that it refers to a stack frame but does not provide additional format or resolution details. With full schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Move') and resource ('the debugger view to another frame of the stack') and clearly connects it to the observable effect on debuggerVariables. It also distinguishes the operation from changing the program position, which separates it from debuggerStep and similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use it: when a user wants debuggerVariables to reflect another stack frame. It also implicitly warns against expecting the program position to change impossible in a debugger context. However, it does not explicitly name sibling alternatives or state when not to use it, 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.
debuggerListenA
Start listening for a breakpoint and WAIT until something hits one - the call does not return until a process stops, or the wait times out. That is the shape of the whole debugger here: set breakpoints, start listening, then run the program from somewhere else (SAPGUI, a job, a service call), and this returns when it stops. Nothing in this server can trigger the program for you, so a listener with nothing to trigger it just waits. It occupies the session; delete the listener when you are done.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | The user. | |
| ideId | Yes | The IDE ID. | |
| terminalId | Yes | The terminal ID. | |
| checkConflict | No | Whether to check for conflicts. | |
| debuggingMode | Yes | The debugging mode. | |
| isNotifiedOnConflict | No | Whether to be notified on conflict. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false, which is minimal. The description adds significant behavioral context: the call blocks/waits, it occupies the session, and the listener should be deleted when done. It does not mention timeout specifics or what happens on timeout, but the core blocking behavior is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that front-loads the most important behavior (blocking wait) and then explains the workflow and caveats. It is slightly longer than necessary but every sentence adds value: the blocking nature, the workflow, the external-trigger limitation, and the session-occupancy warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a blocking listener tool with no output schema, the description covers the essential context: what it does, when it returns, how it fits into the debugger workflow, and the need to delete the listener. It does not specify timeout duration or error behavior, but those are minor gaps given the tool's simplicity and the schema's full parameter coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. The description does not add parameter-level detail beyond the schema, but it does explain the overall context (debuggingMode, terminalId, ideId, user are required). Baseline 3 is appropriate when the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Start listening') and resource ('breakpoint'), and clearly explains the blocking behavior: the call does not return until a process stops or the wait times out. It distinguishes itself from sibling tools like debuggerSetBreakpoints and debuggerAttach by describing the wait-and-return shape.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool: set breakpoints, start listening, then run the program from somewhere else (SAPGUI, a job, a service call). It also states what it is not for: 'Nothing in this server can trigger the program for you, so a listener with nothing to trigger it just waits.' This is clear usage guidance with an implicit alternative (external trigger).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debuggerListenersARead-only
Which debug listeners exist for this user and terminal - who would catch a breakpoint right now. Read this before starting one: a second listener for the same user is refused, and an old one left behind is the usual reason a debug session cannot be started. checkConflict is off by default because the backend raises a short dump for it when no listener exists at all - turn it on only once you know one is there.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | The user. | |
| ideId | Yes | The IDE ID. | |
| terminalId | Yes | The terminal ID. | |
| checkConflict | No | Ask the backend whether this listener would conflict with another. Default false: on a system with no listener at all, the check itself answers 500 AdiFailed. | |
| debuggingMode | Yes | The debugging mode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description aligns with that. It goes further by disclosing the backend's behavior when checkConflict runs with no listeners (raises a dump) and warns that stale listeners can prevent debug sessions from starting. These are behavioral traits not visible in the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core purpose, then delivers the key usage and parameter caveats. Every clause earns its place, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 covers what it returns, when to use it, and the pitfalls to avoid. Nothing essential is missing; the agent knows exactly how to invoke it correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 five parameters. The description adds meaningful context beyond the schema, especially for checkConflict, explaining the default false and the dump risk. This elevates the score above the baseline 3, though it doesn't elaborate on the other parameters since they are self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool lists debug listeners for a given user and terminal, with a concrete question ('who would catch a breakpoint right now'). It clearly distinguishes the tool as a pre-check query rather than a mutation, setting it apart from sibling tools like debuggerListen or debuggerDeleteListener.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs 'Read this before starting one,' establishing the intended use case. It also gives precise guidance on the checkConflict parameter: it is off by default to avoid a backend dump, and should only be enabled when a listener is known to exist. This is actionable and unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debuggerSaveSettingsA
Change how the debugger behaves for this user: system debugging, update debugging, how much of a table it reads. They are user settings and stay until changed back.
| Name | Required | Description | Default |
|---|---|---|---|
| settings | Yes | The debugger settings. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-destructive operation. The description adds transparency by stating the settings are user-specific and persistent ('stay until changed back'), which clarifies the side-effect profile beyond the annotation hints. It doesn't contradict annotations and provides useful 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no filler. It front-loads the primary purpose (changing debugger behavior) and immediately follows with the scope ('for this user') and persistence trait. Every sentence contributes information, and it is appropriately sized for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one simple string parameter and no output schema, this is moderately complete. It conveys the purpose, scope, and persistence, but lacks detail on how to structure the settings string (format, allowed values, examples). An agent could struggle to construct a valid 'settings' value without further guidance. Given the simplicity, some missing format details are a notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'settings' has a generic schema description ('The debugger settings.'). The tool description adds some context by naming the configurable aspects (system debugging, update debugging, table read amount), which hints at the content, but it doesn't specify the expected format (e.g., JSON, key-value) or usage syntax. Since schema coverage is 100%, baseline is 3, and the description adds limited but non-trivial meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb 'Change' and a specific resource 'how the debugger behaves for this user', and enumerates specific aspects (system debugging, update debugging, table read amount). This distinguishes it from other debugger tools like debuggerSetVariableValue or debuggerSetBreakpoints, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it's for user-level persistent settings ('stay until changed back'). This implies when to use it (when adjusting persistent debugger behavior) and distinguishes from transient debugger operations. It doesn't explicitly mention alternatives, but the uniqueness of the tool within the sibling list makes it clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debuggerSetBreakpointsA
Set breakpoints on lines of a source, or on a statement, for the debug session that follows. They belong to the user and survive until deleted, so they will also stop a colleague running the same code with your user. Set them BEFORE debuggerListen; the ids that come back are what deletes them again.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | The user. | |
| ideId | Yes | The IDE ID. | |
| scope | No | The debugger scope. | |
| clientId | Yes | The client ID. | |
| terminalId | Yes | The terminal ID. | |
| breakpoints | Yes | An array of breakpoints. | |
| deactivated | No | Whether to deactivate the breakpoints. | |
| syncScupeUrl | No | The URL for scope synchronization. | |
| debuggingMode | Yes | The debugging mode. | |
| systemDebugging | No | Whether to enable system debugging. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate non-read-only and non-destructive, but the description adds crucial behavioral context: breakpoints persist and affect other users running the same code. This goes beyond annotations and is essential for safe usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no fluff: purpose first, then timing, then persistence. Every sentence adds value and the critical ordering constraint is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with no output schema, the description covers purpose, timing, and side effects. It lacks explicit return-value details, but these are less critical given the schema documentation and the described id-based deletion mechanism.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented. The description does not add parameter-specific details beyond schema, but it does hint at the breakpoints structure. Baseline 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: setting breakpoints on lines or statements for the upcoming debug session. It distinguishes itself from sibling tools like debuggerSetVariableValue and debuggerListen by focusing specifically on breakpoint creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit timing guidance ('Set them BEFORE debuggerListen') and explains the lifecycle (survive until deleted, ids are used for deletion). This tells the agent when to invoke and implies when not to (e.g., when deletion is intended).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debuggerSetVariableValueA
Change a variable in the stopped process, as the debugger lets you. The program then carries on with the new value, which is a way to reach a branch that the data would not otherwise reach - and a way to make a productive program do something it never would. Only for a session you are deliberately steering.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | The new value of the variable. | |
| variableName | Yes | The name of the variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false and destructiveHint=false, so the description carries most of the behavioral burden. It discloses that the new value affects subsequent program execution, can force a branch the data would not otherwise reach, and may make a program behave in unintended ways. This adds meaningful safety context beyond the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is direct and front-loaded, but the middle phrase 'as the debugger lets you' is filler, and the branch-reaching explanation is expressed twice. The warning is useful but could be condensed. It is not bloated, yet it is less efficient than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter mutation with no output schema, the description supplies the essential context: the process must be stopped, the value changes, and subsequent execution reflects the new value. The safety caveat is included. It could mention failure conditions or scope restrictions, but nothing critical is missing for basic correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the input schema already documents variableName and value. The description adds no extra parameter-level meaning such as type constraints, variable scope, or accepted value formats. The baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Change a variable in the stopped process.' This clearly distinguishes it from debugger reading tools like debuggerVariables and debuggerChildVariables, and from control tools like debuggerStep and debuggerSetBreakpoints. The mutation intent is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context: the variable is changed while the process is stopped, and the effect persists when execution continues. It also adds an explicit limitation, 'Only for a session you are deliberately steering,' which warns against casual use. It does not name alternatives, but the usage context is specific enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debuggerStackTraceARead-only
The call stack of the process stopped at a breakpoint: which programs and methods it came through, with the line each is on. Needs an attached session (debuggerAttach); use debuggerGoToStack to look at variables from a frame further up.
| Name | Required | Description | Default |
|---|---|---|---|
| semanticURIs | No | Whether to use semantic URIs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description confirms the read-only nature via 'call stack' and adds the prerequisite of an attached session. This is useful context beyond the readOnlyHint/destructiveHint annotations, aligning with them. However, it does not describe behavior on failure (e.g., no active breakpoint) or the return format, so it is only partially transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences with exact, front-loaded information. It covers purpose, prerequisite, and alternative without redundancy. No unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 (the call stack with programs, methods, and line numbers), the requirement (attached session), and the alternative for further inspection. For a simple read-only, single-parameter tool, this is nearly complete. Minor absence of output format details is offset by the intuitive nature of a stack trace.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter semanticURIs is fully documented in the schema (100% coverage), so the description need not add more. It does not mention the parameter, which is fine given schema coverage; 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb, resource, and context: the call stack of the process stopped at a breakpoint. It explicitly contrasts with debuggerGoToStack, distinguishing itself as the stack listing tool. The agent knows exactly what to expect and how it differs from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the required precondition (attached session/debuggerAttach) and names the alternative for inspecting variables (debuggerGoToStack). This gives explicit when-to-use and when-not-to-use guidance, exceeding the minimum threshold.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debuggerStepA
Step the stopped process: into, over, out, to a line, or terminate it. Each step answers with where it now stands, so the stack and the variables have to be read again. Terminating ends the debugged program - which is how a stopped work process is let go when the session is over.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The URL for step types "stepRunToLine" or "stepJumpToLine". | |
| steptype | Yes | The type of step to perform. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false and destructiveHint=false, so the description carries burden for behavioral traits. It discloses that each step returns the new position, that stack and variables become stale, and that termination ends the debugged program. This is valuable beyond annotations and explains the side effects. No contradiction with annotations; termination is a runtime operation, not a persistent data modification.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose. The second sentence efficiently explains the return behavior and termination. No redundant fluff; every phrase contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential operational context: it must be used on a stopped process, it can terminate, and it invalidates stack/variable reads. It does not detail error cases or preconditions like 'must be attached', but these are implied by the name and the debugger toolset. With no output schema, the description reasonably summarizes what the agent needs to know for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% but the schema descriptions are minimal ('type of step', 'URL for certain step types'). The tool description adds meaning by listing the possible step types (into, over, out, to a line, terminate) and clarifying that url is used for stepRunToLine/stepJumpToLine. This enriches the agent's understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('step') and resource ('stopped process'), and enumerates the action subtypes (into, over, out, to a line, terminate). This clearly distinguishes it from sibling debugger tools like debuggerStackTrace (reads stack) or debuggerVariables (reads variables). The purpose is unambiguous and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives context on when to use it: when the process is stopped and you need to advance execution. It also notes that after stepping, you must re-read stack and variables, implying a workflow. It does not explicitly name alternatives or state when not to use it, but the context among many debugger siblings makes it clear this is the stepping tool. Slight gap: no explicit 'use this instead of X'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debuggerVariablesARead-only
The variables visible in the current stack frame, with their values. Needs an attached session. A structure or a table comes back as a node to open with debuggerChildVariables rather than as its contents.
| Name | Required | Description | Default |
|---|---|---|---|
| parents | Yes | An array of parent variable names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the attached-session prerequisite and the node-expansion behavior for complex values, which is useful. It doesn't disclose what happens if no session is attached or whether the variable list is sorted, but the annotations lower the bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The core purpose is front-loaded, the prerequisite is stated, and the routing to debuggerChildVariables is included. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only variable-listing tool with a single documented parameter and no output schema, the description covers the essential context: what it returns, the session prerequisite, and how complex values are handled. It could mention error behavior when no session is attached, but that's a minor gap given the annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 the 'parents' parameter. The description doesn't add much beyond the schema—it doesn't explain what 'parents' means in the context of the current stack frame or how to use it. Baseline 3 is appropriate since the schema carries the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool returns: variables visible in the current stack frame with their values. It also distinguishes itself from debuggerChildVariables by noting that structures/tables come back as nodes to open with that sibling. It doesn't explicitly name the sibling in the description, but the reference is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear prerequisite ('Needs an attached session') and tells the agent when to use debuggerChildVariables instead (for structures/tables). It doesn't explicitly say 'use this when you need flat variables' but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteMethodADestructive
Remove a method from a class - both its declaration and its implementation - and activate. A declaration inside a METHODS: chain is handled: the entry goes, and if it was the last one the chain is closed so it still compiles. What it will not do is guess at a line that declares two methods at once; that is refused and named, because rewriting it wrong takes somebody else's method with it. Pass dryRun to see the diff first, and check usageReferences before removing a method that anything calls.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | Show the diff without locking or writing. | |
| activate | No | Activate afterwards (default true). | |
| className | Yes | Class name, e.g. ZCL_APP. | |
| transport | No | Transport request for the change. | |
| methodName | Yes | Method to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds valuable context: handling of METHODS: chains, refusal of ambiguous multi-method lines, and the dryRun behavior. This goes beyond the annotation's simple destructiveness flag, but does not cover every possible edge case.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with zero waste. The core purpose is front-loaded, followed by edge-case handling and usage cautions. Every sentence earns its place, making it highly scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 5 parameters (2 required), no output schema, and annotations covering safety, the description is complete for correct invocation. It explains the main behavior, edge cases, and provides a dryRun option. Minor gaps like return format are not required since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters described. The description reinforces dryRun's purpose ('see the diff') but adds little semantic meaning beyond the schema. Baseline 3 is appropriate as the schema already carries the parameter definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Remove), a resource (method from a class), and scope (both declaration and implementation, plus activation). It clearly distinguishes from siblings like addMethod (adds) and deleteObject (deletes an object), leaving no ambiguity about what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance to use dryRun to preview the diff and to check usageReferences before removal. It implies when to use the tool (removing methods) and cautions about edge cases, though it does not name alternative tools explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteObjectADestructive
Delete an object. It needs an edit lock (this server passes the handle it holds, so lock the object first) and, outside $TMP, a transport request. Deleting does not release the lock - the backend leaves it, pointing at an object that no longer exists - so this releases it and forgets it, and drops the cached source with it. Not undoable from here: the object is gone and only a transport of the deletion travels on.
| Name | Required | Description | Default |
|---|---|---|---|
| objectUrl | Yes | URL of the object to delete | |
| transport | No | Transport request number | |
| lockHandle | No | Lock handle for the object; omit to use the one this server recorded for it (see listLocks) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations' destructiveHint, the description reveals critical side effects: the backend does not release the lock on deletion, this tool releases and forgets the lock, cached source is dropped, and the deletion is irreversible. This is rich behavioral disclosure that materially changes how an agent should reason about calling the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then delivers prerequisites, lock behavior, and irreversibility in a logical order. It is longer than minimal, but every sentence carries consequential information for a destructive operation. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation, the description covers prerequisites, side effects, lock handling, and reversibility, which is substantial given annotations already flag destructiveness. It does not specify return behavior, but no output schema exists and the focus is correctly on risks. The main gap is that 'object' could be more explicit about which ADT object types are covered, though sibling deleteMethod helps disambiguate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes all three parameters, so baseline is 3. The description adds operational context about lock handles and transport requirements, but it does not define parameter formats or values beyond what the schema provides. It does not need to compensate for a coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Delete an object.' It distinguishes itself from sibling deleteMethod by targeting whole objects rather than methods, and the rest of the description reinforces the resource scope. The purpose is immediately understandable and not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit prerequisites: an edit lock is required, and a transport request is needed outside $TMP. It also warns that the operation is not undoable. It does not explicitly name alternative tools or state when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropSessionARead-only
Clear the local session cache (releases held locks server-side; the next call logs on again).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, which is somewhat contradicted by the description's mention of clearing cache and releasing locks—though not a direct contradiction. The description adds valuable behavioral context: it releases held locks server-side and forces a re-login on the next call, which goes beyond the annotations. However, the readOnlyHint=true annotation is misleading for a cache-clearing operation, so the description's transparency is partially undermined by the annotation mismatch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that front-loads the primary action and includes the key side effects in parentheses. Every word earns its place; no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description covers the essential behavior: what it clears, what side effects occur (locks released, re-login needed). It could be slightly more explicit about when to call it (e.g., after a session error), but the core information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is trivially complete. The description adds no parameter details because none are needed. Baseline 4 for zero-parameter tools is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Clear the local session cache') and the resource ('session cache'), with a specific verb. It distinguishes itself from siblings like login/logout by describing the session lifecycle effect, though it doesn't explicitly name a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: it's for clearing a session cache and releasing locks, and notes the next call logs on again. However, it doesn't explicitly state when to use this vs. alternatives like logout or unlockAll, leaving the agent to infer the appropriate scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dumpsARead-only
Short dumps from ST22, newest first, as the HTML page ST22 itself shows. The header of one carries the runtime error, the exception and the program that died.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | An optional query string to filter the dumps. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful behavioral detail not present in annotations: newest-first ordering, HTML-page presentation, and the header containing the runtime error, exception, and program. It does not mention pagination or filtering behavior, but that is minor for a read-only listing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The first sentence front-loads the resource and ordering, and the second explains what the returned output contains. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 optional parameter and no output schema, the description provides enough context to understand what the tool returns and how the results are ordered. It could be more explicit about the query filter and any output limits, but these are not necessary for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers the only parameter (an optional query string to filter dumps) with 100% coverage, so the baseline is 3. The description adds no additional semantics about how the query filter behaves, such as whether it is substring, exact, or field-scoped.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource clearly (short dumps from ST22), the ordering (newest first), and what each dump's header contains. It lacks an explicit verb like 'list' or 'return', but the intent is unambiguous and the resource is specific enough to distinguish from the sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when ST22 short dumps are needed, and the ordering and content details give clear context. However, it does not explicitly say when to use this tool over alternatives or when not to use it, so usage guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editObjectA
The whole edit in one call: lock, patch, unlock, activate and verify. This is the sequence a change to an ABAP object needs, and each step has a way to go wrong on its own - the lock must be released BEFORE activating, or activation fails with "user is already processing", and an activation is only believable once the inactive list comes back empty. Nothing is rolled back if a step fails: the source stays written to the inactive version, which is not what the system executes, and the answer says exactly how far it got. Pass dryRun to see the diff without locking anything.
| Name | Required | Description | Default |
|---|---|---|---|
| edits | Yes | Edits to apply, exactly as patchObjectSource takes them: {startLine, endLine?, replacement}, {anchor, replacement, occurrence?} or {insertAfterLine, insertion}. | |
| dryRun | No | Compute the diff and return it without locking, writing or activating. | |
| activate | No | Activate after writing (default true). Set false to leave the change in the inactive version. | |
| parentUri | No | Package URI (/sap/bc/adt/packages/<package>), used when the inactive list leaves adtcore:parentUri empty. | |
| transport | No | Transport request. Pass the number of the REQUEST, not of a task inside it - a task number is refused with "not a change request". | |
| accessMode | No | Access mode for the lock. | |
| objectSourceUrl | Yes | Source URL, e.g. /sap/bc/adt/oo/classes/zcl_app/source/main |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations: it discloses no-rollback behavior, that the source remains in the inactive version on failure, the lock-before-activation ordering constraint, the need for an empty inactive list, and that dryRun avoids locking. Annotations only carry minimal readOnly/destructive hints, so the description does the heavy lifting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the purpose and covering ordering, failure, rollback, and dryRun. No filler, though the length is justified by the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex multi-step mutation with no output schema, it explains ordering, failure semantics, and result assurance, but stops short of detailing the response structure beyond 'the answer says exactly how far it got.' A bit more on the return shape would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of 7 parameters with descriptions. The tool description adds only dryRun context ('see the diff without locking anything'), while other behavioral notes are general rather than parameter-specific. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description begins 'The whole edit in one call: lock, patch, unlock, activate and verify,' naming the specific composite operation and the ABAP object resource. This differentiates it from single-step siblings like lock, patchObjectSource, and activateObjects by positioning it as the bundled sequence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains this is 'the sequence a change to an ABAP object needs' and warns steps can fail individually, implying use for complete edits. However, it never explicitly names alternatives or says when to use the individual siblings instead, so the 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.
extractMethodEvaluateARead-only
First of the three steps that pull a range of lines out into a method: it asks the system whether the range CAN be extracted and what the new method would need - which variables come in, which go out. Nothing is written. Then extractMethodPreview, then extractMethodExecute.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | The URI of the object. | |
| range | Yes | The range to extract, as a JSON string, e.g. {"start":{"line":1,"column":0},"end":{"line":5,"column":10}} |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint/destructiveHint annotations by explicitly stating 'Nothing is written.' It also explains that the tool only asks the system about feasibility and required variables, making the non-mutating behavior clear. This aligns with the annotations and adds valuable context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences convey the tool's purpose, its non-destructive nature, and its position in a three-step workflow. Every sentence earns its place, with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only evaluation tool with two well-documented parameters, the description is largely complete. It explains what the tool asks (feasibility and variable inputs/outputs) and that no write occurs. The absence of an output schema is not fully compensated by the description, but the purpose is clear enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes both parameters (uri and range) with 100% coverage aid. The description does not add significant semantic detail beyond what the schema provides, matching the baseline. It reinforces that 'range' is the range to extract, but this is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear and specific purpose: assessing whether a range of lines can be extracted into a method and what parameters would be needed. It also explicitly distinguishes this tool from the follow-up extractMethodPreview and extractMethodExecute siblings, making the tool's role in a three-step workflow unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly places this tool as the first of three steps in a sequence ('Then extractMethodPreview, then extractMethodExecute'), indicating when it should be used relative to its siblings. It does not explicitly state when not to use it, but the sequential framing provides sufficient usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extractMethodExecuteA
Third step of extract-method: apply what the preview showed. This WRITES the object, so it needs the object unlocked by anything else and, outside $TMP, a transport request. Nothing is rolled back if the activation afterwards fails.
| Name | Required | Description | Default |
|---|---|---|---|
| refactoring | Yes | The refactoring returned by extractMethodPreview, as a JSON string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses that the tool performs a write, requires a prior lock, depends on transport configuration, and has no rollback if activation later fails. This is valuable behavioral context that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly written sentences: the first states purpose and sequence, the second states the critical write behavior and prerequisites, and the third warns about failure semantics. There is no filler, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description covers the workflow position, the input source, required preconditions, and the non-rollback behavior. Minor ambiguity remains about whether activation is performed by this tool or a separate sibling, but this does not block correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage and already documents the single parameter as the refactoring JSON returned by extractMethodPreview. The description reinforces that the value comes from the preview but adds no new syntax, format, or type guidance beyond what the schema states, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific workflow step ('Third step of extract-method'), a concrete action ('apply what the preview showed'), and a clear effect ('This WRITES the object'). It is easily distinguished from siblings like extractMethodPreview and extractMethodEvaluate, which are earlier steps in the same sequence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description frames when to use it by calling it the third step after previewing, and gives concrete prerequisites: the object must be unlocked and a transport request is needed outside $TMP. It does not explicitly name sibling alternatives to avoid, but the workflow order plus the preview reference in the schema make the intended context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extractMethodPreviewARead-only
Second step of extract-method: the edits the refactoring would make, from the evaluation you pass back in. Still nothing written - this is where the new signature and the changed call site can be read before agreeing to them.
| Name | Required | Description | Default |
|---|---|---|---|
| proposal | Yes | The extract method proposal returned by extractMethodEvaluate, as a JSON string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly says 'Still nothing written' and frames the tool as a preview before agreeing, which adds meaningful no-side-effect context beyond the readOnlyHint and destructiveHint annotations. It also tells agents what they will be able to inspect before committing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the workflow position and purpose. The first clause is grammatically awkward, but every sentence contributes necessary context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only preview tool, the description covers what the feature is, what input it expects, what it shows, and that it writes nothing. It does not specify the response format, but no output schema exists and the description still gives enough for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the proposal parameter as the extract method proposal returned by extractMethodEvaluate, so description coverage is high. The phrase 'evaluation you pass back in' adds workflow emphasis but not much new parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the tool as the second step of extract-method and says it exposes the edits, new signature, and changed call site. It lacks a clean verb like 'shows' or 'previews', but the resource and refactoring context are clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Calling it the 'second step' and saying the input comes from the evaluation you pass back in clearly places it after extractMethodEvaluate,infer that it should be used before agreeing to the refactoring. It does not explicitly name extractMethodExecute as the follow-up, but the sequence is strongly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
featureDetailsARead-only
What one discovery feature offers, by title - the capabilities behind a collection.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | The title of the feature. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true and destructiveHint=false, so the tool is safe for reads. The description does not add much beyond that; it does not mention specific behaviors like error handling, response format, or the structure of the returned details. Since annotations already cover the safety profile, the description adds minimal extra value, earning a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, concise and front-loaded with the key concept ('What one discovery feature offers') before specifying the qualifier. It is efficient and does not waste words, though it could be more explicit about the action (e.g., 'retrieves details'). It earns a 4 for strong conciseness and structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter, a clear schema, and annotations covering safety, the description is nearly complete. It lacks details on the return format, but there is no output schema to hint at that, and the tool's simplicity means an agent can likely infer the response shape. Minor gap: no mention of what happens if the title is not found. Overall complete enough for its simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents the single 'title' parameter. The description adds no additional semantics beyond what the schema provides; it does not elaborate on format, examples, or constraints. Given high schema coverage, baseline 3 is appropriate; the description does not need to add more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns feature details by title, focusing on the capabilities behind a collection. This distinguishes it from the sibling 'collectionFeatureDetails' which likely handles a different aspect of collections. The verb 'offers' is somewhat vague, but the resource (discovery feature) and the qualifier (by title) make the purpose clear enough for an agent to understand what to expect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: to get details of a single feature by its title. It does not explicitly state when to use this tool over alternatives, but the sibling list contains 'collectionFeatureDetails' which suggests a complementary tool for collection-level details. The context does not provide explicit exclusions, but the description is clear enough about its scope, earning a 4 for providing clear context without explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
feedsBRead-only
The ADT feeds this system publishes (dumps, system messages) with their URLs - the index behind dumps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds some context by indicating the tool exposes URLs and indexes dumps/system messages, but it does not describe more behavioral details such as output format, pagination, or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that gives the core resource and its relationship to dumps. It is slightly awkwardly phrased, but it contains no filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only tool with existing annotations and a simple listing purpose, the description is adequate. It tells the agent what resource is exposed (feeds with URLs) and what categories are included (dumps, system messages), but leaves the exact response shape unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing meaningful for the description to add beyond the schema. With schema coverage at 100% and no inputs to clarify, the baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as the ADT feeds (dumps, system messages) with their URLs, clearly linking it to the 'dumps' sibling as an index behind it. It lacks an explicit verb like 'list' or 'retrieve', but the resource and scope are still recognizable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance about when to use this tool versus alternatives such as 'dumps'. The phrase 'the index behind dumps' implies a relationship, but it does not state 'use this to list available feeds' or exclude other use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
findCollectionByUrlARead-only
Which discovery collection serves a given URL - the reverse lookup of adtDiscovery, for when an address is in hand and its capabilities are not.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL of the collection. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/non-destructive behavior, so the description only needs to add context. It adds the reverse-lookup relationship and the input condition, but does not disclose matching behavior or no-match/return details beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no filler; the main question is front-loaded, the sibling relationship is given in a compact appositive, and the usage condition is tagged on at the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter lookup with read-only annotations, the description gives the purpose, input, and usage context sufficiently for invocation. It could name the return value explicitly since there is no output schema, but the phrasing 'which discovery collection serves' implies it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter is already documented as 'The URL of the collection.' The description only restates this concept via 'URL' and 'address', adding no new semantic detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a reverse lookup operation on a discovery collection by URL, using 'Which discovery collection serves a given URL' to state the exact purpose. Naming adtDiscovery as the forward counterpart differentiates it from the sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides an explicit use case: use this when an address/URL is already known and its capabilities are not. It names adtDiscovery as the forward lookup, but stops short of an explicit when-not or formal conditional alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
findDefinitionARead-only
Where the symbol under a cursor position is defined - the F3 of ADT. Takes the source URL with a line and column, and answers with the object and position of the declaration, so it needs the source read first to count the position. To go the other way, use usageReferences or impactOf.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| line | Yes | ||
| endCol | Yes | ||
| source | Yes | ||
| startCol | Yes | ||
| mainProgram | No | ||
| implementation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds the behavioral requirement that the source must be read first to count the position, which is not derivable from annotations. It also indicates the response contains the object and position of the declaration. This adds useful context beyond the annotations, though it does not cover potential error conditions or rate limits, which are not expected for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. It front-loads the purpose, then states inputs and prerequisite, and finally points to alternatives. Every sentence earns its place, and the structure is easy to scan. This is an ideal length for a tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that finds a definition based on cursor position, the description explains the input requirements and the need to read the source first. It also mentions the output (object and position) and provides alternative tools. It does not elaborate on error cases or edge cases, but given the annotations cover read-only behavior and there is no output schema, the description is sufficient for an agent to invoke it correctly. The only minor gap is not detailing how line and column are specified, but that is implied by the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden for parameter meaning. It explains that 'source URL with a line and column' are needed, which maps to url, line, startCol, and endCol. It also ties the source parameter to the need to read the source first. However, it does not mention mainProgram or implementation, which are likely optional but could have usage notes. Given the low coverage, the description adds significant meaning but not exhaustive documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds where a symbol under a cursor is defined, using the familiar metaphor 'the F3 of ADT'. It distinguishes itself from usageReferences and impactOf by naming them as alternatives for the reverse direction. This is specific and unambiguous, leaving no doubt about the tool's core function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the prerequisites: the source must be read first to count the position, and it takes a source URL with line and column. It also explicitly directs the user to usageReferences or impactOf for the opposite direction, providing clear guidance on when not to use this tool. This is exemplary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
findInSourceARead-only
Find text or a regular expression in the source of an ABAP object and get the matching line numbers with context - without pulling the source through the caller. This is how to locate a FORM, a MODULE or any statement in a report: there is no ADT fragment type for those, and asking fragmentMappings for one is answered with 400. For a report, searchIncludes follows its INCLUDE statements too.
| Name | Required | Description | Default |
|---|---|---|---|
| regex | No | Treat pattern as a regular expression (default false). | |
| pattern | Yes | What to look for. Plain text by default; set regex to treat it as a JavaScript regular expression. | |
| version | No | Which version to read: "active", "inactive" or "workingArea". Omit for the ADT default, which is the inactive one. | |
| ignoreCase | No | Case-insensitive search (default true - ABAP source mixes cases freely). | |
| maxMatches | No | Stop collecting after this many matches (default 200). The total count is reported either way. | |
| contextLines | No | Lines of context to return around each match (default 0). | |
| skipComments | No | Ignore commented-out code: * in the first column, and anything after a " (default false). | |
| searchIncludes | No | Also search the includes the program pulls in with INCLUDE (default false). One extra read per include. | |
| objectSourceUrl | Yes | Source URL, e.g. /sap/bc/adt/programs/programs/zr_app_foo/source/main |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds behavioral context: it operates 'without pulling the source through the caller', implying efficiency, and notes that searchIncludes causes 'one extra read per include', which is a cost indicator. It doesn't mention error behavior or edge cases, but given the annotations, the description adds meaningful value beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: the first states the core function, the second provides the primary use case and why alternatives fail, and the third notes a relevant option. It is front-loaded and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with fully documented parameters, the description covers purpose, usage context, and key behavioral nuances. It explains why this tool is needed and mentions the searchIncludes option. The absence of an output schema is compensated by the statement that it returns 'matching line numbers with context'. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for every parameter (e.g., regex, pattern, version, ignoreCase, maxMatches, contextLines, skipComments, searchIncludes, objectSourceUrl). The description does not add new parameter meaning beyond what the schema provides; it only references searchIncludes behavior already covered in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (find) and resource (source of an ABAP object) with the output (matching line numbers with context). It explicitly differentiates from siblings by explaining that this is the only way to locate FORM/MODULE statements, since fragmentMappings returns 400 for those. The purpose is unambiguous and distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'This is how to locate a FORM, a MODULE or any statement in a report' and explains why alternatives fail ('asking fragmentMappings for one is answered with 400'). It also mentions that searchIncludes follows INCLUDE statements, which is a usage hint. Clear exclusions and alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
findObjectPathCRead-only
The workbench path of an object, from the package down to the object itself. That is where the package of an object comes from - its own metadata does not carry it - which is why activation uses this to fill in the parent URI the inactive list leaves empty.
| Name | Required | Description | Default |
|---|---|---|---|
| objectUrl | Yes | URL of the object to find path for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior, and the description does not contradict them. However, it adds only domain context about package provenance, not behavioral details like return format, error conditions, or required permissions, which are left unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences and not overly verbose, but it is not front-loaded with the primary intent; the action is implicit and the first sentence defines the output rather than the operation. The second sentence, while explanatory, is tangential to how to call the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool, the description doesn't specify the exact output or any constraints. It leaves the agent unsure about the format of the returned path and whether any special handling is needed, making it incomplete for confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the single objectUrl parameter with a clear description, and the tool description adds no further parameter semantics. With 100% schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool returns the workbench path of an object, but it frames it as a noun phrase rather than an action, lacking a clear verb like 'find' or 'get'. It does not explicitly mention the input parameter (objectUrl) or how it differs from sibling tools that also deal with object metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions activation uses this to fill in a parent URI, which hints at a use case, but it doesn't provide explicit when-to-use or when-not-to-use guidance. No alternatives are named, leaving the agent to infer applicability from the activation context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fixEditsARead-only
Turn one proposal from fixProposals into concrete edits: the ranges and the replacement text. It computes them and does NOT write - apply them with patchObjectSource or editObject.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| proposal | Yes | One proposal from fixProposals (object, or a JSON string). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the key behavioral fact that the tool computes edits but does not write, which is critical for an agent to avoid unintended side effects. It could add more detail about the exact shape of the returned edits, but the core non-mutating behavior is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the purpose and output; the second sentence states the critical non-write behavior and routes to the apply tools. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only computation tool with two parameters and no output schema, the description covers the essential context: input source, input proposal, output type, and the fact that it doesn't write. It doesn't describe the exact return structure, but the description's mention of 'ranges and replacement text' gives the agent enough to know what to expect. The sibling list includes patchObjectSource and editObject, which the description correctly names as the apply step.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: the 'proposal' parameter is described in the schema, but 'source' is not. The description adds meaning by explaining that 'proposal' comes from fixProposals and that the tool produces ranges and replacement text, which clarifies what the parameters are for. It doesn't fully describe the 'source' parameter, but the context of 'ranges' implies source text, so the gap is minor.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Turn'), a specific resource ('one proposal from fixProposals'), and the concrete output ('ranges and replacement text'). It also explicitly distinguishes itself from write tools by naming patchObjectSource and editObject as the apply step. This is a clear, non-tautological definition that an agent can act on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool: to convert a fixProposals proposal into concrete edits. It also says what NOT to do: it does NOT write, and tells the agent to apply the result with patchObjectSource or editObject. This is explicit when/when-not guidance with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fixProposalsBRead-only
Quick-fix proposals the system offers for a position in a source - the same list as the light bulb in ADT (create the missing method, add the missing variable). What comes back is passed to fixEdits to get the actual edits.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| line | Yes | ||
| column | Yes | ||
| source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows it's a safe read operation. The description adds that it returns proposals (not edits) and that the result is meant to be passed to fixEdits, which is useful behavioral context. However, it doesn't disclose details like whether proposals are ordered, what happens if no proposals exist, or any rate limits. With annotations covering safety, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with useful information: the tool's purpose, an analogy, examples, and the relationship to fixEdits. It's concise and front-loaded with the core purpose. The only minor issue is that the analogy and examples could be trimmed, but they add clarity for an agent unfamiliar with ADT.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only proposal tool with annotations covering safety, the description is mostly complete. It explains what the tool returns and how the output is used. However, with no output schema and 0% parameter coverage, the agent lacks details about the exact structure of the returned proposals and the precise meaning of each parameter. The description could also mention what happens when no proposals are available.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the four parameters (url, source, line, column). The description mentions 'a position in a source' which maps to line/column and source, but it doesn't explicitly explain each parameter's meaning or format. It doesn't clarify what 'url' refers to (likely the ADT resource URL) or the exact format of source. This is a gap given zero schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns quick-fix proposals for a position in a source, and even gives examples (create missing method, add missing variable) plus an ADT analogy. It distinguishes itself from fixEdits by noting the output is passed to fixEdits for actual edits, which helps differentiate from the sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when you need quick-fix proposals for a source position, and it explicitly mentions the output is passed to fixEdits, which is a sibling. It doesn't explicitly state when not to use it or list alternatives, but the ADT light bulb analogy and the fixEdits handoff provide clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fragmentMappingsARead-only
Locate a named fragment of an object and get the line and column where it starts - the cheap way to find one method in a class of a few thousand lines. type is an ADT fragment type, /: CLAS/OM for a class method, CLAS/OA for an attribute. There is no working fragment type for a FORM of a report; use findInSource for that.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Object URL, e.g. /sap/bc/adt/oo/classes/zcl_app | |
| name | Yes | Fragment name, e.g. the method name. | |
| type | Yes | ADT fragment type, e.g. CLAS/OM. Bare names such as FORM are not fragment types and the backend rejects them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals the tool's read-only nature implicitly through 'locate', aligning with the readOnlyHint=true annotation. It adds behavioral details such as returning line and column, and explicitly states the limitation for FORM fragments, which goes beyond what annotations provide. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose. It includes necessary details about the type parameter and the fallback to findInSource without redundancy. Every sentence contributes to the agent's understanding, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only query tool with three parameters, the description covers core usage, parameter format, and an important limitation. It mentions the return (line and column) and gives a concrete use case. It does not detail error handling or response format, but for this tool that is likely sufficient given the annotations and simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes each parameter (coverage 100%), so the baseline is 3. The description adds value by explaining the type parameter format with examples (CLAS/OM, CLAS/OA) and clarifying that FORM is not supported. It also reinforces that 'name' refers to the fragment name such as a method name, enhancing the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: locate a named fragment and get its start line and column. It specifies the resource (object fragment) and the action (locate), and distinguishes itself from findInSource by noting that FORM fragments are not supported and that findInSource should be used instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly identifies when to use this tool ('the cheap way to find one method in a class of a few thousand lines') and provides a clear alternative for a specific case ('no working fragment type for a FORM of a report; use findInSource for that'). It gives enough context for an agent to decide between this and the sibling tool, though it does not enumerate all exclusion cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getDataElementPropertiesARead-only
Read the definition of a DDIC data element: its domain or built-in type, the four field labels, search help and parameter id. Takes the data element name; the object URL is accepted as well.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Data element name, e.g. ZAPP_STATUS. | |
| version | No | Which version to read: "active", "inactive" or "workingArea". Omit for the ADT default. | |
| dataElementUrl | No | Object URL instead of the name, e.g. /sap/bc/adt/ddic/dataelements/zapp_status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the behavior of accepting either a name or URL, which is useful. However, it doesn't mention what happens if both are provided or none, or any error conditions (e.g., not found). Given annotations cover safety, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence that lists the core information upfront and then mentions the alternative input. No filler words and all information is relevant. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only metadata retrieval tool with 100% schema coverage and no output schema, the description is sufficient. It covers what the tool does, the inputs, and the scope. The only minor gap is not disclosing default behavior when neither name nor URL is given, but given it's read-only and the schema marks all optional, the tool likely handles defaults. Overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already has 100% coverage, describing each parameter with examples and enums. The description adds value by clarifying that the 'dataElementUrl' is an alternative to 'name', but that is also implied in schema descriptions. No additional parameter meaning is needed, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads the definition of a DDIC data elementage and lists the key attributes (domain/built-in type, field labels, search help, parameter id). It is distinct from sibling tools like getDomainProperties or setDataElementProperties, which are obvious alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a read-only operation for retrieving metadata, which aligns with its intended use. It doesn't explicitly state when not to use it vs alternatives (e.g., for writing use setDataElementProperties), but the verb 'Read' and the content make the context clear. The lack of explicit exclusions prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getDomainPropertiesARead-only
Read the definition of a DDIC domain: data type, length, decimals, output format, value table and fixed values. Takes the domain name; the object URL is accepted as well.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Domain name, e.g. ZAPP_STATUS. | |
| version | No | Which version to read: "active", "inactive" or "workingArea". Omit for the ADT default. | |
| domainUrl | No | Object URL instead of the name, e.g. /sap/bc/adt/ddic/domains/zapp_status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description aligns by stating 'Read'. It adds context about what the definition contains, but does not reveal deeper behavior such as version defaults, error cases, or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences: the first establishes purpose and scope, the second covers identifier flexibility. There is no filler or redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter, the description lists the returned attributes and the accepted input forms, which is sufficient for basic invocation. It could mention priority if both name and domainUrl are supplied or default version behavior, but the schema already covers version and its default.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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, version, and domainUrl. The description's note that the object URL is accepted as an alternative adds little beyond the schema, which already says 'Object URL instead of the name.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read'), identifies a clear resource ('DDIC domain'), and enumerates the exact properties returned (data type, length, decimals, output format, value table, fixed values). This clearly distinguishes it from write-oriented siblings such as setDomainProperties and createDomain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly frames the tool as a read operation and explains the accepted identifier forms: domain name or object URL. It does not explicitly name alternatives to avoid, but the read/write contrast with sibling tools is evident enough for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getFunctionModuleARead-only
A function module by name alone: which group it lives in, its package, and its signature as data - importing, exporting, changing, tables and exceptions, with types, defaults and which parameters are passed by value. The name is all that is needed; the group is looked up. Without this, reading a module meant knowing its group to build the URL and then reading the interface out of the ABAP by eye, because ADT serves the signature as the first statement of the source (not as the *"-block SE37 shows). Pass includeSource for the body as well - it is often a thousand lines, so it is off by default.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Function module name, e.g. Z_APP_GET_INVOICE. | |
| version | No | Which version to read: "active" (what runs) or "inactive" (the working copy, the ADT default). | |
| maxLines | No | With includeSource: how many lines of the body to return. | |
| startLine | No | With includeSource: first line of the body to return. | |
| functionGroup | No | The group, if you know it. Saves the lookup; required only when the search cannot find the module. | |
| includeSource | No | Also return the body. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that it performs a group lookup, returns the signature as structured data, and that includeSource defaults to off due to large bodies. It also explains the ADT behavior that motivated the tool, adding valuable context without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat verbose and includes historical context about the previous manual approach. While the core purpose is front-loaded in the first sentence, the subsequent sentences add background that could be trimmed for a more concise, focused definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 6 parameters and no output schema, the description covers the main behaviors: the group lookup, the returned signature data, and the optional body inclusion with defaults. It lacks explicit error handling or edge cases, but it is sufficient for an agent to understand how to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning by explaining that functionGroup saves the lookup and that includeSource is off by default because bodies are often a thousand lines, going beyond the schema's basic parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a function module's metadata (group, package, signature components) using only the name. It distinguishes itself from the old workflow of needing to know the group, but it does not explicitly name a sibling tool, so it is 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it ('The name is all that is needed') and contrasts it with the manual process of knowing the group to build the URL. However, it never explicitly states alternatives like getObjectSource or callFunction, nor does it say when not to use it, leaving the guidance implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getMessageLongtextARead-only
Read the long text (cause and procedure) of one message, as the HTML the backend serves. The text is stored per language and there is no fallback: a message documented in EN answers nothing in RU. Writing a long text is not possible over ADT - that resource refuses PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| number | Yes | Message number, e.g. 001 (or 1 - the zeros are added). | |
| language | No | One-character SAP language key of the text, e.g. E or R. Defaults to the logon language. | |
| className | Yes | Message class, e.g. ZAPP_NOCOND. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description adds meaningful behavioral details: per-language storage with no fallback, and that writing is not possible via ADT (PUT refused). These are valuable and not contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, with the primary purpose front-loaded and no extraneous content. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, the description explains the return format (HTML), the language behavior, and the write restriction. It covers the key aspects needed to use it correctly, though it could mention the absence of fallback more explicitly as a usage caveat.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds no parameter-specific details beyond what the schema already provides, such as the zero-padding example for 'number' which is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the long text of one message in HTML form, with a specific verb and resource. It is unambiguous but does not explicitly differentiate from sibling tools like getMessages, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is for reading long texts (vs. short texts likely via getMessages), but it never explicitly says when to use this over alternatives, nor provides exclusions. The language fallback note gives context but not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getMessagesARead-only
Read the messages of a message class (SE91): number, text, and whether the message is self-explanatory or has a long text. The messages live inside the class document, so this is the only way to see them - objectStructure on the same class shows the metadata alone. Standard classes are large (class 00 has 875 messages), so pass fromNumber/toNumber or numbers to narrow it down.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Only messages whose text contains this (case-insensitive). | |
| numbers | No | Only these message numbers, e.g. ["001","042"]. Leading zeros are added for you. | |
| toNumber | No | Highest message number to return, inclusive. | |
| className | Yes | Message class, e.g. ZAPP_NOCOND. | |
| fromNumber | No | Lowest message number to return, inclusive. | |
| maxMessages | No | Cap on the messages returned, default 200. The answer says when it was cut. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description aligns with that read-only profile. It adds useful behavioral context beyond the annotations: message data lives inside the class document, the tool is the only route to see messages, and large standard classes require narrowing to avoid huge result sets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no redundancy: the first states purpose and output, the second differentiates from a sibling, and the third gives a concrete scaling warning with a filtering recommendation. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a filtered read tool with full parameter documentation and readOnly annotations, the description covers the essential return content, the sibling distinction, and the scale caveat. The absence of an output schema is compensated by the explicit mention of what the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. The description adds some contextual motivation for using fromNumber/toNumber or numbers, but it does not add meaning beyond the schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the messages of a message class (SE91),' and enumerates the returned fields (number, text, self-explanatory/long-text flag). It also distinguishes itself from the sibling objectStructure by noting that objectStructure shows only metadata, making the tool's unique role clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool instead of objectStructure: 'the messages live inside the class document, so this is the only way to see them - objectStructure on the same class shows the metadata alone.' It also gives concrete usage guidance for large classes with the 875-message example and recommends fromNumber/toNumber or numbers to narrow results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getObjectSourceARead-only
Retrieves source code for ABAP objects. ADT serves the INACTIVE version by default, so reading your own edit back proves nothing about what runs - pass version="active" to see the live code. For large objects, use startLine/maxLines to page through the source instead of retrieving it all at once.
| Name | Required | Description | Default |
|---|---|---|---|
| options | No | Deprecated. JSON object of raw abap-adt-api source options, e.g. {"version":"active"}; prefer the version parameter. | |
| version | No | Which version to read: "active" (what the system executes), "inactive" (the working version, ADT default) or "workingArea". Omit for the ADT default. | |
| maxLines | No | Maximum number of lines to return from startLine. Omit to return the rest of the source. | |
| startLine | No | 1-based line number to start from (default 1). Use with maxLines to page through large sources. | |
| objectSourceUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description need not restate safety. It adds valuable behavioral context by explaining the ADT default version behavior (inactive) and why passing version='active' is necessary to see executed code. It also clarifies paging semantics, which are not covered by annotations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, then adding the critical version caveat and paging tip. Every sentence contributes value, with no redundancy or fluff. The structure leads with the action, then the most important behavioral caveat, then an optimization hint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, the description covers the essential usage points: the version default and how to get live code, and paging for large sources. It does not describe return format or errors, but those are not required given the simplicity and the annotations covering safety. An agent has enough to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 80%, and the description adds meaning beyond the schema by explaining the practical implication of the version parameter (inactive vs active) and how startLine/maxLines facilitate paging. It does not detail every parameter (e.g., options is deprecated and not mentioned in the description), but the key parameters are enriched with behavioral context, which helps an agent decide how to set them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb (Retrieves) and resource (source code for ABAP objects), distinguishing it from mutation tools like setObjectSource. However, it does not differentiate from sibling read tools such as getStructureSource or readSources, leaving some ambiguity about which specific object types or scenarios each handles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides practical usage guidance on the version parameter (default is inactive, use active for live code) and on paging for large objects. However, it does not explicitly discuss when to use this tool versus alternatives like getStructureSource or readSources, nor does it mention any exclusions or preconditions. The guidance is useful for correct invocation but lacks tool-selection context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getStructureSourceARead-only
Read the definition of a table or structure as ADT serves it: the DDL text plus the parsed field list with types and key flags. Works for TABL/DT and TABL/DS alike - both come from the same endpoint. This is the way to see a table's fields: searchObject answers a table with a SAPGUI bridge URI and objectStructure shows only its metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Table or structure name, e.g. ZAPPSTEP. | |
| version | No | Which version to read: "active" or "inactive". For DDIC the backend may answer with the working version either way, so prove an activation with inactiveObjects, not with this. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description doesn't need to repeat safety. It adds useful behavioral context: the version caveat that DDIC may answer with the working version either way, and that both TABL/DT and TABL/DS come from the same endpoint. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative and front-loaded with the core purpose, then adds sibling differentiation. It's slightly longer than necessary but every sentence earns its place, and the structure flows logically from purpose to usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description adequately explains what is returned (DDL text and parsed field list). It also covers object types supported and distinguishes from siblings, so an agent has everything needed to call it correctly without missing information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description doesn't add extra parameter-level detail beyond what the schema provides; it only mentions the version caveat, which is also in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the definition of a table or structure, specifying it returns DDL text and a parsed field list with types and key flags. It explicitly distinguishes from siblings like searchObject and objectStructure, leaving no ambiguity about its function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool ('This is the way to see a table's fields') and contrasts it with searchObject (which returns a SAPGUI bridge URI) and objectStructure (which shows only metadata), giving clear guidance on alternatives and selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getTextElementsARead-only
Read the text elements of a program, class or function group: text symbols (TEXT-001), selection texts (the labels of PARAMETERS and SELECT-OPTIONS) or list headings. These are stored per language outside the source, so getObjectSource never shows them.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Escape hatch: the text elements base URL, e.g. /sap/bc/adt/textelements/programs/zr_app_foo. | |
| category | No | Which set to read: "symbols" (default), "selections" or "headings". | |
| objectName | No | Object name, e.g. ZR_APP_FOO. | |
| objectType | No | ADT type of the object: PROG/P, CLAS/OC, FUGR/F. Defaults to PROG/P. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds behavioral context beyond that: it notes that text elements are stored per language outside the source, which explains why getObjectSource does not show them. This is useful supplementary information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose and a differentiating note. Every sentence serves a purpose—the first defines what the tool reads, the second explains why this tool exists (the storage location gap). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with four optional parameters, no output schema, and no nested objects, the description adequately covers the essentials. It explains what the tool reads and why it is needed. It could mention that results are language-dependent (since text elements are per language) or possible empty returns, but these are minor given the annotations cover safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so every parameter (url, category, objectName, objectType) has a clear description. The tool description adds little beyond the schema: it merely references the three category values in prose without adding syntax or deeper semantics. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('read') and resource ('text elements of a program, class or function group'), then enumerates the three kinds of text elements. It also explicitly contrasts with getObjectSource ('getObjectSource never shows them'), which differentiates it from a close sibling without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool by explaining that text elements are stored per language outside the source and are not visible via getObjectSource. It implicitly says 'use this when you need those elements' but stops short of explicitly listing alternate read tools 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.
getTransportConfigurationARead-only
One transport configuration by URI, with everything it defines.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL of the transport configuration. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds a small amount of behavioral context by promising 'everything it defines' as the result scope, but it does not explain what a transport configuration defines, how missing/invalid URIs are handled, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one compact sentence with no filler. It front-loads the core idea (single configuration by URI) and spends no words on unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 this is nearly sufficient. However, there is no output schema and the description's 'everything it defines' is vague about what actually comes back, which leaves the agent guessing about the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the url parameter is already documented as 'The URL of the transport configuration.' The description reinforces that the URL identifies a single configuration, but it adds no format, origin, or validation details beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource clearly: a single transport configuration identified by URI, and distinguishes it from list-style siblings like transportConfigurations. The main weakness is that it lacks an explicit verb like 'get' or 'returns', relying on the tool name to convey the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'One transport configuration by URI' implies the tool is for retrieving a single configuration rather than listing or modifying them, but it does not explicitly state when to choose this over siblings such as transportConfigurations, hasTransportConfig, or setTransportsConfig. Usage context is present but only by implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitCreateRepoA
Link a package to an abapGit repository and pull it. This WRITES the objects of that repository into the package - the largest write in this server.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | The username. | |
| branch | No | The branch name. | |
| repourl | Yes | The URL of the repository. | |
| password | No | The password. | |
| transport | No | The transport. | |
| packageName | Yes | The name of the package. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as non-read-only, and the description goes further by explicitly warning that this is 'the largest write in this server' and that it writes repository objects into the package. This adds meaningful impact/scope context beyond the schema and annotations, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, with the core purpose front-loaded in the first sentence and the critical write warning in the second. No filler or repetitive content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write-heavy tool with a complete schema and no output schema, the description conveys the action, scope, and scale of impact. It could mention preconditions such as package existence or repository access, but the core information an agent needs to select and call it is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 6 parameters. The description does not add any parameter-specific meaning beyond the schema; it only helps clarify the overall action.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pairing ('Link a package to an abapGit repository and pull it') and clarifies that objects are written into the package. It clearly states what the tool does, though it does not explicitly name or contrast nearby siblings such as gitPullRepo or gitUnlinkRepo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Link a package...and pull it' implies when this tool should be used (initial linking plus pull), but there is no explicit guidance about when to choose it over gitPullRepo, gitUnlinkRepo, or other git siblings. No exclusions or alternative conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitExternalRepoInfoARead-only
Whether an external git repository can be reached with these credentials, and which branches it offers - the check before linking it.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | The username. | |
| repourl | Yes | The URL of the repository. | |
| password | No | The password. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description does not contradict them. The description adds useful context that credentials are validated against the repository and branch availability is returned, but it does not go deeper into error behavior, anonymous access, or output shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one efficiently structured sentence that front-loads the core purpose and then adds the workflow context. Every part 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only check tool with no output schema, the description conveys the essential result concepts: reachability and branch listing. It could be more explicit about return format or error behavior, but the description is sufficient for an agent to understand the tool's role and likely output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 user, repourl, and password. The description's 'with these credentials' loosely ties to user/password, but it adds no parameter-level detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's role as a reachability/branch-listing check for an external git repository, using a specific verb-like framing ('Whether ... can be reached ... and which branches it offers'). It also distinguishes itself from related git operations by calling itself 'the check before linking it'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'the check before linking it' gives explicit context about when this tool should be used: before linking an external repository. It does not name sibling tools or explicitly state when not to use it, but the intended workflow position is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitPullRepoA
Pull an abapGit repository into its package. This WRITES every object the repository carries, overwriting what is there, and needs a transport outside $TMP.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | The username. | |
| branch | No | The branch name. | |
| repoId | Yes | The ID of the repository. | |
| password | No | The password. | |
| transport | No | The transport. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly warns 'This WRITES every object the repository carries, overwriting what is there,' which is critical behavioral disclosure beyond the annotations. It also calls out the transport requirement. This gives an agent a clear picture of the side effects before invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core action is stated first, and the high-risk overwrite behavior is front-loaded. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write operation with no output schema, the description covers the main effect, the destructive overwrite behavior, and a key prerequisite. It could also explain what a successful pull returns or how branch selection interacts, but the essential invocation context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful parameter-level context by requiring a transport outside $TMP, clarifying an important constraint not expressed in the schema. It does not describe every parameter, but the schema already handles that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Pull an abGit repository') and the target ('into its package'). It names the operation, the object, and the destination, and it can be distinguished from sibling tools like pushRepo, stageRepo, and checkRepo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: retrieve a repository's objects into the local package. It also adds the prerequisite that a transport outside $TMP is needed. However, it does not explicitly contrast this with alternatives such as checkRepo, stageRepo, or pushRepo, leaving context to be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitReposARead-only
The abapGit repositories linked on this system, with their packages, branches and state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is covered. The description adds the content detail (packages, branches, state), which is useful context. It does not contradict annotations and provides a bit more than the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, concise sentence that fully states the tool's purpose with no fluff. It is front-loaded with the main subject and includes the relevant qualifiers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only list tool, the description adequately conveys what it returns. It does not mention output format, but with no output schema, the description's enumeration of fields is sufficient. The tool is simple enough that no further detail is critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty with zero parameters, so schema coverage is 100%. The description does not need to explain parameters. Baseline for zero parameters is 4, and there is no gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool lists abapGit repositories along with their packages, branches, and state. It uses a clear resource ('repositories') and specifies included details, distinguishing it from git operations like create or pull. However, it does not explicitly name a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 the many git-related siblings (e.g., gitExternalRepoInfo, gitCreateRepo). The description only says what it lists, not when an agent should choose it over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitUnlinkRepoADestructive
Disconnect a package from its abapGit repository. The objects stay; the link and its state go, and reconnecting means setting it up again.
| Name | Required | Description | Default |
|---|---|---|---|
| repoId | Yes | The ID of the repository. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive, but the description adds valuable nuance by specifying exactly what is destroyed (the link and its state) and what is preserved (the objects). It also discloses the consequence that reconnecting requires full setup again, giving the agent a solid safety picture beyond the raw destructiveHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the action, the key effect, and the re-setup consequence with no filler. Every clause adds meaningful information and is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive operation with no output schema, the description explains what is removed, what remains, and the future implication. This is sufficient for an agent to correctly invoke the tool and anticipate its side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents repoId as 'The ID of the repository,' so schema coverage is 100%. The description does not add parameter-level detail, but it does not need to since the schema already carries that burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Disconnect') and the resource ('a package from its abapGit repository'), making its purpose specific and distinguishable from sibling git tools like gitCreateRepo and gitPullRepo. It also adds the key consequence that objects remain, which sharpens the tool's identity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when you want to remove the link between a package and its repository while keeping the objects. However, it does not explicitly mention alternatives or state when not to use this tool, so usage guidance remains implied rather than fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hasTransportConfigARead-only
Whether this system has transport configurations at all - the check before offering the organizer tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true and destructiveHint=false annotations, the safety profile is already clear. The description adds that this is a pure check of system state, which helps an agent understand it is non-mutating and likely returns a boolean.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys purpose and usage in one concise statement. Every word contributes meaning, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 0-parameter read-only predicate, the description is complete: it names the purpose, the context, and the condition. It could optionally state the exact boolean return shape, but 'Whether... at all' already implies it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing for the description to add beyond the schema. The baseline of 4 is appropriate because no parameter documentation burden exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a predicate check for whether transport configurations exist, using the specific phrase 'the check before offering the organizer tools.' This distinguishes it from transport creation/configuration tools by framing it as a gate condition rather than an action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: before offering the organizer tools. While it does not name alternative tools to use instead, the 0-parameter predicate nature makes this guidance sufficient for an agent deciding whether to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
healthcheckARead-only
Check ADT connectivity. Calls the backend and reports which SAP system this server talks to (url, client, language, user), the session state, the active tool profile and the round-trip latency; on failure it reports whether the session is dead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false. The description adds useful behavioral detail beyond that: it reports the backend system identity, session state, active tool profile, round-trip latency, and failure information about session death. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence but front-loads the core purpose ('Check ADT connectivity') before enumerating outputs. It could be split for readability, but every clause carries useful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only diagnostic tool with no output schema, the description is complete: it explains what will happen, what will be returned on success, and what will be reported on failure. An agent has enough information to invoke it correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty (0 parameters) and schema description coverage is 100%, so there are no parameter semantics to clarify. The description focuses entirely on what the tool returns, which is appropriate for a parameterless healthcheck.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Check ADT connectivity,' then details exactly what the call reports. Among the sibling tools, this is clearly distinct as a diagnostic/health check rather than a mutation or retrieval operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this to verify connectivity and session state. It doesn't explicitly name alternatives or exclusion conditions, but the purpose is specific enough that an agent can infer when to invoke it versus login/logout or other session-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
impactOfARead-only
What depends on an object, or on one method of it: the objects that use it, the places inside them, and the package each belongs to. This is usageReferences rolled up into an answer that can be read - that call returns a tree of package, object and member rows, which for a widely used class means hundreds of rows and over a hundred thousand characters for a list of forty objects. Usages in test includes are marked as such, standard SAP objects are left out unless asked for, and depth=2 follows the callers one step further to show what depends on them in turn. A method with no callers looks the same as one reached only dynamically, so an empty answer says so rather than reading as proof.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | 1 (default) for what uses the object; 2 also reports what uses those, with the object each was reached through. | |
| snippets | No | Also fetch the source snippet of each place actually listed (one more backend call, larger answer). Only covers depth 1 - indirect (depth=2) places never get snippets. | |
| objectUrl | No | ADT object URL, for a type objectName cannot address. | |
| maxObjects | No | How many objects to list. Default 100. | |
| methodName | No | Narrow it to one method of the class or interface. The position inside the source is worked out here. | |
| objectName | No | Object name, e.g. ZCL_APP_RETURN. Use with objectType. | |
| objectType | No | ADT type: CLAS/OC, INTF/OI, PROG/P, FUGR/F, TABL/DT, DDLS/DF. Defaults to CLAS/OC. | |
| onlyCustom | No | Keep only Z*, Y* and /namespace/ objects (default true). The count of standard objects left out is reported. | |
| packageName | No | Only usages in this package. | |
| includeTests | No | Include usages that are only in test includes (default true); they are marked testOnly either way. | |
| maxPlacesPerObject | No | How many places to list per object. Default 8; the rest are counted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals substantial behavioral details beyond the read-only annotations: standard SAP objects are excluded unless asked for, test usages are marked, depth=2 changes traversal, and an empty answer is explicitly ambiguously possible due to dynamic-only callers. It also warns about response size, helping agents anticipate huge results. This is genuinely useful safety and interpretation guidance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph with no fluff and it front-loads the core purpose. The sentence about output size and dynamic-caller ambiguity is valuable but makes it longer than strictly necessary. It is efficient and purposeful, though not as tightly structured as a two-sentence ideal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 11 parameters, no output schema, and only read-only annotations, the description covers the important non-obvious details: result shape, package/object/member tree, test handling, standard-object filtering, depth semantics, and the empty-result caveat. It doesn't specify exact response field names, but it gives enough high-level grounding for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all eleven parameters already carry individual descriptions. The tool description adds some high-level semantics such as depth following callers and standard-object filtering, but it mostly justifies that already documented. Baseline 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear statement of what the tool computes: 'What depends on an object, or on one method of it,' naming objects, places, and packages. It also distinguishes itself from usageReferences by positioning this tool as a rolled-up, readable alternative, which separates it from the closely related sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives useful context about when this tool is appropriate by comparing it to usageReferences: this is the readable summary when the raw tree would be enormous. There is no explicit when-not-to-use list, but the intended usage slot is clear. It does not address all nearby siblings such as whereUsedMethod or usageReferenceSnippets, so it falls just short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inactiveObjectsARead-only
The objects that are written but not activated. Read in the session this server does its writing in, because the sessions disagree: a read from elsewhere can still report an object as inactive after it has been activated. Use it as the proof that an edit went live - an empty list for your object is that proof.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses a critical behavioral trait: sessions disagree, so reads must happen in the writing session. This is valuable non-obvious context that affects correct usage. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler. The core definition is front-loaded, followed by a crucial session caveat and a clear usage tip. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only tool with no output schema, the description fully covers what it returns, when to use it, and a critical behavioral constraint. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the description carries the full semantic burden. It explains the meaning of the result (inactive objects) and the significance of an empty list, which is essential for interpretation despite the lack of schema parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies what the tool returns: objects that are written but not activated. It distinguishes itself by noting the session-specific reading requirement, which differentiates it from a generic object listing tool, though it doesn't explicitly name a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit use case: proof that an edit went live (empty list). It implies the when-to-use without stating alternatives or exclusions, but the guidance is concrete and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
isProposalMessageARead-only
Whether a message from a check is an ATC proposal rather than a plain finding - which decides whether an exemption can be requested for it.
| Name | Required | Description | Default |
|---|---|---|---|
| proposal | Yes | The ATC exemption proposal. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already disclose readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: it is a pure classifier whose result controls whether an exemption can be requested. It does not explicitly say the return type, but 'whether' clearly implies a boolean result, which is sufficient for a simple predicate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the core question, the alternative outcome, and the consequence of the result. Every clause contributes meaning; there is no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only predicate with no output schema, the description is adequately complete: it identifies what is being tested, why that test matters, and how it relates to exemption eligibility. The only minor gap is that the schema calls the parameter 'proposal' while the description speaks of a 'message from a check,' but the intent is still readable and actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter, documented as 'The ATC exemption proposal.' The description gives background about check messages and findings but does not add structural or format details to the proposal object itself. Baseline 3 is appropriate because the schema already names the parameter and the description adds only domain context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific predicate: it determines whether a check message is an ATC proposal rather than a plain finding. It also explains the operational significance of that distinction, namely exemption eligibility. This distinguishes the tool from related siblings like atcRequestExemption or atcExemptProposal, which perform actions rather than classify a message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when the predicate is relevant: when deciding whether an exemption can be requested for a check message. It does not explicitly list alternatives or exclusions, but the context is clear enough that an agent would select this tool when needing a yes/no classification of proposal status before proceeding with exemption workflows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listFunctionGroupARead-only
What is in a function group: its modules, its includes, and the global data and types declared in its TOP include. nodeContents answers this, but each row carries a SAPGUI bridge URI padded with spaces to 30 characters, so a group of thirty modules costs about 14,000 characters to list; here it is the names and the source URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| functionGroup | Yes | Group name, e.g. ZAPP_CORE_FM. | |
| includeGlobals | No | Also list the global data and types of the TOP include. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds a key behavioral insight: it avoids the bloated 30-character-padded bridge URIs that nodeContents would produce, making it more efficient. This is valuable, though it doesn't detail the exact output format or the impact of the includeGlobals flag.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence. It front-loads the core purpose and then adds a clarifying comparison to nodeContents. It could be slightly clearer with a period after 'types' but overall it's efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only two parameters, full schema descriptions, and read-only annotations, the description covers the essential usage context. The comparison to nodeContents is a helpful contextual cue for selection. A minor gap is that it doesn't explicitly state the return format (names and URLs as a list), but that is implied and not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides descriptions for both parameters, so baseline is 3. The description adds no extra meaning beyond what is in the schema, such as examples or constraints. It mentions 'names and source URLs' which roughly maps to the output, but not to parameter specifics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 'function group', and enumerates the specific contents (modules, includes, global data/types). It contrasts with the sibling tool nodeContents, which is crucial for disambiguation among a large list of tools. This makes the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (when you need names and source URLs without the verbose nodeContents output), but it does not explicitly say 'Do not use nodeContents' or 'Use this for lightweight listing'. There is no guidance on when to avoid it or prerequisites. It assumes the reader understands the performance trade-off.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listLocksARead-only
List the object locks this server currently holds, with their lock handles and when they were taken. Locks are otherwise invisible and outlive the edit that needed them.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context: locks are server-scoped, include handles and timestamps, and are invisible until inspected. It does not detail output format or authentication needs, but for a simple read-only list this is adequate beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no redundancy. The first sentence states what the tool does and what is returned; the second adds a valuable behavioral insight about lock visibility and lifecycle. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only list tool with no output schema, the description is complete: it states the resource, the returned data (handles and timestamps), and the behavioral reason to call it. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty input schema, so the baseline of 4 applies. There are no parameter semantics for the description to clarify, and no additional explanation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the exact resource ('object locks this server currently holds') and uses a specific verb ('List'), explaining that it returns lock handles and acquisition times. This clearly separates it from other lock-related sibling tools like lock, unLock, and unlockAll.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit alternatives or exclusions are named, but the description provides clear context: locks are otherwise invisible and outlive the edit that needed them, which tells an agent when this inspection tool is useful. Since there is no competing list-locks sibling, this contextual guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loadTypesARead-only
The object types the creation endpoints accept, with the templates behind them - what a wrong objtype is checked against.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a safe read operation; the description adds meaningful context about what is returned (accepted object types and their templates) and how it is used ('what a wrong objtype is checked against'). This goes beyond the annotation-only picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that conveys the essential resource and purpose. The dash-connected clause is slightly awkward and elliptical, but it adds clarifying context without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only lookup, this is adequately complete: it explains what the tool returns and why an agent would use it. The lack of an output schema is partially mitigated by the descriptive content, though the exact response shape is not specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is fully covered by its empty properties definition, so the description does not need to document parameters. The baseline of 4 applies because there is no parameter ambiguity to resolve.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource clearly: object types accepted by creation endpoints, plus their templates and validation role. It lacks an explicit verb, but the tool name 'loadTypes' supplies the action, and the 'creation endpoints' qualifier distinguishes it from the broader sibling 'objectTypes'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the description suggests this tool is relevant when working with creation endpoints or validating an objtype. However, it gives no explicit guidance about when to prefer loadTypes over similar siblings like objectTypes or objectStructure.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lockA
Take an edit lock on an object, which every write needs. The handle it returns is what setObjectSource, patchObjectSource and deleteObject take - and it lives and dies with the ADT session, so a lost session voids it and the object has to be locked again. This server remembers the handle per object, so the write tools find it themselves and listLocks shows what is held. The lock must be RELEASED BEFORE ACTIVATING: activation refuses to run while the same session holds it. Prefer editObject, which takes and releases the lock around the change for you.
| Name | Required | Description | Default |
|---|---|---|---|
| objectUrl | Yes | URL of the object to lock | |
| accessMode | No | Access mode for the lock |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation only gives readOnlyHint=false and destructiveHint=false. The description goes far beyond that by disclosing key runtime behavior: the handle is session-scoped, session loss voids it, the server remembers handles per object, and activation refuses to run while a lock is held. This is exactly the kind of non-obvious behavior needed to use the tool correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is composed of five sentences, each earning its place: purpose, handle-link, server-side memory, activation constraint, and preferred alternative. There is no filler and the core purpose is stated first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single-parameter tool with no output schema, the description covers the complete lifecycle: acquiring the lock, how the returned handle is used, session lifetime, server-side remembering, release constraint, and a pointer to a more convenient alternative. An agent can reliably invoke this tool after reading this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both objectUrl and accessMode have explicit descriptions. The tool description only adds contextual remarks about the returned handle and its role in write tools, but it does not add new information about the parameters themselves. Baseline of 3 is justified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb and resource: 'Take an edit lock on an object'. It also differentiates from editObject by noting that editObject wraps the lock and release around the change, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly says when to use: every write needs this lock, and it explicitly prefers editObject as an alternative for most cases. It adds imperative constraints like 'must be RELEASED BEFORE ACTIVATING', so the agent knows the exact conditions for this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loginARead-only
Authenticate with the ABAP system. Use it to recover a dead session; read-only calls now recover on their own.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'Authenticate' and 'recover a dead session,' which implies a state-changing operation, but the annotations declare readOnlyHint=true and destructiveHint=false. This contradicts the annotation because recovering a session inherently modifies session state. The description does not add useful behavioral context beyond the annotations, and the contradiction is serious.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero waste. The primary purpose is stated first, and the usage nuance is added in the second sentence. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description covers the essential usage context: when to use it (dead session) and when not (read-only calls). However, it does not mention what happens after authentication (e.g., whether a new session is created or what the response looks like), but given the tool's simplicity and the annotations, this is a minor gap. The contradiction with annotations slightly undermines completeness but is already accounted for in behavioral transparency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema trivially covers 100% of the parameters. The description adds no parameter information because there is nothing to explain. The baseline for 0 parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Authenticate with the ABAP system.' It also distinguishes itself from siblings like logout and dropSession by focusing on authentication and session recovery. 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use it to recover a dead session and notes that read-only calls now recover on their own, implying it is only needed for non-read-only scenarios. This provides both when-to-use and when-not-to-use guidance, and it clearly separates it from read-only alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logoutARead-only
Terminate the ABAP session and clear its cookies. WARNING: this client cannot log in again afterwards - the server process has to be restarted. To just release the session use dropSession.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There is a direct contradiction: the description says it terminates the ABAP session and clears cookies, with a warning that the server process must be restarted, while annotations state readOnlyHint=true and destructiveHint=false. This contradiction makes the description unreliable in combination with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the action, immediately followed by the WARNING, and then the relevant alternative. It has no filler and says the critical side-effect first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool, the description sufficiently explains the action, the irreversible consequence, and the correct alternative. Even without an output schema, this is enough to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the input schema is empty, so there are no parameter semantics to explain. The description correctly does not add unnecessary parameter details, and the baseline for no parameters is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and resource: "Terminate the ABAP session and clear its cookies." It also differentiates from the sibling tool `dropSession` by pointing out that `dropSession` only releases the session, and it gives a clear sibling pointer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when not to use it (if you only need to release the session) and names the alternative `dropSession`. The WARNING also makes the irreversible consequence clear, so the agent can decide whether logout is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mainProgramsARead-only
Which programs an include belongs to - the question a report include cannot answer about itself. It is needed to create or syntax-check an include, both of which want the main program, and an include used by several reports answers with all of them.
| Name | Required | Description | Default |
|---|---|---|---|
| includeUrl | Yes | The URL of the include. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false级的 safe read. The description adds useful behavior: it returns all main programs when an include is used by several reports. However, it does not discuss response format, missing input behavior, or other side effects beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact but somewhat cryptic, especially the phrasing 'the question a report include cannot answer about itself.' It could be more direct and front-loaded without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with no output schema, the description provides enough context to understand what the tool does and when to use it. The only minor gap is no mention of the response shape, but that is not essential given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the only parameter includeUrl is well documented in the schema itself. The description does not add further meaning or constraints to the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly conveys that the tool returns the main programs an include belongs to. It distinguishes the tool from the include's own self-reporting limitation, though it does not name or contrast sibling tools explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states this is needed when creating or syntax-checking an include because both operations require the main program. This gives a concrete usage context, though it does not mention when not to use it or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nodeContentsARead-only
One level of the repository tree: what is directly inside a package, or inside a function group. Two things to know. Most rows hand back a SAPGUI bridge URI that serves properties and no content, so it is not the way to read sources - packageTree resolves the real source URLs, and listFunctionGroup does it for a group. And an unknown package answers exactly like an empty one, with no nodes at all, so only a repository search tells them apart.
| Name | Required | Description | Default |
|---|---|---|---|
| user_name | No | The user name. | |
| parent_name | No | The name of the parent node. | |
| parent_type | Yes | The type of the parent node. | |
| parentnodes | No | An array of parent node IDs. | |
| rebuild_tree | No | Whether to rebuild the tree. | |
| parent_tech_name | No | The technical name of the parent node. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: most rows return a SAPGUI bridge URI with properties but no content, and unknown packages return no nodes (indistinguishable from empty). This goes beyond the annotations and helps the agent set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose ('One level of the repository tree'). The two caveats are important and each sentence earns its place. Slightly verbose phrasing ('Two things to know') but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tree-navigation tool with full schema coverage and no output schema, the description covers the key behavioral quirks (bridge URIs, unknown-package behavior) and routes to alternatives. It doesn't describe the exact response shape, but no output schema exists and the annotations cover safety. The main gap is not explaining what 'parent_type' values are valid, but the schema already names the field.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. The description does not add parameter-level detail beyond the schema, but it does clarify the meaning of 'parent' in context (package or function group). Baseline 3 is appropriate since the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns one level of the repository tree (contents of a package or function group), which is a specific verb+resource. It distinguishes itself from packageTree and listFunctionGroup by noting they resolve real source URLs, but it doesn't explicitly name all sibling tools that might overlap (e.g., objectStructure, searchObject).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when NOT to use this tool: it is not the way to read sources, and packageTree/listFunctionGroup are the alternatives for resolving real source URLs. It also warns that an unknown package looks like an empty one, so a repository search is needed to distinguish them. This is strong when-to-use vs alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
objectEnhancementsARead-only
Enhancement implementations active on an ABAP source, with the position each one is injected at and, with includeSource, its code. Read this before drawing conclusions from a standard include: the code that actually runs is the include plus its enhancements, and the source itself does not show them. For a program include, pass contextUri (the main program) - one include can belong to several programs.
| Name | Required | Description | Default |
|---|---|---|---|
| contextUri | No | The containing program, for a program include: /sap/bc/adt/programs/programs/sapmv45a. Not needed for classes, interfaces or function groups. | |
| includeSource | No | Decode and return the ABAP source of each enhancement (default false). | |
| sourceMainPath | Yes | ADT path of the object, e.g. /sap/bc/adt/programs/includes/mv45afzz/source/main. The /source/main part is added when it is missing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral facts beyond the readOnlyHint/destructiveHint annotations: the running code is the include plus enhancements, the source alone does not reveal them, and an include can belong to multiple programs requiring contextUri. This prevents a common misinterpretation and adds significant 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each with high information density: what the tool returns, why it matters (the main caveat), and parameter guidance. The critical usage warning is front-loaded immediately after the purpose statement, and there is no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only query tool with full schema coverage and clear use-case warnings, the description covers everything an agent needs to select and invoke it correctly. It even explains the return elements (position, optional code) despite lacking an output schema, making it self-contained for practical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well-documented. The description adds a rationale for contextUri ('one include can belong to several programs') but does not fundamentally change parameter semantics beyond what the schema provides. Thus, the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource—enhancement implementations active on an ABAP source—and states the included details (injection position, optional code). It distinguishes itself from source-reading siblings by emphasizing that the source itself does not show these enhancements. However, it lacks an explicit verb like 'lists' or 'retrieves,' relying on a noun phrase rather than a direct action statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool: before drawing conclusions from a standard include, because the actual running code is the include plus its enhancements. It also provides concrete guidance for when to pass contextUri (for program includes) and explains why, effectively differentiating this from source-only tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
objectRegistrationInfoARead-only
The workbench registration of an object: which transport layer and package it belongs to, and whether it can be changed here. This is what says an object is foreign or read-only before a lock fails on it.
| Name | Required | Description | Default |
|---|---|---|---|
| objectUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false. The description supplements them by explaining that this tool reveals whether an object is foreign or read-only before a lock fails, giving a richer understanding of its informative, non-mutating behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences and a colon structure deliver the core purpose efficiently. The second sentence partly restates the 'whether it can be changed here' point, but it adds the actionable 'before a lock fails' context. No wordy filler or irrelevant repairs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only query, the description covers what the returned data should conceptually be, but omits details about how the objectUrl parameter is expected and doesn't describe the actual response shape (there is no output schema). This is enough to begin using the tool, but the missing parameter documentation leaves real ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description gives zero detail about the required objectUrl parameter. With no schema description coverage (0%), the description must compensate, but it never explains what URL to use, its format, or how it relates to the tool's purpose. The parameter name is mildly self-explanatory, but this is far too little for effective use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly explains what the tool provides: an object's workbench registration, covering transport layer, package, and whether it can be changed. It doesn't use an explicit action verb, but the resource and scope are specific and help differentiate it from sibling lock/transport actions like lock, unlockAll, and transportInfo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use-case: it should be called before a lock attempt to determine if the object is foreign or read-only. It does not explicitly name alternatives or exclusion scenarios, but the guidance is unambiguous enough for an agent to know when this tool is relevant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
objectStructureARead-only
The metadata of one object: its name, type, package, who changed it when, its master language, and the links ADT offers for it - among them the source URL, which is how the address of an unfamiliar type is found. It does NOT return content: a class answers with its includes, a table with its properties (getStructureSource has the fields), and a message class with the metadata after the messages have been discarded (getMessages has those).
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Version of the object | |
| objectUrl | Yes | URL of the object |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true and destructiveHint=false already provided, the bar is lower. The description adds actionable context beyond the annotations: it clarifies the tool does not return content, explains what content lives in other tools, and mentions the 'links ADT offers'. This is a meaningful behavioral boundary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loaded with the main purpose. The second sentence is a bit convoluted but still gets its point across. No padding or tautology.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low parameter count, no output schema, and read-only annotations, the description is sufficiently complete: it says what is returned, what isn't, and how siblings cover the rest. An agent can call it correctly without additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 little for 'version' beyond 'Version of the object', though it gives a useful hint about 'objectUrl' enabling finding the source URL of an unfamiliar type. It is enough but not rich.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource: 'metadata of one object,' and itemizes the fields (name, type, package, change info, master language, links). It explicitly differentiates itself from sibling content-returning tools by naming getStructureSource and getMessages, so an agent can distinguish it without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a concrete use case ('how the address of an unfamiliar type is found') and explicitly tells when not to use it ('does NOT return content') while naming getStructureSource and getMessages as alternatives. This gives 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.
objectTypesARead-only
The object types this system knows, as ADT names them. Diagnostic: useful when a type code is in doubt, since a wrong one is refused with a 404 that says nothing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only and non-destructive. The description adds useful behavioral context beyond that by warning that an invalid type code is rejected with a 404 that provides no detail, which explains why checking this list matters. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. It front-loads the identity and scope of the tool (
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter diagnostic tool with read-only annotations, the description covers what the tool is, what need it fills, and a meaningful pitfall. It could slightly elaborate on the return shape, but that is not critical for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics the description needs to clarify. The baseline for a parameterless tool is a 4; the description stays appropriately free of parameter-level noise.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explains that the tool returns the object types recognized by the system and frames it as a diagnostic lookup. It gives a concrete resource and a use case without being a tautology. However, it lacks an explicit verb such as 'list' or 'return', which keeps it from being a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear when-to-use condition: when a type code is in doubt, because an invalid one results in an uninformative 404. It does not name alternative tools or explicitly say when not to use this tool, 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.
packageSearchHelpARead-only
Search help for package names, as the input help in ADT offers them - a name check before a creation that would fail on the package.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | The package name. | |
| type | Yes | The package value help type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as readOnly and non-destructive. The description adds context about its purpose (pre-creation check) but does not disclose additional behavioral traits such as whether it returns suggestions or how it handles inexact matches, which would be beyond the annotations. No contradiction with annotations found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, a single sentence with no superfluous words. It effectively communicates the tool's purpose and usage context without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple with only two parameters, and annotations cover its read-only nature. The description gives the key use case (pre-creation check). However, it does not describe the output or behavior in detail, but given the lack of an output schema and simplicity, the description is adequate for basic usage, though it could mention whether suggestions are returned or how the 'type' parameter influences results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% description coverage for both parameters ('name' and 'type'), providing clear semantics. The description adds minimal value beyond the schema, but it does clarify the overall use case. With full schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool searches help for package names and serves as a name check before creation. It specifies the resource (package names) and the action (search/help), which distinguishes it from many siblings. However, it does not explicitly differentiate from similar search tools like searchInPackage or searchObject.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage as a pre-creation validation ('a name check before a creation that would fail on the package'), providing context on when to use it. However, it does not explicitly state when not to use it or mention alternative tools for broader searches, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
packageTreeARead-only
List what is in a package, following its sub-packages: every object with its type, the package it sits in and the URL that serves its source where there is one. nodeContents answers one level and gives most objects a SAPGUI bridge URI that serves no content; this resolves the source locations and walks the tree breadth-first, so a limit leaves a complete picture of the upper levels and names the packages it did not open.
| Name | Required | Description | Default |
|---|---|---|---|
| maxDepth | No | How deep to go: 1 is the package alone, 2 adds its sub-packages. Default 3. | |
| maxObjects | No | Cap on the objects returned, default 500. A single real package can hold 900. | |
| objectTypes | No | Only these ADT types, e.g. ["CLAS/OC","PROG/P"]. | |
| packageName | Yes | Package to walk, e.g. ZAPP_BASE. | |
| readableOnly | No | Keep only objects whose text ADT serves (CLAS/OC, INTF/OI, PROG/P, PROG/I, FUGR/F, DDLS/DF, TABL/DT, TABL/DS, DCLS/DL, XSLT/VT). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral details beyond annotations: breadth-first traversal, the effect of a limit on upper-level completeness, and that it names packages it did not open.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but each sentence carries distinct value: the first defines output and scope, the second contrasts with a sibling and explains traversal behavior. It is somewhat long with a few parenthetical details, but there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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's specification of returned fields (type, package, source URL) is helpful. It also covers the key selector (nodeContents alternative) and behavior under limits. Minor gaps like pagination details or exact error behavior are not critical for a read-only listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds semantic value by explaining the behavior of limits and depth traversal, which informs how maxObjects and maxDepth operate in practice. It also frames readableOnly's purpose indirectly through the mention of source-serving URLs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear, specific action: list a package's contents and follow its sub-packages, including type, package, and source URL. It explicitly contrasts itself with nodeContents, which only answers one level, making the tool's scope and differentiation immediately clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to choose this tool over nodeContents, noting that nodeContents gives one level and a non-content SAPGUI URI while packageTree resolves source locations and walks recursively. This gives the agent an explicit selection rule without requiring it to inspect sibling schemas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
patchObjectSourceA
Change part of an ABAP object without re-uploading it. Reads the current source, applies the edits, writes the result and returns a unified diff of what changed. Use it instead of setObjectSource for a small change to a large object: setObjectSource replaces the whole object, so it costs the entire source and risks disturbing lines you never meant to touch. Pass dryRun to see the diff without writing.
| Name | Required | Description | Default |
|---|---|---|---|
| edits | Yes | Edits to apply. Every line number refers to the source as it is now, and edits must not overlap. Each edit is one of: {startLine, endLine?, replacement} to replace a line range ("" deletes it), {anchor, replacement, occurrence?} to replace exact text, {insertAfterLine, insertion} to insert (0 = at the top). | |
| dryRun | No | Compute and return the diff without writing anything. | |
| transport | No | Transport request for the change. | |
| lockHandle | No | Lock handle. Omit it and the handle recorded by lock for this object is used (see listLocks). | |
| objectSourceUrl | Yes | Source URL, e.g. /sap/bc/adt/oo/classes/zcl_app/source/main |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations convey read-write intent (readOnlyHint=false, destructiveHint=false), and the description adds the read-modify-write pipeline ('Reads the current source, applies the edits, writes the result') plus the unified diff return value and dryRun no-write behavior. This enriches the agent's model of side effects beyond what annotations provide. It stops short of covering details like error conditions or lock behavior, but the essentials are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences carry the purpose, the contrast with the sibling tool, and the dryRun flag, and each earns its place. It is slightly dense and re-explains some behavior that the schema also covers, but there is no padding or irrelevant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderately complex union-of-edits parameter (fully documented in the schema) and no output schema, the description appropriately states the return type (unified diff) and covers the write path, the dry-run path, and the decision to use this over setObjectSource. What an agent needs in order to call it correctly is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 and the schema already documents each parameter in detail, including the full edits union with startLine/endLine/replacement, anchor/replacement, and insertAfterLine/insertion forms. The description adds a high-level read-write-return pipeline that ties the parameters together but no extra per-parameter 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Change part of an ABAP object') and distinguishes the tool from its sibling setObjectSource by explaining that this tool patches rather than replaces the whole object. An agent can immediately tell exactly what the tool does and how it differs from the closest alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use it instead of setObjectSource for a small change to a large object' and gives the reason (setObjectSource replaces the whole object, costs the entire source, risks disturbing untouched lines). It also tells when to pass dryRun to preview without writing. This is textbook when-to-use guidance with a named alternative and a condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prettyPrinterARead-only
Reformat a source the way the ADT pretty printer would, following the setting of this user. It answers with the formatted text and writes nothing - the write is yours to make. It does not fix indentation of continuation lines the way a person would: aligning parameters to a column is not something it does.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | The ABAP source code to format. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/destructive annotations, it discloses the no-write behavior and a concrete limitation: continuation-line indentation/parameter alignment is not fixed. It also notes dependency on the user's stored setting, which is useful 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: purpose, side-effect behavior, and a key limitation. The most essential information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only formatting tool with no output schema, this is complete: it states what it returns (formatted text), that it does not write, and its main behavioral caveat. An agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the single source parameter with 100% coverage. The description adds behavioral context but no additional parameter-level detail, so the schema does the heavy lifting and a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Reformat a source'), the resource it operates on, and the formatting behavior ('the way the ADT pretty printer would'). It also distinguishes itself from write-oriented siblings by stating it 'writes nothing' and from settings tools by referencing the user's existing setting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use this to obtain formatted text without persisting changes, since 'the write is yours to make.' It does not explicitly name alternatives or say when not to use it, 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.
prettyPrinterSettingARead-only
How pretty-printing is set for this user: whether keywords go upper or lower case, and how identifiers are treated. Worth reading before formatting a source that is not yours, because the setting decides what the reformat does to every line.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds context about the content of the setting (keyword case and identifier treatment) and its impact on formatting, which is useful but not extensive. It does not describe any side effects or response structure beyond that, and since it's a read-only operation, no side effects are expected. The description aligns with annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundant wording. The core information (what the setting contains) is front-loaded, and the usage guidance is provided concisely. Every sentence serves a purpose, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no parameters and no output schema, the description provides sufficient context: it defines what the setting is, what aspects it covers, and when to use it. It could be more explicit about the exact return structure, but the description gives a reasonable overview. The annotations already cover the safety profile, so the description need not repeat that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema has no properties, so schema description coverage is trivially 100%. The description adds value by explaining what the setting represents, which helps an agent understand the returned data even though there is no output schema. With no parameters to document, the description appropriately focuses on the tool's purpose and return semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly explains what the tool provides: the user's pretty-printing settings, including keyword casing and identifier handling. It implicitly communicates that this is a read operation (the setting is described as a state), and it differentiates from the sibling setPrettyPrinterSetting by focusing on the current configuration rather than modification. However, it does not explicitly state the verb 'get' or 'retrieve', leaving the action slightly implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete usage scenario: 'Worth reading before formatting a source that is not yours' – indicating when to consult this tool. It explains the relevance by linking the setting to the effect on every reformatted line. It does not explicitly mention alternatives or when not to use it, but the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publishServiceBindingA
Publish a service binding, which makes its service reachable on this system. Outward-facing: the endpoint goes live for anyone who can reach the host.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the service binding. | |
| version | Yes | The version of the service binding. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a mutating but non-destructive operation. The description adds meaningful context: that publishing makes the service reachable on the host and that the endpoint goes live for anyone who can reach it. This goes beyond the annotation flags, though it doesn't cover prerequisites, failure modes, or idempotency—minor for such a simple tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy. The core purpose is front-loaded, and the second sentence adds the outward-facing consequence without fluff. Every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple publish operation with only two parameters and no output schema, the description covers the effect and scope. It doesn't mention return behavior or side effects like overwriting an existing binding, but given the low complexity and strong schema coverage, it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes both parameters (name and version) with clear definitions, so the baseline is 3. The description adds no additional detail about the parameters—no format, constraints, or relationship—so it does not improve on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (publish) and the resource (service binding), and explains the effect: making the service reachable and the endpoint live. It also adds the outward-facing scope ('for anyone who can reach the host'), which distinguishes it from related tools like unPublishServiceBinding or bindingDetails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it—when you want to expose a service binding to the network. It doesn't explicitly name alternatives or exclusions, but the 'outward-facing' phrasing makes the use case clear, and the sibling list includes unPublishServiceBinding for the opposite action. Lacks explicit 'do not use when' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushRepoA
Push staged changes of an abapGit repository to the remote. Outward-facing: it writes to the git remote under the credentials configured there.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | The Git repository object. | |
| user | No | The username. | |
| staging | Yes | The staging information object. | |
| password | No | The password. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, so the agent knows it's a write operation. The description adds significant context by specifying it 'writes to the git remote' under 'credentials configured there', disclosing that it makes external changes and depends on remote authentication. This goes beyond what annotations provide, though it doesn't detail error conditions or rollback behavior. The added value justifies a score above the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no fluff. The first sentence front-loads the core action ('Push staged changes'), and the second adds critical context about external writes and credentials. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a write operation with no output schema, the description covers the essential behavioral and preconditions: it requires staged changes and a configured remote. It does not describe return values or potential errors, but those are not mandatory when output schema is absent. The description provides enough for an agent to invoke it correctly in the broader git workflow, with no obvious gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with descriptions for all four parameters. The tool description does not add extra meaning to the parameters beyond what the schema provides; it only confirms that 'staged changes' are what is pushed. Since the schema already documents repo, staging, username, and password effectively, the description's marginal contribution warrants the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('push'), a clear resource ('staged changes of an abapGit repository'), and the destination ('to the remote'). It also adds the clarifying detail that this is outward-facing and writes to the remote, which distinguishes it from local-only operations. This is unambiguous and differentiates from siblings like gitPullRepo or stageRepo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use it: after staging changes in an abapGit repo, to send them to the remote. It also notes that it uses the remote's configured credentials, which is a prerequisite. However, it doesn't explicitly list exclusions or alternatives, though the tool name and purpose make the use case obvious. This is slightly above minimal because it indicates the required precondition (staged changes) and the external nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rapGenIsAvailableARead-only
Whether the RAP generator (business service generation) answers on this system. False on a classic ERP system, true on a recent S/4 - ask this before assuming a RAP-based approach is possible here. Only the check is wrapped; the generator itself is not.
| Name | Required | Description | Default |
|---|---|---|---|
| generatorId | No | Which generator to ask about. Defaults to "uiservice", the one that generates a UI service from a table or CDS view. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds behavioral nuance by explaining that the tool is a check-only operation and describes the boolean outcome (false on classic ERP, true on recent S/4). This goes beyond the annotations by specifying the semantics of the result, though it does not detail return formats or edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, each adding value: purpose, outcome context, and limitation. It is front-loaded with the core purpose, and every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple boolean check with one optional parameter and safe annotations, the description fully covers usage, outcome, and limitations. The absence of an output schema is acceptable because the result is clearly implied as a boolean. No critical information is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description covers 100% of the single parameter, including its default value and what it does. The tool description does not add additional parameter semantics beyond what the schema already provides. With high schema coverage, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: it checks whether the RAP generator is available on the system, returning a boolean. It distinguishes itself by explicitly noting that it is only a check, not the generator itself, which sets it apart from any other tools that might generate or invoke RAP services. The mention of classic ERP vs recent S/4 further clarifies the expected output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs when to use the tool: 'ask this before assuming a RAP-based approach is possible here.' This gives clear context for when the tool is relevant. It also clarifies that only the check is wrapped, not the generator, so the user knows not to expect generation functionality from this call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
readSourcesARead-only
Read the source of several objects in one call, by name and type or by source URL. Each object is reported on its own, so one unreadable object does not lose the rest, and the answer stops adding sources once the character budget is used up - it says which objects it did not reach.
| Name | Required | Description | Default |
|---|---|---|---|
| objects | No | Objects to read: [{name, objectType}], e.g. [{"name":"ZCL_APP","objectType":"CLAS/OC"}]. | |
| version | No | Which version to read: "active" for what the system runs, "inactive" for the working copy (the ADT default). | |
| sourceUrls | No | Source URLs to read instead, e.g. ["/sap/bc/adt/programs/programs/zr_app_foo/source/main"]. | |
| maxTotalChars | No | Character budget for the whole answer, default 80000. | |
| maxLinesPerObject | No | Keep only the first N lines of each source. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and non-destructive, so the description's additional disclosure of per-object independence, partial failure isolation, and character-budget truncation with explicit reporting of unreached objects adds real behavioral context. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and immediately followed by the most important behavioral caveats. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the read-only annotations and the description's coverage of input modes, partial failure, and budget behavior, an agent has enough to invoke correctly. No output schema exists, but the description explains what the answer contains (per-object reports and unreached list).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 5 parameters. The description only lightly maps 'by name and type or by source URL' to the objects and sourceUrls params, which adds little beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource ('source of several objects'), and distinguishes itself from single-object siblings by emphasizing batch operation ('in one call'). The two input modes (name/type or URL) are named in the first sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the tool's niche clear: reading multiple objects at once, which implies a batch use case. It does not explicitly name alternatives like getObjectSource or state when not to use this tool, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reentranceTicketARead-only
A single-use ticket for opening SAPGUI on this system without logging on again - what ADT uses when it hands an object to the GUI. It is a credential: it stands for your session, so treat it like one.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and non-destructive annotations, the description adds crucial behavioral traits: the ticket is single-use, session-bound, and acts as a credential that should be treated as sensitive. This is genuinely useful disclosure that annotations alone do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler: the first states what the tool is and when it is used, and the second adds the security-relevant warning. It is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless, read-only tool with no output schema, the description covers purpose, scenario, and sensitivity well. It stops just short of explicitly stating the returned representation, but an agent can reasonably infer that invoking the tool yields the ticket/credential described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema description coverage is 100%, so the baseline is 4. There are no parameter details for the description to add, and it correctly avoids inventing any.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a single-use ticket for opening SAPGUI without re-authentication, and anchors it in the ADT-to-GUI handoff scenario. It is specific about what the resource is and what it is for, though it does not explicitly contrast it with related siblings like login or dropSession.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage context: use this when SAPGUI needs to be opened without logging on again, specifically in the ADT handoff case. It does not name alternative tools or exclusions, but for a parameterless tool 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.
remoteRepoInfoARead-only
What a remote abapGit repository holds: its branches and their heads, read with the credentials passed in.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | The Git repository. | |
| user | No | The username. | |
| password | No | The password. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that credentials are used for reading, which is useful context, but it does not disclose details like whether the operation requires network access, what happens on invalid credentials, or the exact structure of the returned branches/heads. With annotations covering the read-only nature, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that front-loads the core purpose and includes the key scoping detail (credentials). Every word earns its place, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with full schema coverage and no output schema, the description is mostly complete: it states what is read and with what credentials. However, it doesn't clarify the return format or how the branches/heads are structured, and it doesn't explicitly differentiate from gitExternalRepoInfo, which could be a close sibling. Given the tool's simplicity, this is adequate but not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 (repo, user, password). The description adds that credentials are passed in, which aligns with the user/password parameters, but it doesn't add deeper meaning beyond what the schema provides. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('read') and resource ('remote abapGit repository'), and clarifies what is returned: branches and their heads. It distinguishes itself from sibling tools like gitRepos and gitExternalRepoInfo by focusing on remote repository info, though it doesn't 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: it is for reading remote abapGit repository information with provided credentials. It does not explicitly state when to use this tool versus alternatives like gitExternalRepoInfo or gitRepos, nor does it mention exclusions or prerequisites beyond credentials.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renameEvaluateARead-only
First of the three steps of a rename: it asks the system what the symbol at this position is and where it is used, so the rename can be planned. Nothing is written. Then renamePreview, then renameExecute.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | The URI of the object to rename. | |
| line | Yes | The line number. | |
| endColumn | Yes | The ending column. | |
| startColumn | Yes | The starting column. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Nothing is written.' It adds useful behavioral context by explaining what the tool actually does: resolves the symbol at the position and gathers its usages for planning. This goes beyond the annotation metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: the tool's role in the rename flow, what it does, and the follow-up tools. The key differentiator is front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only planning tool with no output schema and no nested objects, the description is complete. It tells the agent what the tool does, that no changes are made, and where it fits in the rename workflow. No additional information is needed for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already documented. The description adds only the contextual notion that uri/line/startColumn/endColumn identify 'the symbol at this position,' which is helpful but not substantially more than the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the operation: it asks the system to resolve the symbol at a given position and locate its usages to plan a rename. It also distinguishes itself from the sibling tools by positioning itself as the first of the three rename steps, making differentiation trivial.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description names the exact sequence — renameEvaluate, then renamePreview, then renameExecute — and notes that nothing is written, which implies it is the safe planning phase. It lacks an explicit when-not-to-use statement, but the step ordering provides strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renameExecuteA
Third step of a rename: apply it. This WRITES every object the preview listed, so all of them must be free of other locks and, outside $TMP, in a transport request. It is not a transaction: a failure part way through leaves the objects already renamed as they are.
| Name | Required | Description | Default |
|---|---|---|---|
| refactoring | Yes | The rename refactoring. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only declare readOnlyHint=false and destructiveHint=false. The description adds genuinely non-obvious behavioral context beyond this: the operation physically WRITES every previewed object, requires lock/transport preconditions, and critically is not a transaction — a mid-way failure leaves already-renamed objects changed. This partial-failure disclosure is exactly the kind of trait an agent needs to know and could not infer from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly written sentences, each earning its place: the purpose is front-loaded, the write-scope and prerequisites follow, and the non-transactional failure behavior closes. No filler, no repetition of what annotations already state, and the structure makes it scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no output schema, the description covers the high-risk aspects an agent needs before calling: what gets written, required object states, and failure semantics. Minor gaps remain — the return/response format on success is not mentioned, and the nested refactoring object's structure is left to the schema's minimal description — but these are secondary to the behavioral risks that are fully addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (the 'refactoring' parameter is described as 'The rename refactoring'), so the baseline is 3. The description adds only indirect parameter guidance by implying the refactoring object comes from the earlier preview steps, but it does not explain what fields the nested object must contain or how it should be constructed, which is acceptable given the workflow dependency.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('apply it') on a specific resource (the rename refactoring) and anchors it in a workflow ('Third step of a rename'). It immediately distinguishes itself from the sibling tools renameEvaluate and renamePreview by step position rather than by a generic verb like 'execute'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Third step of a rename' gives clear sequencing context, implying the agent must have run the preview first, and the description spells out concrete preconditions: objects must be free of locks and, outside $TMP, in a transport request. It does not explicitly name alternatives or say 'do not use before previewing', but the workflow framing makes this clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renamePreviewARead-only
Second step of a rename: every object and line the rename would touch, from the evaluation you pass back in. Read this before agreeing - a rename reaches objects you did not open, and the preview is the only place that shows how far it goes.
| Name | Required | Description | Default |
|---|---|---|---|
| transport | No | The transport. | |
| renameRefactoring | Yes | The rename refactoring proposal. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds meaningful context beyond annotations: the preview is the only place showing how far the rename goes, and it warns that the rename touches objects the agent did not open. This is a valuable behavioral caveat that goes beyond the structured metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core function and followed by a one-sentence caveat about usage. No redundancy; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only preview tool with no output schema, the description tells the agent what it does (shows affected objects/lines), what input to provide (the evaluation result), and when to use it (before agreeing to execute). It leaves the optional transport parameter underspecified but that is a minor gap; the core invocation information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning by clarifying that the required renameRefactoring parameter is the evaluation passed back in from a prior step, rather than just a generic proposal. The optional transport parameter is not further explained, but it is optional and its schema description is present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific function: it is the second step of a rename and shows every object and line the rename would touch, based on the evaluation passed back in. This clearly identifies the tool as a preview/read operation and distinguishes it from renameEvaluate and renameExecute without needing to compare schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to read this before agreeing and explains why: a rename reaches objects you did not open, and the preview is the only place that shows the full scope. This is clear when-to-use guidance (after evaluation, before execution), though it does not name sibling tools or state explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revisionsARead-only
The version history of an object: who changed it when, and under which transport request. Takes a name (with objectType), or objectUrl for a type it cannot address. Mind what the backend means by "version": that field is the transport request that carried the change, while the version NUMBER is the "revision" field - and that is what compareRevisions takes. A long-lived object has a long history (ZCL_APP answers with 90 versions, most of them copies left by transport releases), so the newest 20 come back unless limit says otherwise, and author/transport/titleContains narrow it down.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many of the newest versions to return. Default 20; 0 means all of them. | |
| author | No | Keep only versions written by this user. | |
| objectUrl | No | ADT object URL, e.g. /sap/bc/adt/oo/classes/zcl_app. Only needed for a type objectName cannot address. | |
| transport | No | Keep only the version(s) carried by this transport request. | |
| clsInclude | No | For a class, which include to take the history of: definitions, implementations, macros, testclasses or main (the default). | |
| objectName | No | Object name, e.g. ZCL_APP. Use with objectType. | |
| objectType | No | ADT type: CLAS/OC, INTF/OI, PROG/P, PROG/I, FUGR/F, DDLS/DF, TABL/DS. Defaults to CLAS/OC. | |
| titleContains | No | Keep only versions whose description contains this text, case-insensitive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is known. The description adds critical behavioral context: it clarifies the confusing 'version' field is actually the transport request, and that the 'revision' field is the version number used by compareRevisions. It also warns about long histories with many copies and the default limit of 20. This goes beyond annotations and is highly useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and information-dense, with no filler. It front-loads the core purpose, then clarifies the critical naming caveat, and finishes with the limit/filter behavior. Every sentence earns its place, making it a model of concise, structured documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, complex semantics, and no output schema, the description covers the essential points: how to identify the object, what the default limit is, and clarifies the tricky version vs revision distinction. It doesn't detail the exact return format, but the clarification of the version field likely covers the most important part. Slight gap on whether the response includes any other metadata, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 8 parameters are documented in the schema with descriptions, so schema coverage is 100%. The description adds value by clarifying the meaning of the 'version' field in results, but does not add new parameter-specific semantics beyond the schema. The baseline of 3 is appropriate because the schema already fully covers parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool lists version history with author, timestamp, and transport request, taking a name+objectType or objectUrl. It distinguishes from compareRevisions by clarifying the version vs revision terminology, which is a key differentiator. However, it does not name any sibling tools directly, so it is not a full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use objectUrl vs objectName, notes the default limit of 20, and explains filtering parameters. It implicitly tells the agent to use compareRevisions for comparing versions, but does not explicitly say when NOT to use this tool or name alternatives like getObjectSource. The usage context is clear but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runClassA
Execute a class that implements IF_OO_ADT_CLASSRUN - the F9 of an ADT editor - and return its console output. The class has to exist and implement that interface; to run a piece of ABAP that does not, use runSnippet, which wraps it in such a class for you. This EXECUTES CODE on the system as the connected user, so it counts as a writing tool and read-only mode refuses it. A runtime error comes back as a bare 500; the reason is in ST22 (runSnippet reads the dump for you).
| Name | Required | Description | Default |
|---|---|---|---|
| className | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by stating this EXECUTES code as the connected user, counts as a writing tool, and is refused in read-only mode. It also discloses error behavior (bare 500, with details in ST22), which is valuable context beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: it states the purpose, gives the F9 analogy, routes to the alternative, discloses side effects, and covers error handling. It is front-loaded and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that executes arbitrary code, this description covers the key contextual needs: prerequisites, side effects, read-only behavior, error handling, and the return value (console output). The lack of an output schema is acceptable because the return type is described as console output, and there is no hidden complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description carries the burden for the single className parameter. It clarifies that the class must exist and implement IF_OO_ADT_CLASSRUN, which adds meaningful constraint information. The parameter itself is fairly self-explanatory from the tool description, so a high score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: execute a class implementing IF_OO_ADT_CLASSRUN, analogous to the F9 action in an ADT editor, and return console output. It also distinguishes itself from runSnippet, so an agent can tell them apart without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when not to use this tool: for ABAP that does not implement the interface, use runSnippet, which wraps it. It also states prerequisites (class must exist and implement the interface), giving clear guidance for selecting the correct tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runQueryARead-only
Run an Open SQL SELECT and get the rows back - joins, aggregates, GROUP BY, whatever the ABAP SQL console accepts. Reading only, and only SELECT: the endpoint refuses anything that writes, and for logic around the data (call a function module, compute, loop) use runSnippet. Row limits are the ones the backend applies, so ask for what you need with UP TO n ROWS.
| Name | Required | Description | Default |
|---|---|---|---|
| decode | No | Whether to decode the data. | |
| offset | No | Skip this many leading rows. ADT has no offset, so the server fetches offset+rowNumber rows and returns the tail - add an ORDER BY to make the window stable. | |
| sqlQuery | Yes | The SQL query to execute. | |
| rowNumber | No | The maximum number of rows to retrieve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: the endpoint refuses write operations, row limits are backend-applied, and the offset parameter has a specific server-side implementation (fetches offset+rowNumber rows and returns the tail). This is useful behavioral disclosure that goes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste. The core purpose is front-loaded, the constraint (read-only SELECT) is stated early, and the alternative tool is named in the same sentence as the exclusion. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only query tool with 100% schema coverage and no output schema, the description covers the essential context: what it does, what it refuses, when to use the alternative, and the row-limit behavior. The only minor gap is that it doesn't describe the return format or error behavior, but with annotations covering the safety profile and schema covering parameters, this is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds some context about row limits ('ask for what you need with UP TO n ROWS') and the offset behavior ('add an ORDER BY to make the window stable'), which supplements the schema. However, the description doesn't add meaning for the decode parameter or sqlQuery beyond what the schema provides. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Run'), a specific resource ('Open SQL SELECT'), and the expected outcome ('get the rows back'). It explicitly lists supported SQL features (joins, aggregates, GROUP BY) and clearly distinguishes itself from runSnippet, which is a sibling tool. This is a clear, specific, and well-differentiated purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('Reading only, and only SELECT') and when NOT to use it ('the endpoint refuses anything that writes'). It also names the alternative tool (runSnippet) and the conditions that select it ('for logic around the data (call a function module, compute, loop)'). This is explicit when/when-not guidance with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runSnippetA
Run a piece of ABAP on the system and return what it printed. The snippet is wrapped in a throwaway class implementing IF_OO_ADT_CLASSRUN, created in $TMP, activated, executed with runClass and deleted again - which is the only way ADT executes ABAP at all. Write output with out->write( lv_x ) or out->write_text( ... ); out is the console object the interface hands to main. It answers the questions no read can: what a function module returns for these inputs, what a class method does with this data, what a calculation comes to. It runs code on the target system as your user, so a snippet that writes changes data - it counts as a writing tool and is refused in read-only mode. On a syntax error the activation messages come back with the source, and the class is removed either way.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The ABAP to run, line by line, as it would stand inside a method. `out` is available for output. | |
| dryRun | No | Return the class source that would be created, without touching the system. | |
| className | No | Name for the throwaway class. Default: ZMCP_SNIP_<timestamp in base 36>. | |
| keepClass | No | Leave the class on the system instead of deleting it - for a snippet to run again or open in ADT. Default false. | |
| transport | No | Transport request, needed only outside $TMP. | |
| packageName | No | Where to create it. Default $TMP, which needs no transport; anything else does. | |
| declarations | No | Class-level declarations the snippet needs: TYPES, CONSTANTS, DATA. They go into the private section. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, but the description goes beyond: it explains the tool's side effects (writes data), safety ('refused in read-only mode'), lifecycle (created in $TMP, activated, executed, deleted), and error handling (syntax errors return activation messages). It discloses that it runs as the user. This is rich behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient and front-loaded: the core purpose and mechanism are in the first sentence. It includes necessary detail about the wrapping class Demo and output method. It has some redundancy (repeats the 'throwaway class' point) but overall each sentence earns its place. Could be slightly tightened but is well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters, 1 required, no output schema, this description is complete. It explains the execution model, the output mechanism, the side effects, the error behavior, and the prerequisites (transport for non-$TMP). There is no output schema, but the description explains the return value ('what it printed' and the activation messages on syntax error). The integration with siblings is clear. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. However, the description adds critical context: it explains how the code is wrapped (in a class with IF_OO_ADT_CLASSRUN), how output works (out->write), and the purpose of the 'declarations' parameter (they go into a private section). It also explains the dryRun and keepClass semantics indirectly by describing the lifecycle. This adds valuable meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: 'Run a piece of ABAP on the system and return what it printed.' It specifies the verb (run), the resource (ABAP snippet), and the output (printed output). It distinguishes itself from siblings by explaining that it's the only way to execute ABAP and by referencing the alternative 'runClass' indirectly. The description is specific and not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool: 'It answers the questions no read can...' and implies it's for executing code when read-only tools are insufficient. It also states when NOT to use it: 'it counts as a writing tool and is refused in read-only mode.' It references the mechanism (runClass) and the necessity of the wrapper class. This is explicit context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runTestsA
Run the ABAP Unit tests of a class and report what happened, activating it first if it has inactive parts. This is what unitTestRun should feel like: tests do not run at all against an inactive object, so a bare run answers with an empty list that reads like success. Returns a summary - how many methods ran, which failed, and each failure with its message - with the full ADT result available on request.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Include the full ADT result alongside the summary. | |
| url | No | Object URL instead of the class name. | |
| flags | No | Which test risk levels and durations to run. Six booleans; a JSON string is accepted too. Omit for the ADT defaults. | |
| activate | No | Activate inactive parts of the object before running (default true). Without this an inactive class silently runs no tests. | |
| className | No | Class to test, e.g. ZCL_APP_PCK_PLAN. Its own test include is what runs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the minimal annotations (readOnlyHint=false, destructiveHint=false), the description discloses two important behaviors: it activates the class first (a side effect) and that a bare run on an inactive object returns an empty list that falsely appears successful. This is valuable trap-warning context that annotations do not provide. The promise of a summary and on-request full ADT result also adds behavioral clarity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the primary action. The critical empty-list warning is well placed. The meta-comment 'This is what unitTestRun should feel like' is slightly extraneous and could be trimmed without loss, but overall the structure is efficient and the key information is prominent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core behavior: activation, the empty-list trap, the summary contents, and the raw option. The nested 'flags' object is left to the schema, which already describes it. Given the tool's complexity and absence of an output schema, the description provides enough context for an agent to understand expected results and side effects. Only missing an explicit mention of when to prefer this over unitTestRun, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are already described in the input schema. The description adds little about parameters themselves—it mentions the 'raw' option indirectly ('full ADT result available on request') but that duplicates the schema's 'Include the full ADT result alongside the summary.' No new semantic depth is provided beyond what the schema already conveys, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that it runs ABAP Unit tests for a class and reports results, with a specific verb and resource. It also mentions activation behavior, which helps distinguish it from a plain 'run tests' operation. However, it does not explicitly name a sibling alternative like unitTestRun, so it's not fully differentiated, though the added context about the empty-list trap separates it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context about what happens with inactive objects and the need for activation, which indirectly guides usage. But it does not explicitly state when to use this tool versus siblings like unitTestRun or unitTestEvaluation, nor when to avoid it. No alternatives are named, so the 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.
searchInPackageARead-only
Search the sources of a whole package for text or a regular expression, following its sub-packages: one call instead of a package listing plus a read and a search per object. Answers with the matching objects, the line numbers and the lines, and says how far it got - this reads every source it walks, so narrow it with objectTypes and maxObjects on a large package.
| Name | Required | Description | Default |
|---|---|---|---|
| regex | No | Treat pattern as a JavaScript regular expression. | |
| pattern | Yes | Text to find, or a regular expression when regex is true. | |
| maxDepth | No | How deep to follow sub-packages, default 3. | |
| ignoreCase | No | Case-insensitive, which is the default - ABAP is not case-sensitive. | |
| maxObjects | No | Cap on the objects read, default 200. | |
| objectTypes | No | Only these ADT types. | |
| packageName | Yes | Package to search, e.g. ZAPP_BASE. | |
| contextLines | No | Lines of context to include around each match. | |
| skipComments | No | Skip commented-out lines, which a search for live code usually wants. | |
| maxMatchesPerObject | No | Cap on the matches reported per object, default 20. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true/destructiveHint=false, so the description need not re-state safety. It adds meaningful behavioral context: it walks and reads every source it traverses, and thus can be expensive, with an explicit mitigation. It also describes the response content ('matching objects, the line numbers and the lines') and progress reporting, enriching the annotation-only view.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences: the first defines purpose and differentiator, the second covers output, scope, and a caveat with mitigation. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key behavioral aspects: scope (whole package plus sub-packages), output (matches with line numbers/lines and progress), and risk (reads every source) with mitigation. With no output schema, the described response is sufficient for an agent to decide whether to call it and understand results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 references objectTypes and maxObjects in a usage context, but does not add syntax or format details beyond what the schema already provides. No extra meaning is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Search the sources of a whole package') and adds the key differentiator 'following its sub-packages'. It contrasts itself with a manual multi-step process, making it distinct from sibling search tools like searchObject or findInSource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the benefit 'one call instead of a package listing plus a read and a search per object', clearly identifying the use case. It also gives conditional guidance to 'narrow it with objectTypes and maxObjects on a large package', but it does not explicitly name alternative tools or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchObjectARead-only
Find objects by name in the repository, with * as a wildcard - the quickest way from a name to a URI, a type and a package. The objType filter is the quick-search filter of the backend and does not take every sub-type: FUGR/FF answers with an empty list while the unfiltered search returns the module. So when a filter comes back empty, search without it and pick the type from the rows.
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | Maximum number of results | |
| query | Yes | Search query string | |
| objType | No | Object type filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint and non-destructive behavior, and the description adds substantial behavioral detail beyond them: wildcard support, the backend-filter limitation on subtypes, a concrete FUGR/FF example, and the recommended fallback strategy. This meaningfully informs an agent about quirks that annotations alone would not reveal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, with the core purpose and unique value stated first. Every sentence adds something necessary: the core behavior, the filter quirk, and how to react to empty results. No filler or redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with one required parameter and three total, the description covers the purpose, the query semantics, the output result (URI, type, package), and the main failure mode, while the schema covers parameter format. No output schema exists, but the description already states what the user gets from a name. The absence of explicit sibling alternatives is a minor concern given the strong practical guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds extra meaning for query (wildcard semantics) and objType (quick-search filter, subtype limitations), which goes beyond the schema's simple labels. Max is not elaborated, but its schema description already says 'Maximum number of results,' so no major gap remains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Find objects by name in the repository,' and states the concrete output (URI, type, package). It also calls out the wildcard behavior, which distinguishes this from a plain exact-match search. The 'quickest way from a name to URI/type/package' framing helps differentiate it from sibling search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear guidance on when to use this tool: as the quick way to resolve a name to URI/type/package. It also provides actionable troubleshooting for the objType filter, instructing users to retry without the filter when it returns empty. It does not explicitly name alternatives or exclusion conditions, but the context is strong enough for an agent to choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setDataElementPropertiesA
Change the definition of an existing DDIC data element. The backend PUT replaces the whole definition, so anything not passed is kept as the system has it. The type is either a domain or a built-in ABAP type, not both. The lock is taken and released here unless you pass a handle or this server already holds one; outside $TMP a transport request is needed. Writes the inactive version - pass activate to finish the job, or run activateSafe afterwards.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Data element name. | |
| label | No | Fills all four field labels at once. Each is cut to the length SAP allows (10/20/40/55) and the answer says which were cut. | |
| domain | No | Domain the element takes its type from, e.g. ZAPP_STATUS. Alternative to dataType. | |
| length | No | Length, for a built-in type. | |
| activate | No | Activate after the write (default false). Only possible when this tool took the lock itself - activation is refused while a session holds one. | |
| dataType | No | Built-in ABAP type for an element without a domain, e.g. CHAR, NUMC, DEC. Alternative to domain. | |
| decimals | No | Decimal places, for a built-in type. | |
| metaData | No | Escape hatch: the complete DataElementMetaData document, sent as it is with no merge. | |
| longLabel | No | Long label, up to 40 characters. | |
| transport | No | Transport request number - the request itself, not a developer task. | |
| lockHandle | No | Lock handle. Omit it: the one this server holds for the object is used, and with none held the lock is taken and released here. | |
| properties | No | Escape hatch: the complete DataElementProperties document, sent as it is with no merge. | |
| searchHelp | No | Search help name. | |
| shortLabel | No | Short label, up to 10 characters. | |
| description | No | Short description. | |
| mediumLabel | No | Medium label, up to 20 characters. | |
| headingLabel | No | Heading, up to 55 characters. | |
| changeDocument | No | Log changes in change documents. | |
| dataElementUrl | No | Object URL instead of the name. | |
| setGetParameter | No | SET/GET parameter id. | |
| searchHelpParameter | No | Search help parameter. | |
| defaultComponentName | No | Default component name. | |
| leftToRightDirection | No | Left-to-right direction. | |
| deactivateInputHistory | No | Switch off the input history. | |
| deactivateBIDIFiltering | No | Switch off BIDI filtering. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which only state readOnlyHint=false and destructiveHint=false), the description discloses key behaviors: PUT replaces the whole definition (though unspecified fields are preserved), the type must be either a domain or built-in, the locking lifecycle, the transport requirement outside $TMP, and the fact that an inactive version is written and requires activation. This is rich, non-redundant behavioral information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact paragraph of four sentences, each conveying essential information without redundancy. It is front-loaded with the core purpose and then systematically addresses semantics, constraints, locking, and activation, all in a logical order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (25 parameters, no required fields, two escape hatches), the description, combined with the fully-annotated schema, provides everything an agent needs to invoke it correctly. It covers the critical system behaviors (PUT semantics, locking, transport, activation) and relies on the schema for parameter-level detail. No essential context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents all parameters. The description adds value by clarifying relationships: domain vs dataType exclusivity, lockHandle behavior with the server-held lock, and transport necessity. It does not cover every parameter, but the most impactful relationships are explained, exceeding the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Change'), the resource ('the definition of an existing DDIC data element'), and distinguishes it from creation and retrieval tools. It also adds critical semantic detail about the PUT semantics and the exclusivity of type sources, making the tool's scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use the tool (for existing elements, with lock and transport requirements) and mentions an alternative activation path ('run activateSafe afterwards'). It does not explicitly name sibling tools like createDataElement or getDataElementProperties, but the phrasing implies the distinction clearly enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setDomainPropertiesA
Change the definition of an existing DDIC domain. The backend PUT replaces the whole definition, so anything not passed here is kept as the system currently has it - read, merge, write happens on this side. The lock is taken and released here unless you pass a handle or this server already holds one; outside $TMP a transport request is needed. Writes the inactive version - pass activate to finish the job, or run activateSafe afterwards.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Domain name. | |
| style | No | Output style. | |
| length | No | Field length. | |
| activate | No | Activate after the write (default false). Only possible when this tool took the lock itself - activation is refused while a session holds one. | |
| datatype | No | DDIC data type, e.g. CHAR, NUMC, DEC, DATS. | |
| decimals | No | Decimal places. | |
| metaData | No | Escape hatch: the complete DomainMetaData document, sent as it is with no merge. | |
| domainUrl | No | Object URL instead of the name. | |
| fixValues | No | Fixed values, replacing the current list: [{low, high, text}]. Pass [] to clear them. | |
| lowercase | No | Lower case allowed. | |
| transport | No | Transport request number - the request itself, not a developer task. | |
| ampmFormat | No | AM/PM time format. | |
| lockHandle | No | Lock handle. Omit it: the one this server holds for the object is used, and with none held the lock is taken and released here. | |
| properties | No | Escape hatch: the complete DomainProperties document, sent as it is with no merge. | |
| signExists | No | Value can be negative. | |
| valueTable | No | Value table for the check. | |
| description | No | Short description. | |
| outputLength | No | Output length; defaults to the field length. | |
| conversionExit | No | Conversion exit, e.g. ALPHA. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses lock acquisition/release behavior, the merge semantics that prevent data loss, the transport requirement, and the inactive-write/activation workflow. This is far richer than the annotation flags alone and sets correct expectations for a mutating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose and followed by the most important behavioral caveats. No filler, repetition, or scene-setting; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter write tool with no output schema, the description covers the essential context: what is changed, how merge works, locking, transports, and activation, even pointing to activateSafe as a fallback. The remaining details are in the fully covered input schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics for lockHandle ('taken and released here unless you pass a handle...'), transport ('outside $TMP a transport request is needed'), and activate ('pass activate to finish the job'). This goes beyond the schema's individual parameter notes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Change the definition of an existing DDIC domain', naming a specific verb and resource, and adds the precise backend behavior ('PUT replaces the whole definition'). This clearly distinguishes the tool from read-only siblings like getDomainProperties and creation tools like createDomain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It specifies this is for an existing domain and gives the operational context: read-merge-write happens on the server, a transport request is needed outside $TMP, and the tool writes the inactive version unless activate is passed. It does not explicitly name alternatives or exclusion conditions, but the 'existing DDIC domain' scope plus activation instructions make the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setMessagesA
Add or change messages of an existing message class. Only the messages passed are touched: the backend upserts by number, so the rest of the class is left alone - and for the same reason a message CANNOT be deleted through ADT. A field left out keeps its current value. The class description is read first and carried over, because the write replaces the class header. The text is capped at 73 characters (what T100 holds) and the answer says what was cut. Takes and releases the lock itself; no activation is needed - the message is in T100 as soon as this returns. Outside $TMP a transport request is required.
| Name | Required | Description | Default |
|---|---|---|---|
| messages | Yes | The messages to add or change: [{number, text, selfExplanatory}]. text may be omitted only for a message that already exists. | |
| className | Yes | Message class, e.g. ZAPP_NOCOND. | |
| transport | No | Transport request number - the request itself, not a developer task. Required outside $TMP. | |
| description | No | New description of the class itself. Omit to keep the current one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
This is exceptionally transparent: it discloses upsert-by-number semantics, that only passed messages are touched, that class description is read and carried over, the 73-character cap with cut reporting, self-managed locking, no activation requirement, and immediate persistence to T100. All of this goes well beyond the minimal readOnlyHint/destructiveHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: each covers a distinct behavioral or environmental constraint. It is front-loaded with the core purpose, and the supporting detail is organized logically from update semantics to cap, lock, visibility, and transport.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with four parameters and no output schema, the description covers what an agent needs: exact update semantics, edge cases, hard limits, prerequisites, side effects, and even what the response mentions ('says what was cut'). There is no significant missing operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already has 100% coverage, the description adds meaning the schema cannot: the upsert behavior, 'field left out keeps its value', the 73-character truncation, the transport requirement outside $TMP, and the default behavior of selfExplanatory. This substantially helps an agent set correct parameter values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair: 'Add or change messages of an existing message class.' It clearly distinguishes the tool from siblings like getMessages or createMessageClass by scoping it to existing classes and partial message updates, and even clarifies that deletion is not possible.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong contextual guidance: it explains partial updates, that omitted fields are preserved, that a transport request is required outside $TMP, and that messages appear in T100 immediately. It does not explicitly name alternative tools or say 'use X instead', so it stops short of the highest benchmark.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setObjectSourceA
Replace the whole source of an ABAP object. For a small change prefer patchObjectSource, which reads, edits and writes without sending the entire object.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| transport | No | ||
| lockHandle | Yes | ||
| objectSourceUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, so the agent already knows this is a write operation. The description adds critical behavioral context by warning that it replaces the whole source, which implies overwriting existing content. It doesn't mention lock requirements or response behavior, but the main risk 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight, purposeful sentences with no filler. The core action is front-loaded, and the alternative-tool guidance is separated clearly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient for choosing this tool, but it omits the lock prerequisite implied by the required lockHandle parameter and says nothing about the response. For an overwriting operation, that leaves some gaps, though the parameter names and sibling context mitigate them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only clarifies that the source parameter is the complete new source. It doesn't explain objectSourceUrl, lockHandle, or transport beyond what their names suggest.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a concrete action ('Replace the whole source') and a specific resource ('ABAP object'), clearly distinguishing it from patchObjectSource, which is named explicitly. This makes the tool's purpose immediately unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to prefer patchObjectSource for small changes and implies setObjectSource for whole-object replacements. This is direct, actionable routing guidance with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setPrettyPrinterSettingA
Change the pretty-printer setting for this user - it is a user setting and stays until changed back. It decides what prettyPrinter does to keywords and identifiers, so changing it changes how every later reformat looks.
| Name | Required | Description | Default |
|---|---|---|---|
| style | Yes | The pretty printer style. | |
| indent | Yes | Whether to indent the code. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only and not destructive. The description adds useful behavioral context beyond those annotations: the change is scoped to 'this user,' persists until reverted, and has a cascading effect on future formatting. This is meaningful side-effect disclosure 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no fluff, front-loaded with the core action and then adding only necessary context: persistence, user scope, and downstream effect. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter setter with annotations and no output schema, the description covers the essential invocation context: what is changed, who it affects, and how long it lasts. The main weakness is that valid values for the string 'style' parameter are not provided, but the description is otherwise complete enough for an agent to select and call the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds semantic value by stating that the setting 'decides what prettyPrinter does to keywords and identifiers,' which clarifies the meaning of the otherwise vague 'style' parameter. It does not enumerate valid style values, but it compensates for the schema's thin descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Change the pretty-printer setting for this user.' It clearly distinguishes itself from the sibling 'prettyPrinter' action tool by explaining that this is a persistent user-level setting rather than a one-off formatting operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool is appropriate: it is a user setting that persists 'until changed back' and affects 'every later reformat.' It does not explicitly name alternatives or state when not to use it, but the persistence and user-scope framing makes the intended use case unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setTextElementsA
Write the text elements of a program, class or function group. The write replaces the whole set for that category, so pass every element you want to keep - read them first with getTextElements. The lock is taken on the text elements resource - not on the object - and released again, unless you pass a handle or this server already holds one; outside $TMP a transport request is needed. Pass activate to finish the job, or run activateSafe afterwards: a text write leaves both the object and its text pool inactive.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Escape hatch: the text elements base URL. | |
| activate | No | Activate the object after the write (default false). Only possible when this tool took the lock itself - activation is refused while a session holds one. | |
| category | No | Which set to write: "symbols" (default), "selections" or "headings". | |
| elements | Yes | The complete set for this category: [{id, text, maxLength, ddicReference}]. For selection texts the id is the field name, e.g. P_WERKS; for text symbols the three-character number, e.g. 001. | |
| objectUrl | No | Object URL, used for the activation; derived from objectName and objectType when omitted. The lock is not taken on this - it goes on the text elements resource. | |
| transport | No | Transport request number - the request itself, not a developer task. | |
| lockHandle | No | Lock handle. Omit it: the one this server holds for the object is used, and with none held the lock is taken and released here. | |
| objectName | No | Object name, e.g. ZR_APP_FOO. | |
| objectType | No | ADT type of the object: PROG/P, CLAS/OC, FUGR/F. Defaults to PROG/P. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only provide readOnly=false and destructiveHint=false, but the description adds crucial behavior: the write replaces the whole set, the lock is taken on the text elements resource (not the object), lock release semantics, the transport requirement, and the fact that the object and text pool remain inactive after a text write. This far exceeds the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but each sentence contributes a needed constraint or consequence. It is front-loaded with the action and then covers caveats logically. It is somewhat long, but the complexity of the tool justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters and no output schema, the description covers the essential prerequisites, lock mechanics, transport, activation options, and post-write inactivity. An agent has enough context to invoke the tool correctly and anticipate its side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already well-documented. The description reinforces the elements semantics ('pass every element you want to keep') and lock behavior, but this largely duplicates the schema's existing 'complete set' and lockHandle descriptions. Baseline 3 is appropriate when the schema is exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Write' with the resource 'text elements of a program, class or function group', immediately distinguishing it from the sibling getTextElements ('read them first with getTextElements'). The scope is precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to read first with getTextElements, names activateSafe as an alternative for activation, and states the transport precondition ('outside $TMP a transport request is needed'). This clearly indicates when to use the tool and what prerequisites to satisfy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setTransportsConfigA
Change a transport configuration - which requests a user sees in the transport organizer. It is shared setup, not a per-call filter.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | The URI for the transport configuration. | |
| etag | Yes | The ETag for the transport configuration. | |
| config | Yes | The transport configuration (object, or a JSON string). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal that this is not read-only and not destructive, so 'Change' is consistent with them. The description adds that this is shared setup affecting user visibility, but it does not disclose concurrency behavior, whether the config is replaced wholesale, or how changes propagate to existing users.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry the core action, the domain impact, and the key distinction from per-call filters. There is no filler, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter tool with full schema coverage and annotations covering the safety profile, the description is largely sufficient. It could be more complete by explicitly routing to createTransportsConfig for new configs or by noting how to obtain the etag, but the core calling context is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already documented. The description does not add additional meaning to uri, etag, or config beyond what the schema provides, which meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Change') and the resource ('a transport configuration'), then explains what it controls: which requests a user sees in the transport organizer. It also distinguishes itself as shared setup rather than a per-call filter, which helps separate it from related transport tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful context: it is shared setup, not a per-call filter, so an agent understands the intended scope. It does not explicitly name an alternative tool for creating a new config or for per-call filtering, but the exclusion is reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sourceOutlineARead-only
Table of contents of an ABAP source: every REPORT, CLASS, METHOD, FORM, MODULE, FUNCTION, INCLUDE and event block with the line it starts on. Read this before paging through a long report or class - it turns "where is that subroutine" into one call. Text scanning, so it works on programs, includes and function groups alike.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | Only these kinds, e.g. ["FORM","METHOD"]. Omit for all of them. | |
| version | No | Which version to read: "active", "inactive" or "workingArea". | |
| searchIncludes | No | Also outline the includes the program pulls in (default false). | |
| objectSourceUrl | Yes | Source URL, e.g. /sap/bc/adt/programs/programs/zr_app_foo/source/main |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true and destructiveHint=false already in the annotations, the description adds the meaningful trait that the outline is generated by text scanning, which explains its uniform applicability to programs, includes, and function groups. No contradiction with the annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each with a distinct job: defining the output, giving the use case, and noting robustness. There is no filler or repetition, and the core result is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only outline tool with no output schema, the description conveys the essential result (line-indexed block list), the source types it works on, and the intended workflow. It could be more explicit about the exact response shape, but the schema covers parameters and the annotations cover safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 objectSourceUrl, kinds, version, and searchIncludes. The description adds no parameter-specific detail, but none is required for a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a concrete product: a table of contents of an ABAP source listing block types and their starting lines. It is specific enough to distinguish the tool from generic source readers, although it never names a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('read this before paging through a long report or class') and frames the value as locating subroutines in one call. It does not state when not to use it or point to an alternative, so it stops short of a full decision rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stageRepoA
Stage the local changes of an abapGit repository for a commit: which objects would go, with their state.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | The Git repository object. | |
| user | No | The username. | |
| password | No | The password. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already state readOnlyHint=false and destructiveHint=false. The description adds that this stages local changes and previews objects/states for a commit, which helps clarify the non-read-only side effect. However, it does not disclose authentication requirements (user/password) or any further impact on the repository state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the action and includes only essential information. The phrase 'which objects would go, with their state' efficiently communicates the tool's output focus without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 carries the responsibility of explaining return semantics; it partially does with 'which objects would go, with their state'. Still, it lacks guidance on how to obtain the repo object, the role of the optional user/password parameters, and the side effects of staging. Adequate but with notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. However, the schema descriptions are minimal ('The Git repository object', 'The username', 'The password') and the tool description adds no meaning to these parameters. It neither clarifies how to obtain the repo object nor explains the roles of user and password.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Stage') and resource ('local changes of an abapGit repository'), then clarifies the purpose ('for a commit') and what information the tool provides ('which objects would go, with their state'). This makes it clearly distinguishable from sibling git operations like gitPullRepo or pushRepo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the staging step before a commit but gives no explicit when-to-use or when-not-to-use guidance. No alternatives are named and no exclusions are stated, leaving the agent to infer the context from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
switchRepoBranchA
Switch an abapGit repository to another branch. It changes what the next pull would write, and a pull after it can rewrite the whole package.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | The Git repository. | |
| user | No | The username. | |
| branch | Yes | The branch name. | |
| create | No | Whether to create the branch if it doesn't exist. | |
| password | No | The password. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate non-read-only and non-destructive. The description adds meaningful behavioral context by warning that a subsequent pull can rewrite the whole package. This goes beyond the annotations and helps the agent understand the risk. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and contains no fluff. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters (2 required) and no output schema, the description is quite complete. It explains the key side effects and is consistent with the schema. It does not explain every edge case (e.g., branch creation via create flag), but those are covered by the schema. The description is adequate for an agent to understand the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented in the schema. The tool description does not add extra meaning to the parameters. Baseline score of 3 is appropriate since the schema carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Switch an abapGit repository to another branch') and the resource (abapGit repository). It also explains the consequence ('it changes what the next pull would write'), which differentiates it from siblings like gitPullRepo or gitCreateRepo. 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on the effect of switching (affects next pull, possible rewrite), but does not explicitly state when to use this tool vs alternatives like gitPullRepo or gitCreateRepo. No mention of exclusions or conditions. Usage is implied 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.
syntaxCheckCdsUrlARead-only
Syntax check for a CDS object, which is addressed differently from ABAP: the DDL source URL goes in as the main URL. For ordinary ABAP use syntaxCheckCode.
| Name | Required | Description | Default |
|---|---|---|---|
| cdsUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds the note about the DDL source URL being the main URL, which is more of a parameter usage detail than a behavioral trait. No additional side effects or behavioral nuances are disclosed beyond what annotations provide, so a baseline 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The core purpose is front-loaded, and the alternative is mentioned concisely at the end. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and no output schema. Annotations cover the safety profile. The description covers the key distinction from ABAP and directs to the right sibling. It does not describe the return value or error behavior, but for a syntax check that is typically implied. Overall sufficient for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage for the single parameter 'cdsUrl'. The description compensates by explaining that the DDL source URL goes in as the main URL, giving meaning and usage context that the schema lacks. This is helpful, though it does not specify the exact URL format or encoding requirements, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool performs a syntax check for a CDS object, with a specific verb and resource. Differentiates from the ABAP variant by noting the different URL addressing and explicitly pointing to syntaxCheckCode as the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use syntaxCheckCode for ordinary ABAP, providing a clear when-not scenario and an alternative tool. This leaves no ambiguity about when to select this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
syntaxCheckCodeARead-only
Perform ABAP syntax check. Provide the source in "code", or omit it to reuse the source last read/written for "url" via getObjectSource/setObjectSource (cached this session).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| code | No | The ABAP source to check. Optional if the source for "url" was already read or written this session. | |
| mainUrl | No | ||
| version | No | ||
| mainProgram | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds behavioral context beyond annotations: it explicitly discloses the session-scoped caching behavior and how source is reused via getObjectSource/setObjectSource. This is genuinely useful and not redundant with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences with zero fluff. The purpose is front-loaded, and the caching detail is tucked into the second clause. Every word earns its place; no redundant qualifiers or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with no output schema, the description covers the core usage path (code and url) but omits the auxiliary parameters (mainUrl, version, mainProgram) and does not hint at the return format (e.g., error list). The caching behavior is well explained, but an agent may need to discover parameter semantics elsewhere. Given the tool's moderate complexity, this is a clear gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 20% (only 'code' has a description). The description adds meaning to 'code' (optional if cached) and clarifies 'url' (the object whose cached source is reused). However, it provides no semantics for mainUrl, version, or mainProgram. With low coverage, the description partially compensates but leaves these parameters unexplained, so a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific declaration: 'Perform ABAP syntax check.' The verb 'perform' and resource 'ABAP' make the action unambiguous. Among siblings, it is distinctly the one for standard ABAP syntax (vs. syntaxCheckCdsUrl for CDS, syntaxCheckTypes for type checks), so an agent can differentiate 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage instructions: provide source in 'code' or omit it to reuse the cached source for 'url' acquired via getObjectSource/setObjectSource. It explains the caching mechanism and when to omit 'code', which is effective guidance. However, it does not mention when to prefer this over alternative syntax-checking siblings, leaving that to contextual inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
syntaxCheckTypesARead-only
Which syntax-check flavours this system offers, as the check endpoint understands them. Diagnostic; syntaxCheckCode picks the right one itself.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Diagnostic'. It adds useful scope detail by framing the flavours from the check endpoint's perspective, though it does not describe the exact return shape. For a zero-parameter read-only listing, that is a minor omission.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Both sentences are short and each adds distinct information: what the tool lists and how syntaxCheckCode relates to it. The first sentence is a fragment rather than a direct verb phrase like 'Lists...', which costs a point but does not waste words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-input, annotated read-only diagnostic tool, the description covers purpose and sibling relationship well. It does not mention the output representation, but the natural reading is an enumeration of flavour names, and there is no output schema to fill that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the 0-param baseline of 4 applies. The description appropriately says nothing about inputs, and no schema coverage gap needs compensating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific resource ('syntax-check flavours') and scope ('this system', 'as the check endpoint understands them'), and distinguishes itself from syntaxCheckCode, which selects the flavour automatically. Though the verb is implied ('which...offers'), the intent to enumerate available values is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly labels the tool as 'Diagnostic' and says syntaxCheckCode picks the right flavour itself, which tells the agent this is a discovery/helper tool rather than something needed for normal syntax checking. This gives a clear when/when-not cue relative to a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
systemUsersARead-only
The users of this system, as the transport tools offer them - who a request can be handed to or shared with. Search with filter rather than reading the whole address book of the system.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Cap on the users reported, default 50. The counts are always for everything found. | |
| filter | No | Case-insensitive substring, matched against both the user id and the name. Without it the whole list comes back, which on a real system is several hundred entries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds extra value by scoping the users to transport-tool semantics and by warning about the scale of the full list ('several hundred entries', 'whole address book')(The schema description also mentions this, but the wording in the tool description helps form the expectation of a read-only query that may produce a large result if unfiltered). This is useful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and relatively concise. It opens with what the resource is, then gives the travel recommendation about the filter. The first sentence is a bit dense and not a verb-first action, but it avoids fluff and quickly gives the key context. It earns a 4 for being efficient and organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list/search with two optional parameters and no output schema, the description covers the purpose, the parameter semantics (through the schema), and the scale caveat. It doesn't explicitly state the shape of a returned user object, but that is often not expected for a list tool and the tool name suggests users. Given the annotations and required params, this is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the parameters and gives detailed descriptions for limit (default 50, counts everything found) and filter (case-insensitive substring on id/name, whole list if absent). The description does not add any meaning beyond the schema; it only reiterates the advice to search with a filter. With full descriptive schema, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource (system users) and the context ('as the transport tools offer them', 'who a request can be handed to or shared with'.) It does not use an explicit verb like 'list' or 'search', instead describing the content, but the meaning is clear and it is distinct from transport-related sibling tools by emphasizing that these are users eligible for request handoff. It is not tautological and conveys a specific business scope, though it could be more direct about the operation being a listing/search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs the agent to use the filter: 'Search with filter rather than reading the whole address book of the system.' This gives clear context: when you need to find a user among potentially hundreds, you should apply a filter instead of pulling the full list. It does not name alternative tools or state when to use this tool instead of a different one, but the behavioral guidance within the tool is strong, so it earns a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tableContentsARead-only
Read rows of one table or view by name, with an optional WHERE clause - the quickest look at data when you know the table. Reading only: ADT serves no write here. For a join, an aggregate or anything over more than one table use runQuery; to see what FIELDS a table has use getStructureSource, because this answers with data and not with a definition. There is no offset in the backend, so paging fetches offset+rowNumber rows and returns the tail - pass an ORDER BY to make the window stable.
| Name | Required | Description | Default |
|---|---|---|---|
| decode | No | Whether to decode the data. | |
| offset | No | Skip this many leading rows. ADT has no offset, so the server fetches offset+rowNumber rows and returns the tail - add an ORDER BY to make the window stable. | |
| sqlQuery | No | An optional SQL query to filter the data. | |
| rowNumber | No | The maximum number of rows to retrieve. | |
| ddicEntityName | Yes | The name of the DDIC entity (table or view). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Reading only: ADT serves no write here.' It goes beyond annotations by disclosing the offset behavior: 'There is no offset in the backend, so paging fetches offset+rowNumber rows and returns the tail - pass an ORDER BY to make the window stable.' This is critical, non-obvious behavior that would affect correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place. It front-loads the core purpose, then adds the read-only caveat, routes to alternatives, and finally warns about the offset quirk. There is no redundant or filler content, and the structure leads the reader from the primary action to important caveats in a logical order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with no output schema, the description covers purpose, usage, alternatives, and a subtle paging limitation. It does not explicitly state the return format (e.g., a list of rows), but given the tool's name and purpose, an agent can reasonably infer that. The description is otherwise complete for correct invocation, so it earns a 4 rather than a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, meaning every parameter is described in the input schema. The description itself adds no new parameter-level detail beyond what the schema already states; for instance, the offset description in the schema mirrors the description's text. Since the schema carries the semantic load, the description's contribution is minimal, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise statement: 'Read rows of one table or view by name, with an optional WHERE clause - the quickest look at data when you know the table.' This clearly identifies the verb, resource, and scope. It also differentiates from sibling tools by explicitly naming runQuery (for joins/aggregates) and getStructureSource (for field definitions), so an agent can distinguish it without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use and when-not-to-use guidance. It says to use this when 'you know the table' and need a quick look, and directs to runQuery for anything over one table and getStructureSource for field metadata. It even notes the backend limitation (no offset) and recommends adding ORDER BY for stable paging, which is actionable usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tableFieldsARead-only
The fields of a table or structure, with the includes spliced in where they sit. Each field carries its position, key and not-null flags, data element, domain, ABAP type, length and decimals, the table its value is checked against, the field holding its unit or currency, and its text in the connection language. This is the answer to "what is in this table": getStructureSource gives the DDL text, where the type of a field is the name of its data element and an .INCLUDE is a line of text rather than the fields it brings - for EKPO, most of them. Reading only, and it executes nothing, so it works on a system where nothing may run.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Table or structure, e.g. EKPO or ZAPPSTEP_POS. | |
| fields | No | Keep only the fields whose name contains this text, case-insensitive - for a table with hundreds of them. | |
| keysOnly | No | Keep only the key fields. Default false. | |
| maxFields | No | Fields to return, default 200. The full count is reported either way. | |
| withTexts | No | Read the data element texts. Default true; false saves one query per 60 elements. | |
| expandIncludes | No | Splice the fields of an .INCLUDE into the list. Default true; false lists the include markers instead, which is the shape of the definition. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that it 'executes nothing' and works on locked-down systems, and clearly discloses the include-splicing default behavior, going beyond the annotation bare minimum.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then enumerates return field attributes and the key alternative. The description is a bit long but each part earns its place by shaping agent expectations about output and tool selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description compensates by listing exactly what each returned field contains. It also explains the include behavior, the distinction from getStructureSource, and the read-only nature. Minor gaps like pagination or defaults are already in the parameter schemas.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 six parameters. The description adds context about include splicing (aligning with expandIncludes) and the field list, but does not add new parameter-level meaning beyond what the schema already covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: the fields of a table or structure, including the include expansion behavior. It explicitly contrasts with getStructureSource, naming the distinct question it answers ('what is in this table') and the DDL alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Identifies the relevant alternative (getStructureSource) and gives the selection criterion: when you need the field inventory vs the DDL text. Also notes it works on systems where nothing may execute, but does not explicitly describe when NOT to use it beyond that contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tableIndexesARead-only
The secondary indexes of a table, each with the fields it is built on in order, whether it is unique and what it is called in the database. The answer to why a SELECT does or does not have an index to use. Reading only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Table, e.g. EKPO. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's 'Reading only' is consistent rather than additive. No deeper behavior such as failure modes, table existence requirements, or result-size limits is disclosed, but for a simple inspection tool the annotation coverage lowers the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, immediately stating what the tool returns before giving the use case and safety note. 'Reading only' is the only redundancy, duplicating the annotations without harming readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return values, and it does so: each index's fields in order, uniqueness, and database name. For a one-parameter read-only lookup, nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'name' is fully documented in the schema as 'Table, e.g. EKPO.', so the description does not need to add syntax or formatting details. The phrase 'of a table' agrees with the schema but adds no new meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('secondary indexes of a table') and the returned content: built-on fields in order, uniqueness, and database name. It lacks an explicit retrieval verb such as 'returns' or 'lists', and it does not explicitly distinguish the tool from siblings like tableFields and tableKeys, but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'The answer to why a SELECT does or does not have an index to use' provides a concrete context for when this tool is relevant: index-use diagnosis. There is no mention of alternatives or when not to use it, so it stops short of explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tableKeysARead-only
The foreign keys of a table: for each field, the table its value is checked against, the fields the two are joined on, the cardinality and whether the check is enforced on input. The answer to "where do the values of this field come from". Reading only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Table, e.g. ZAPPSTEP_POS. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with "Reading only". It adds useful output-oriented detail about cardinality and enforcement, but it does not disclose other behavioral aspects such as errors, authentication needs, or how missing tables are handled. The description carries only some weight beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first sentence gives the complete purpose and output composition, the second frames the use case helpfully, and the final sentence is a concise read-only reassurance. There is no filler or repeated schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only metadata lookup, the description adequately explains what the tool returns and what problem it solves. It does not specify the exact response envelope or error behavior, but given the low complexity and existing annotations this gap is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single name parameter, which already documents that it expects a table name like ZAPPSTEP_POS. The description adds essentially no additional parameter semantics beyond restating that the tool is about a table, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as a table's foreign keys and enumerates the returned metadata: reference table, join fields, cardinality, and enforcement. It is distinguishable from siblings like tableFields and tableIndexes, though it lacks an explicit verb such as "lists" or "returns".
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use case: "The answer to 'where do the values of this field come from'", and adds "Reading only". It does not explicitly name alternatives or state when not to use the tool, but the intent and context are unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracesCreateConfigurationA
Create a trace configuration: which user and which process to record, and for how long. Recording starts when that user next runs something. Needs parametersId - the URI tracesSetParameters answered with - plus traceUser, traceClient, processType, objectType, expires and maximalExecutions. A bare parameters id and a plain date are accepted here and normalised; sent to the backend as they stand, both answer a flat 400 that names neither field.
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes | The trace configuration (object, or a JSON string). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=false and destructiveHint=false. The description adds meaningful behavioral information beyond that: the recording does not start immediately but on the user's next run, and it discloses the error behavior for a bare parameters ID and a plain date (a flat 400 that does not name the field). This is more than the annotations would have conveyed alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three reasonably sized sentences with the primary purpose front-loaded. It packs a good amount of detail without resorting to padding, and no sentence is wasted. It becomes a bit dense in the third sentence about normalization and the 400 error, but it is still readable and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool only has a nested config object and no output schema, so the description carries a heavy burden. It does name the fields that are likely needed inside config, which is a good start, but it does not specify types or value enumerations for properties like processType, objectType, expires, or maximalExecutions. An agent might still struggle to construct a syntactically correct config without additional assumptions on the format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single config parameter is described only as an object or JSON string in the schema, so the description adds value by enumerating the nested fields: parametersId, traceUser, traceClient, processType, objectType, expires, and maximalExecutions. It goes further to state that a bare parameters ID and a plain date are normalized, providing practical constraints better than the generic schema. However, it still does not define exact value types or allowed formats for each nested property.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 trace configuration: which user and which process to record, and for how long." It clearly differentiates the tool from related trace tooling by specifying the creation intent and the key trigger condition (recording starts when the user next runs something). It also frames the input as the output of a sibling, tracesSetParameters, removing ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context for use: creating a trace configuration, and it explicitly states a prerequisite: a parametersId from tracesSetParameters. It does not, however, explicitly contrast with alternatives—for example it does not say "use tracesDeleteConfiguration to remove a trace"—so it falls short of the highest bar, but it is still more actionable than a generic one-line purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracesDbAccessARead-only
The database accesses of one trace: which tables, how many rows, how long - where a slow run met the database.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the trace. | |
| withSystemEvents | No | Whether to include system events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description need not repeat safety info. It adds context about the content (tables, rows, duration) and the slow-run connection, which is useful. However, it does not disclose return format, pagination, or any limitations (e.g., whether results are limited to slow statements). Given the annotations cover the core safety profile, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that immediately conveys the core purpose and key output elements. It front-loads the main point and avoids redundancy. There is no fluff or unnecessary detail, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a simple parameter set and annotations already cover the safety profile. However, the description does not specify what exactly constitutes 'database accesses' (e.g., all queries, only slow ones) nor how withSystemEvents affects the result. Given the existence of closely related siblings (tracesStatements, tracesHitList), more detail on the output scope would help an agent choose correctly. The absence of an output schema makes the description the only source of behavioral information, yet it leaves some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both id and withSystemEvents have clear descriptions. The tool description adds no extra meaning about the parameters themselves; it only describes the overall output. Since the schema already documents parameters thoroughly, the description does not need to compensate, but it also doesn't add value 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: it retrieves database access details for a specific trace, listing tables, row counts, and durations. It implicitly distinguishes itself from sibling tools like tracesList (list of traces) and tracesStatements (SQL statements) by focusing on database access performance. However, it lacks an explicit verb like 'get' or 'retrieve', so the purpose is clear but not perfectly explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It hints at the context ('where a slow run met the database') but does not state conditions for selection or exclusions. An agent must infer that this is for DB access analysis rather than general trace details. There is no mention of when to prefer tracesStatements or tracesHitList.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracesDeleteADestructive
Delete a recorded trace. Final, and the measurement cannot be taken again from the same run.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the trace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the destructiveHint annotation by explicitly stating that deletion is final and the measurement cannot be retaken from the same run. This warns the agent about an irreversible side effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the core purpose and the key warning without any filler. The most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive operation with no output schema, the description is adequately complete: it identifies the target resource, the action, and the irreversible consequence. Minor omissions such as prerequisites or error behavior are not critical at this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the only parameter, id, is documented as 'The ID of the trace.' The description adds no additional parameter detail, but the schema already carries the necessary 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Delete') on a specific resource ('a recorded trace'), making the tool's purpose immediately clear. It also differentiates from the sibling tracesDeleteConfiguration by specifying the trace record itself rather than a configuration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as tracesDeleteConfiguration or the various trace inspection tools. The description implies the obvious use case of deleting a trace but offers no decision guidance or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracesDeleteConfigurationADestructive
Delete a trace configuration, so nothing more is recorded under it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the trace configuration. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the agent knows this is destructive. The description adds 'so nothing more is recorded under it,' which clarifies the consequence beyond the mere destructive flag. This provides useful behavioral context that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action ('Delete') and the object ('trace configuration'), with no extraneous words. Every element contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with one parameter, the description fully covers what the tool does and its effect (stops recording). The destructive annotation covers safety, and no output schema is expected. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single 'id' parameter with a description. The tool description adds no additional semantics about the parameter (e.g., format, ownership, or validation). Baseline 3 is appropriate since the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete' and the resource 'trace configuration', and adds the purpose 'so nothing more is recorded under it.' This differentiates it from sibling tools like tracesDelete (which likely deletes trace data, not configuration) and tracesCreateConfiguration. The purpose is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for stopping recording under a configuration, but does not explicitly mention when to use vs alternatives. Sibling tools such as tracesDelete or tracesCreateConfiguration exist, but no direct comparison or exclusion criteria are given. The usage context is inferred from the purpose rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracesHitListARead-only
The hit list of a trace: what was called how often and for how long - the fastest read of where the time went. The hit list of a single ADT call runs to megabytes, so the answer is capped: pass heaviestFirst for the expensive end of it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the trace, as tracesList reports it. | |
| limit | No | Cap on the entries reported, default 100. The total is always for everything found. | |
| heaviestFirst | No | Sort by gross time, longest first, before capping. Off by default, which keeps the order the backend sent. | |
| withSystemEvents | No | Whether to include system events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given readOnlyHint=true and destructiveHint=false, the safety profile is already covered by annotations. The description adds meaningful behavioral context beyond annotations: the response can be very large for a single ADT call and is therefore capped, and heaviestFirst controls which end of the list is retained. This helps an agent understand output size and ordering behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The first sentence establishes the resource and value; the second warns about size and directs attention to the key parameter. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description plus schema is sufficient for an agent to call it correctly: id is sourced from tracesList, limit caps results, heaviestFirst controls sorting, and withSystemEvents is self-explanatory. There is no output schema, so the description's 'what was called how often and for how long' provides the return semantics, though it stops short of describing the exact shape of the returned entries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds a little context around heaviestFirst by calling it 'the expensive end' and clarifies the cap rationale, but it doesn't materially extend the meaning of id, limit, or withSystemEvents beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is clear that this tool returns the hit list of a specific trace — 'what was called how often and for how long' — and positions it as a performance overview. It doesn't use an explicit verb like 'get' or 'list', and it doesn't name sibling tools to distinguish itself, but the resource and intent are unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use case ('the fastest read of where the time went') and practical guidance to pass heaviestFirst when the expensive end is wanted. It doesn't explicitly contrast with sibling trace tools like tracesStatements or tracesList, but the context and parameters make the intended usage evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracesListARead-only
Traces recorded for this user, newest first, with their ids - the way into tracesHitList, tracesStatements and tracesDbAccess. Each run carries how long it took and when its file expires: an expired trace is still listed, but reading it answers "wrong input data".
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | The user. Defaults to the one this server logs in as. | |
| limit | No | Cap on the runs reported, default 50. The total is always for everything found. | |
| includeLinks | No | Keep the four atom links each run carries. They are half the size of the answer and only lead to SAP GUI, so they are dropped by default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds useful behavior beyond that: newest-first ordering, carried duration and expiry metadata, and the non-obvious caveat that expired traces remain listed but reading them answers 'wrong input data'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences front-load the core purpose and route, then add only essential caveats. Every part earns its place, with no filler or repetition of what the schema already provides.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still tells the agent what each returned run carries (id, duration, expiration) and what downstream operations are possible. Combined with full schema coverage and safety annotations, nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 (user, limit, includeLinks) without needing compensation. The description does not add parameter-level semantics, which is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific list resource ('traces recorded for this user'), explicit ordering ('newest first'), and the key payload ('their ids'). It also distinguishes itself from related tools by naming the downstream tools it feeds: tracesHitList, tracesStatements, and tracesDbAccess.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly positions this tool as the entry point ('the way into') for three sibling tools, giving strong contextual guidance. It does not, however, state when an alternative listing tool should be preferred, so it falls just short of a full when/when-not specification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracesListRequestsBRead-only
The recorded requests of a trace - one per unit of work measured. The entry point into a trace before its statements.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | The user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful context about the data shape ('one per unit of work measured') and its position in the trace exploration flow, but does not mention pagination, ordering, or other behavioral traits. Given the annotations, this is adequate though minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at two short sentences, but the first is a grammatical fragment ('The recorded requests of a trace - one per unit of work measured'), and the dash construction is awkward. It is not redundant, but the lack of a clear complete sentence hampers readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with one optional parameter and no output schema, the description gives a high-level return concept but leaves the 'user' parameter ambiguous and does not describe the structure of each request. Given the large set of sibling trace tools, an agent could still be unsure how to invoke this meaningfully without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'user' is described in the schema as 'The user,' which is unhelpful. The tool description does not clarify whether 'user' filters recorded requests, identifies the trace owner, or is unrelated to the trace. Since schema description coverage is 100%, the baseline is 3, but the description adds no semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource ('recorded requests of a trace') and adds a distinguishing detail ('one per unit of work measured' and 'entry point ... before its statements') that separates it from tracesStatements. However, it lacks an explicit verb like 'lists' or 'returns,' so the operation is implied by the tool name rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'The entry point into a trace before its statements' implies a navigational sequence: call this tool first to access request-level data before descending into statement-level detail. It does not explicitly name alternatives or state when not to use it, but there is enough contextual guidance for a trace-analysis workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracesSetParametersA
Set what the next trace records: statements, database access, aggregation. It applies to traces started afterwards, not to one already recorded.
| Name | Required | Description | Default |
|---|---|---|---|
| parameters | Yes | The trace parameters (object, or a JSON string). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so the description doesn't need to restate those. The description adds the key behavioral detail that the setting applies to future traces, not existing ones. It doesn't disclose side effects like whether this overwrites previous settings or persists across sessions, but the annotations already cover the basic safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the core purpose and then adding the critical temporal constraint. Every word earns its place; no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with annotations covering safety, the description is nearly complete. It explains the effect and the timing. The only gap is the lack of detail on the exact shape of the parameters object, but the schema already provides a basic description, and the tool's purpose is clear enough for an agent to proceed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter, but the description only says 'The trace parameters (object, or a JSON string).' The tool description adds context about what those parameters control (statements, database access, aggregation), which helps an agent understand the parameter's purpose. However, it doesn't specify the exact structure or allowed values of the parameters object, so the agent may need to infer from the sibling trace tools or other context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: setting what the next trace records (statements, database access, aggregation). It uses a specific verb ('Set') and resource ('what the next trace records'). It doesn't explicitly differentiate from sibling trace tools like tracesCreateConfiguration or tracesList, but the focus on 'parameters' for the next trace is distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it applies to traces started afterwards, not to one already recorded. This is an important temporal constraint that guides when to use it. However, it doesn't explicitly mention alternatives or when not to use it, though the sibling list includes related trace tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracesStatementsARead-only
The statements of one trace, with their times - where a run spent itself. Takes a trace id from tracesList. The trace has to have been recorded with aggregate false: the backend refuses statements for an aggregated one. One ADT call is some 8000 statements, so the answer is capped - pass heaviestFirst for the expensive end of it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the trace, as tracesList reports it. | |
| limit | No | Cap on the statements reported, default 100. The counts are always for everything found. | |
| options | No | Query options passed on to the backend, e.g. withDetails (object, or a JSON string). | |
| heaviestFirst | No | Sort by gross time, longest first, before capping. Off by default, which keeps the call sequence. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructiveasi. The description adds meaningful behavior beyond that: the recording-flag prerequisite, a hard backend refusal for aggregated traces, a cap on returned statements, and the scale of 'some 8000 statements' per ADT call. It does not describe the exact return format, but the annotations lower the bar for safety-related disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all with distinct information: what the tool returns, where the id comes from and a prerequisite, and how the capped output interacts with heaviestFirst. There is no filler or repetition of schema details, and the core purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with a fully documented schema illegivel, this is a solid definition. It covers the input source, a key failure condition, scale, and optional sorting. It does not explain the shape of the returned statements, but no output schema exists and the phrase 'statements... with their times' gives a basic mental model.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all four parameters, so the baseline is 3. The description adds value by linking id to tracesList, explaining why heaviestFirst matters in the context of a capped response, and giving scale context behind the limit parameter. Most parameter meaning comes from the schema, but the extra rationale helps an agent choose the right parameter behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: the statements of one trace, with times, and adds the evocative 'where a run spent itself.' It lacks an explicit imperative verb like 'returns' or 'lists,' but it is far from a tautology and conveys the purpose well. The phrase 'Takes a trace id from tracesList' also positions it relative to the sibling tracesList tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives actionable context: pass a trace id from tracesList except when aggregate true, because the backend refuses statements for aggregated traces. It also advises using heaviestFirst when interested in the expensive end of a capped result. It does not name an alternative tool for the aggregated case, but the guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transportAddUserB
Add a developer task for another user inside a request, so their changes can travel in it. Their objects then sit in their own task under the same request number.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | The user to add. | |
| transportNumber | Yes | The transport number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, so the description doesn't need to cover safety. It adds context about the effect (objects sit in their own task under the same request number), which is useful. However, it doesn't disclose potential side effects like whether the user must exist, whether the request must be modifiable, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff. The first sentence states the action and purpose, the second clarifies the structural outcome. It's front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter tool with full schema coverage and no output schema, the description is mostly adequate. It explains the core behavior but lacks edge-case guidance (e.g., what if the user already has a task, what if the transport is released). Given the tool's simplicity, a 3 is fair.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description adds the conceptual meaning of 'user' (the user to add) and 'transportNumber' (the request number), but doesn't add format or validation details 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Add a developer task for another user inside a request' and explains the effect ('their changes can travel in it'). It distinguishes itself from generic transport tools by specifying the user-task addition context, though it doesn't explicitly name a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when you need to add a user's task to an existing transport request. It doesn't explicitly state when not to use it or name alternatives, but the context of 'another user' and 'same request number' provides reasonable usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transportConfigurationsARead-only
The transport configurations available in the organizer, with their ids - what transportsByConfig takes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful context beyond the annotations: the configurations are scoped to the organizer desk and include their ids, plus the relationship to transportsByConfig. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no filler; every clause contributes either the resource scope, the returned content, or the relationship to a sibling tool. It is front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list operation, the description is complete: it states what is returned, the scope, and the consumer tool that needs the ids. The annotations cover safety, and no output schema is needed to understand the simple return content.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parametershare, so the schema fully covers parameters and the description does not need to explain any. The no-parameter baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource (transport configurations in the organizer) and distinguishes this tool from transportsByConfig by noting it provides the ids that transportsByConfig consumes. However, it is phrased as a noun phrase rather than an explicit verb action such as 'list' or 'retrieve', so it is not quite a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Use is implied through the note that this is what transportsByConfig takes, giving an agent a hint about when it is useful. It does not explicitly state when to prefer this over createTransport, getTransportConfiguration, setTransportsConfig, or other transport-related siblings, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transportDeleteADestructive
Delete a transport request or a task inside it. Only works while it is still open and empty of anything you want to keep: the objects in it stay as they are, only the request goes. Released requests cannot be deleted at all. Not undoable - ask before doing it to a request you did not create.
| Name | Required | Description | Default |
|---|---|---|---|
| transportNumber | Yes | The transport number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far beyond the destructiveHint annotation, the description discloses that deletion is not undoable, only works on open empty containers, preserves contained objects, and fails on released requests. This gives an agent a concrete behavioral model of the side effects and constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is front-loaded and the warnings are relevant, but the second sentence ('Only works...') is convoluted and can read as contradictory ('empty of anything you want to keep' vs. 'objects in it stay as they are'). The content is useful but needs tightening.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with no output schema, the description covers preconditions, side effects, non-undoability, and ownership caution. It leaves minor ambiguity about how a task deletion behaves versus a request deletion, so it is not a perfect 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single transportNumber parameter, so the baseline is 3. The description reinforces that the number may refer to a request or a task, but it does not state how task versus request is distinguished or the expected format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action 'Delete' and the resource 'a transport request or a task inside it', and the opening sentence is specific enough that an agent can tell it apart from release or owner-change siblings. It does not explicitly name a sibling to differentiate 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit preconditions and exclusions: only open requests, not released requests, and not undoable, with a caution to ask before deleting requests the user did not create. It does not point to an alternative tool when deletion is not possible, so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transportDetailsARead-only
What is inside one transport request: its own header (owner, description, status), its tasks and the objects recorded in it. This is the answer to "what does this request change" - the alternative was a SELECT on E071 through runQuery. Objects are returned as a flat list; pass raw=true for the ADT structure.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the unfiltered ADT structure instead of the flat summary. | |
| owner | No | Owner of the request, when it is not the logon user. Some systems only answer the per-request endpoint with the caller own transport list, and this says whose list to look in. | |
| includeTasks | No | List the tasks of the request (default true). | |
| includeObjects | No | List the objects of the request and of its tasks (default true). | |
| transportNumber | Yes | Request number, e.g. DEVK9A3OK4. A task number works too - it is looked up the same way. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral detail: objects come back as a flat list, raw=true switches to the unfiltered ADT structure, and both tasks and objects are included by default.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The core purpose is front-loaded, the alternative is stated briefly, and the raw flag behavior is included without redundancy. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description does a good job summarizing what is returned and the key mode switch. It could more explicitly cover edge cases like invalid transport numbers or the exact shape of the ADT structure, 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters, so the baseline is 3. The description adds extra semantic value by explicitly tying raw=true to the ADT structure and mentioning the flat-list representation, which clarifies the behavior of a parameter beyond its schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool returns — the header, tasks, and objects of one transport request — and frames it as the answer to 'what does this request change'. It is specific about the resource and content, though it does not explicitly distinguish itself from the sibling transportInfo tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use case ('this is the answer to what does this request change') and even names an alternative approach (SELECT on E071 through runQuery). It does not provide exhaustive when-not-to-use guidance relative to other transport-related siblings, but the context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transportInfoARead-only
Which transport request a change to this object would go into, and which ones are available for it - what ADT asks before it opens the transport dialog. Worth calling before a write outside $TMP, because a write with no request fails at the last step. Mind the difference the backend does not spell out: a REQUEST is what a write takes, a task inside it is refused with "not a change request".
| Name | Required | Description | Default |
|---|---|---|---|
| devClass | No | Development class | |
| operation | No | Transport operation | |
| objSourceUrl | Yes | URL of the object source |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable context beyond that: it explains the tool is what ADT queries before opening the transport dialog and highlights the subtle difference between a REQUEST and a task, which the backend doesn't spell out. This enriches the agent's understanding of the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, each serving a distinct purpose: purpose, usage timing, and a crucial caveat. It is front-loaded with the core purpose and contains no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with a single required parameter and no output schema, the description adequately explains what it returns (the target request and available ones) and when to call it. It doesn't detail the exact response shape, but that's not critical given its low risk and the annotations. The request/task distinction is a thoughtful addition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters have descriptions in the schema (100% coverage), so the schema carries the parameter meaning. The description implicitly refers to objSourceUrl as 'this object' but doesn't add further detail about devClass or operation beyond their schema descriptions. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it determines which transport request a change to a given object would go into and which requests are available. It avoids tautology and distinguishes itself from sibling tools by focusing on object-to-request mapping rather than request creation or details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises calling this before a write outside $TMP, citing that a write without a request fails at the last step. It also warns about the request vs. task distinction. However, it doesn't name specific alternative tools or explicitly state when not to use it, though 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.
transportReferenceCRead-only
What a transport reference points at: the object behind one entry of a request.
| Name | Required | Description | Default |
|---|---|---|---|
| pgmid | Yes | The program ID. | |
| obj_name | Yes | The object name. | |
| tr_number | No | The transport number. | |
| obj_wbtype | Yes | The object type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds some context by explaining that the tool concerns 'the object behind one entry of a request,' but it does not disclose what a caller gets back, especially since there is no output schema. This is adequate given the safe annotations, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that front-loads the core idea. It is concise and without filler, though slightly terse for a tool with four parameters and no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four parameters, no output schema, and a purely conceptual description, the definition is incomplete for invocation purposes. An agent is left uncertain about what the tool returns, how the parameters combine to identify the referenced object, and when this is the right tool to call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (pgmid, obj_name, tr_number, obj_wbtype) already has a basic description. The tool description itself adds no parameter-specific semantics, so it does not elevate the meaning beyond the schema. Baseline 3 is appropriate because the schema handles the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the conceptual purpose—'the object behind one entry of a request'—but it is phrased as a definition rather than an action. It does not state a verb such as 'resolves' or 'returns', so an agent must infer that the tool likely looks up or describes the target of a transport reference. It is not a tautology, but it also does not clearly differentiate itself from siblings like transportInfo or transportDetails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 transportInfo, transportDetails, or transportsByConfig. No context, exclusions, or alternative routing is provided; the description only implies a conceptual connection to transport references without stating a concrete use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transportReleaseADestructive
Release a request, which sends its objects on to the next system. Not undoable: a released request cannot be reopened, and the only way back is another request. It fails while any task inside it is still open, and while the objects have syntax errors. Ask before releasing anything - this is the step that changes another system.
| Name | Required | Description | Default |
|---|---|---|---|
| IgnoreATC | No | Whether to ignore ATC checks. | |
| ignoreLocks | No | Whether to ignore locks. | |
| transportNumber | Yes | The transport number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already flag destructiveHint=true, the description adds crucial behavioral detail: a released request cannot be reopened, the only way back is another request, failures happen under open tasks/syntax errors, and this step changes another system. This goes well beyond the annotation's simple destructiveness flag and gives the agent a clear risk model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place: the action, the irreversibility, the failure preconditions, and the warning to ask first. The most important operational fact (not undoable) is front-loaded. There is no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive action with no output schema, the description covers the essential context: what the tool does, its irreversible consequence, its failure conditions, and the human-oversight expectation. An agent has enough information to decide whether to invoke it and to explain the risk to a user. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 with descriptions in the schema. The tool description does not add parameter-specific meaning beyond that, which is acceptable but not exceptional. The baseline of 3 is appropriate since the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Release a request' that 'sends its objects on to the next system.' This clearly distinguishes transportRelease from sibling transport tools like createTransport, transportDelete, or transportInfo. The irreversible nature is immediately stated, making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong context on when to use this tool by explaining preconditions: it fails while tasks are open or objects have syntax errors, and it should not be invoked casually ('Ask before releasing anything'). It does not explicitly name alternative sibling tools or state when-not-to-use conditions beyond these, so it misses the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transportsByConfigARead-only
Transport requests of one organizer configuration, filtered as that configuration defines. For your own open requests use userTransports, which filters and shortens.
| Name | Required | Description | Default |
|---|---|---|---|
| targets | No | Whether to include target systems. | |
| configUri | Yes | The configuration URI. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows it's a safe read. The description adds the config-defined filtering behavior, which is useful context. However, it doesn't mention return format or potential errors, but given the safety profile, that's a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler. The main purpose is front-loaded, and the alternative is named second. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with two well-documented parameters and no output schema, the description covers purpose, scope, and differentiation. It lacks return-format details, but that's not critical given the simplicity and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (configUri and targets) are already documented. The description doesn't add parameter-specific details beyond what the schema provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns transport requests for a specific organizer configuration, filtered by that configuration's rules. It names the sibling userTransports and the difference, making it easy to distinguish 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool vs. the alternative: 'For your own open requests use userTransports'. This directly guides the agent to the correct choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transportSetOwnerA
Hand a request over to another user. The new owner sees it in their list and yours loses it; the objects and tasks inside stay as they are. Only an open request can change hands.
| Name | Required | Description | Default |
|---|---|---|---|
| targetuser | Yes | The target user. | |
| transportNumber | Yes | The transport number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already indicate this is a mutating, non-destructive operation, the description adds valuable behavioral detail: the ownership move, the visibility change for both users, the invariant that objects and tasks remain unchanged, and the open-request prerequisite. This goes well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, purposeful sentences. The main action is front-loaded, and every sentence adds necessary context: the ownership effect, the preservation of contained objects, and the open-request precondition. There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter operation, the description captures the core behavior, the state change, and the main precondition. It does not describe failure behavior, response format, or whether the target user must already be a valid transport participant, but for basic call selection these are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 'targetuser' and 'transportNumber' at a basic level. The description adds a domain interpretation ('another user', 'request') but does not provide additional format, validation, or operational semantics for either parameter. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Hand a request over to another user.' It then clarifies the observable effect (new owner sees it, current owner loses it) and explicitly states that contents are preserved, which distinguishes it from release or delete operations among the siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear transfer-ownership context and a concrete precondition ('Only an open request can change hands'). It does not explicitly name alternative tools or state when not to use it, but the behavior and precondition make the appropriate usage reasonably obvious among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
typeHierarchyARead-only
Subclasses or superclasses of a class or interface. Pass className or interfaceName and the declaration is located in the source here - the backend resolves a hierarchy from a cursor position rather than from a name, which is why url/body/line/offset are only the escape hatch. Defaults to descendants; set superTypes to walk upwards.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Escape hatch: object URL, used with body, line and offset instead of the lookup. | |
| body | No | Escape hatch: the source to resolve the position in. | |
| line | No | Escape hatch: 1-based line of the type name. | |
| name | No | Which type to point at, when the source holds more than one. Defaults to className/interfaceName. | |
| offset | No | Escape hatch: 0-based column of the type name. | |
| className | No | Class name, e.g. ZCL_APP_PCK_PLAN. | |
| superTypes | No | Walk upwards (superclasses, implemented interfaces) instead of downwards (default false). | |
| interfaceName | No | Interface name, e.g. ZIF_APP_C. | |
| objectSourceUrl | No | Source URL instead of a name, e.g. /sap/bc/adt/oo/classes/zcl_app/source/main. Pass name as well. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals that the hierarchy is resolved from a cursor position rather than from the name, which is non-obvious and explains the purpose of the escape-hatch parameters. It also discloses the default direction and the superTypes switch. Annotations already cover read-only safety, and nothing contradicts them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences convey the purpose, primary inputs, escape-hatch mechanism, and direction switch without redundancy. Slightly awkward phrasing ('located in the source here') and a fragment first sentence keep it from a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no required parameters and 100% schema coverage, the description covers the core calling modes and direction semantics. It does not describe the output shape, but with no output schema and a self-descriptive purpose, the omission is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by grouping url/body/line/offset as escape-hatch parameters and clarifying that className/interfaceName are the primary lookup path, which helps the agent choose between parameter sets.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: returning subclasses or superclasses of a class or interface. It identifies the primary inputs (className/interfaceName) and the hierarchy direction, but it does not explicitly distinguish itself from related siblings like classIncludes or sourceOutline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives practical usage guidance: pass a class or interface name, use superTypes to walk upwards, and rely on url/body/line/offset only as an escape hatch. It does not compare against alternative tools, but the usage context for this tool is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unitTestEvaluationARead-only
The evaluation behind a unit-test run, for the alerts a run reported. Prefer runTests, which activates first and reports each failure with its assert message.
| Name | Required | Description | Default |
|---|---|---|---|
| clas | Yes | A test class as returned by unitTestRun (object, or a JSON string). | |
| flags | No | Which test risk levels and durations to evaluate. Six booleans; a JSON string is accepted too. Omit for the ADT defaults. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile with readOnlyHint=true and destructiveHint=false, so the description does not need to re-disclose mutability. The description does add context that this is a post-run evaluation focused on alerts. It does not go further to describe what the returned alerts look like or how much of the test is available, so behavioral coverage 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences cover purpose, contextual limit, and guidance on the preferred sibling. There is no filler or repeated schema content, and the most important scoping ('alerts a run reported') is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-param read-only tool with full schema coverage, the description is minimally sufficient. It omits the precise return shape and does not clarify how the returned alerts are structured, especially because there is no output schema. The description is viable but leaves an agent to infer a good deal about the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents both the required `clas` object and the `flags` object, including accepted JSON-string forms and ADT defaults. The description itself adds little param semantic value beyond the schema. Since the schema does the heavy lifting, a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states that the tool returns 'the evaluation behind a unit-test run, for the alerts a run reported', which identifies the resource and output topic clearly enough. It also distinguishes the tool from runTests by noting that runTests is preferred for active test execution and assert-message reporting. However, 'The evaluation behind...' is slightly indirect and lacks a precise verb such as 'returns' or 'retrieves'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names runTests as the preferable sibling and explains why: it 'activates first and reports each failure with its assert message'. This is a useful when-to-use comparison that helps an agent avoid selecting the wrong tool. It does not fully spell out exact situations for choosing unitTestEvaluation, though the phrase 'for the alerts a run reported' gives reasonable context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unitTestOccurrenceMarkersBRead-only
The markers ADT draws next to code covered by a unit test - which lines a run touched.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL of the object. | |
| source | Yes | The source code. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds minimal behavioral context: markers correspond to lines touched by a test run. It does not contradict annotations, but it also does not disclose any further operational details such as dependence on prior test execution or output format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tight sentence with no filler. It front-loads the core concept and communicates the essential idea immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup with two fully described parameters and annotations covering side effects, the description conveys the expected result concept: markers for lines covered by a unit test. With no output schema, the exact marker format is not specified, but the definition is sufficient for selecting and invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'url' and 'source' already documented. The description adds no real parameter-level meaning beyond linking 'source' to the code being marked. Baseline 3 is appropriate because the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explains that the tool provides the markers ADT shows next to code covered by a unit test, specifically the lines a run touched. This conveys the resource and distinguishes it from sibling test execution/evaluation tools, though it lacks an explicit action verb such as 'retrieve' or 'return.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 siblings like unitTestRun, runTests, or unitTestEvaluation. It does not state whether a test must already have run, whether this reads stored results, or how to choose between this and similar coverage-related tools. The usage context is only implied by the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unitTestRunA
Run ABAP Unit tests for an object. An empty result does not mean the tests passed - it means none ran, and the answer then explains why (inactive object, or an include that does not compile).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL of the object to test. | |
| flags | No | Which test risk levels and durations to run. Six booleans; a JSON string is accepted too. Omit for the ADT defaults. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a valuable behavioral warning beyond the annotations: an empty result does not mean tests passed, but rather that no tests ran, and the answer explains why. This discloses a non-obvious result behavior that structured annotations do not convey. No contradiction from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action and then the critical caveat. Every sentence contributes meaningful information with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with 100% schema coverage and no output schema, the description covers the most important operational nuance. It does not detail full output shape or side effects, but it provides enough context for an agent to call and interpret the action correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 the url and flags parameters. The description adds no further semantic detail about parameters, so it stays at the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Run ABAP Unit tests for an object'), making the core purpose clear. It does not explicitly differentiate itself from sibling tools such as runTests or unitTestEvaluation, so it lacks explicit sibling distinction but is not vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like runTests or unitTestEvaluation, and no conditions or exclusions are stated. The main content is a result-interpretation caveat, not usage direction, so an agent gets no help choosing among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unLockA
Release an edit lock. Pass the handle, or leave it out and the one this server recorded for that object is used (see listLocks). Do it before activating - activation refuses while the session still holds the lock - and remember that deleting an object does NOT release its lock, so deleteObject releases it for you.
| Name | Required | Description | Default |
|---|---|---|---|
| objectUrl | Yes | URL of the object to unlock | |
| lockHandle | No | Lock handle obtained from previous lock operation; omit to use the one this server recorded for the object (see listLocks) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description reveals important behavior: the server records a lock per object, the handle can be omitted to use the recorded lock, activation is blocked until the lock is released, and deletion does not implicitly unlock objects. This is exactly the kind of behavioral detail an agent needs and is not available from readOnlyHint=false or destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The three sentences are dense but purposeful: one states the core action, one explains handle behavior, and one warns about sequencing and deletion. The last sentence is a bit long, but every clause earns its place and no filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's modest complexity, the description covers the required objectUrl, the optional lockHandle behavior, the relationship to activation, and the deletion caveat. It does not need to describe return values, and the absence of an output schema is acceptable because the key operational risks and sequencing are fully disclosed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description largely restates the lockHandle semantics already present in the schema: pass the handle or omit it to use the server-recorded one. It adds the activation context but does not substantially enrich the meaning of objectUrl beyond what the schema already says, so the schema carries the parameter-documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Release an edit lock,' a specific verb and resource, so the agent immediately knows the operation. It does not explicitly differentiate from the sibling tool unlockAll, though the singular 'an edit lock' and the lock-handle context imply one object at a time.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: use it before activation, because activation refuses while the session holds the lock. It also contrasts with deleteObject, noting that deleting an object does NOT release the lock and that deleteObject releases it for you, which helps route the agent away from an incorrect alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlockAllA
Release every lock this server holds. Use it to clean up after an edit that was abandoned; call listLocks first if you want to see what will be released.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by disclosing that the operation affects all server locks, framing it as cleanup, and warning the agent to inspect listLocks first. readOnlyHint=false already signals mutation, so no contradiction exists; it could add notes about impact on other sessions, but the essential behavioral warning is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences: the first front-loads the operation and scope, the second supplies purpose and a safety hint. No filler or repeated schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description covers what it does, when to use it, and how to make a safe call by consulting listLocks. Nothing essential for invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema description coverage, there are no parameter semantics for the description to clarify; baseline 4 applies. The description adds no parameter claims, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence 'Release every lock this server holds' names a specific action (release) and a precise resource with scope (every lock on the server), which clearly distinguishes it from unLock (single lock) and listLocks (inspection only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states an explicit use case ('clean up after an edit that was abandoned') and advises calling listLocks first to preview the effect. It does not explicitly name unLock as the alternative for releasing a single lock, but the scope is clear enough that the intended context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unPublishServiceBindingADestructive
Take a published service offline. Outward-facing and immediate: anything calling that endpoint stops working.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the service binding. | |
| version | Yes | The version of the service binding. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive (destructiveHint: true), and the description adds meaningful behavioral context: the operation is outward-facing and immediate, and all callers of the endpoint stop working. This goes beyond a simple 'unpublish' label to clarify the real-world impact and immediacy, which is useful for an agent deciding to invoke it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no unnecessary words. It front-loads the core action, then adds the key behavioral consequence. Every sentence earns its place, making it highly scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter destructive action with no output schema, the description is nearly complete: it states the action, the effect on callers, and the immediacy. It does not mention permissions or reversibility, but the annotations already signal destructiveness)Skip. Overall, this is sufficient for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for both parameters (name and version), including their types and descriptions. The tool description does not add additional parameter-level detail, so the baseline of 3 is appropriate; the schema carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Take a published service offline.' This clearly identifies what the tool does and differentiates it from the sibling publishServiceBinding, which performs the opposite operation. The phrasing leaves no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys the immediate, outward-facing effect, which implies when to use it (when a service must stop being served). However, it does not explicitly state when to use this tool versus an alternative, nor does it mention any exclusions or prerequisites. This is acceptable but leaves usage direction 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.
usageReferencesARead-only
Where-used for the symbol at a cursor position, or for the whole object when no position is given. The answer is a flat list that is really a tree - one row per package, per object, and per place inside it - so it is large: a widely used class answers with hundreds of rows and over a hundred thousand characters, past the response cap. Prefer impactOf, which asks this and rolls it up; use whereUsedMethod for one method by name.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| line | No | ||
| column | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: the response is a 'flat list that is really a tree' and can be 'hundreds of rows and over a hundred thousand characters, past the response cap.' This warns the agent about a critical behavioral trait (response size) that annotations don't convey. It doesn't describe the exact return format, but the warning about size and structure is significant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. The first sentence states the core function, the second warns about the response size, and the third routes to alternatives. Every sentence earns its place, and the critical warning about response cap is placed before the routing advice. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, the description covers the key operational aspects: what it does, how to invoke it (with/without position), the response size risk, and alternatives. The only gap is the lack of explicit return format details, but the warning about the tree-like structure and size is more important for an agent deciding whether to call it. The description is complete enough for an agent to make a correct call decision.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the semantics of the position parameters ('at a cursor position' implies line/column) and the optionality of position ('when no position is given' implies url alone works). However, it doesn't explicitly define what 'url' refers to (the object URL) or the exact format of line/column. The description adds some meaning beyond the bare schema, but not exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Where-used for the symbol at a cursor position, or for the whole object when no position is given.' It specifies the resource (symbol/object) and the operation (where-used analysis), and distinguishes it from siblings like whereUsedMethod and impactOf. The verb 'where-used' is specific and the scope is well-defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool vs alternatives: 'Prefer impactOf, which asks this and rolls it up; use whereUsedMethod for one method by name.' This is a clear routing instruction that names the alternatives and the conditions for choosing them. It also warns about the large response size, which is a practical usage consideration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usageReferenceSnippetsARead-only
The source lines around each usage, for references you already have from usageReferences - pass those rows back in. One more backend call and a much larger answer, so ask for it when the call site itself matters.
| Name | Required | Description | Default |
|---|---|---|---|
| references | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior. The description adds useful behavioral context beyond annotations: an extra round trip, a substantially larger response, and dependency on previously fetched usageReferences rows. It does not mention limits or exact snippet sizes, but these are not critical for this simple read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the main purpose appears first, followed by input guidance and a cost/usage note. Every sentence contributes useful information and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 without an output schema, the description gives enough context: what the response contains, where the input comes from, and when the additional cost is justified. The only minor gap is the lack of detail about how the snippet output is formatted or bounded.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does by explaining that the sole 'references' parameter should be populated with the rows obtained from usageReferences. It stops short of specifying the exact row shape or required fields, but for a single-parameter tool this is adequate guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool returns: source lines around each usage, scoped to references already obtained from usageReferences. It clearly differentiates this from sibling tools like usageReferences or whereUsedMethod by framing it as a follow-up operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to ask for it 'when the call site itself matters' and warns that it is 'one more backend call and a much larger answer', implying it should not be called reflexively. It does not explicitly name alternative tools or give a when-not condition, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
userTransportsARead-only
List a user's transport requests. Returns a flat, filterable list of requests (number, description, owner, status D=modifiable/R=released, target); pass raw=true for the full ADT payload, which with targets=true can exceed 400k characters. Note that targets=false makes the backend answer with empty lists on some systems, so leave it on unless you know otherwise.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the unfiltered ADT structure instead of the flat list. | |
| user | Yes | The user. | |
| owner | No | Keep only requests owned by this user (case-insensitive). | |
| status | No | Keep only requests with this status: "D" (modifiable), "R" (released) or "all" (default). | |
| targets | No | Whether to include target systems. Defaults to true, because false has been seen to return empty lists for users whose requests demonstrably exist. | |
| numberLike | No | Keep only requests whose number contains this text, e.g. "DEVK9A3". | |
| includeTasks | No | Include the tasks inside each request (Development/Correction entries). Off by default - they triple the output and are rarely what you are looking for. | |
| descriptionLike | No | Keep only requests whose description contains this text (case-insensitive). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive, and the description adds substantial behavioral context beyond that: the raw ADT payload can exceed 400k characters, targets=false can break on some systems, and the flat list shape. This is strong disclosure of system quirks and output behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler. The core purpose is front-loaded, and each additional sentence carries a useful caveat or behavioral note that an agent needs before calling the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description enumerates the flat list fields and explains the raw/targets behaviors, giving an agent enough to understand return shape and risks. For a read-only listing tool with 100% parameter documentation, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful extra context for raw and targets—payload size and a backend caveat—while also characterizing the default flat list. This goes beyond the schema without needing to re-document every parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List a user's transport requests.' It names the returned fields and status semantics, making the tool's scope unambiguous against siblings like transportDetails or transportsByConfig.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational guidance: when to pass raw=true, how large the payload can get, and that targets=false can cause empty results. It does not explicitly name sibling alternatives, but the purpose is clear enough that an agent can infer when this tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validateNewObjectARead-only
Ask the system whether a new object may be created under this name, in this package, with this description - the check ADT runs before a creation dialog is accepted. It answers with the reason a name is refused (already taken, reserved, wrong namespace). Careful with the answer: some collections reply 200 with an empty body, which the library reads as failure, so a free name can look refused; createObject and createAndWrite handle that themselves.
| Name | Required | Description | Default |
|---|---|---|---|
| options | Yes | Validation options: {objtype, objname, packagename, description} for an object, or the group/package variants. A JSON string is accepted too. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint/destructiveHint annotations by disclosing the refusal reasons (already taken, reserved, wrong namespace) and the critical edge case where some collections return 200 with an empty body and the library reads that as failure. This is exactly the kind of behavioral nuance 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. The purpose is front-loaded, the refusal-reason behavior is stated next, and the empty-body caveat is saved for last where it can be appreciated as a warning. Every sentence earns its place, though the third sentence is slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by explaining what the tool answers and the problematic empty-body case. It stops short of telling the agent how to safely distinguish a truly free name from a false refusal, except by deferring to createObject/createAndWrite. This is enough for most callers but leaves some ambiguity about relying on the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single options parameter, including the fields {objtype, objname, packagename, description} and the group/package variants. The tool description adds no parameter detail beyond what the schema already 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Ask the system whether a new object may be created under this name, in this package, with this description.' It also adds the exact context (the pre-creation ADT check) and differentiates it from createObject/createAndWrite by noting they handle the check themselves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states this is the check 'ADT runs before a creation dialog is accepted,' making the intended pre-creation use clear. It also names createObject and createAndWrite as tools that handle the check internally. However, it does not explicitly say 'use this instead of createObject when you only need validation,' leaving a small amount of inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whereUsedMethodARead-only
Who calls this method. usageReferences needs the line and column of the name inside the source, which means reading the class first and counting characters; here the method name is enough. Returns the callers with the object they sit in, and their source snippets with snippets=true.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | Method name, e.g. CHECK_PLAN. The declaration is preferred over the implementation, because ADT answers a where-used on the declaration with every caller. | |
| snippets | No | Also fetch the source snippet of each usage (one more backend call, much larger answer). | |
| className | No | Class holding the method, e.g. ZCL_APP_PCK_PLAN. | |
| interfaceName | No | Interface holding the method, for an interface method. | |
| objectSourceUrl | No | Source URL instead of a name, e.g. /sap/bc/adt/oo/classes/zcl_app/source/main. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is known. The description adds that it returns callers with their containing object and optionally source snippets, and highlights the simpler input requirement compared to usageReferences. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose, and no redundant phrasing. Efficiently conveys the key contrast and output behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a read-only lookup with a well-documented schema, the description covers the essential behavioral difference (vs usageReferences) and the optional snippets behavior. It doesn't explain every parameter, but the schema handles that, so it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already documented. The description does not add additional semantic information 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States clearly that it finds callers of a method, and differentiates from usageReferences by noting it only needs the method name rather than line/column coordinates. This is a specific verb+resource with sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly contrasts with usageReferences, explaining that usageReferences requires line/column coordinates, while this tool works with just the method name. This gives clear when-to-use guidance and implies the alternative.
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.
177 tool updates
v0.1.1- First observed
abapDocumentation - First observed
abapPath - First observed
activateByName - First observed
activateObjects - First observed
activateSafe - First observed
addAttribute - First observed
addMethod - First observed
adtCompatibiliyGraph - First observed
adtCoreDiscovery - First observed
adtDiscovery - First observed
annotationDefinitions - First observed
atcChangeContact - First observed
atcCheck - First observed
atcCheckVariant - First observed
atcContactUri - First observed
atcCustomizing - First observed
atcDocumentation - First observed
atcExemptProposal - First observed
atcRequestExemption - First observed
atcUsers - First observed
atcWorklists - First observed
bindingDetails - First observed
callFunction - First observed
callMethod - First observed
changePackagePreview - First observed
checkRepo - First observed
classComponents - First observed
classIncludes - First observed
codeCompletion - First observed
codeCompletionElement - First observed
codeCompletionFull - First observed
collectionFeatureDetails - First observed
compareRevisions - First observed
createAndWrite - First observed
createAtcRun - First observed
createDataElement - First observed
createDomain - First observed
createFunctionModule - First observed
createInclude - First observed
createMessageClass - First observed
createObject - First observed
createStructure - First observed
createTestInclude - First observed
createTransport - First observed
createTransportsConfig - First observed
ddicElement - First observed
ddicRepositoryAccess - First observed
debuggerAttach - First observed
debuggerChildVariables - First observed
debuggerDeleteBreakpoints - First observed
debuggerDeleteListener - First observed
debuggerGoToStack - First observed
debuggerListen - First observed
debuggerListeners - First observed
debuggerSaveSettings - First observed
debuggerSetBreakpoints - First observed
debuggerSetVariableValue - First observed
debuggerStackTrace - First observed
debuggerStep - First observed
debuggerVariables - First observed
deleteMethod - First observed
deleteObject - First observed
dropSession - First observed
dumps - First observed
editObject - First observed
extractMethodEvaluate - First observed
extractMethodExecute - First observed
extractMethodPreview - First observed
featureDetails - First observed
feeds - First observed
findCollectionByUrl - First observed
findDefinition - First observed
findInSource - First observed
findObjectPath - First observed
fixEdits - First observed
fixProposals - First observed
fragmentMappings - First observed
getDataElementProperties - First observed
getDomainProperties - First observed
getFunctionModule - First observed
getMessageLongtext - First observed
getMessages - First observed
getObjectSource - First observed
getStructureSource - First observed
getTextElements - First observed
getTransportConfiguration - First observed
gitCreateRepo - First observed
gitExternalRepoInfo - First observed
gitPullRepo - First observed
gitRepos - First observed
gitUnlinkRepo - First observed
hasTransportConfig - First observed
healthcheck - First observed
impactOf - First observed
inactiveObjects - First observed
isProposalMessage - First observed
listFunctionGroup - First observed
listLocks - First observed
loadTypes - First observed
lock - First observed
login - First observed
logout - First observed
mainPrograms - First observed
nodeContents - First observed
objectEnhancements - First observed
objectRegistrationInfo - First observed
objectStructure - First observed
objectTypes - First observed
packageSearchHelp - First observed
packageTree - First observed
patchObjectSource - First observed
prettyPrinter - First observed
prettyPrinterSetting - First observed
publishServiceBinding - First observed
pushRepo - First observed
rapGenIsAvailable - First observed
readSources - First observed
reentranceTicket - First observed
remoteRepoInfo - First observed
renameEvaluate - First observed
renameExecute - First observed
renamePreview - First observed
revisions - First observed
runClass - First observed
runQuery - First observed
runSnippet - First observed
runTests - First observed
searchInPackage - First observed
searchObject - First observed
setDataElementProperties - First observed
setDomainProperties - First observed
setMessages - First observed
setObjectSource - First observed
setPrettyPrinterSetting - First observed
setTextElements - First observed
setTransportsConfig - First observed
sourceOutline - First observed
stageRepo - First observed
switchRepoBranch - First observed
syntaxCheckCdsUrl - First observed
syntaxCheckCode - First observed
syntaxCheckTypes - First observed
systemUsers - First observed
tableContents - First observed
tableFields - First observed
tableIndexes - First observed
tableKeys - First observed
tracesCreateConfiguration - First observed
tracesDbAccess - First observed
tracesDelete - First observed
tracesDeleteConfiguration - First observed
tracesHitList - First observed
tracesList - First observed
tracesListRequests - First observed
tracesSetParameters - First observed
tracesStatements - First observed
transportAddUser - First observed
transportConfigurations - First observed
transportDelete - First observed
transportDetails - First observed
transportInfo - First observed
transportReference - First observed
transportRelease - First observed
transportsByConfig - First observed
transportSetOwner - First observed
typeHierarchy - First observed
unitTestEvaluation - First observed
unitTestOccurrenceMarkers - First observed
unitTestRun - First observed
unLock - First observed
unlockAll - First observed
unPublishServiceBinding - First observed
usageReferences - First observed
usageReferenceSnippets - First observed
userTransports - First observed
validateNewObject - First observed
whereUsedMethod
TDQS
Scored across 177 tools
Many tools have clearly distinct purposes, and the descriptions are thorough. However, there are redundant tools like unitTestRun vs runTests and activateByName vs activateSafe vs activateObjects, which overlap in function and require reading descriptions to choose correctly. With 177 tools, some clusters (source read/edit, debugger, ATC) risk confusion despite good documentation.
The vast majority follow a consistent camelCase convention with verbs first (getObjectSource, setTextElements, activateSafe). Minor deviations exist: noun-based tools like revisions, dumps, systemUsers, and inconsistent prefixes (hasTransportConfig vs transportConfigurations vs getTransportConfiguration) create slight irregularity, but the overall pattern is predictable.
At 177 tools, the count is far beyond the 25+ threshold and even the 50+ extreme-mismatch line. While the ADT API is broad, the sheer number makes the server unwieldy for an agent to navigate, and many tools could be consolidated (e.g., multiple debugger step/attach tools, several ATC worklist variants).
The surface covers nearly every ADT domain: source CRUD, DDIC (domains, data elements, structures, tables), transports, git, debugging, ATC, traces, refactoring, function modules, unit tests, and data querying. Lifecycle operations are present for most object types, with activation verification and rollback awareness. No obvious critical gaps for the stated purpose.
Maintenance
Related MCP Connectors
Access the GitHub API, enabling file operations, repository management, search functionality, and…
Manage files and folders directly from your workspace. Read and write files, list directories, cre…
Read-only AI coding tools for change verification, release readiness, capacity, and guidance.
List, read, edit, and deploy your GenMB AI-generated apps from any MCP client.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables interaction with SAP ABAP systems through ABAP Development Tools (ADT), providing access to repository objects, source code, where-used analysis, and SQL queries with support for both on-premise and BTP systems.3-
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to access SAP ADT APIs for reading, writing, debugging, deploying, and testing ABAP code through natural language or DSL automation.467MIT
- FlicenseNot gradedqualityBmaintenanceEnables SAP ABAP development workflows including ADT login, object search, read, create, update, activate, delete, and OData service publishing.1-
- AlicenseCqualityCmaintenanceFacilitates interaction with SAP ABAP systems via ADT APIs, enabling object management, transport handling, and code analysis.10072MIT