Skip to main content
Glama
dnic-dev

bw-modeling-mcp

by dnic-dev

bw-modeling-mcp

A Model Context Protocol (MCP) server that enables AI assistants like Claude to work directly inside SAP BW/4HANA or SAP BW 7.5 on HANA systems — reading, creating and modifying BW modeling objects via the same internal SAP APIs that Eclipse BWMT and the BW/4HANA Cockpit use: the BW Modeling REST API (/sap/bw/modeling/) for objects, queries and live data, the ADT API (/sap/bc/adt/) for the ABAP and AMDP routines BW generates, the BW/4HANA manage API for the request monitor and runtime, and the Push API (/sap/bw4/) for data loads.

This is not a simulation. Every tool call connects to a live BW system — write operations produce real changes.


☁️ Running on SAP BTP Cloud Foundry

Central MCP server for AI-assisted SAP BW modeling: MCP-capable AI clients connect via OAuth to bw-modeling-mcp, whose analyst, reader and developer roles reach on-premise, private cloud and BW Bridge systems via principal propagation

Besides stdio, the server can run as an HTTP service on SAP BTP Cloud Foundry with XSUAA OAuth in front and a BTP destination behind — either a shared technical user (BasicAuthentication) or principal propagation, where each caller reaches BW as themselves and BW applies their own authorizations.

Three role collections decide what a user is offered: BW MCP Reader (everything that only reads), BW MCP Analyst (a small reporting client — run queries and understand what they return) and BW MCP Developer (everything, including changes). stdio is unchanged — npm start behaves exactly as before. Setup: docs/CENTRAL-HOSTING-SETUP.md (step-by-step) and docs/CLOUD-FOUNDRY.md (reference).

What central hosting changes

Scenario

stdio only

Hosted on BTP

One analyst, one BW system

runs on the analyst's machine

server-side, the analyst logs in with their own identity

Several analysts, one server

not possible, no central auth

all log in via BTP, each caller's identity reaches BW

Tool permissions

none — whoever runs it can call every tool

granted per role, independent of BW authorizations: a BW developer can be read-only in the MCP, or the querying tools can be withheld from someone who may otherwise view data

BW authorizations

enforced through the user's own credentials

unchanged, still fully enforced — with principal propagation each caller acts as themselves, never as a shared identity

Audit trail

limited

XSUAA logs every login; with principal propagation the BW session log shows the real user

A new tool stays unavailable to read-only callers until it is explicitly classified as a read, so the surface never widens by accident; write implies read, never the reverse. The three role collections are a starting point and can be split further in xs-security.json. Principal propagation additionally needs a certificate rule and ICM trust on the BW side.


Related MCP server: abap-adt-mcp

System Compatibility

System

Support

SAP BW/4HANA (all versions)

✅ Full support

SAP BW Bridge (SAP BTP ABAP stack)

✅ Via cookie authentication (BW_COOKIE_FILE)

SAP BW on HANA (7.5)

✅ Modelling reads after a small ABAP enhancement, and modelling writes for every object type except the InfoObject — aDSOs, InfoAreas, InfoSources, CompositeProviders, queries and their reusable components, aggregation levels. The tool surface adjusts to what the system publishes, and the objects without a REST resource — including planning, chain runs and the APD — are read from their metadata tables. bw_system_profile states per write tool what was verified there. See BW 7.5 Support


A two-part blog series about this project (both available in German and English):

  1. Agentic AI meets SAP BW — the full story behind this project: why I built it, what's inside, what happens when Claude walks through a complete BW data lineage on its own. https://www.nextlytics.com/blog/agentic-ai-meets-sap-bw

  2. Agentic AI in practice: MCP server for SAP BW/4HANA — how the server is operated company-wide on SAP BTP Cloud Foundry with role-based access and per-user identity, plus two real customer projects. https://www.nextlytics.com/blog/agentic-ai-in-practice-mcp-server-for-sap-bw/4hana


🆕 What's New — v1.8.0 · Agentic Planning Modelling

An agent can now build a BW planning model end to end — aggregation level, planning functions, filters and the planning sequence that ties them together — and start the process chain that runs it.

BW/4HANA

🧮 Agentic Planning Modelling

  • New bw_create_planning_function / bw_update_planning_function — every standard function type, each one created and read back: copy, delete, repost, distribution by key and by reference data, set values, revaluation, formula (FOX), characteristic relationships, currency and unit translation, forecasting

  • Characteristic usage, conditions, parameters (constant or variable), key figure and data selections in the same call; what the function type may not change is refused before saving

  • New bw_create_planning_filter / bw_update_planning_filter and bw_create_planning_sequence / bw_update_planning_sequence; bw_delete removes both

  • Deeper reads: bw_get_planning_filter, characteristic relationships and data slices in bw_get_planning_properties, the function type with all its parameters and the block characteristics in bw_get_planning_function

💱 Currency translation and unit conversion types

  • New bw_get_conversion_type / bw_create_conversion_type — currency translation and unit conversion types with every option of the BW Modeling Tools: source and target fixed, from the record or from a variable; exchange rate type, rate and time reference; unit factors from T006, an InfoObject or SI units; bw_delete removes them

  • Not a planning-only object: a translation type created here serves queries, transformation rules and planning functions alike — until now none could be created outside the modeling tools

▶️ Process chains start on request

  • New bw_start_process_chain — starts a chain now, in the background; with wait_seconds it waits for the result, and the log ID leads straight into bw_get_process_chain_run_detail

🌳 Hierarchies

  • New bw_get_hierarchy, bw_create_hierarchy, bw_update_hierarchy, bw_delete_hierarchy — text and value nodes; replacing the tree keeps the hierarchy ID, so queries that use it keep working

🔁 Transformations on a transport

  • bw_create_transformation takes a transport request and can activate in the same call (#32)

On every release (BW/4HANA and BW 7.5)

📈 Query statistics without SAP GUI

  • New bw_query_statistics — executions, users, runtime percentiles and the slowest runs broken down by layer, read from the BW statistics; bw_query_data with with_statistics measures its own call (#44)

🔤 Formula and text variables

  • bw_create_variable creates formula variables (dimension, default value, unit or currency) and text variables (replacement path or exit); text variables in descriptions are bound so they resolve at runtime instead of showing &NAME& (#47)

🔍 Query data that says what happened

  • bw_query_data filters hierarchy nodes, keeps interval bounds, says whether more rows follow and lists what BW did not apply (#45); bw_get_query shows display hierarchies

🛠️ Fixes

  • A short dump no longer leaves the server unable to lock; amount key figures activate; creates work behind a BTP destination and release their lock when they fail; master system read from the system (#34); rate limit per client on Cloud Foundry (#35); dependency advisories cleared (#40)

Thanks to @MWKAnalytics and @oliverluette for the analyses behind #44, #45 and #47.


Earlier releases — the "What's New" notes for v1.7.0 and older are archived in WHATS_NEW.md; the full structured history is in CHANGELOG.md.


What it can do

An overview by area. Every tool in detail — parameters, behaviour, and the sequences it belongs in — is in the Tools Reference (123 tools).


Combining with an ADT MCP Server

bw-modeling-mcp works best alongside an ADT MCP server such as vibing-steampunk or ARC-1. The two do not overlap as much as it may look.

This server owns the BW object and, with it, the body of the ABAP that BW generated for that object: the class behind a transformation routine, the program behind a DTP filter routine. Write those through bw_set_transformation_routine, bw_set_transformation_expert_routine and bw_set_dtp_filter_routine rather than through ADT — they do not only replace the source, they save the transformation master back afterwards, which is what re-registers the code in the transportable metadata. A class-only edit survives until the next regeneration or transport and is then gone.

The ADT MCP server covers ABAP as a subject in its own right: your own reports, classes, function modules and DDIC tables, repository search and navigation, arbitrary table reads, debugging, ATC, unit tests, dumps and transports. Together they cover the full cycle from BW object to ABAP logic.


Requirements

  • SAP BW/4HANA system with the internal SAP APIs enabled (SAP BW 7.5 works for modeling reads and most modelling writes once the enhancement in bw75/BW75-SUPPORT.md is in place)

  • Node.js 18 or later

  • An MCP-compatible AI client (Claude Desktop, Claude Code, etc.)


Installation

Two ways to run. Locally as a stdio server (one user, one machine — the steps below), or centrally hosted on SAP BTP Cloud Foundry behind XSUAA OAuth for a whole team → see docs/CENTRAL-HOSTING-SETUP.md. The installation and configuration below cover local stdio use; upgrading an existing local setup is non-breaking.

# Option 1: Install via npm (recommended)
npm install -g bw-modeling-mcp

# Option 2: Clone and build
git clone https://github.com/dnic-dev/bw-modeling-mcp.git
cd bw-modeling-mcp
npm install
npm run build

Configuration

For local (stdio) use, the server is configured via environment variables. For central BTP hosting, connection and credentials come from the BTP destination and service bindings instead — see docs/CENTRAL-HOSTING-SETUP.md.

Variable

Description

Required

BW_URL

BW system URL (e.g. https://myhost:50001)

yes

BW_USER

SAP user name

yes (or BW_COOKIE_FILE)

BW_PASSWORD

SAP password

yes (or BW_COOKIE_FILE)

BW_CLIENT

SAP client (e.g. 001)

yes

BW_LANGUAGE

Language for object texts (e.g. EN, DE). Default: DE

no

BW_COOKIE_FILE

Path to a browser-exported cookie file for SAML-/OAuth-fronted systems (e.g. BW Bridge). Netscape or name=value format. When set, BW_USER / BW_PASSWORD are optional.

no

BW_MCP_SERVER_NAME

Server name advertised in the MCP initialize handshake. Default: bw-modeling-mcp. Give each instance a unique name when running several against different BW systems.

no

BW_MCP_SYSTEM_LABEL

Free-text label of the connected BW system (e.g. AP4 (BW production, read-only)), put at the top of the MCP server instructions. Lets a model tell look-alike instances apart even in clients that show an opaque connector id instead of the server name.

no

BW_PLATFORM

auto (default), classic or bw4. The server detects whether it is talking to BW/4HANA or a classic release and offers only the tools that release can answer. classic forces that verdict when detection cannot run, bw4 switches the filter off. See bw75/BW75-SUPPORT.md.

no

Cookie authentication (BW Bridge / SAP BTP): For BW systems that sit behind a SAML or OAuth login (such as BW Bridge on the SAP BTP ABAP stack), Basic Auth is not available. Export the authenticated session cookies from your browser into a file and point BW_COOKIE_FILE at it. The login/session approach is analogous to vibing-steampunk and ARC-1. When the session expires, refresh the cookie file and restart the server.

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "bw-modeling-mcp": {
      "command": "node",
      "args": ["/path/to/bw-modeling-mcp/dist/stdio.js"],
      "env": {
        "BW_URL": "https://your-bw-host:50001",
        "BW_USER": "YOUR_USER",
        "BW_PASSWORD": "YOUR_PASSWORD",
        "BW_CLIENT": "001",
        "BW_LANGUAGE": "EN"
      }
    }
  }
}

Claude Code (VS Code extension)

Add .mcp.json to your project root:

{
  "mcpServers": {
    "bw-modeling-mcp": {
      "command": "node",
      "args": ["/path/to/bw-modeling-mcp/dist/stdio.js"],
      "env": {
        "BW_URL": "https://your-bw-host:50001",
        "BW_USER": "YOUR_USER",
        "BW_PASSWORD": "YOUR_PASSWORD",
        "BW_CLIENT": "001",
        "BW_LANGUAGE": "EN"
      }
    }
  }
}

How it works

The server talks to four SAP APIs, and only one of them needs a protocol worth describing.

The BW Modeling REST API (/sap/bw/modeling/) is a full-document API: there is no way to change one attribute of an object. Every write therefore runs the same six steps.

  1. Lock — acquires an exclusive lock and returns a lockHandle

  2. Read — fetches the current complete XML of the object

  3. Modify — applies the change to that XML

  4. PUT — sends the whole document back, never a fragment

  5. Activate — promotes the inactive version to the active one

  6. Unlock — releases the lock

Two consequences are worth knowing. Saving and activating are separate: a document the server accepts can still fail to activate, so a successful write proves less than it appears to. And because the whole document travels, a read that came from a stale session buffer will silently write old values back — the tools read fresh for exactly this reason.

The other three need none of it. The ADT API (/sap/bc/adt/) is used narrowly and always for an object BW generated itself: the body of a transformation routine (its generated class), the body of a DTP filter routine (its generated program), the DataPreview service behind bw_read_metadata_tables, plus transport checks and activation runs. Everything else ABAP — writing your own reports, classes or DDIC tables, searching the repository, reading arbitrary tables, debugging — is the job of an ABAP ADT MCP server alongside this one, see Combining with an ADT MCP Server. The BW/4HANA manage API (/sap/bc/http/sap/bw4/) answers the request monitor, the remodeling monitor and runtime operations. The Push API (/sap/bw4/v1/push/) takes a JSON record array straight into a write-interface aDSO.

Session cookies and CSRF tokens are handled for all four.

See ARCHITECTURE.md for the full technical architecture and the complete endpoint reference.


Roadmap

  • Focused mode — an optional, reduced tool surface: a handful of broad tools in place of the full set, for clients and models that work better with fewer tools to choose from.


Contributing

Issues and feature requests are welcome — please use the Issue templates.

If you have access to a BW/4HANA system and want to help expand coverage, I am happy to hear from you. The best way to contribute is to try it out and report what works, what doesn't, and what's missing.


License

MIT

Available Tools

123 tools
bw_activateA

Activate one BW object (aDSO, Transformation, DTP, InfoObject, InfoSource, DataSource, CompositeProvider, or Aggregation Level). Pass the lock_handle from bw_update_adso or bw_update_transformation. For DTP and DataSource (rsds) activation use lock_handle="" (no lock needed — standalone activation). For object_type "rsds" also pass source_system (a DataSource is identified by DataSource name plus source system). Unlock is sent automatically after activation (not for DTPs or DataSources). The response lists any DTPs deactivated by impact analysis — these must be re-activated.

ParametersJSON Schema
NameRequiredDescriptionDefault
transportNoTransport request number. Required on systems with transport obligation.
lock_handleYesLock handle from bw_update_adso or bw_update_transformation. Use empty string "" for DTP and DataSource (rsds) activation, and for an Aggregation Level (alvl) created with bw_create_aggregation_level.
object_nameYesObject name (e.g. "OBJECT_NAME" or "DTP_..."). For rsds, the DataSource name.
object_typeYesObject type: adso, trfn, dtpa, iobj, trcs, rsds (DataSource), hcpr (CompositeProvider), or alvl (Aggregation Level).
source_systemNoSource system name. Required when object_type is "rsds" (e.g. "LSYS_NAME").

TDQS

A4.4/5.0
Behavior4/5

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

There are no annotations, so the description carries the full behavioral burden. It discloses that unlock is sent automatically, except for DTPs and DataSources, and that impact analysis can deactivate DTPs that must be re-activated. This is strong side-effect transparency, though error behavior is not covered.

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

Conciseness5/5

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

The description is efficiently organized and every sentence contributes: scoping sentence, lock-handle rules, source-system rule, and a side-effect warning. There is no filler or redundant text.

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

Completeness4/5

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

For a five-parameter tool without an output schema, the description covers the nu rules, provides usage conditions, notes side effects, and warns about required re-activations. It does not describe the exact success/error return shape, but the essential calling requirements are covered.

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

Parameters4/5

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

Schema coverage is 100%, giving a baseline of 3. The description adds real value beyond the schema by explaining when lock_handle must be empty, when source_system is required, and how unlock behavior varies by object type.

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

Purpose5/5

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

The description starts with a specific verb and resource: 'Activate one BW object' and lists the exact supported object types. This clearly distinguishes it from sibling tools like bw_activate_request and bw_activate_process_chain.

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

Usage Guidelines4/5

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

The description gives concrete usage rules: when to pass a lock_handle, when to pass an empty string, and when to include source_system. It does not explicitly name alternative tools for request or process-chain activation, but the object-type enumeration makes the intended scope clear.

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

bw_activate_process_chainA

Activate an existing Process Chain (RSPC) via the BW/4HANA Cockpit REST API. Use this after bw_create_process_chain (with activate=false) or to re-activate a modified chain. Returns the top-level activation message, severity, and full log entries. Surfaces any log entries with severity "error" in a dedicated errors field.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProcess chain technical name (e.g. "CHAIN_NAME"). Case-insensitive.

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses it activates (mutation), returns message, severity, and log entries, and surfaces errors. It does not mention if the chain must be inactive or if activation is synchronous, but provides good insight overall.

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

Conciseness5/5

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

The description is two terse sentences front-loaded with the main action. No redundant words; every sentence adds value.

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

Completeness5/5

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

Given the low complexity (one parameter), full schema coverage, and clear return value description, the tool is well-documented and complete for its scope.

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

Parameters3/5

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

Schema coverage is 100% with a clear description including case-insensitivity. The tool description does not add additional meaning beyond what the schema already provides, earning a baseline 3.

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

Purpose5/5

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

The description clearly states it activates an existing Process Chain via the BW/4HANA Cockpit REST API, and distinguishes from sibling tools like bw_create_process_chain by specifying the use case after creation or reactivation.

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

Usage Guidelines4/5

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

Explicitly says when to use: after bw_create_process_chain with activate=false or to re-activate a modified chain. It does not state when not to use, 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.

bw_activate_requestA

Activate loaded data (DSO request activation): move a finished load from the Inbound Table into the active data table and change log. This is the runtime request activation, NOT the modeling-object activation done by bw_activate. Only applies to aDSOs that have an activation step (not inbound-only staging aDSOs). Activates all previous loads up to the given request. Asynchronous: a successful call starts activation; monitor completion via bw_list_requests / bw_get_request.

ParametersJSON Schema
NameRequiredDescriptionDefault
storageNoStorage area code the request lives in (default "AQ").
request_tsnYesLoad request TSN to activate (from bw_list_requests / bw_run_dtp output).

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully discloses key behaviors: it activates all previous loads up to the given request, moves data from Inbound Table to active data table and change log, and is asynchronous. No contradictions.

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

Conciseness5/5

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

The description is two well-structured sentences. The first sentence front-loads the action and scope, while the second provides important distinctions and asynchronous behavior. No wasted words.

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

Completeness5/5

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

The description covers prerequisites (aDSO with activation step), scope (all previous loads), asynchronous nature, and post-call monitoring via sibling tools. With only two parameters and no output schema, this is complete and self-contained.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for both parameters (request_tsn and storage). The description adds context that request_tsn comes from bw_list_requests/bw_run_dtp output and notes that storage defaults to 'AQ', but this mostly mirrors the schema. The additional context about 'all previous loads' is more about overall behavior than parameter semantics, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool activates loaded data (DSO request activation) and distinguishes it from bw_activate, which does modeling-object activation. The verb 'activate' and resource 'DSO request' are specific, and the differentiation from the sibling tool is explicit.

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

Usage Guidelines5/5

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

The description explicitly states when to use (for aDSOs with an activation step) and when not (not for inbound-only staging aDSOs, not modeling-object activation). It also notes that activation is asynchronous and that progress should be monitored via bw_list_requests or bw_get_request.

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

bw_add_process_chain_edgeA

Add one dependency (edge) between two existing steps of a Process Chain (RSPC), via the BW/4HANA Cockpit REST API. In-place edit: reads the current model, appends the edge, and PUTs it back. Use this to repair the wiring of a chain — for example to connect the end of a newly inserted block to the step that must run after it. Note that an "always continue" dependency is TWO edges (one on-success, one on-error): call this twice, once with status "positive" and once with "negative". Idempotent: an identical edge is skipped without writing. A 412 on the PUT means the ETag was stale (chain modified between read and write); the error reports this explicitly.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesTarget step. Same reference forms as "from".
fromYesSource step. Node reference forms: a DTP or process-variant name; an aDSO held by an ADSOACT/ADSOREM node; the program of an ABAP step, or "PROGRAM/VARIANT"; "TRIGGER" or a collector type ("AND"/"OR"); or "#<index>" using the step numbers printed by bw_get_process_chain. An ambiguous name is rejected with the candidates listed.
nameYesProcess chain technical name (e.g. "CHAIN_NAME"). Case-insensitive.
statusNoEdge condition: "positive" = on success, "negative" = on error, "neutral" = unconditional. Defaults to "neutral" when the source is the TRIGGER or a collector (neither can succeed or fail), "positive" otherwise.
activateNoIf true, activate the chain immediately after the edit. Default false.
sub_statusNoBranch condition for an edge leaving a DECISION step: the branch EVENTNO, e.g. "01" (THEN/JA) or "02" (ELSE/NEIN). Defaults to "00" (a normal, non-branch edge). A branch edge is always "positive".
transport_requestNoOptional transport request to record the change into. Only relevant when the chain is in a transportable package (not $TMP). If the chain is transportable and exactly one request is available, it is chosen automatically; pass this to disambiguate when several are available. Ignored for $TMP (local) chains.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description alone discloses the full behavioral profile: it reads the current model, appends the edge, and PUTs it back; it is idempotent for identical edges; and ETag stalreferencing (412) is explicitly explained. This is strong transparency for a mutating tool.

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

Conciseness5/5

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

The description is dense but no word is wasted. Purpose, mechanics, usage scenario, edge-condition nuance, and error behavior are each given one clear sentence in a logical order. Nothing feels padded or redundant.

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

Completeness5/5

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

For a 7-parameter mutating tool with no annotations and no output schema, the description is nearly complete: it explains what the operation does, how it mutates, when the right to use it, how to express a special edge type, and what error message to expect on concurrency conflict. Remaining details already live in the well-described schema.

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

Parameters4/5

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

Schema coverage is 100% coverage, so the schema already documents each parameter thoroughly. The description adds meaningful cross-parameter semantics by explaining that an 'always continue'edge requires two calls with status 'positive' and 'negative', and that identical edges are skipped. This goes beyond the schema without repeating it.

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

Purpose5/5

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

The description opens with a precise verb and target: 'Add one dependency (edge) between two existing steps of a Process Chain (RSPC).' It also distinctly scopes the tool as in-place edge wiring, making it clearly distinct from sibling tools that create, remove, or append process-chain nodes.

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

Usage Guidelines4/5

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

It gives explicit usage context ('repair the wiring of a chain') with a concrete example (connecting the end of a newly inserted block to the next step). It also covers the special two-call pattern for 'always continue' dependencies. The only gap is that it does not explicitly route away from the sibling error-link and removal tools.

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

bw_add_process_chain_programA

Add an "Execute ABAP Program" step (RSPC process type ABAP, "Programm ausführen") to an existing Process Chain (RSPC), via the BW/4HANA Cockpit REST API. Runs an ABAP report, optionally with a named SE38 selection variant. In-place edit: reads the current model, inserts the node + its INLINE process variant (the program call is stored inline in the chain — there is no separate variant object), and PUTs it back. Positioning: pass "before" to run the program ahead of an existing step (the target's incoming edges are rerouted through the new step, e.g. Start → PROGRAM → DTP); pass "after" to run it between a step and its successors; pass neither (optionally with predecessor) to append behind the strand end closest to the trigger. edge_mode "both" (default) adds an on-success and an on-error edge per new link; "success_only" adds only the on-success edge. Idempotent: if an ABAP step already calls the same program (and variant), it is skipped without writing. Only the synchronous/local/program call configuration is verified; keep the defaults. A 412 on the PUT means the ETag was stale (chain modified between read and write); the error reports this explicitly.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProcess chain technical name (e.g. "CHAIN_NAME"). Case-insensitive.
afterNoInsert the program step AFTER this node — it runs between the target and its former successors. Mutually exclusive with "before".
localNoCall location. true (default) runs the program on this system (X_LOCAL). Only the default is verified.
beforeNoInsert the program step BEFORE this node (its DTP/variant name, or an aDSO held by an ADSOACT node). The target's incoming edges are rerouted through the new step. Mutually exclusive with "after".
programYesABAP program / report to execute (e.g. "REPORT_NAME").
variantNoOptional ABAP report (SE38) selection variant name (e.g. "VARIANT_NAME"). Omit to run the report without a variant.
activateNoIf true, activate the chain immediately after the edit. Default false.
edge_modeNo"both" (default): add an on-success and an on-error edge per new link. "success_only": add only the on-success edge.
descriptionNoOptional step description (cosmetic).
predecessorNoUsed only when neither before nor after is given. Node to append behind (a DTP/variant name, an aDSO held by an ADSOACT node) or the literal "strand_end_auto" (default = terminal node closest to the trigger).
synchronousNoCall mode. true (default) runs the program synchronously (X_SYNCHRON). Only the default is verified.
program_packageNoOptional package of the report (cosmetic value-help enrichment; the server re-derives it when omitted).
transport_requestNoOptional transport request to record the change into. Only relevant when the chain is in a transportable package (not $TMP). If the chain is transportable and exactly one request is available, it is chosen automatically; pass this to disambiguate when several are available. Ignored for $TMP (local) chains.
program_descriptionNoOptional report description (cosmetic).
variant_descriptionNoOptional variant description (cosmetic).

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: in-place edit, idempotency (skip if same program/variant), edge rerouting details, and error handling. It also clarifies that only synchronous/local/defaults are verified. This provides comprehensive insight beyond the basic function.

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

Conciseness4/5

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

The description is detailed (~200 words) but efficiently combines multiple concepts: purpose, mechanism, positioning, edge mode, idempotency, and error handling. It is front-loaded with the core action. While concise given complexity, some technical details could be moved to notes, but overall it earns its space.

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

Completeness3/5

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

Given 15 parameters and no output schema, the description covers behavior, error handling, and positioning well. However, it does not describe the return value or output format for successful calls. For a tool without output schema, that omission leaves a gap, preventing the agent from fully understanding what to expect.

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

Parameters4/5

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

Schema coverage is 100% with descriptions for each parameter, so baseline is 3. The main description adds value by explaining how 'before', 'after', and 'predecessor' affect chain structure (e.g., rerouting), and gives examples ('Start → PROGRAM → DTP'). It goes beyond schema details to contextualize parameter usage.

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

Purpose5/5

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

The description clearly states the tool adds an 'Execute ABAP Program' step to a Process Chain, specifying the API and mechanism. It uses specific verbs ('Add', 'runs an ABAP report') and distinguishes from sibling tools like bw_create_process_chain or bw_update_process_chain by focusing on inserting a program step into an existing chain.

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

Usage Guidelines4/5

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

The description explains positioning options (before, after, append), edge modes, and idempotency, providing clear guidance on how to insert the step. It also notes error handling (412 for stale ETag) but does not explicitly compare with alternatives for other step types or state when not to use this tool.

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

bw_append_process_chain_dtpA

Add one DTP load step (optionally followed by its own DSO activation step) to an existing Process Chain (RSPC), via the BW/4HANA Cockpit REST API. In-place edit: reads the current model, inserts the node(s)/edge(s)/inline variant, and PUTs it back — the caller does not supply the full model. Positioning: pass "before" to place the block IN SERIES ahead of an existing step (the target's incoming edges are rerouted into the block, then the block links to the target), or "after" to place it in series between a step and its successors. With neither, the block is only APPENDED behind the strand end closest to the trigger (or behind "predecessor") — the target keeps its existing successors, so the block ends up running in PARALLEL to them, not ahead of them. Use before/after whenever the new step must complete before an existing one starts. When adsoact is given, the whole DTP → activation block is placed as one unit. edge_mode defaults to "both", which adds an on-success AND an on-error edge per link ("always continue" — the successor runs even after a failed load). Pass "success_only" for an on-success edge only, which is what a chain whose existing DTP steps have no error edge expects. Idempotent: if the DTP is already a node in the chain, it is skipped without writing. Optionally activates afterwards and then verifies that no collector was inserted and no extra strand appeared. A 412 on the PUT means the ETag was stale (chain modified between read and write); the error reports this explicitly.

ParametersJSON Schema
NameRequiredDescriptionDefault
dtpYesDTP variant name to append (e.g. "DTP_NAME").
nameYesProcess chain technical name (e.g. "CHAIN_NAME"). Case-insensitive.
afterNoInsert the block IN SERIES AFTER this node — it runs between the target and its former successors. Mutually exclusive with "before".
beforeNoInsert the block IN SERIES BEFORE this node: the target's incoming edges are rerouted into the block, then the block links to the target. Node reference — see the note below. Mutually exclusive with "after".
adsoactNoOptional aDSO name (e.g. "ADSO_NAME"). When given, an ADSOACT step activating this aDSO is added right after the DTP (per-DTP activation) and the two form one block that is placed together.
activateNoIf true, activate the chain immediately after the edit. Default false.
edge_modeNo"both" (default): add an on-success AND an on-error edge per link, so the successor runs even after a failed load ("always continue"). "success_only": add only the on-success edge. Match whatever the chain's existing steps use — the default adds an error edge that a success-only chain does not have.
predecessorNoUsed only when neither before nor after is given. Node to APPEND behind, or the literal "strand_end_auto" (default = terminal node closest to the trigger, ties → first). An append leaves the target's existing successors untouched, so the new block runs in parallel to them — pass before/after instead when it must run in sequence. Node reference forms (same for before / after / predecessor): a DTP or process-variant name; an aDSO held by an ADSOACT/ADSOREM node; the program of an ABAP step, or "PROGRAM/VARIANT"; "TRIGGER" or a collector type ("AND"/"OR"); or "#<index>" using the step numbers printed by bw_get_process_chain. An ambiguous name is rejected with the candidates listed — use "#<index>" then.
transport_requestNoOptional transport request to record the change into. Only relevant when the chain is in a transportable package (not $TMP). If the chain is transportable and exactly one request is available, it is chosen automatically; pass this to disambiguate when several are available. Ignored for $TMP (local) chains.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations to rely on, the description fully carries the burden and does so thoroughly: it discloses the in-place read/modify/write behavior, ETag staleness producing a 412, idempotent skip when the DTP already exists, default dual-edge 'always continue' semantics, placement after verification, and the exact structural impact of append vs before/after. This is rich, non-obvious behavioral context well beyond just saying 'adds a step'.

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

Conciseness4/5

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

The text is long and dense, but nearly every sentence carries a distinct piece of operational guidance: position routing, edge default, idempotency, ETag failure, block placement. The main structural weakness is that many separate topics are blended together without breaks, so an agent must parse deeply, though no filler is present.

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

Completeness5/5

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

Given the tool's complexity (nine parameters, two required), no annotations, and no output schema, this description is remarkably complete. It covers the risky positioning semantics, default behaviors, failure mode for stale ETags, transport relevance, idempotency, and node reference forms, leaving an agent with the information needed to correctly invoke it and interpret unexpected results.

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

Parameters5/5

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

Even though schema coverage is 100%, the description adds substantial semantic meaning: it explains how before/after interacts conceptually with rerouting, what 'neither' means for predecessor/strand end auto-selection, how adsoact makes the DTP and activation one block, and what edge_mode defaults and alternatives actually cause. The node-reference forms for predecessor and sibling named tools like bw_get_process_chain greatly enrich the raw parameter definitions.

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

Purpose5/5

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

The description opens with a specific verb-resource pair: 'Add one DTP load step (optionally followed by its own DSO activation step) to an existing Process Chain (RSPC)'. It clearly differentiates this tool from siblings like bw_swap_process_chain_dtp, bw_add_process_chain_program, and bw_add_process_chain_edge by naming the exact operation and its optional companion step.

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

Usage Guidelines5/5

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

The description gives explicit when-to and when-not-to instructions: use before/after when a step must complete before an existing one, and phrases like 'pass "before" to place...' and 'the block ends up running in PARALLEL to them, not ahead of them' spell out consequences. It also explains that edge_mode 'success_only' is what a chain with no existing error edges expects, giving actionable context for choosing parameters.

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

bw_change_datasource_deltaA

Change the delta process of a DataSource (RSDS deltaProperties). Full read-modify-write; the requested value is validated against the DataSource's admissible delta values. Leaves the DataSource inactive — activate separately with bw_activate (object_type "rsds"). Pass delta_process as an empty string to remove the delta process.

ParametersJSON Schema
NameRequiredDescriptionDefault
delta_processYesTarget delta process code (e.g. "FIL0"), or empty string for no delta.
source_systemYesSource system of the DataSource (compound key), e.g. "SOURCE_SYSTEM".
datasource_nameYesTechnical name of the DataSource (e.g. "DATASOURCE_NAME").

TDQS

A4.6/5.0
Behavior5/5

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

No annotations exist, but the description covers key behaviors: read-modify-write, validation against admissible values, deactivation side effect, and empty string removal. No contradictions.

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

Conciseness5/5

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

Three concise sentences with no fluff. Front-loaded with purpose and action, then side effects, then a specific parameter note.

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

Completeness4/5

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

For a mutation tool with no output schema, the description adequately explains inputs, behavior, and side effects. Minor gap: no mention of return value or error handling, but overall sufficient.

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

Parameters4/5

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

Schema covers all parameters with descriptions. The description adds that 'delta_process' can be empty to remove and that it is validated against admissible values, providing extra context beyond basic schema.

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

Purpose5/5

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

The description clearly states the action ('change the delta process'), the resource ('DataSource RSDS deltaProperties'), and distinguishes from siblings like 'bw_activate' by noting the datasource is left inactive.

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

Usage Guidelines4/5

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

Guidance is provided on when to use (change delta process), the read-modify-write behavior, validation, and the need to activate separately. Lacks explicit conditions for not using this tool but offers clear context.

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

bw_change_packageA

Assign an existing BW object to a different package (Development Class) and record the change on a transport request. Single write, no activation and no version change: this is a pure TADIR/transport assignment, so an active object stays active and no re-activation is required (verified for ADSO, TRFN, DTPA). Do not re-activate a TRFN afterwards — an activation with a stale lock can regenerate the AMDP method body. For object_type "RSDS" (DataSource) source_system is mandatory — the key is compound and the package change is verified by re-reading the DataSource. Verified for TRFN and RSDS; other TLOGO types use the same mechanism but are not trace-verified.

ParametersJSON Schema
NameRequiredDescriptionDefault
packageYesTarget package / Development Class (e.g. "Z_PACKAGE").
transportNoTransport request number (e.g. DEVK900123). Required on systems with transport obligation.
object_nameYesTechnical name of the object to reassign (e.g. "OBJECT_NAME").
object_typeYesBW object type / TLOGO, e.g. "TRFN", "ADSO", "IOBJ", "TRCS", "RSDS", "HCPR".
source_systemNoSource system — required only for object_type "RSDS" (a DataSource is identified by DataSource name plus source system).

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description fully covers behavioral traits: no activation, no version change, active object stays active, verified for specific types, and a warning about TRFN re-activation. It honestly notes that other types are not trace-verified.

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

Conciseness4/5

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

The description is slightly long but every sentence provides necessary detail. There is no fluff or repetition, and it is structured logically: action, behavior, warnings, special cases.

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

Completeness5/5

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

Given 5 parameters with 3 required and no output schema, the description adequately covers behavior, side effects, verified object types, and parameter nuances. It is complete 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.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by explaining the compound key for RSDS and that the change is verified by re-reading the DataSource. It also gives example values and clarifies mandatory conditions.

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

Purpose5/5

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

The description clearly states the verb 'assign' and the resource 'BW object to a different package', specifying it is a pure TADIR/transport assignment with no activation or version change. This distinguishes it from siblings like bw_move_object.

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

Usage Guidelines4/5

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

The description provides clear context: it's a single write, no activation needed, and explicitly warns not to re-activate TRFN afterwards. It also specifies that for RSDS, source_system is mandatory. However, it does not explicitly contrast with other tools like bw_move_object.

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

bw_create_adsoA

Create a new aDSO shell. action "from_template" (default): proposes fields/keys/settings from a template object — pass template_name. Without template_name creates an empty standard shell. The template can be an existing aDSO (template_type "ADSO", default) or a DataSource (template_type "RSDS"); for RSDS, source_system is required and the server proposes the DataSource fields. action "empty": creates a minimal empty aDSO with the given adso_type preset (no fields). After creation the aDSO is inactive — add fields with bw_update_adso, then call bw_activate.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelYesDescription / label for the new aDSO.
actionNo"from_template" (default) or "empty".
packageNoDevelopment package (default "$TMP").
adso_nameYesName for the new aDSO (e.g. "ADSO_NAME").
adso_typeNoaDSO type preset for action "empty" (default "standard").
info_areaYesInfoArea to create the aDSO in (e.g. "NEXTJUICE").
source_systemNoSource system name of the DataSource. Required when template_type is "RSDS".
template_nameNoTemplate object to propose fields from (action "from_template" only). An aDSO name when template_type is "ADSO", or a DataSource name when template_type is "RSDS".
template_typeNoType of the template object for action "from_template": "ADSO" (default) to copy from an existing aDSO, or "RSDS" to propose fields from a DataSource. When "RSDS", source_system is required.
write_interfaceNoEnable write interface (pushMode="true"). Default false.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description must disclose all behavioral traits. It does so by stating the created aDSO is inactive, the default action and template_type, and the requirement for source_system when template_type is RSDS. No contradictory or missing critical behavior.

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

Conciseness4/5

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

The description is moderately long but each sentence contributes essential information. It is well-structured: starts with the core action, then details each action's behavior, and ends with post-creation steps. No redundant phrases.

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

Completeness4/5

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

Given the tool's complexity (10 parameters, 2 actions, no output schema), the description covers parameter dependencies, default behaviors, and subsequent required steps (update/activate). It references related tools, providing sufficient context for correct invocation.

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

Parameters4/5

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

The input schema has 100% coverage, so baseline is 3. The description adds value by explaining dependencies (e.g., source_system required for RSDS) and defaults (action='from_template', template_type='ADSO'), going beyond mere schema descriptions.

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

Purpose5/5

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

The description clearly states 'Create a new aDSO shell' and elaborates on two specific actions (from_template, empty). It differentiates effectively from sibling tools like bw_create_datasource or bw_create_infoarea by focusing exclusively on aDSO creation.

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

Usage Guidelines4/5

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

The description explains when to use 'from_template' (with or without template_name) and 'empty', and provides workflow context (inactive shell, then update/activate). It does not explicitly list scenarios where the tool should not be used, but the guidance is adequate.

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

bw_create_aggregation_levelA

Create a new Aggregation Level (TLOGO ALVL) on top of a planning-enabled InfoProvider (aDSO or CompositeProvider), for Integrated Planning / embedded BPC. Sequence: lock → POST the shell → unlock → lock → PUT the field list → unlock. The Aggregation Level is created inactive — activate it with bw_activate using object_type "alvl" and lock_handle "". By default every characteristic and key figure of the InfoProvider is exposed; pass fields to restrict the selection. A selection needs at least one characteristic and one key figure, and it must contain every key field of the underlying provider, otherwise activation reports the missing ones. The InfoProvider must be planning-enabled, otherwise the create fails with a message saying it cannot serve as the basis of an aggregation level.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelYesDescription of the Aggregation Level.
fieldsNoCharacteristics and key figures to expose, by their name on the InfoProvider (e.g. ["FIELD_NAME", "IOBJ_NAME"]). Omit to expose every field of the provider. Read the provider with bw_get_adso or bw_get_composite_provider to see the names. On a CompositeProvider the fields carry a generated prefix ("<prefix>-FIELD_NAME"); both that form and the bare name are accepted.
packageNoDevelopment package. Defaults to "$TMP" (local, not transported).
info_areaYesInfoArea the Aggregation Level is created in (e.g. "AREA_NAME").
transportNoTransport request number. Required on systems with transport obligation.
info_providerYesTechnical name of the underlying planning-enabled InfoProvider — an aDSO or a CompositeProvider (e.g. "OBJECT_NAME").
aggregation_level_nameYesTechnical name of the new Aggregation Level (e.g. "OBJECT_NAME").

TDQS

A4.7/5.0
Behavior5/5

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

There are no annotations, so the description carries the full behavioral burden. It discloses the multi-step lock/POST/unlock/lock/PUT/unlock sequence, inactive-creation behavior, default exposure of all provider fields, selection constraints (at least one characteristic and one key figure, all key fields required), and the failure condition for non-planning-enabled providers. This is rare specificity.

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

Conciseness5/5

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

The description is structured and information-dense with zero filler. Complex procedural and constraint information is organized into ordered statements that progress from creation sequence, to activation, to field-selection rules, to failure conditions. Front-loading the core purpose and immediate procedural requirement is effective.

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

Completeness5/5

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

Given the tool's complexity, no output schema, and lack of annotations, this description is remarkably complete. It covers prerequisites, procedure, activation follow-up, optional parameters, field-list expectations, and common errors. The agent has everything needed to invoke the tool correctly and interpret the workflow around it.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema, especially around the 'fields' parameter: its effect (restrict vs expose all), accepted formats for CompositeProvider fields, and the required content of a valid selection. It also reinforces the planning-enabled prerequisite for info_provider, which is only implied in the schema.

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

Purpose5/5

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

The description states a specific action ('Create a new Aggregation Level') on a clearly identified resource type (TLOGO ALVL) with a defined underlying object (planning-enabled InfoProvider). It clearly scopes this tool relative to related operations like activation and update, so an agent can distinguish it from siblings.

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

Usage Guidelines4/5

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

The description clearly identifies the intended creation scenario and prerequisites (planning-enabled aDSO or CompositeProvider), and it tells the agent to use bw_activate for activation. It does not explicitly name bw_update_aggregation_level as the alternative for existing levels, so it stops short of full when-to-use versus when-not-to-use guidance.

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

bw_create_ckfA

Create a reusable Calculated Key Figure (CKF) on an InfoProvider. The formula is passed as an operator/operand tree in the same node syntax bw_update_query_key_figures uses for "add_formula", so a tree read back from bw_get_ckf (field formula_tree) can be written again unchanged. Records to a transport when package and transport_request are given, and reports in "recorded_in" where the entry actually landed.

ParametersJSON Schema
NameRequiredDescriptionDefault
formulaYesFormula tree. A node is one of: {"type":"operator","code":"+","operands":[...]} (codes as in the BW formula editor: + - * / , NDIV0, IF, MAX, %A, …); {"type":"component","component_name":"..."} for a reusable CKF/RKF; {"type":"key_figure","name":"..."} for a basic key figure InfoObject; {"type":"variable","variable_name":"..."} for a formula variable; {"type":"constant","value":100}. Operand counts are checked against the operator catalog before anything is written.
packageNoDevelopment package (default "$TMP").
decimalsNoNumber of decimal places (0-9). Server default when omitted.
info_areaNoInfoArea the CKF is filed under.
descriptionYesDescription of the CKF.
provider_nameYesInfoProvider the CKF is defined on (e.g. a CompositeProvider).
technical_nameYesTechnical name of the new CKF.
transport_requestNoTransport request to record the CKF in.
exception_aggregationNoException aggregation of the CKF itself, e.g. { "type": "SUM", "reference_characteristic": "IOBJ_NAME" }. Needed for a weighted average: a helper CKF "unit value * quantity" with SUM over the finest characteristic, divided by the quantity in a second CKF. Without it the product is formed from values already summed up — numerically plausible and wrong. Standard aggregation when omitted.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations the description carries the full burden, and it delivers non-obvious behavior: transport recording is conditional on package + transport_request, and the result reports where the entry landed in "recorded_in". It omits activation requirements, error/failure handling, and permission needs, so it is strong but not complete.

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

Conciseness4/5

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

Three sentences, front-loaded with the create action, then the formula contract, then transport behavior. Efficient with no filler, though the middle sentence is slightly dense.

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

Completeness4/5

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

There is no output schema, but the description covers the key return signal ("recorded_in") and the formula input contract, which is enough to call the tool correctly. Minor gaps remain around activation and error behavior for a creation tool with no annotations.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real value beyond the schema by documenting the formula tree's round-trip interchangeability with bw_get_ckf's formula_tree field. It still leaves the transport/package interaction largely to the schema.

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

Purpose5/5

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

States a specific verb and resource ("Create a reusable Calculated Key Figure (CKF) on an InfoProvider") and situates it among related tools, naming bw_get_ckf and bw_update_query_key_figures. An agent can distinguish this from bw_create_rkf and bw_update_ckf without opening a schema.

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

Usage Guidelines3/5

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

The description explains the formula syntax interoperates with bw_update_query_key_figures' "add_formula" and that a tree from bw_get_ckf can be reused, which implies the workflow. However it never states explicit when/when-not conditions or how to choose this over bw_create_rkf for a different key-figure type.

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

bw_create_composite_providerA

Create a CompositeProvider (HCPR). Without copy_from it creates a view node of the given type with the listed source providers attached — entity only, so give them their mappings afterwards with bw_update_composite_provider action "update_mapping". A Union node may be created empty; a JOIN node must be created WITH its sources, since a join node without inputs makes the server dump. With copy_from the server copies view node, inputs and mappings from an existing CompositeProvider. The result is inactive — activate it with bw_activate (object type hcpr).

ParametersJSON Schema
NameRequiredDescriptionDefault
labelYesDescription.
inputsNoSource InfoProviders to attach right away. Required in practice for a Join node.
packageNoDevelopment package (default "$TMP").
copy_fromNoCopy the structure of this existing CompositeProvider. view_type, inputs and stackable are then irrelevant — they come from the template.
info_areaYesInfoArea to create it in (e.g. "AREA_NAME").
stackableNoDefaults to false.
view_typeNoView node type. Defaults to "Join".
composite_provider_nameYesName for the new CompositeProvider (e.g. "HCPR_NAME").

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations available, the description fully carries the behavioral transparency burden. It disclose materials hidden side effects: a JOIN node without inputs crashes the server/creates a server dump, copied objects inherit mappings, and the created object is inactive and must be activated separately. These are not inferable from the name or schema and are highly decision-relevant.

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

Conciseness5/5

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

The description is dense and well-front-loaded, starting with the action, then covering the no-copy path, the special JOIN/Union behavior, the copy path, and the final activation step. Every sentence earns its keep and no line is filler or repeated schema content.

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

Completeness5/5

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

Given that there is no output schema and no annotations, the description explains everything needed to call this tool correctly and safely: the Join-with-inputs strict prohibition, copy_from templating behavior, required post-creation mapping step, and required activation step. The only remaining details come from the fully-documented schema.

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

Parameters4/5

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

Since schema_description_coverage is 100%, the baseline is 3. The description adds real semantic value on top by explaining that inputs are required in practice for JOIN, that copy_from overrides view_type/inputs/stackable, and that a fresh creation produces an entity-only node requiring a mapping update. It does not add depth on every parameter, but it covers the materially tricky ones.

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

Purpose5/5

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

The first sentence states the exact action and resource: 'Create a CompositeProvider (HCPR).' It then distinguishes fresh creation from copy-based creation and pairs the tool with the follow-up tools bw_update_composite_provider and bw_activate, clarifying the object lifecycle versus those siblings.

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

Usage Guidelines5/5

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

The description is explicit about when to use the copy_from path versus the fresh path, and about Union being allowed empty while JOIN must include inputs. It also directs the agent to the exact follow-up tools for mappings and activation, making the overall workflow unambiguous.

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

bw_create_conversion_typeA

Create a currency translation type (kind "currency", TLOGO CTRT) or a unit conversion type (kind "unit", TLOGO UOMT), saved straight to the active version — there is no activation step. Every option of the modeling tools is available. Source and target: data_dependent (the default; for a source the currency or unit of the record, for a target the one chosen when converting), fixed, infoobject or variable, each with name. Currency: exactly one of rate_type or rate_type_variable; optionally an exchange rate from an InfoObject, rate_specific, inverse, in_transformation_only, via_fi_modules (default true), and the time reference (default the current date). Unit: factors (default T006) and, for the InfoObject-based modes, factors_infoobject. The answer shows the object as stored, because the backend adjusts some combinations on save. A description is limited to 40 characters for a currency type and 60 for a unit type. Delete with bw_delete, object_type "ctrt" or "uomt".

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYescurrency translation or unit conversion.
nameYesTechnical name of the new conversion type (e.g. "OBJECT_NAME").
timeNoCurrency: the time reference of the rate. Default: the current date.
sourceNoSource currency or unit. Default data_dependent.
targetNoTarget currency or unit. Default data_dependent.
factorsNoUnit: where the conversion factors come from, in order (default T006).
inverseNoCurrency: use the inverse rate.
packageNoPackage. Defaults to "$TMP".
rate_typeNoCurrency: exchange rate type (e.g. "M").
transportNoTransport request number. Required on systems with transport obligation.
descriptionYesDescription (at most 40 characters for currency, 60 for unit).
rate_specificNoCurrency: which rate of the rate type to use (default No).
via_fi_modulesNoCurrency: translate through the FI modules (default true).
factors_infoobjectNoUnit: the InfoObject with its own conversion factors, for the InfoObject-based modes.
rate_type_variableNoCurrency: variable that supplies the exchange rate type, instead of rate_type.
in_transformation_onlyNoCurrency: offered in transformations only.
exchange_rate_infoobjectNoCurrency: InfoObject that supplies the exchange rate; omit for the rate from the rate tables.
allow_initial_source_valueNoUnit: allow an initial source unit.
no_conversion_if_factors_not_foundNoUnit: leave the value unconverted when no factor is found.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it delivers several non-obvious behaviors: the object is saved directly to the active version with no activation step, the backend adjusts some option combinations on save so the response reflects the stored object, and description length is capped at 40/60 characters. It stops short of disclosing authorization or transport-obligation requirements beyond what the schema states.

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

Conciseness4/5

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

For a 19-parameter tool the single dense paragraph is proportionate and front-loads the purpose and no-activation fact. It would read better split into kind-specific bullets, and a few clauses (e.g. the delete line) could be trimmed, but there is little waste.

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

Completeness4/5

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

Given 19 parameters, nested source/target/time objects, no output schema and no annotations, the description covers both modes, the major optional behaviors, save-time normalization, and even the return-shape note ('the answer shows the object as stored'). The main omission is permissions/auth context for a write operation.

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

Parameters3/5

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

Schema coverage is 100%, so the schema documents all 19 parameters and the baseline is 3. The description adds a genuine cross-field constraint (exactly one of rate_type or rate_type_variable) and restates key defaults, but otherwise mirrors the schema rather than extending it.

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

Purpose5/5

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

States a precise verb and resource (create a currency translation type / unit conversion type), disambiguates the two modes with their TLOGOs, and is clearly separable from siblings bw_get_conversion_type and bw_delete. An agent knows exactly what object is produced.

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

Usage Guidelines4/5

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

Gives the kind-selection context (currency vs unit) and routes deletion to the sibling bw_delete with object_type "ctrt"/"uomt". It does not spell out when a conversion type is preferable to alternative modeling constructs, but the create/delete pairing is explicit.

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

bw_create_datasourceA

Create a DataSource (RSDS) on top of a remote entity from the server's field proposal, leaving it inactive. The server derives the complete field/segment structure from the remote entity — no field, key, or partitioning editing is supported (v1). Local objects only (Development-Class $TMP); no transport handling. The HANA entity binds via the adapter externalObject attribute, not by name equality — use bw_list_remote_entities to find a valid hana_entity. After creation, activate separately with bw_activate (object_type "rsds", the same source_system, lock_handle "").

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNoDataSource description (default: the hana_entity value).
hana_entityNoRemote entity technical name (technicalName from bw_list_remote_entities), bound as the adapter externalObject. Defaults to datasource_name as a convenience; set independently when they differ. Case-sensitive — passed to the source as-is.
source_systemYesLogical source system name (e.g. "LSYS_NAME"). A HANA/SDA/SDI source system.
datasource_nameYesTechnical name for the new DataSource (e.g. "DS_NAME").
application_componentYesApplication component (APCO) to file the DataSource under (e.g. "APCO_NAME").

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden. It discloses several behavioral traits: the datasource is created inactive, the structure is derived from the remote entity, binding is via adapter externalObject (not name equality), and it only works with Development-Class $TMP (local objects). It also notes that field/key/partitioning editing is not supported. This provides a comprehensive behavioral picture.

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

Conciseness4/5

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

The description is well-structured with essential information front-loaded. It is slightly longer than minimal but every sentence adds value. No redundant statements. A minor improvement could be to condense some details, but overall it is effective.

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

Completeness5/5

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

Given the tool's complexity (5 parameters, no output schema, no annotations), the description is very complete. It explains creation behavior, constraints, prerequisites, and post-creation steps. Combined with the input schema, an agent has sufficient information to use the tool correctly.

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

Parameters4/5

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

Schema coverage is 100% (all 5 parameters described), so baseline is 3. The description adds meaningful context: it explains that hana_entity is bound as adapter externalObject, defaults to datasource_name, and is case-sensitive. It clarifies that description defaults to hana_entity value. It also specifies that source_system must be a HANA/SDA/SDI source system. These details go beyond the schema definitions.

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

Purpose5/5

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

The description explicitly states the tool creates a DataSource (RSDS) from a remote entity's field proposal, leaving it inactive. It distinguishes from sibling tools like bw_activate by specifying that activation is separate. The verb 'Create' and resource 'DataSource' are clear, and the description highlights unique constraints like 'no field, key, or partitioning editing' and 'local objects only'.

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

Usage Guidelines5/5

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

The description provides clear when-to-use guidance: to create a DataSource on top of a remote entity. It specifies prerequisites: use bw_list_remote_entities to find a valid hana_entity. It also gives explicit next steps: after creation, activate with bw_activate. This helps the agent understand the sequence and alternatives.

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

bw_create_decision_variantA

Create a DECISION process variant (a standalone TLOGO object) for use as a branch/decision step in a Process Chain, via the BW/4HANA Cockpit REST API. The variant holds two branches indexed by position: THEN/first (EVENTNO "01" by default, label "JA") and ELSE/second (EVENTNO "02", label "NEIN"). The formula is the branch condition (e.g. "GET_SEGMENT( ) = ' 3'"); it is evaluated for the THEN branch, the ELSE branch is its complement. The variant is created AND activated (activation is mandatory — an inactive variant is not selectable in the chain variant picker). After creation, reference the variant from a DECISION step in bw_create_process_chain / bw_update_process_chain (variant=), and branch its out-edges with sub_status "01"/"02". Package/transport: $TMP is fine for visibility and picker selection; pass a transportable package (NOT $TMP) only if you need to transport the variant. For a transportable package a transport_request is used (auto-selected when exactly one changeable request is available; pass it to disambiguate).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDecision variant technical name, uppercase (e.g. "VARIANT_NAME"). This is the name a chain DECISION step references.
formulaYesBranch condition formula (BW decision formula syntax), e.g. "GET_SEGMENT( ) = ' 3'".
packageNoTarget package. Defaults to $TMP, which is fine for visibility/picker selection. Pass a transportable package only if the variant must be transportable.
else_labelNoLabel of the ELSE/second branch. Default "NEIN".
then_labelNoLabel of the THEN/first branch. Default "JA".
descriptionYesVariant description / label.
else_event_noNoEVENTNO of the ELSE branch. Default "02".
then_event_noNoEVENTNO of the THEN branch (referenced by chain branch edges via sub_status). Default "01".
transport_requestNoTransport request to record the new variant into. Used only for a transportable package (auto-selected when exactly one changeable request is available; pass to disambiguate).

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that the variant is created and activated (mandatory), explains the branch structure (THEN/ELSE with default labels and event numbers), and describes transport behavior. It does not mention potential side effects (e.g., overwriting) or error conditions, but the key behaviors are covered.

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

Conciseness4/5

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

The description is relatively long but well-structured with a clear first sentence stating purpose, followed by details on branches, activation, and transport. Every sentence adds value, though a slight trim could improve conciseness without losing essential information.

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

Completeness3/5

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

Given 9 parameters (3 required) and no output schema, the description is fairly complete but lacks information about the return value or possible errors. It also does not mention prerequisites or authentication requirements. This leaves gaps for an agent to fully understand the tool's behavior.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds significant context beyond the schema. It explains the purpose of each parameter: name is referenced by chains, formula is the branch condition, and defaults for optional parameters. It integrates parameter meaning with the tool's workflow (e.g., event numbers map to sub_status edges).

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

Purpose5/5

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

The description clearly states the tool creates a DECISION process variant as a standalone TLOGO object for use in a Process Chain. It specifies the action (create), the resource (decision variant), and the purpose (branch/decision step). It distinguishes from siblings by explaining how to use the variant afterward with specific chain creation tools.

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

Usage Guidelines4/5

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

The description provides clear context on when to use this tool (to create a decision variant) and offers guidance on package/transport choices, including default $TMP vs. transportable packages. It references related tools (bw_create_process_chain, bw_update_process_chain) for subsequent steps. However, it does not explicitly state when NOT to use it, leaving some ambiguity.

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

bw_create_dtpA

Create a new DTP (Data Transfer Process) for an existing Transformation and activate it. The DTP name is server-generated. Optionally set a filter on one source field (Equal operator). After creation the DTP is activated automatically. IMPORTANT: Before calling this tool, always check the full transformation chain. Single-step chain (e.g. ADSO->ADSO): use trfn_name only. Two-step chain (e.g. ADSO->TRCS->ADSO): use trfn_name for the first transformation and trfn_name_2 for the second; source_name/source_type = the start object, target_name/target_type = the end object. Omitting trfn_name_2 in a two-step chain causes a persistent HTTP 500 error. Use bw_get_transformation or bw_xref to determine the chain before creating the DTP. DataSource source: set source_type "RSDS" and pass source_system (the DataSource source system). source_name is then the plain DataSource name; the tool builds the RSDS compound source key internally.

ParametersJSON Schema
NameRequiredDescriptionDefault
packageNoDevelopment package (default "$TMP").
trfn_nameYesTechnical name of the existing Transformation (UUID-like key).
descriptionNoOptional DTP description text (default: empty).
source_nameYesSource object name (e.g. "SOURCE_NAME").
source_typeYesSource object type (e.g. "ADSO", "TRCS", "RSDS"). Use "RSDS" for a DataSource source — source_system is then required.
target_nameYesTarget object name (e.g. "TARGET_NAME").
target_typeYesTarget object type (e.g. "ADSO"). Use "IOBJ" to load into an InfoObject; the loaded sub-object (attributes / texts / hierarchies) is selected with target_object_subtype.
trfn_name_2NoOptional second transformation in a multi-step chain. Include when the DTP spans two transformations (e.g. ADSO→TRCS→ADSO).
filter_fieldNoFilter field to set. Use the exact field name from bw_get_dtp; a name that does not exist is rejected. Requires filter_value or filter_selections.
filter_valueNoOne or more values for an Equal selection, comma-separated (e.g. "VAL1,VAL2,VAL3"). REPLACE semantics: the list is the complete selection of that field, so pass all values in one call. An empty string selects the BW initial value (not the literal "#"). For ranges, patterns, exclusions or values containing a comma, use filter_selections. Look values up with bw_get_filter_values first — a wrong value activates cleanly and filters everything away.
source_systemNoSource system name of the DataSource. Required when source_type is "RSDS".
filter_excludingNoIf true, all values of filter_value are excluded instead of included. Default false. Applies to filter_value only; filter_selections carries a sign per entry.
filter_selectionsNoFull selection vocabulary for one filter field, equivalent to an ABAP RANGE table. REPLACE semantics like filter_value, and mutually exclusive with it. Each entry is validated against the operators the field itself publishes, so an unsupported operator is an error instead of a silently ignored setting.
target_object_subtypeNoInfoObject sub-object to load into. Only applies when target_type is "IOBJ". ATTR (default) = attributes/master data (IOBJA), TEXT = texts (IOBJT), HIER = hierarchies (IOBJH). Must match the sub-object the transformation chain targets.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden, and it does so well: it discloses automatic activation, server-generated naming, the persistent HTTP 500 when trfn_name_2 is omitted in two-step chains, and the internal RSDS compound-key construction. It could still be more transparent about failure modes, idempotency, or whether the operation is reversible, hence 4 rather than 5.

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

Conciseness4/5

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

The description is dense and front-loaded, opening with the core purpose and then proceeding to the most consequential scenario (multi-step chains) before the filter and DataSource notes. It is slightly longer than necessary and contains minor redundancy between 'activate it' and 'activated automatically', but every major point earns its place.

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

Completeness4/5

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

Given 14 parameters, no annotations, and no output schema, the description covers the biggest hazards and option semantics very well: chain topology, 500 error, DataSource compound keys, and filter replacement behavior. It does not describe return values or post-creation verification, which would be helpful but not required for correct invocation.

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

Parameters5/5

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

The schema already covers 100% of the parameters with solid descriptions, so the baseline is 3, but the description adds significant higher-level meaning: how trfn_name and trfn_name_2 are selected based on chain depth, how source_name/target_name relate to chain endpoints, the consequence of omitting trfn_name_2, and the special handling of DataSource keys. This is substantial added value beyond the schema.

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

Purpose5/5

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

The description opens with a specific and unambiguous action: 'Create a new DTP for an existing Transformation and activate it.' It clearly identifies the resource (DTP), the precedent requirement (existing Transformation), and the side effect (activation), which distinguishes it from run/update/get DTP siblings without needing to name them.

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

Usage Guidelines4/5

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

The description provides strong situational guidance: it tells the agent to check the transformation chain first, names the lookup tools (bw_get_transformation, bw_xref), and explicitly describes how a two-step chain changes parameter usage. It does not explicitly state when not to use the tool or name sibling alternatives like bw_update_dtp, 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.

bw_create_hierarchyA

Create a hierarchy for a characteristic and activate it. The tree is passed nested: a text node { "text_node": "NAME", "text": "...", "children": [...] } groups other nodes; a value node { "value": "..." } is a value of the characteristic (it may have children too). Each node appears once. The characteristic must have hierarchies switched on. Not time-dependent and not version-dependent hierarchies only.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodesYesTop-level nodes of the tree, each { text_node, text?, children? } or { value, children? }.
activateNoActivate after saving (default true); false keeps it as revised version.
descriptionYesDescription of the hierarchy (up to 60 characters).
characteristicYesCharacteristic with hierarchies switched on (e.g. "CHARACTERISTIC").
hierarchy_nameYesName of the new hierarchy (e.g. "HIERARCHY_NAME").

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose mutation behavior: it creates AND activates, and the schema's activate description notes that false keeps a revised version. It also surfaces the prerequisite and the time/version-dependency restriction. It stops short of stating permissions or what the call returns, which keeps it from a 5.

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

Conciseness4/5

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

Purpose and activation are front-loaded, and the node-structure and constraint sentences each add needed detail. It is slightly dense with a long final restriction clause, but there is little waste.

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

Completeness4/5

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

For a mutation tool with no annotations and no output schema, the description covers creation, the nested node contract, the activation toggle, the prerequisite, and the dependency restriction. Return values are not covered, but the input contract – the part an agent must get right – is well specified.

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

Parameters4/5

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

Schema coverage is 100%, so a 3 is the baseline, but the description adds genuine semantic value by explaining the nested node shape that the schema only gestures at: a text_node groups nodes while a value node is a value of the characteristic, and 'each node appears once'. That clarifies the otherwise opaque 'items: object' array.

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

Purpose5/5

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

States a specific verb+resource ('Create a hierarchy for a characteristic') and distinguishes it from the sibling CRUD set (bw_get_hierarchy, bw_update_hierarchy, bw_delete_hierarchy) by the creation action. It also names the activation side-effect, so the agent knows it is a create-and-maybe-activate operation.

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

Usage Guidelines4/5

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

Gives a clear prerequisite ('The characteristic must have hierarchies switched on') and an explicit exclusion ('Not time-dependent and not version-dependent hierarchies only'), which tells the agent when creation is valid. It does not explicitly name an alternative tool, but the create-vs-update vs get sibling split is self-evident.

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

bw_create_infoareaA

Create a new InfoArea. The InfoArea is immediately active after creation — no activation step needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesInfoArea name, max 12 characters (e.g. "NEXTJUICE").
packageNoDevelopment package. Default "$TMP".
descriptionNoDescription text for the InfoArea.
parent_info_areaNoParent InfoArea name. Omit to create at root level.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description provides one behavioral trait (immediately active, no activation step). However, it does not disclose other aspects like authentication requirements, side effects (e.g., overwriting existing InfoAreas), or what happens on duplicate names. Adequate but minimal.

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

Conciseness5/5

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

Two short sentences with no redundancy. The first sentence states the core purpose, the second adds an important behavioral fact. Every word earns its place.

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

Completeness4/5

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

Given the low complexity (4 parameters, no nested objects, no output schema) and full schema descriptions, the description is mostly complete. It explains the key activation behavior. It could be enhanced by specifying what the tool returns, but for a creation tool the current level is sufficient.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already defines parameter meanings. The description adds no additional parameter-level context beyond the schema. Baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Create') and the resource ('InfoArea'), and adds a specific behavioral detail (immediately active, no activation needed), which distinguishes it from other create tools like bw_create_adso or bw_create_dtp.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives. There is no mention of prerequisites, when-not-to-use, or comparison with sibling tools. The description is purely declarative.

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

bw_create_infoobjectA

Create a new InfoObject — Characteristic (CHA) or Key Figure (KYF) — inactive. Sequence: lock → POST create → unlock. After creation call bw_activate with object_type "iobj" to activate.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesInfoObject name, max 9 characters (e.g. "IOBJ_NAME").
lengthNoCHA only. Field length. Default 10.
packageNoDevelopment package. Default "$TMP".
data_typeNoCHA only. ABAP data type. Default "CHAR".
info_areaYesInfoArea to assign the InfoObject to (e.g. "NEXTJUICE").
transportNoTransport request number (e.g. DEVK900123). Only required if the BW system requires transport assignment.
fixed_unitNoFixed unit of measure for QUAN key figures (e.g. "KWH", "M3"). Required when object_specific_data_type is QUAN.
lower_caseNoCHA only. Allow lower case letters (RSDCHABAS-LOWERCASE). Default false. Set true for characteristics whose values may contain lower case letters or characters outside the permitted character set (RSKC), such as umlauts — the flag switches off that check for this characteristic. Without it, a load carrying such values is accepted but fails later during request activation.
with_textsNoCHA only. Generate text tables. Default false.
descriptionYesShort and long description text.
fixed_currencyNoFixed currency for CURR key figures (e.g. "EUR"). Required when object_specific_data_type is CURR.
infoobject_typeNoInfoObject type: CHA (Characteristic) or KYF (Key Figure). Default "CHA".
aggregation_typeNoKYF only. Aggregation type. Default "SUM".
with_master_dataNoCHA only. Generate master data tables. Default false.
conversion_routineNoCHA only. Conversion routine (e.g. "ALPHA"). Default "ALPHA" for CHAR/NUMC, "" for others.
compound_infoobjectsNoTechnical names of the compound parent InfoObjects, in order. CHA only. Example: ["COMPND_IOBJ_NAME"].
referenced_infoobjectNoCHA only. Reference to an existing InfoObject (e.g. "IOBJ_NAME"). Omit withMasterData/withTexts — they are inherited. Default "".
object_specific_data_typeNoKYF only. Data type. Default "DEC". keyfigureType and semantics are derived automatically.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the critical behavior that the object is created inactive and must be activated via bw_activate. It also mentions the lock/unlock sequence, which are important side-effects. This is above average disclosure for a tool with no annotations.

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

Conciseness5/5

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

Two sentences with zero fluff. The first states the purpose, the second gives the essential workflow. All information is relevant and front-loaded.

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

Completeness4/5

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

For a tool with 18 parameters and no output schema, the description covers the critical lifecycle (creation is inactive, activation needed) and the locking sequence. The schema covers parameters exhaustively. It doesn't mention error cases or prerequisites, but those are minor given the rich schema and workflow disclosure.

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

Parameters3/5

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

The input schema has 100% coverage, with each parameter described including defaults, type-specific constraints (e.g., 'CHA only'), and examples. The tool description adds no parameter-specific information, so the baseline of 3 applies.

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

Purpose5/5

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

The description explicitly states 'Create a new InfoObject' and specifies the two types (CHA or KYF), which is a clear verb+resource. It also distinguishes this from update tools by noting it creates an inactive object, making the purpose unambiguous.

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

Usage Guidelines4/5

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

It gives explicit operational guidance: the sequence 'lock → POST create → unlock' and instructs to call bw_activate after creation. This tells the agent exactly when and how to use the tool. It doesn't explicitly mention alternatives (e.g., bw_update_infoobject), but the create vs update distinction is clear from context.

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

bw_create_infosourceA

Create a new InfoSource (TRCS) shell. Optionally copy fields from an existing aDSO, CompositeProvider, DataSource, or InfoObject via copy_from_* parameters. Created inactive — call bw_activate with object_type "trcs" afterwards. To add fields after creation use bw_update_infosource.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesInfoSource name (e.g. "INFOSOURCE_NAME").
packageNoDevelopment package (default "$TMP").
info_areaYesInfoArea to create the InfoSource in (e.g. "MCPBW").
descriptionYesDescription / label for the InfoSource.
copy_from_object_nameNoTechnical name of the source object to copy fields from. Required when copy_from_object_type is set.
copy_from_object_typeNoType of the source object: ADSO (aDSO), HCPR (CompositeProvider), RSDS (DataSource), IOBJ (InfoObject).
copy_from_source_systemNoSource system name (required when copy_from_object_type is RSDS, e.g. "PC_FILE").
copy_from_object_sub_typeNoSubType for IOBJ only: ATTR (Attribute), TEXT (Text), HIER (Hierarchy).

TDQS

A4/5.0
Behavior3/5

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

Discloses that the creation results in an inactive shell and that copying is optional. No annotations present, so description carries full burden; however, it does not cover permissions, error conditions, or 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.

Conciseness5/5

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

Three sentences, front-loaded with the main action, no redundant information. Every sentence adds value.

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

Completeness4/5

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

Covers creation, optional copy, and subsequent steps (activate, update). No output schema, but the description explains the lifecycle well. Missing details about validation or defaults, but sufficient for a creation tool.

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

Parameters3/5

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

Schema has 100% coverage with descriptions for each parameter. The description adds context about the copy_from_* parameters and the inactive state, but does not significantly enhance individual parameter understanding beyond the schema.

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

Purpose5/5

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

The description clearly states it creates a new InfoSource shell with optional copying from specified object types. It distinguishes from sibling tools like bw_update_infosource and bw_activate by mentioning post-creation steps.

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

Usage Guidelines4/5

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

Provides explicit guidance: created inactive, requires bw_activate for activation, and bw_update_infosource for adding fields. Lacks explicit when-not-to-use or alternatives for other object types, but context is clear.

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

bw_create_planning_filterA

Create a planning filter on an aggregation level — the selection a planning sequence step or an input template works on — with its restrictions in the same call: fixed values, ranges and exclusions per characteristic, and characteristic variables. A variable is embedded in the filter as the modeling tools do. Saved active; read it back with bw_get_planning_filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
packageNoPackage. Defaults to "$TMP".
transportNoTransport request number. Required on systems with transport obligation.
operationsNoRestrictions to set or remove, applied in order.
descriptionYesDescription of the filter.
filter_nameYesTechnical name of the new filter (e.g. "OBJECT_NAME").
aggregation_levelYesAggregation level the filter is defined on (e.g. "OBJECT_NAME").

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations the description carries full load, and it discloses real behavior: restrictions are applied in the same call, a variable is embedded as the modeling tools do, and the result is 'Saved active.' It still omits auth/authorization needs and failure/conflict behavior, so it is not fully complete for a mutation tool.

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

Conciseness4/5

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

Three tight sentences, front-loaded with the verb and resource before elaborating on restrictions and variables. Dense but each clause earns its place; no filler.

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

Completeness4/5

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

No output schema exists, but the description handles that by pointing to bw_get_planning_filter for read-back. For a mutation tool with 6 params and no annotations it is reasonably complete, though permission/transport behavior (transport is in schema) could be surfaced.

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

Parameters4/5

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

Schema coverage is 100% so the 3 baseline is met, but the description adds genuine meaning about the operations model — fixed values, ranges (via high), exclusions, and characteristic variables — which goes beyond the raw schema field list.

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

Purpose5/5

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

States a specific verb (Create) plus resource (planning filter on an aggregation level) and clarifies what a planning filter is — the selection a planning sequence step or input template works on. This distinguishes it cleanly from siblings like bw_update_planning_filter and bw_get_planning_filter.

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

Usage Guidelines4/5

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

Explicitly routes the agent to bw_get_planning_filter for reading back, giving clear context for creation vs retrieval. However it doesn't state when to use this versus bw_update_planning_filter, nor any prerequisites beyond the implicit create vs modify distinction.

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

bw_create_planning_functionA

Create a Planning Function (TLOGO PLSE) of a given function type on an aggregation level. The server fills in the parameter skeleton of the function type and a usage of NONE for every characteristic; characteristic usage, conditions and parameter values can be passed right away and are applied after the create. Saved active — there is no activation step. Read an existing function of the same type with bw_get_planning_function to see which parameters a type has.

ParametersJSON Schema
NameRequiredDescriptionDefault
ruleNoFor function types with several rules: the 1-based rule that conditions and parameters apply to. Defaults to 1.
labelYesDescription of the Planning Function.
packageNoPackage. Defaults to "$TMP".
info_areaNoInfoArea. Defaults to the InfoArea of the aggregation level.
transportNoTransport request number. Required on systems with transport obligation.
char_usageNoCharacteristic usage per characteristic. FIELDS_TO_BE_CHANGED: the function may change its values, and records that differ in it are processed together. FIELD_FOR_CONDITIONS: not changed, but conditions may restrict it. NONE: neither. Every characteristic that is not FIELDS_TO_BE_CHANGED is a block characteristic — the function runs once per combination of their values. On a CompositeProvider the bare characteristic name is accepted as well as the prefixed one.
conditionsNoConditions of the rule, per characteristic. The given constraints replace every constraint the characteristic has; an empty or omitted constraints list removes the condition. A condition is only valid on a characteristic with usage FIELD_FOR_CONDITIONS.
parametersNoParameter values of the rule, as shown in the parameter tree of bw_get_planning_function. Applies to single-value parameters; a nested one may be named by its path ("STRUCTURE/FIELD") or, where unambiguous, by its own name. Pass value for a constant or variable for a variable reference. The FOX code of a FORMULA function is the value of its FLINE parameter. A key figure selection (e.g. KYFSEL) takes key_figures, a data selection (e.g. the from and to selections of a copy) takes selection. In a table parameter row n of every field belongs together; row = current rows + 1 adds a row.
function_typeYesPlanning function type (e.g. "0RSPL_FORMULA", "0RSPL_COPY", "0RSPL_DELETE", or a custom type).
aggregation_levelYesAggregation Level the function works on (e.g. "OBJECT_NAME").
planning_function_nameYesTechnical name of the new Planning Function, at most 20 characters (e.g. "OBJECT_NAME").

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that the server fills the parameter skeleton, defaults each characteristic to usage NONE, applies supplied usage/conditions/values after create, and that the object is saved active with no activation step. It doesn't cover permissions or transport-obligation behavior beyond the schema, leaving 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.

Conciseness5/5

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

Three front-loaded sentences: what is created, how defaults/application behave, and where to look up parameters. Dense but every sentence carries actionable information with no filler.

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

Completeness4/5

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

For an 11-parameter mutation tool with no annotations and no output schema, the description covers creation semantics, default behavior, and parameter lookup adequately. It leaves the return value (e.g. confirmation or created object identity) undiscussed, which is the only notable gap.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds semantics the schema does not: defaults for rule (1-based), the sequencing of characteristic usage/conditions/parameter application, and pointer to the parameter tree of bw_get_planning_function as the source of valid parameter names.

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

Purpose5/5

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

States a specific verb, resource and scope ('Create a Planning Function (TLOGO PLSE) of a given function type on an aggregation level'), and names the read-side sibling bw_get_planning_function so the agent can distinguish it from get/update variants without opening a schema.

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

Usage Guidelines4/5

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

Gives clear context ('saved active — there is no activation step') and routes to bw_get_planning_function to discover which parameters a type has before creating. It stops short of explicit when-not-to-use or a direct contrast with bw_update_planning_function, so it's clear context rather than full exclusion guidance.

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

bw_create_planning_sequenceA

Create a planning sequence with its steps in execution order: planning functions, each with the filter that selects its data, and input templates. Saved active. The InfoArea defaults to that of the aggregation level of the first step, the package to "$TMP".

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsYesThe steps in execution order. A planning_function step runs the function on the data the filter selects; an input_template step only opens that selection for manual input.
packageNoPackage. Defaults to "$TMP".
info_areaNoInfoArea. Defaults to that of the first aggregation level.
transportNoTransport request number. Required on systems with transport obligation.
descriptionYesDescription of the sequence.
sequence_nameYesTechnical name of the new sequence (e.g. "OBJECT_NAME").

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does disclose two genuinely useful traits: the object is 'Saved active' immediately, and InfoArea/package default from the first step's aggregation level and "$TMP" respectively. It stops short of permissions required, error conditions (e.g. a nonexistent filter reference), or how activation failure is surfaced, which for an unannotated mutation tool leaves real gaps.

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

Conciseness5/5

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

Three sentences, front-loaded with the core action and artifact, then the composition detail, then the defaults. No filler, no restatement of the tool name, and the ordering follows what an agent needs to know first.

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

Completeness4/5

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

For a 6-parameter create tool with 100% schema coverage and no output schema, the description covers composition, execution order, and defaulting well. It omits what the call returns (e.g. the created sequence name/status) and any failure modes, which is acceptable without an output schema but leaves the preconditions for the referenced filter/function unstated.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, and the description genuinely adds meaning by explaining the execution-order semantics of the steps array and the defaulting rules for info_area and package. It reinforces rather than merely repeats the schema, though most of the default behavior is already documented per-parameter.

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

Purpose5/5

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

The description names a specific verb and resource ('Create a planning sequence') and immediately characterizes what the artifact contains ('its steps in execution order: planning functions, each with the filter that selects its data, and input templates'). That composition detail cleanly separates it from the sibling create_planning_function and create_planning_filter tools, which build the components rather than the container.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the agent can infer this is the tool to use when assembling an ordered sequence of planning steps, and the step-type semantics ('a planning_function step runs the function... an input_template step only opens that selection') hint at intent. However, there is no explicit when-to-use/when-not guidance, no mention of prerequisites such as the referenced filter or planning function having to exist first, and no routing against siblings like bw_update_planning_sequence.

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

bw_create_process_chainA

Create a Process Chain (RSPC) via the BW/4HANA Cockpit REST API. Builds the chain model from a list of steps and edges, creates it with a trigger-only skeleton, then updates it with the full model in a single operation. Optionally activates after creation. The TRIGGER (Start) node is implicit (node index 0) and must not be listed in steps. DTP_LOAD and generic referenced steps use bIsReference=true; ADSOACT and ADSOREM use inline variants. Collectors (AND, OR, XOR) require no extra fields beyond their type. Edge status defaults: neutral for edges whose source is TRIGGER or a collector; positive for all others. For two-step DTP loading always use bw_create_dtp first; this tool builds the process chain around existing DTPs. Supported step types: DTP_LOAD (DTP load), ADSOACT (DSO data activation), ADSOREM (DSO request cleanup), ABAP (execute an ABAP program, optionally with an SE38 selection variant), CHAIN (start a local sub-chain, verified), DECISION (branch on a decision variant, requires the variant field), and collectors AND / OR / XOR; the start trigger is implicit. A generic referenced-step path (any process type string plus an object name, bIsReference=true) is available and verified for DTP_LOAD and CHAIN; for other types it may work but is untested. Other inline-configuration process types (for example OS command, attribute change run) are not supported in this version. Edges support on-success (positive) and unconditional (neutral) links; on-error (negative) links are accepted in the schema but not emitted by default. DECISION branch edges: set sub_status to the branch EVENTNO ("01"=THEN/JA, "02"=ELSE/NEIN) — such edges are always positive. Create the referenced decision variant first with bw_create_decision_variant. To start the chain on an event instead of immediately, pass trigger_event (start type "E").

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProcess chain technical name, uppercase, max 30 characters (e.g. "CHAIN_NAME").
edgesYesDirected edges connecting steps. Use the step id or the literal "TRIGGER" for the start node. Status defaults: "neutral" when the source is "TRIGGER" or a collector (AND/OR/XOR); "positive" otherwise. For a branch edge out of a DECISION node, set sub_status to the branch EVENTNO ("01"/"02"); such edges are forced to "positive".
stepsYesOrdered list of steps. The TRIGGER (Start) node is implicit at index 0 — do not include it here. Each step has a caller-chosen id used for edge wiring. Step types: DTP_LOAD (requires dtp field), ADSOACT (requires datastores array), ADSOREM (requires remDatastores array), ABAP (requires program field, optional program_variant), CHAIN (requires object = sub-chain name), DECISION (requires variant = decision variant name), AND / OR / XOR (collector, no extra fields), or any other BW process type (requires object field).
activateNoIf true, activate the chain immediately after creation. Default false.
infoareaYesInfoArea to file the chain under (e.g. "AREA_NAME").
descriptionYesShort description / label for the process chain.
trigger_eventNoOptional event start-condition for the trigger (start type "E"). Omit for the default immediate start (start type "I").

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full behavioral burden. It fully discloses the skeleton-then-update mechanism, the implicit TRIGGER node, edge status defaults, the non-emission of negative edges by default, DECISION branch semantics, and which generic reference paths are verified versus untested.

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

Conciseness5/5

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

The description is dense but all content earns its place for such a complex, multi-typed tool. It opens with the core operation and then methodically covers step types, edges, defaults, and use-before prerequisites without filler or redundancy.

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

Completeness5/5

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

The description, along with the rich schema, gives an agent everything required to construct a valid call: how to compose steps and edges, which fields are needed per step type, default edge conditions, decision-variant prerequisites, and start/activation options. The absence of an output schema does not create a serious gap.

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

Parameters5/5

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

Schema coverage is 100%, but the description still adds substantial meaning: implicit TRIGGER index 0, per-step field requirements, edge status defaults, sub_status semantics, the bw_create_dtp relationship, and verified/untested step-type behavior. This goes well beyond the schema definitions.

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

Purpose5/5

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

The description states a specific action — creating a Process Chain (RSPC) — and explains the exact operation: build from steps and edges, create a trigger-only skeleton, then update with the full model. It clearly distinguishes this from sibling mutation/editing tools such as bw_update_process_chain and bw_add_process_chain_edge.

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

Usage Guidelines4/5

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

The description explicitly says to use bw_create_dtp first for two-step DTP loading and to use bw_create_decision_variant before referencing DECISION variants. It also marks verified vs untested paths and unsupported process types. However, it does not explicitly name sibling alternatives for modifying an already-created chain.

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

bw_create_queryA

Create a new BW Query (TLOGO ELEM) on an InfoProvider in package $TMP. Without copy_from the query is created empty and consistent (no rows, columns, or key figures yet). With copy_from the new query is created as a full copy of an existing query (layout, filter, variables, key figures); the description parameter still applies to the copy, and infoprovider may be omitted (it is derived from the source query). Support for transportable packages is not yet available; only package $TMP is supported.

ParametersJSON Schema
NameRequiredDescriptionDefault
copy_fromNoTechnical name of an existing query to copy (e.g. "QUERY_NAME"). The new query is created as a full copy of its content.
query_nameYesTechnical name of the query to create (e.g. "QUERY_NAME").
descriptionNoQuery description. Defaults to query_name if omitted.
infoproviderNoTechnical name of the InfoProvider the query is built on (e.g. "PROVIDER_NAME"). Required unless copy_from is given, in which case it defaults to the source query's provider.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description reveals key behaviors: empty query creation without copy_from, full copy behavior with copy_from, defaulting of infoprovider, and limitation to $TMP package. It does not mention potential side effects like locking or permissions, but overall is transparent.

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

Conciseness5/5

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

Two sentences efficiently convey all necessary information without redundancy. The main action is stated upfront, and each clause adds distinct value.

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

Completeness4/5

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

Covers the two main use cases (empty and copy) and the package limitation. Does not describe return values or error handling, but for a creation tool the output is implicit. Overall sufficiently complete for the complexity.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value beyond the schema by explaining the semantics of copy_from (full copy), defaulting of description, and conditional requirement for infoprovider. This aids in correct invocation.

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

Purpose5/5

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

Clearly states the tool creates a new BW Query (TLOGO ELEM) on an InfoProvider in package $TMP, with specific details about the creation process including empty vs copy modes. This distinguishes it from sibling tools like bw_update_query_layout or bw_create_adso.

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

Usage Guidelines4/5

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

Provides clear guidance on when to use copy_from vs empty creation, and notes that only $TMP package is supported. However, it does not explicitly state when not to use this tool or compare directly to alternatives like bw_update_query.

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

bw_create_rkfA

Create one reusable Restricted Key Figure (RKF, TLOGO ELEM) on an InfoProvider. Built for mass creation: one RKF per call — the agent loops. The RKF is created from a base key figure plus one or more characteristic restrictions; each restriction value is validated against the InfoProvider and mapped to its internal key before the write. The RKF is written consistent (no separate activation step). All names must be technical names (e.g. "PROVIDER_NAME", "RKF_NAME", "KYF_NAME", "IOBJ_NAME").

ParametersJSON Schema
NameRequiredDescriptionDefault
packageNoDevelopment package. Defaults to the local package (e.g. "$TMP").
info_areaNoOptional InfoArea (technical name). When omitted, no InfoArea is set.
descriptionYesRKF description text.
restrictionsYesCharacteristic restrictions applied to the base key figure. At least one is required.
provider_nameYesTechnical name of the InfoProvider the RKF is built on (e.g. "PROVIDER_NAME").
technical_nameYesTechnical name of the RKF to create (e.g. "RKF_NAME"). Convention is typically PROVIDER_SUFFIX, but the name is free.
base_key_figureYesTechnical name of the base key figure to restrict (e.g. an amount key figure "KYF_NAME").
transport_requestNoTransport request number (e.g. DEVK900123). Only needed when package is transportable; omit for the local package.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It details validation, internal key mapping, consistent write without activation, and naming conventions. Covers key behavioral aspects for a creation tool.

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

Conciseness5/5

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

Two sentences pack purpose, usage pattern, and detailed behavior without waste. Front-loaded with core purpose, then specific details. Highly efficient.

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

Completeness4/5

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

Lacks output schema and return value description, but thoroughly explains creation process, validation, and constraints. Adequate for an agent to understand tool behavior.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. Description adds value by explaining technical naming requirement, restrictions structure, and package/transport context, going beyond schema descriptions.

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

Purpose5/5

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

Description clearly states it creates a Restricted Key Figure (RKF) on an InfoProvider. Distinguishes from siblings like bw_get_rkf and mentions it's for mass creation with looping.

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

Usage Guidelines4/5

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

Explicitly says 'Built for mass creation: one RKF per call — the agent loops,' indicating when to use and pattern. No explicit when-not or alternatives, but context is clear.

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

bw_create_structureA

Create a reusable key figure structure on an InfoProvider — the object reporting queries embed as an axis, so that one definition drives all of them. Members reference a reusable CKF/RKF or a basic key figure and can carry their own text.

ParametersJSON Schema
NameRequiredDescriptionDefault
membersNoMembers, in display order. Can be added later with bw_update_structure.
packageNoDevelopment package (default "$TMP").
info_areaNoInfoArea the structure is filed under.
descriptionYesDescription of the structure.
provider_nameYesInfoProvider the structure is defined on.
technical_nameYesTechnical name of the new structure.
transport_requestNoTransport request to record the structure in.

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral disclosure itself. It does describe the structure's reuse semantics and member composition, but it does not disclose operational side effects such as whether the object needs activation, how transport/package choices affect persistence, or what happens if the technical name already exists.

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

Conciseness5/5

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

Two tight sentences front-load the core purpose and then clarify what members contain. 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.

Completeness3/5

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

The schema is rich and the description explains the domain concept, but without an output schema or annotations the agent is left without explicit information about return values, prerequisites, or post-creation activation/transport behavior. This is adequate but not complete for a creation tool.

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

Parameters3/5

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

Input schema covers all 7 parameters, so the baseline is 3. The description adds only mild extra meaning by explaining that members can be either reusable CKF/RKF or basic key figures; the remaining parameters are already well-described in the schema.

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

Purpose5/5

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

The description names a specific action and resource: create a reusable key figure structure on an InfoProvider. It immediately clarifies the object's purpose as a shared query axis, distinguishing it from sibling tools that create individual key figures or queries.

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

Usage Guidelines4/5

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

It gives a clear usage context: use this when you want one structure definition to drive all reporting queries that embed it as an axis. The schema adds that members can be added later via bw_update_structure, which is an implicit exclusion, though the description itself does not explicitly name alternatives.

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

bw_create_transformationA

Create a new Transformation between two BW objects (aDSO, DataSource, InfoSource, etc.). The Transformation name is server-generated (32-char UUID-like key). Created inactive — call bw_activate with object_type "trfn" afterwards, or pass activate: true. In a transportable package pass the transport request.

ParametersJSON Schema
NameRequiredDescriptionDefault
packageNoDevelopment package. Default "$TMP".
activateNoActivate the transformation in the same call (default false). The answer then carries the activation messages, and success reflects the activation.
transportNoTransport request (e.g. "DEVK900123") to record the transformation on. Needed for a transportable package; with "activate" it is passed to the activation as well.
source_systemNoSource system name. Required when source_object_type is RSDS (DataSource).
source_object_nameYesTechnical name of the source object.
source_object_typeYesSource object type. Valid values: HCPR (CompositeProvider), ADSO (aDSO), RSDS (DataSource — requires source_system), HAAP (HANA Analysis Process), IOBJ (InfoObject), TRCS (InfoSource), QVIW (Query).
target_object_nameYesTechnical name of the target object.
target_object_typeYesTarget object type. Valid values: ADSO (aDSO), IOBJ (InfoObject), TRCS (InfoSource), DEST (Open Hub Destination).
source_object_subtypeNoInfoObject sub-type of the source. Only applies when source_object_type is IOBJ. Valid values: TEXT (text table), ATTR (attributes / master data), HIER (hierarchy).
target_object_subtypeNoInfoObject sub-type of the target. Only applies when target_object_type is IOBJ. Valid values: TEXT (text table), ATTR (attributes / master data), HIER (hierarchy).
copy_from_transformationNoTechnical name of an existing Transformation to copy rules from.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden, and it discloses genuinely non-obvious behaviors: the Transformation name is server-generated (32-char UUID-like), the object is created inactive by default, and transport requires a request. It omits permission/auth requirements and error conditions, but the key state and lifecycle traits are covered.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the core action then the non-obvious behaviors (server-generated name, inactive state, transport). Every sentence carries information an agent needs; nothing is padded.

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

Completeness4/5

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

For an 11-parameter mutation tool with no annotations and no output schema, the description covers the crucial lifecycle facts (auto-generated name, inactive creation, activation path, transport recording). It could say more about what the response returns or failure modes, but the essentials for calling it correctly are present.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 11 parameters including activate, transport, package, and the object type/subtype values. The description reinforces the semantics of activate and transport but adds little beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb (Create) and resource (Transformation) plus its scope (between two BW objects, listing types). The resource is unique among siblings (bw_create_adso, bw_create_infoarea, bw_update_transformation), so an agent can distinguish it immediately.

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

Usage Guidelines4/5

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

Gives clear context for completing the operation: created objects are inactive, so either call bw_activate with object_type "trfn" afterwards or pass activate:true, and for transportable packages pass the transport request. It routes to the activation sibling, though it doesn't contrast against bw_update_transformation for modifying existing transformations.

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

bw_create_transport_taskA

Add a task (sub-request) for a user to an existing workbench transport request. Single ADT call, no lock or activation. The parent request must be modifiable. Returns the created task number.

ParametersJSON Schema
NameRequiredDescriptionDefault
userYesTarget user the task is created for (task owner), e.g. "USERNAME".
transport_requestYesParent workbench transport request number (e.g. DEVK900123).

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that the call is a single ADT call, no lock or activation, and returns the created task number. It does not detail side effects or error conditions, but for a creation tool, it provides reasonable behavioral insight.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the action, and contains no unnecessary words. Every sentence adds value.

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

Completeness5/5

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

Given no output schema, the description mentions the return value ('Returns the created task number'). It covers prerequisites (modifiable parent) and the call's nature. For a simple two-parameter creation tool, it is complete.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for both parameters. The tool description adds minimal extra meaning beyond examples; it mostly restates the parameter purposes. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Add a task'), the resource ('sub-request for a user to an existing workbench transport request'), and context. It distinguishes from sibling tools, none of which create transport tasks.

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

Usage Guidelines4/5

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

The description provides guidance on when it can be used ('parent request must be modifiable') and notes the call is single and has no lock or activation. However, it does not explicitly compare to alternatives or state 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.

bw_create_variableA

Create a reusable BW Variable, created active and consistent. A characteristic variable (the default) is a filter parameter on a characteristic: processing types UserEntry (manual entry, the default), CustomerExit, Authorization and the current-member flavour of ReplacementPath; it stands for a characteristic value, a hierarchy or hierarchy nodes. A formula variable (variable_type "Formula") stands for a number and is used as a formula operand in bw_update_query_key_figures, bw_create_ckf and bw_update_ckf: no iobj_name, filled by UserEntry or CustomerExit, with a dimension, an optional default value, and a unit (Quantity), a currency (Amount) or either (Price). A text variable (variable_type "Text") is written as &NAME& into a query or member description and replaced at runtime: by replacement path (the default with iobj_name) it shows the key, the external key or the text of that characteristic's value and is never ready for input; filled by CustomerExit or UserEntry it takes no iobj_name. The query tools bind a text variable named in a description when they save the query. To keep a variable out of the user's variable screen, set ready_for_input false.

ParametersJSON Schema
NameRequiredDescriptionDefault
unitNoFormula variables only: unit of measure. Required for dimension Quantity (a query cannot be generated without it), optional for Price.
packageNoAlias for development_class (for consistency with other tools).
currencyNoFormula variables only: currency key. Required for dimension Amount, optional for Price.
reusableNoWhether the variable can be reused in multiple queries. Defaults to true.
dimensionNoFormula variables only: what the number stands for. Defaults to Number.
iobj_nameNoTechnical name of the InfoObject (characteristic) this variable is based on (e.g. "CHARACTERISTIC"). Must exist in the system. Required for a characteristic variable and for a text variable by replacement path (the characteristic whose value it shows); leave it out for a formula variable and for a text variable filled by CustomerExit or UserEntry.
transportNoTransport request number (e.g. "DEVK900123"). Only needed when the target package is transportable.
input_typeNoWhether a value is required: Optional (default), MandatoryWithInitial (entry required, initial value allowed) or MandatoryWithoutInitial (entry required, initial value rejected).
representsNoSelection type. Interval is a from/to range, SelectionOption allows the full set of comparison operators. Defaults to Interval.
descriptionYesVariable description (displayed in query parameter screens).
offset_startNoText variables by replacement path only: first character of the value shown, counted from 0 (default 0).
default_valueNoFormula variables only: the value proposed on the variable screen. BW parses it in the logon user's decimal notation, so a fractional value needs read access to that setting (USR01 through ADT DataPreview); without it only whole numbers are accepted.
offset_lengthNoText variables by replacement path only: number of characters shown; 0 (default) shows the rest.
variable_nameYesTechnical name of the variable to create (e.g. "VAR_NAME").
variable_typeNoWhat the variable stands for: a characteristic value (default), a whole hierarchy, hierarchy nodes, a number (Formula) or a text (Text). Hierarchy variables still reference a characteristic via iobj_name; formula and text variables always represent a single value.
master_languageNoLanguage code for the descriptions (e.g. "EN", "DE"). Defaults to the BW_LANGUAGE of the connection, otherwise "EN".
processing_typeNoHow the variable is filled: UserEntry (manual entry by the user, the default), CustomerExit (filled by the exit), Authorization, or ReplacementPath. Replacement path is limited to the current-member variant, which needs no donor object; replacement from a query result is not supported.
ready_for_inputNoWhether the variable is shown on the variable screen for user input. Defaults to true, for a text variable only with UserEntry. Set false for a variable that only the customer exit fills. A text variable by replacement path cannot be ready for input.
replacement_typeNoText variables by replacement path only: what the text shows of the characteristic value — the key (default), the external key, or its text (Name).
development_classNoPackage name (e.g. "ZPKG"). Defaults to $TMP if omitted.
replacement_intervalNoText variables by replacement path only: for a range, the lower bound (default), the upper bound, or the difference.
replacement_variableNoText variables by replacement path only: a characteristic value variable on the same characteristic (iobj_name) to read the value from, instead of the characteristic itself (e.g. "VAR_NAME").

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and mostly delivers: it discloses the non-obvious trait that the variable is 'created active and consistent', explains ready_for_input interactions with the user variable screen, the ReplacementPath limitation, and even the default_value decimal-notation permission caveat (USR01 via ADT DataPreview). It stops short of covering prerequisites like transport, locking, or error/rollback behavior.

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

Conciseness3/5

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

Front-loaded correctly with the core purpose, and nearly every sentence carries substantive detail. But it is presented as one dense, comma-laden block of run-on sentences with heavy parenthetical nesting, which hurts scanability for such a complex parameter space.

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

Completeness4/5

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

For a 22-parameter creation tool with no annotations and no output schema, the description plus the exhaustive schema give an agent enough to invoke it correctly across the main variable types. Missing only lifecycle/workflow context (transport handling, activation, locks) that a create operation would benefit from.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3 and the schema already documents all 22 parameters including per-type applicability. The description adds some cross-parameter logic (which type needs iobj_name, what makes a formula vs text variable), but this largely duplicates what the individual schema descriptions already state.

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

Purpose4/5

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

States a specific verb and resource ('Create a reusable BW Variable') and goes further by enumerating the five variable types and what each stands for, so an agent knows exactly what is being produced. It names consuming siblings (bw_update_query_key_figures, bw_create_ckf, bw_update_ckf) for formula variables, but never explicitly contrasts create against the sibling bw_update_variable/bw_get_variable, leaving that distinction implicit.

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

Usage Guidelines3/5

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

Rich selection guidance for which variable_type to choose and how it feeds downstream tools, and it flags a hard constraint ('replacement from a query result is not supported'). However there is no explicit when-to-use-this-over-alternatives statement (e.g. create vs update_variable), so usage is implied rather than stated.

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

bw_deleteA

Delete a BW object permanently (aDSO, InfoObject, Transformation, DTP, Query, etc.). Sequence: lock (with /m) → DELETE → unlock. No activation needed — deletion is immediate. Queries (object_type "query", alias "elem") use a dedicated delete sequence; deleting a query does NOT delete the reusable components (variables, CKFs, RKFs) it references — only the query itself. Planning sequences ("plsq"), planning filters ("filter") and conversion types ("ctrt", "uomt") are deleted on their active path; a filter still used by a sequence is refused with the sequence named. Dependency note: delete aDSOs before their InfoObjects, not the other way around.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameYesTechnical object name (e.g. "OBJECT_NAME").
object_typeYesBW object type: adso, iobj, trfn, dtpa, query (alias elem), etc.

TDQS

A4.1/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so thoroughly: it discloses permanence/immediacy of deletion, the lock/unlock sequence, that query deletion spares referenced variables/CKFs/RKFs, the active-path behavior for planning sequences/filters/conversion types, and the refusal case when a filter is still referenced. This is exactly the destructive-operation context an agent needs.

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

Conciseness4/5

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

Front-loaded with the core purpose, then dense supporting detail; every sentence (sequence, query exception, planning/filter rules, dependency note) contributes actionable information. It is long but not padded, staying just short of maximal efficiency.

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

Completeness5/5

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

For a destructive tool with no annotations and no output schema, the description covers the sequencing, type-specific exceptions, refusal conditions, and cross-object dependencies that an agent needs to invoke it correctly. Nothing material is left unspecified.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by naming additional object_type values (plsq, filter, ctrt, uomt) and the "elem" alias for queries. It does not describe the object_name format beyond what the schema already gives.

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

Purpose4/5

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

States a specific verb (Delete) and resource (BW object) and enumerates the covered types (aDSO, InfoObject, Transformation, DTP, Query), making the scope concrete. It does not explicitly route the agent away from the more granular siblings (bw_delete_hierarchy, bw_delete_request, bw_delete_transformation_routine), so sibling differentiation is only partial.

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

Usage Guidelines3/5

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

Provides operational context (lock → DELETE → unlock, no activation needed) and a dependency rule (delete aDSOs before their InfoObjects), which implies correct usage. However it never states when to choose this generic tool versus the specialized delete siblings, so alternative-selection guidance is missing.

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

bw_delete_hierarchyA

Delete a hierarchy of a characteristic. Deletes the active version unless version "M" is given, which discards only a pending revised version. A query that uses the hierarchy no longer finds it.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoA = the hierarchy (default), M = only its revised version.
characteristicYesCharacteristic the hierarchy belongs to.
hierarchy_nameYesHierarchy to delete.

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that the active version is destroyed by default, that version M only discards a pending revised version, and that dependent queries lose access. It stops short of stating permission/authorization requirements or whether the change needs activation/transport.

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

Conciseness4/5

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

Three sentences, front-loaded with the action, then version semantics, then downstream impact. Each sentence is informative, though sentence two partially overlaps the schema's version description.

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

Completeness4/5

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

For a destructive mutation with no annotations and no output schema, the description covers the key behavioral question (what is destroyed under which version) and the consequence for dependent queries. Authorization and activation/transport requirements are the remaining omission.

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

Parameters3/5

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

Schema coverage is 100% and the version enum is already documented in the schema, so the baseline is 3. The description's restatement of the A/M semantics adds only marginal clarification beyond what the schema's enum description already provides.

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

Purpose5/5

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

States a specific verb (Delete) and resource (a hierarchy of a characteristic), and the first sentence alone lets an agent distinguish this from the sibling create/update/get hierarchy tools. The scope is unambiguous.

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

Usage Guidelines3/5

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

Usage is implied by the verb and by the note about queries no longer finding the hierarchy, but the description never explicitly names when to use this versus bw_update_hierarchy or the generic bw_delete. No alternatives or exclusions are given.

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

bw_delete_requestA

Delete load requests from an InfoProvider, removing the data they brought in along with their entry in the request management. This is the precondition BW demands before several follow-up steps — above all switching a DTP from delta to full extraction, which BW refuses while delta requests remain in the target. NOT the same as selective deletion of records by condition, which removes rows but leaves the request. Handles both kinds of request: a load request in the inbound queue is deleted, an activation request is rolled back instead — a rollback also undoes every later activation and removes the load request underneath it. Use all_requests=true with target to clear a provider completely, which is the regular case before an extraction-mode change. Asynchronous: a successful call starts the deletion; confirm with bw_list_requests. Returns which requests were rolled back and which were deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoTarget InfoProvider technical name (e.g. "OBJECT_NAME"). Required with all_requests; optional with request_tsn, where it lets the tool report which further requests a rollback cascade took with it.
storageNoStorage area code the request lives in (default "AQ"). Take it from the "Storage" line of bw_list_requests. AT/AX mark an activation request, which is rolled back rather than deleted; so does every InfoObject storage (ATAT, ATTE, ATHI), since InfoObject loads write straight into active data.
request_tsnNoRequest TSN to delete (from bw_list_requests / bw_run_dtp output). Omit when using all_requests.
target_typeNoTarget object type (default "ADSO").
all_requestsNoDelete every request of target in one run (default false): roll back the activations, then delete what is left in the inbound queue.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and does so well: it discloses that load requests are deleted, activation requests are rolled back with a cascade that undoes later activations, the call is asynchronous, and the return identifies rolled-back vs. deleted requests. Authorization details are absent, but the destructive and irreversible nature is clear from 'delete' and 'removing the data'.

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

Conciseness5/5

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

The description is front-loaded with purpose and sibling distinction, then moves through behavior, usage, async confirmation, and return values. Every sentence carries decision-relevant information, and the length is justified by the tool's destructive, multi-mode complexity.

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

Completeness5/5

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

Given no annotations and no output schema, the description is complete: it covers purpose, when to use it, alternatives, both request-type behaviors, asynchronous confirmation, and what the call returns. Nothing an agent needs in order 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.

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3 even without additional parameter detail. The description adds usage context for all_requests=true with target, clarifying the common extraction-mode-change scenario, but most individual parameter meanings are already fully documented in the schema.

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

Purpose5/5

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

The description states a specific verb and resource: delete load requests from an InfoProvider, including removal of data and request-management entries. It explicitly distinguishes itself from selective record deletion and clarifies how load vs. activation requests are handled, giving the agent a precise mental model.

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

Usage Guidelines5/5

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

It states the primary use case (precondition for switching a DTP from delta to full extraction), the regular case for all_requests=true with target, and the exclusion (not selective deletion of records by condition). It also directs the agent to bw_list_requests for asynchronous confirmation.

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

bw_delete_transformation_routineA

Remove a Start, End, or Expert routine from a Transformation. Removes the matching routine rule from the transformation's global routine group. If no rules remain, removes the entire group. Returns lock_handle for bw_activate.

ParametersJSON Schema
NameRequiredDescriptionDefault
routine_typeYesRoutine to remove: "start", "end", or "expert".
transformation_nameYesTransformation name (UUID-like key).

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses side effects (removing entire group if no rules remain) and return value ('lock_handle for bw_activate'), providing useful behavioral context beyond a simple delete statement.

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

Conciseness5/5

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

Three concise sentences: first for action, second for effect, third for return value. No unnecessary words, front-loaded with the core purpose.

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

Completeness4/5

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

For a simple delete tool with 2 parameters and no output schema, the description covers purpose, side effects, and return value. However, it lacks preconditions (e.g., whether the transformation must be locked beforehand), leaving minor gaps.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents both parameters. The description does not add new meaning beyond what the schema provides (e.g., 'routine_type' enum values). Baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Remove', the resource 'Start, End, or Expert routine from a Transformation', and specifies the types. It distinguishes from sibling tools like bw_set_transformation_routine by focusing on deletion.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool vs alternatives, prerequisites, or order of operations. The description only states what it does, leaving the agent to infer usage context.

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

bw_get_adsoA

Read an aDSO (Advanced DataStore Object) structure — fields, settings, version.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format. "text" (default): compact human-readable summary. "raw": raw XML from BW.
adso_nameYesaDSO name (e.g. "ADSO_NAME").

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided, so description must fully disclose behavior. Only states 'Read' (safe), but omits error handling (e.g., missing aDSO), return format details beyond the three listed items, and any authentication or permissions requirements.

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

Conciseness5/5

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

Single sentence front-loaded with action verb, using dash-separated list for clarity. No redundant or irrelevant content. Efficient for the tool's simplicity.

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

Completeness4/5

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

For a simple read tool with two parameters and no output schema, the description covers the core output (fields, settings, version). Lacks details on edge cases (e.g., non-existent aDSO) and permissions, but suffices for typical use.

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

Parameters3/5

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

Schema coverage is 100% and parameter descriptions are clear. The tool description adds no additional semantic value beyond the schema, including no mention of parameters. Baseline of 3 is appropriate.

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

Purpose5/5

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

Description clearly states the tool reads an aDSO structure, listing specific components (fields, settings, version). Distinguishes well from sibling creation/update tools (e.g., bw_create_adso, bw_update_adso) and other get tools targeting different objects.

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

Usage Guidelines3/5

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

No explicit when-to-use or when-not-to-use guidance. The verb 'Read' and context of sibling tools imply read-only use, but the description does not explicitly direct the agent away from alternatives or mention prerequisites.

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

bw_get_aggregation_levelB

Read an Aggregation Level (TLOGO ALVL) definition — the planning-enabled view on top of an InfoProvider (aDSO or CompositeProvider) used for Integrated Planning / embedded BPC. Returns name, description, status, InfoArea, package, the underlying InfoProvider, and the full element list split into characteristics and key figures. Characteristics include type, length, conversion routine, base InfoObject, compounding, and dimension group. Key figures additionally include aggregation behavior, semantics (AMO/QUA/NUM), and the unit/currency reference (unit characteristic, fixed unit, or fixed currency).

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNo"text" (default): readable summary. "raw": the unmodified XML.
aggregation_level_nameYesTechnical name of the Aggregation Level (e.g. "OBJECT_NAME").

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, and it only implies read-only via the verb 'Read'. It says nothing about authorization/permission requirements, what happens if the name does not exist, or whether the result is cached or object-level scoped. The detailed element enumeration describes payload content, not behavior.

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

Conciseness4/5

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

One long but well-structured sentence that front-loads the purpose before enumerating outputs. The verbose field list is defensible because there is no output schema, though the nested characteristic/key-figure detail could be tightened.

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

Completeness4/5

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

Since no output schema exists, the description usefully compensates by enumerating returned fields (name, status, InfoArea, package, InfoProvider, characteristics vs key figures, AMO/QUA/NUM semantics, unit/currency reference). What is missing is sibling routing and any read-time caveats, but for a single-object getter the payload coverage is strong.

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

Parameters3/5

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

Schema coverage is 100% with only 2 parameters, so the schema already documents both aggregation_level_name (with an example) and the format enum. The description adds no parameter-level detail — it never mentions the 'raw' vs 'text' format choice — so it stays at the baseline 3.

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

Purpose4/5

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

States a specific verb+resource ('Read an Aggregation Level (TLOGO ALVL) definition') and defines the domain concept precisely as the planning-enabled view on top of an InfoProvider, which meaningfully separates it from bw_get_adso and bw_get_composite_provider. It never names those siblings explicitly, so an agent must infer the distinction rather than being routed to the right tool.

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

Usage Guidelines2/5

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

No when-to-use guidance at all: it never says to call this when you need to inspect an ALVL rather than its underlying aDSO/CompositeProvider, nor what prerequisite (an existing ALVL name) is needed. The nearby siblings bw_create_aggregation_level and bw_update_aggregation_level are the obvious routing alternatives and are not mentioned.

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

bw_get_ckfA

Read a global Calculated Key Figure (CKF) defined at CompositeProvider level. Returns technical name, description, the formula both as a rendered string and as a structured tree (formula_tree) that bw_create_ckf and bw_update_ckf take back unchanged, the exception aggregation of the CKF (null for standard aggregation; same shape the write tools take), metadata, and the full dependency graph of referenced CKF/RKF sub-components.

ParametersJSON Schema
NameRequiredDescriptionDefault
component_nameYesTechnical name of the CKF (e.g. "CKF_NAME").

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full behavioral burden, and it discharges much of it: it enumerates the exact return payload (technical name, description, rendered formula, structured formula_tree, exception aggregation, metadata, full dependency graph) and notes the round-trip contract that write tools accept the formula_tree unchanged. It stops short of stating read-only safety, error behavior, or what happens for non-existent or non-global CKFs.

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

Conciseness4/5

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

Front-loaded with the action and resource, then a single enumeration of return fields; no filler sentences. The enumeration is dense and long, but each listed item (formula_tree round-trip, exception aggregation shape) carries information an agent needs given there is no output schema.

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

Completeness5/5

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

With no output schema and no annotations, the description is the only source of return-value and contract information, and it covers that fully, including the round-trip compatibility with the CKF write tools. Nothing essential for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter, so the schema already documents component_name fully. The description adds no format, naming, or lookup guidance beyond what the schema provides, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb ('Read') and resource ('global Calculated Key Figure defined at CompositeProvider level'), and the qualifier 'global... at CompositeProvider level' distinguishes it from the sibling bw_get_rkf (reusable key figure) and bw_get_structure. An agent can tell what it retrieves without opening the schema.

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

Usage Guidelines3/5

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

Usage is only implied by the read semantics and by the mention that the formula_tree is consumed by bw_create_ckf and bw_update_ckf, which hints at a read-before-write workflow. It never states when to prefer this over bw_get_rkf, bw_get_composite_provider, or bw_get_aggregation_level, nor any prerequisites.

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

bw_get_composite_providerA

Read a CompositeProvider (HCPR) structure — general info, view node type (Union/Join), source providers (inputs) with mapping counts, fields with their field group (dimension) and, for InfoObject-bound fields, their name usage ("direct" or "unique_name" — a query finds a "unique_name" field only under "-"), the declared field groups, join condition, and temporal join details. Returns the inactive version.

ParametersJSON Schema
NameRequiredDescriptionDefault
composite_provider_nameYesTechnical name of the CompositeProvider (e.g. "HCPR_NAME").

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it does disclose a non-obvious behavioral trait: it returns the inactive version. It also enumerates the returned structure in detail (view node type, source providers with mapping counts, field groups, join condition, temporal join). It omits authorization/lock-state or error behavior, which keeps it from a 5.

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

Conciseness4/5

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

It is a single long, comma-heavy sentence, but the purpose is front-loaded and every clause maps to return content that is otherwise undocumented (no output schema). Slightly denser than ideal, but nothing is wasted.

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

Completeness4/5

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

Because there is no output schema, the description must describe the return value, and it does so thoroughly for a complex structure. The main gap is that it says nothing about failure modes or the practical consequence of reading only the inactive version.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter, and the schema already explains the technical name with an example. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb ('Read') plus resource ('a CompositeProvider (HCPR) structure') and enumerates exactly what is returned, which cleanly separates it from the sibling create_/update_composite_provider tools. An agent can tell what it gets without opening any other definition.

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

Usage Guidelines3/5

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

The read-only intent and the note that it returns the inactive version imply usage, but there is no explicit 'use this when…' statement and no reference to when to prefer it over siblings such as bw_get_adso or bw_get_infosource. Guidance is inferable rather than stated.

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

bw_get_conversion_typeA

Read a currency translation type (TLOGO CTRT) or a unit conversion type (TLOGO UOMT): source and target (fixed, from the record or chosen when converting, from an InfoObject or a variable), and for a currency the exchange rate type, the exchange rate, the rate type specifics, inverse, and the time reference; for a unit the factor determination and its InfoObject. Without kind both types are tried.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNocurrency or unit; omit to try both.
nameYesTechnical name of the conversion type (e.g. "OBJECT_NAME").
formatNo"text" (default): readable summary. "raw": the unmodified XML.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the fallback behavior when 'kind' is omitted plus the shape of the returned record. However it says nothing about permissions needed, behavior on a non-existent name, or error/empty-result handling.

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

Conciseness3/5

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

Front-loaded with the verb and resource, but it is a single dense sentence with nested parentheticals and semicolons that is hard to parse. The long enumeration of returned fields arguably belongs in documentation rather than the description.

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

Completeness4/5

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

With no output schema, the description compensates well by enumerating what the returned record contains (source/target, rate type, exchange rate, time reference, factor determination) and what 'format' controls. Only failure and empty-result behavior is unaddressed.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents kind, name, and format, including the 'omit to try both' behavior that the description merely restates. The description adds little semantic detail beyond what the structured fields provide.

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

Purpose5/5

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

States a specific verb ('Read') and resource ('currency translation type / unit conversion type'), and even names the underlying TLOGO types (CTRT/UOMT). The read verb inherently separates it from the sibling bw_create_conversion_type at a glance.

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

Usage Guidelines3/5

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

Usage is only implied: it is the read counterpart to bw_create_conversion_type. The one conditional ('Without kind both types are tried') describes parameter behavior rather than when to prefer this tool, and no prerequisites, permissions, or exclusions are given.

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

bw_get_dataflowA

Trace the data flow graph for a BW object. Returns a tree (≤ 30 nodes) or flat table (> 30 nodes) showing all connected objects (ADSO, RSDS, TRFN, DTPA, TRCS, IOBJ, HCPR, LSYS, ELEM) with their type, name, description, and status. BW direction convention: "upwards" traverses towards BW target objects (ADSO, TRFN, TRCS, IOBJ); "downwards" traverses towards source systems (LSYS, RSDS). Use this to understand the full lineage of an object without navigating each connection manually. IMPORTANT: Always print the complete tool result verbatim as a fenced code block in your chat response — never omit or summarize it.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format. "text" (default): tree or flat table. "raw": raw XML from BW.
levelsNoNumber of levels to expand in each direction. -1 = all levels (default).
directionNoDirection to traverse: "upwards" (towards BW target objects: ADSO, TRFN, TRCS, IOBJ), "downwards" (towards source systems: LSYS, RSDS), or "both". Default "both".
object_nameYesTechnical name of the BW object (e.g. "ADSO_NAME", "DS_NAME").
object_typeYesBW object type: ADSO, RSDS, HCPR, TRFN, DTPA, IOBJ, TRCS, LSYS.
source_systemNoRequired when object_type is RSDS. Logical source system name (e.g. "LSYS_NAME").

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses output format thresholds (tree vs flat table) and direction conventions. It does not mention nondestructive nature or permissions, but the behavioral details are adequate for correct usage.

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

Conciseness4/5

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

The description is concise at about 5 sentences, with the main action front-loaded. The important instruction about printing the result adds length but is valuable. Some redundancy in listing object types could be trimmed, but overall it's well-structured.

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

Completeness4/5

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

Given the 6 parameters (2 required), no output schema, and no annotations, the description covers essential behavioral aspects: output format, direction, and object types. It could mention read-only nature, but it provides enough for an agent to invoke correctly.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description adds some value by explaining the direction convention more thoroughly and noting defaults. However, most parameters are well-described in the schema, and the description doesn't significantly augment them.

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

Purpose5/5

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

The description clearly states the tool traces the data flow graph for a BW object, specifies the output format (tree or flat table) based on node count, lists included object types, and explains direction convention. It distinguishes from sibling tools which are for creation, activation, deletion, etc.

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

Usage Guidelines4/5

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

The description explicitly states the use case: 'Use this to understand the full lineage of an object without navigating each connection manually.' It also provides an important instruction to always print the complete result. However, it does not mention when not to use it or compare to alternatives like bw_xref.

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

bw_get_datasourceA

Read the full structure of a DataSource (RSDS) — metadata, all fields with types and properties, and adapter configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format. "text" (default): compact human-readable summary. "raw": raw XML from BW.
source_systemYesLogical source system name (e.g. "LSYS_NAME").
datasource_nameYesTechnical name of the DataSource (e.g. "DS_NAME").

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description implies a read-only operation without side effects. However, it does not disclose error handling, return behavior for invalid inputs, or performance implications. The description is adequate for a standard 'get' operation but lacks depth.

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

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the key purpose. Every part is meaningful, no redundancy, and it efficiently conveys the tool's function.

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

Completeness4/5

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

For a read tool with 3 parameters and no output schema, the description adequately outlines what is returned (metadata, fields, adapter config). It could mention output format details, but the schema covers the format parameter. Overall complete given the tool's simplicity.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains all parameters. The description adds no additional semantics beyond what the schema provides. Baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action (Read) and the resource (DataSource/RSDS), specifying it returns the full structure including metadata, fields, and adapter configuration. This distinguishes it from sibling tools like bw_list_datasources (listing) and bw_get_infosource (different object).

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

Usage Guidelines2/5

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

The description lacks any guidance on when to use this tool versus alternatives such as bw_get_infosource or bw_get_adso. No prerequisites, exclusions, or context are provided, leaving the agent to infer usage solely from the tool name and description.

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

bw_get_dtpA

Read a DTP (Data Transfer Process) definition — source, target, transformation, extraction settings, and filter fields (selections and routines). Use bw_xref on an aDSO to find the DTP name first. To find only the process chain a DTP belongs to, use bw_xref with object_type=DTPA instead — it is faster and avoids loading the full DTP definition.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNo"text" (default): readable summary. "raw": the unmodified XML.
dtp_nameYesDTP name (e.g. "DTP_...").

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose the returnable content (source, target, transformation settings, filter routines) and a performance trade-off versus the alternative, which is useful. However it does not state permission/auth requirements, whether the operation is strictly read-only, or any response-format caveats beyond what the schema's format enum implies.

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

Conciseness5/5

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

Three sentences, front-loaded with the core purpose, then the prerequisite lookup, then the cheaper alternative. Every sentence 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.

Completeness4/5

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

For a two-parameter read tool with no output schema, the description is nearly complete: it enumerates the returned definition contents and routes the agent to prerequisites and alternatives. The only gaps are auth/permission behavior and explicit confirmation that the call is non-mutating, which annotations would normally cover.

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

Parameters3/5

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

Schema description coverage is 100%, including the format enum (text/raw) and a description for dtp_name, so the schema already documents both parameters. The description mentions filter fields and settings but adds no syntax or format guidance beyond what the schema provides, making the baseline 3 appropriate.

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

Purpose5/5

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

States a specific verb (Read) and resource (DTP definition) and enumerates exactly what is retrieved: source, target, transformation, extraction settings, and filter fields. It also explicitly contrasts itself with bw_xref, so an agent can distinguish it from the sibling without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit routing: use bw_xref on an aDSO to obtain the DTP name first, and use bw_xref with object_type=DTPA when only the owning process chain is needed. Both the when-to-use and the when-to-use-alternative are spelled out, including the performance reason ('faster and avoids loading the full DTP definition').

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

bw_get_dtpsA

List DTPs (Data Transfer Processes) that depend on a BW object. Uses the xref endpoint filtered to DTPA object type. Use object_type=TRFN and the transformation name to find DTPs after activating a transformation.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameYesObject name to find dependent DTPs for.
object_typeYesObject type of the referenced object: ADSO, TRFN, IOBJ, etc.

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description bears full burden. It discloses that the tool uses the 'xref endpoint filtered to DTPA object type,' which is a behavioral detail. However, it does not mention permissions, side effects, or error handling. As a read-only operation, the lack of destructive hints is acceptable but could be clearer.

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

Conciseness5/5

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

Two sentences, front-loaded with the primary purpose, followed by a technical detail. No wasted words. Efficient and clear.

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

Completeness3/5

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

No output schema exists, and the description does not specify what the tool returns (e.g., list of DTP names/IDs). For a list tool, omitting the return format is a gap. However, the description is adequate for basic use. Not fully complete.

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

Parameters3/5

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

Schema coverage is 100% with clear descriptions for both parameters. The description adds a usage hint for object_type=TRFN but does not enhance the semantic meaning beyond what the schema already provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'DTPs (Data Transfer Processes)' and specifies the context 'that depend on a BW object.' It distinguishes from siblings like bw_get_dtp (single DTP) by focusing on dependents.

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

Usage Guidelines4/5

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

Provides a concrete usage example: 'Use object_type=TRFN and the transformation name to find DTPs after activating a transformation.' This gives clear guidance for a common use case. However, it does not explicitly state when not to use or list alternatives.

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

bw_get_filter_valuesA

Look up valid characteristic values for use in query filters or variable inputs. Returns CHAVL_INT (internal key) — always use this value when setting filter selectValues or variable inputs; CHAVL_EXT and CHAVL_INT often differ for date-type characteristics. Supports wildcard search: use "" to return all values, "2022" for prefix match. Optionally scope results to a specific InfoProvider (recommended when values differ by provider).

ParametersJSON Schema
NameRequiredDescriptionDefault
max_rowsNoMaximum number of values to return (default 201).
info_providerNoOptional. Scopes the value list to a specific InfoProvider (ADSO, HCPR, etc.). Omit to read from master data directly.
search_stringYesWildcard search pattern. "*" returns all values up to max_rows. Prefix with text to filter (e.g. "2022*").
characteristic_nameYesInfoObject technical name to get values for (e.g. "IOBJ_NAME").

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It explains the return value (CHAVL_INT), notes differences between CHAVL_EXT and CHAVL_INT for date types, and describes wildcard behavior. It does not mention if it's read-only, but 'look up' implies a safe operation. Overall, good transparency.

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

Conciseness5/5

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

All four sentences are concise and informative. The purpose is front-loaded, and each sentence adds new, essential information without redundancy. No unnecessary words.

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

Completeness4/5

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

Given 4 parameters with complete schema descriptions, the description adds context on usage and return values. It could mention default for max_rows (201) but that is in schema. No output schema, but return value semantics are covered. Adequate for the tool's complexity.

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

Parameters5/5

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

Schema coverage is 100%, so baseline is 3. The description adds significant value: explains search_string wildcard usage with examples, recommends info_provider scoping, and clarifies that returned value is CHAVL_INT (internal key). This goes well beyond the schema's descriptions.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Look up valid characteristic values for use in query filters or variable inputs.' It specifies the resource (characteristic values) and action (look up), and mentions internal key usage. However, it does not explicitly differentiate from sibling tools like bw_search, but the purpose 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.

Usage Guidelines4/5

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 the tool ('for use in query filters or variable inputs') and how to use it (wildcard search, scoping with info_provider). It lacks explicit when-not-to-use or alternative tools, but the context is clear.

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

bw_get_hierarchyA

Read the hierarchies of a characteristic. Without hierarchy_name: the hierarchies the characteristic has, with version, validity, levels and node count. With hierarchy_name: the tree — every node with its type (text node or characteristic value), name, text and node id, indented by level. Use it to find the node to filter on in bw_query_data, and to read a tree before changing it with bw_update_hierarchy.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNo"text" (default) or "raw" for the JSON of the API.
versionNoA = active (default where it exists), M = revised version.
characteristicYesCharacteristic the hierarchies belong to (e.g. "CHARACTERISTIC").
hierarchy_nameNoHierarchy to read. Omit to list the hierarchies of the characteristic.

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it does disclose the payload of both output modes — including that nodes are typed (text node vs. characteristic value) and indented by level, which is not derivable from the input schema. It omits any note on permissions, size limits, or pagination for large trees, so it is not fully complete.

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

Conciseness4/5

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

Front-loaded with the core action, then the two-mode split, then the routing guidance — a sensible order. The second sentence is long and packed with a comma-list of node attributes, which costs some readability but every clause carries information.

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

Completeness4/5

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

There is no output schema and no annotations, yet the description describes the shape of both return modes, which is the most important gap to close for this tool. It stops short of covering the raw/version parameters in prose, but those are adequately documented in the schema.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; however the description adds meaning the schema only hints at by spelling out the semantic switch on hierarchy_name (absent = list hierarchies, present = full tree) and framing each mode's output. The format and version parameters are left entirely to the schema, but that is acceptable at full coverage.

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

Purpose5/5

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

States a specific verb and resource ("Read the hierarchies of a characteristic") and then splits the two distinct behaviors by parameter presence: list mode (versions, validity, levels, node count) vs. tree mode (each node with type, name, text, id, indentation). An agent can distinguish this from bw_query_data and bw_update_hierarchy without opening any schema.

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

Usage Guidelines5/5

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

Explicitly names both downstream alternatives and the condition selecting each: use this to find the node to filter on in bw_query_data, and to read a tree before modifying it with bw_update_hierarchy. That is a genuine when-to-use statement tied to named siblings.

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

bw_get_infoareaA

Read an InfoArea definition — name, label, parent area, object status.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesInfoArea name (e.g. "NEXTJUICE").

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description must convey behavioral traits. It states 'Read', indicating a non-destructive operation. The description is clear about what it retrieves but does not disclose potential side effects, authorization requirements, or performance characteristics. However, for a simple read tool, this is adequate.

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

Conciseness5/5

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

The description is a single sentence that efficiently communicates the tool's action and output. It is front-loaded with the verb and resource, and every word adds value. No unnecessary information.

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

Completeness4/5

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

The tool has one required parameter and no output schema. The description compensates by listing the four fields returned (name, label, parent area, object status), which gives a clear idea of the response structure. This is sufficient for a simple read operation, though it does not specify data types or formats.

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

Parameters3/5

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

The input schema already provides a clear description of the single parameter (name with an example). Schema coverage is 100%. The description does not add further parameter semantics beyond stating the tool's output. Thus, it meets the baseline but does not enhance understanding.

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

Purpose5/5

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

The description uses the verb 'Read' and explicitly mentions the resource 'InfoArea definition', listing the specific fields returned (name, label, parent area, object status). This clearly identifies the tool's purpose and distinguishes it from sibling tools that operate on different SAP BW objects.

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

Usage Guidelines3/5

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

The description does not provide explicit guidance on when to use this tool versus alternatives. The purpose is implied (retrieve InfoArea details), but there is no mention of prerequisites, limitations, or when not to use it. Given the presence of many other 'get' tools for different objects, some differentiation would help.

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

bw_get_infoobjectA

Read an InfoObject definition (must already exist in the system). Returns the full XML including data type, length, conversion routine, and descriptions.

ParametersJSON Schema
NameRequiredDescriptionDefault
infoobject_nameYesInfoObject name (e.g. "IOBJ_NAME").

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It clearly indicates a read operation with no side effects, lists return fields (data type, length, etc.), and is consistent with the tool name.

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

Conciseness5/5

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

The description is a single sentence of 16 words, front-loaded with the action and resource. Every word adds value, making it highly efficient.

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

Completeness4/5

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

For a simple read tool with one parameter and no output schema, the description covers the core functionality and return content. It could optionally mention authorization or error conditions, but the current level is adequate.

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

Parameters3/5

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

Schema coverage is 100% with a clear description. The tool description adds the constraint that the object must exist, which provides useful context beyond the schema, but does not add further detail about the parameter format or values.

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

Purpose5/5

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

The description clearly states the action ('Read'), the resource ('InfoObject definition'), and a constraint ('must already exist in the system'). It also specifies the return content, distinguishing it from creation tools like bw_create_infoobject.

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

Usage Guidelines3/5

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

The description implies usage for reading existing objects but does not provide explicit guidance on when to use this tool versus alternatives (e.g., bw_update_infoobject) or 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.

bw_get_infosourceA

Read an InfoSource (TRCS) structure — fields, key fields, label, InfoArea, version status.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesInfoSource name (e.g. "INFOSOURCE_NAME").

TDQS

A3.6/5.0
Behavior3/5

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

The description states 'Read,' implying a non-destructive, idempotent operation. No annotations are provided, so the description carries the burden of behavioral disclosure. It does not mention side effects, authentication requirements, or rate limits, but for a simple read operation, the transparency is adequate.

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

Conciseness5/5

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

The description is a single, well-structured sentence that immediately states the action and lists the key components. There is no extraneous information, and it is front-loaded with the purpose.

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

Completeness4/5

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

For a simple read tool with one parameter and no output schema, the description covers the essential elements: the resource type and what the structure contains. It could be improved by noting the return format or whether the entire structure is returned, but it is largely complete.

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

Parameters3/5

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

The input schema has 100% coverage, with the single parameter 'name' already described as 'InfoSource name'. The description adds no additional semantics beyond the schema, 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.

Purpose5/5

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

Description clearly specifies the verb 'Read' and resource 'InfoSource (TRCS) structure', listing specific components like fields, key fields, label, InfoArea, version status. This distinguishes it from sibling tools such as bw_get_adso or bw_get_infoobject, which read different BW objects.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool versus alternatives like bw_get_adso or bw_get_infoobject. Given the large number of sibling tools, providing context on when to choose this tool would be beneficial for agent decision-making.

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

bw_get_open_hubA

Read an Open Hub Destination (TLOGO DEST) definition — destination type, source, DB table, InfoArea, package, status, the complete output field list with type/length, InfoObject binding, conversion routine, compounding, and key flag, plus file properties when the destination type is FILE.

ParametersJSON Schema
NameRequiredDescriptionDefault
open_hub_nameYesTechnical name of the Open Hub Destination (e.g. "OBJECT_NAME").

TDQS

A4/5.0
Behavior4/5

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

The description clearly indicates that this is a read operation ('Read') and details the extensive output content. It discloses that only the definition is retrieved and includes specific behavior for FILE destination types. However, without any annotations, it does not explicitly state that no modifications are made or mention required permissions. It effectively conveys the scope and nature of the operation.

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

Conciseness4/5

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

The description is a single, well-structured sentence that begins with the core purpose ('Read an Open Hub Destination...'). It efficiently lists the key aspects of the definition without unnecessary words. While it is somewhat dense, it remains clear and front-loads the essential information.

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

Completeness5/5

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

Given the absence of an output schema, the description thoroughly enumerates the return values, including destination type, source, DB table, InfoArea, package, status, output field list (with type/length, InfoObject binding, conversion routine, compounding, key flag), and file properties conditionally for FILE type. This provides complete contextual information for an agent to understand the output without needing additional documentation.

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

Parameters3/5

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

Schema description coverage is 100%, with one parameter 'open_hub_name' described in the schema as 'Technical name of the Open Hub Destination (e.g. "OBJECT_NAME").' The tool description does not add further semantics about the parameter beyond what the schema already provides. The baseline of 3 is appropriate since the schema covers the parameter adequately.

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

Purpose5/5

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

The description begins with 'Read an Open Hub Destination (TLOGO DEST) definition', clearly stating the action (read) and the specific resource (Open Hub Destination). It lists detailed components such as destination type, source, DB table, InfoArea, package, status, output field list, InfoObject binding, conversion routine, compounding, key flag, and file properties for FILE type. This specificity distinguishes it from sibling get_* tools that target other BW objects (e.g., bw_get_adso, bw_get_infoobject).

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives, nor does it provide any exclusion criteria or context for selection. It implicitly suggests use when reading an Open Hub Destination definition, but lacks explicit guidance such as 'Use this when you need the full OHD definition with field details'. No mention of when not to use or alternative tools is made.

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

bw_get_planning_filterA

Read a planning filter — the selection a planning sequence step or an input template works on. Returns its aggregation level, InfoArea, package, the restriction per characteristic (fixed values, ranges, exclusions) and the variables it uses with their type, processing and input settings. A sequence step names its filter (bw_get_planning_sequence).

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNo"text" (default): readable summary. "raw": the unmodified XML.
filter_nameYesTechnical name of the planning filter (e.g. "OBJECT_NAME").

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the behavioral burden. 'Read' implies a non-mutating operation and the description usefully discloses the shape of the response (aggregation level, InfoArea, package, restrictions, variables with type/processing/input settings). But it says nothing about permissions needed, behavior on a missing filter, or whether output is paginated.

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

Conciseness4/5

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

Two tight sentences with no filler; the core definition is front-loaded and the return-contents list and cross-reference follow. It is dense but every clause carries information, with only slight compression that makes the enumeration read as a run-on.

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

Completeness4/5

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

With no output schema and no annotations, the description correctly compensates by enumerating the salient return fields, and it anchors the resource to its parent sequence step. It is nearly sufficient for calling the tool, missing only error/permission context and any note on the format parameter's practical effect.

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

Parameters3/5

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

Schema description coverage is 100%, with both the 'format' enum and 'filter_name' documented in the schema itself, so the schema does the heavy lifting and a baseline of 3 applies. The description adds only indirect meaning by noting that a sequence step 'names its filter,' and does not touch the text/raw format choice.

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

Purpose4/5

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

The description opens with a specific verb+resource ('Read a planning filter') and immediately clarifies the concept ('the selection a planning sequence step or an input template works on'). It enumerates the returned contents, so an agent knows exactly what this retrieves. It stops short of explicitly differentiating itself from sibling getters like bw_get_planning_sequence or bw_get_aggregation_level.

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

Usage Guidelines3/5

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

The description implies the context in which a filter exists (a sequence step or input template) and cross-references bw_get_planning_sequence, which gives the agent a hint about when to reach for it. However, it states no explicit when-to-use vs. when-not-to-use condition and names no alternative getter to prefer.

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

bw_get_planning_functionA

Read a Planning Function (TLOGO PLSE) definition — a planning operation (formula/FOX, copy, delete, repost, distribution, currency translation, custom exit, …) tied to an aggregation level for Integrated Planning / embedded BPC. Returns name, description, function type (planningServiceType), aggregation level, documentation, status, InfoArea, package, the characteristic usage list (role of each characteristic in the function), and the full parameter tree with nested structure and values. For FORMULA functions the FOX code surfaces as the value of the FLINE parameter. The block characteristics — every characteristic that is not to be changed — are listed separately: the function runs once per combination of their values, so records that differ in one of them never meet in the same call.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNo"text" (default): readable summary. "raw": the unmodified XML.
planning_function_nameYesTechnical name of the Planning Function (e.g. "OBJECT_NAME").

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full behavioral burden. It does add real context — the returned field set, the fact that FOX code surfaces as the FLINE parameter value, and the execution semantics of block characteristics (function runs once per combination, records differing in them never meet) — but it never explicitly confirms the operation is read-only/side-effect-free, which an unannotated tool should state.

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

Conciseness4/5

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

Purpose is front-loaded in the first clause, and with no output schema the long return-field enumeration largely earns its place. Still, it is a single dense paragraph with stacked em-dash clauses, and the block-characteristics explanation could be tightened.

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

Completeness4/5

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

For a low-complexity read tool with no output schema, the description is thorough about the return payload, which is exactly what is needed. The one gap is that it omits the format=raw option that changes the response shape to unmodified XML.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters fully documented in the schema (including the text/raw enum), so baseline is 3. The description adds nothing about parameters — it never mentions the format switch or the raw XML option — and its FLINE reference concerns the response, not input.

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

Purpose5/5

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

States a precise verb+resource ('Read a Planning Function (TLOGO PLSE) definition') and immediately scopes it as a planning operation tied to an aggregation level for Integrated Planning / embedded BPC, which separates it from siblings like bw_get_planning_filter, bw_get_planning_sequence and bw_get_aggregation_level.

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

Usage Guidelines3/5

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

The description conveys what a planning function is and some internal semantics, so usage is implied, but it never says when to choose this over bw_get_planning_filter, bw_get_planning_sequence, bw_get_planning_properties or bw_update_planning_function, nor any prerequisites.

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

bw_get_planning_propertiesA

Read the Planning Properties (TLOGO PLCR) of a plan-enabled InfoProvider (real-time aDSO or CompositeProvider). Returns the provider name, underlying provider resource and media type, InfoArea, package, status, and the general planning settings: key-date mode, maximum number of characteristic combinations, and the save strategy (planning sequence and delta-read flag). The PLCR shares its technical name with the InfoProvider it belongs to.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNo"text" (default): readable summary. "raw": the unmodified XML.
plan_provider_nameYesTechnical name of the plan-enabled InfoProvider (e.g. "OBJECT_NAME"). The PLCR object shares this name.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It clearly establishes that this is a read (not a mutation) and enumerates what is returned, but says nothing about authorization prerequisites, provider-not-found behavior, or other caveats an agent might need for an aDSO/CompositeProvider read.

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

Conciseness4/5

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

Three sentences, front-loaded with the core action and then the return contents; no filler. The closing sentence about the shared technical name is mildly redundant with the schema description of plan_provider_name but still earns its place as context.

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

Completeness4/5

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

For a read-only, no-annotation tool with no output schema, the description supplies the full set of returned fields (name, resource, media type, InfoArea, package, status, and planning settings) so an agent knows what to expect. Only minor gaps remain, such as error behavior or permission requirements.

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

Parameters4/5

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

Schema description coverage is already 100%, so the baseline is 3. The description adds value beyond the schema by defining what a valid provider is (plan-enabled, real-time aDSO or CompositeProvider) and reiterating why the name matters (the PLCR shares the InfoProvider's technical name), which clarifies the identifier parameter rather than merely repeating it.

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

Purpose4/5

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

States a specific verb (Read) and resource (Planning Properties / TLOGO PLCR) scoped to a precise provider type (plan-enabled real-time aDSO or CompositeProvider), which is enough to distinguish it from the planning_filter/sequence/function siblings. It stops short of naming any alternative tool explicitly, so it lands just under the top band.

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

Usage Guidelines3/5

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

The description implies usage by stating the applicable provider types (a plan-enabled InfoProvider, i.e. real-time aDSO or CompositeProvider), which helps an agent decide when this tool is valid. However there is no explicit when-to-use vs when-not guidance and no routing to a sibling, so it remains implied rather than stated.

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

bw_get_planning_sequenceA

Read a Planning Sequence (TLOGO PLSQ) definition — an ordered list of planning steps for Integrated Planning / embedded BPC. Returns name, description, InfoArea, package, status, and the ordered step list. Each step shows its kind (planning function, or manual input: an input template that only opens its filter), the aggregation level, the planning function (planning service), and the filter name.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNo"text" (default): readable summary. "raw": the unmodified XML.
planning_sequence_nameYesTechnical name of the Planning Sequence (e.g. "OBJECT_NAME").

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden — and it does disclose meaningful behavior: the exact payload (name, description, InfoArea, package, status, ordered steps) and the semantic distinction that a 'manual input' step is an input template that only opens its filter. It stops short of stating permission requirements or error behavior for a missing sequence.

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

Conciseness5/5

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

Three sentences, purpose front-loaded, zero filler — the domain qualifier and the field list both earn their place and nothing is repeated.

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

Completeness4/5

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

There is no output schema, so the description correctly compensates by enumerating the return fields and per-step attributes. It is nearly complete, missing only failure/permission behavior and any note about how format=raw differs.

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

Parameters3/5

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

Schema description coverage is 100%, including the enum for format ('text' vs 'raw'), so the schema already documents both parameters fully. The description adds no parameter-level detail, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (Read) and resource (Planning Sequence, TLOGO PLSQ) with the exact domain (Integrated Planning / embedded BPC), and enumerates the returned fields. It is clearly distinguishable from sibling reads like bw_get_planning_function and bw_get_planning_filter.

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

Usage Guidelines3/5

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

Usage is implied by the name and the read framing, but the description never states when to reach for this tool instead of bw_get_planning_function, bw_get_planning_filter, or bw_get_aggregation_level, and lists no prerequisites or exclusions. Adequate but leaves routing to inference.

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

bw_get_process_chainA

Read a Process Chain (RSPC) definition — header metadata, scheduling and monitoring settings, all steps (nodes) with type, variant, and last execution status, step dependencies (edges) with branch conditions for DECISION nodes, and inline variant details. By default (include_variant_details=true), automatically fetches and embeds the full variant configuration for each step that has detail available. Steps without variant detail (DTP_LOAD, OR, AND, EXOR, CHAIN) are shown without extra detail — for DTP_LOAD use bw_get_dtp, for CHAIN use bw_get_process_chain recursively. Set include_variant_details=false for a faster structural overview without variant detail. Use bw_search with object_type=RSPC to find chain names first.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format. "text" (default): compact human-readable summary. "raw": full parsed JSON.
chain_nameYesProcess chain technical name (e.g. "CHAIN_NAME"). Case-insensitive.
include_variant_detailsNoIf true (default), fetches variant configuration detail for each step automatically and includes it inline. Set to false to skip variant detail fetching for faster response on large chains.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses default behavior of fetching variant details, steps without detail, and that include_variant_details=false provides faster structural overview. It does not mention potential timeouts or rate limits but is otherwise transparent.

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

Conciseness4/5

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

Description is front-loaded with a summary sentence, then details on default behavior and exceptions. Every sentence provides value, though slightly wordy. Well-structured and informative.

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

Completeness4/5

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

No output schema, but description lists all components: header, scheduling/monitoring, steps, edges, and variant details. It addresses missing detail for some step types and redirects to alternative tools. Complete enough for an AI agent to understand the return scope.

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

Parameters4/5

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

Schema coverage is 100% (baseline 3). Description adds meaning beyond schema by explaining default behavior of include_variant_details, what happens for steps without variant detail, and providing context for format parameter (human-readable vs raw JSON). Adds significant value.

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

Purpose5/5

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

The description clearly states the tool reads a Process Chain definition and lists components. It uses a specific verb 'Read' and resource 'Process Chain definition', and distinguishes from siblings by mentioning alternatives for specific step types and suggesting bw_search for finding chain names.

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

Usage Guidelines5/5

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

Explicit guidance on when to use this tool (to get full definition) and when not (for DTP_LOAD steps use bw_get_dtp, for CHAIN steps use recursively). Also suggests bw_search to find chain names first and explains trade-off of include_variant_details parameter.

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

bw_get_process_chain_run_detailA

Read the execution detail of one process chain run — all process steps with type, variant, status, timestamps, and parent/child relationships (predecessor graph edges), plus the full message log. chain_id and log_id come from bw_list_process_chain_runs or bw_list_process_chain_last_status output. Use this to diagnose a failed run. Errors come with their message number and long text (diagnosis, system response, procedure). For every failed step the step log is read as well: each error with its message variables and, for a runtime error in a routine, the class, method and line it was raised at — the actual cause when a transformation caught the error and left no short dump.

ParametersJSON Schema
NameRequiredDescriptionDefault
log_idYesRun log ID from bw_list_process_chain_runs or bw_list_process_chain_last_status (logId field).
chain_idYesProcess chain technical name (e.g. "CHAIN_NAME").
include_warningsNoAlso show long text, variables and program location for warnings, not only for errors (default false).

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does substantial work: it discloses that step logs are read for every failed step, that errors carry message number, long text, diagnosis/system response/procedure, and that runtime errors expose class/method/line. It does not state read-only/no-side-effect behavior or output volume limits, which is the remaining gap.

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

Conciseness4/5

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

Purpose and scope are front-loaded in the first sentence, with the diagnostic rationale and return detail following. The paragraph is dense but nearly every clause adds distinct information; only the trailing clause about routine class/method/line is slightly verbose.

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

Completeness4/5

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

No output schema exists, and the description compensates by describing the returned step structure and the error/log payload in detail, which is what an agent needs to interpret results. It omits any note on result size or pagination for what is likely a large log payload.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (log_id, chain_id, include_warnings) are already documented with sources and defaults. The description reinforces the include_warnings semantics ('long text, variables and program location for warnings, not only for errors') but adds no format or syntax detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

Opens with a specific verb+resource: 'Read the execution detail of one process chain run' and enumerates exactly what is returned (steps with type, variant, status, timestamps, predecessor edges, plus the full message log). It also distinguishes itself from the sibling list tools by naming where chain_id and log_id originate.

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

Usage Guidelines4/5

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

Explicitly states the use case ('Use this to diagnose a failed run') and routes the agent to bw_list_process_chain_runs / bw_list_process_chain_last_status as the ID sources. It stops short of stating when NOT to use it (e.g., for reading chain definitions, which a sibling likely covers).

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

bw_get_process_variantA

Read the detail configuration of a single Process Variant from a Process Chain step. Covers all process types: ABAP (report name + selection variant), ADSOACT (aDSO activation), ADSOREM (request cleanup), PLSWITCHL/PLSWITCHP (planning mode switch), DTP_LOAD, DECISION, and any other type — oDetail is returned as indented JSON for unknown types. Get process_type and variant_name from bw_get_process_chain output (sProcessType and sProcessVariant fields). Use format="raw" to see the full unformatted JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format. "text" (default): readable summary with oDetail as indented JSON. "raw": full parsed JSON.
process_typeYesProcess type technical name from the chain step (e.g. "ABAP", "DTP_LOAD", "ADSOACT", "ADSOREM", "PLSWITCHL", "PLSWITCHP", "DECISION"). Case-insensitive.
variant_nameYesProcess variant technical name from the chain step (e.g. "ILV_...", "DTP_...", "DEL_..."). Case-insensitive.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries full responsibility. It clearly states the tool is read-only ('Read'), describes how unknown types are handled (oDetail as indented JSON), and explains the 'raw' format option. This provides sufficient behavioral insight.

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

Conciseness5/5

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

The description is a single paragraph with no redundancy. It front-loads the purpose, then lists process types, input sourcing, and format options—each sentence adds value.

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

Completeness4/5

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

Given three parameters and no output schema, the description covers input sourcing, return format variants, and behavior for unknown types. It lacks explicit output structure details for each process type, but the format options and example of indented JSON provide adequate guidance.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds critical context: it tells that process_type and variant_name come from specific fields in bw_get_process_chain output. For the format parameter, it clarifies the difference between 'text' and 'raw' beyond the enum values.

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

Purpose5/5

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

The description starts with a clear verb+resource: 'Read the detail configuration of a single Process Variant from a Process Chain step.' It lists specific process types and distinguishes from the sibling tool bw_get_process_chain by instructing where to obtain inputs.

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

Usage Guidelines4/5

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

The description explains when to use the tool: to read a process variant detail from a chain step. It explicitly ties inputs to the output of bw_get_process_chain. While it doesn't list negative conditions, the context is well-defined.

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

bw_get_push_schemaA

Fetch the JSON schema for an aDSO write interface. Returns field names, data types, and required fields. Use this before bw_push_data to know what fields to include in records.

ParametersJSON Schema
NameRequiredDescriptionDefault
adso_nameYesaDSO technical name (e.g. "ADSO_NAME").

TDQS

A4.9/5.0
Behavior5/5

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

No annotations provided, so description carries full burden. It describes the fetch operation as non-destructive and lists return values (field names, data types, required fields). No side effects or hidden behaviors left unexplained.

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

Conciseness5/5

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

Two sentences with zero waste. First sentence states action and result, second sentence gives usage direction. Information 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.

Completeness5/5

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

For a simple getter with one required parameter and no output schema, the description adequately communicates what is returned (field names, data types, required fields). No missing or confusing details.

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

Parameters4/5

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

Schema coverage is 100% (single parameter adso_name fully described). Description adds usage context ('for an aDSO write interface') but doesn't enrich parameter semantics beyond what schema provides. Slight bonus for contextual framing.

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

Purpose5/5

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

Description clearly states 'Fetch the JSON schema for an aDSO write interface' with specific verb and resource. Distinguishes from sibling tools as it is unique for push schema, and explicitly mentions it returns field names, data types, and required fields.

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

Usage Guidelines5/5

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

Explicitly states 'Use this before bw_push_data to know what fields to include in records.' This provides clear when-to-use guidance and an alternative sibling tool reference (bw_push_data). No ambiguity.

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

bw_get_queryA

Read a BW Query definition — variables, filter, layout (rows/columns/free characteristics), calculated and restricted measures, exceptions, and cell definitions. Structure members are reported with their properties: input readiness and disaggregation (the planning settings), decimals, scaling, sign inversion, constant selection, the local calculation (results / single values as), exception aggregation, position, nested child members and the inverse formulas that make an input-ready formula writable. A member that shows a reusable CKF reports the CKF's own exception aggregation separately from the member's. Each variable lists where the query uses it — filter, default value, key date, structure member, formula, CKF/RKF, exception, condition, cell or text — or says that no use was found; the settings carry the key date (system date, a fixed date or a variable). Tries the active version first; falls back to the inactive version if not found. format="text" (default): compact human-readable output. format="raw": full parsed JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNo"text" (default): structured human-readable output. "raw": full parsed JSON.
query_nameYesTechnical name of the query (e.g. "QUERY_NAME").

TDQS

A4/5.0
Behavior4/5

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

With no annotations the description carries the full burden, and it does well: it discloses the active-then-inactive version fallback, the semantic distinction between a member's exception aggregation and a reusable CKF's own, and how variable usage is enumerated. It does not cover permissions/auth needs or error behavior when neither version exists, keeping it short of a 5.

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

Conciseness4/5

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

It is front-loaded with purpose and the format behavior, but the middle is one dense block listing dozens of member properties in a single run-on sentence. The content earns its place given there is no output schema, but the lack of structure makes it harder to scan.

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

Completeness5/5

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

No output schema exists, so the description must convey return content, and it does so comprehensively — member properties, planning settings, variable usage enumeration, and the key date settings. For a two-parameter read tool this is complete enough for an agent to call and interpret the result.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are already documented. The description restates the format enum values ("text" compact vs "raw" full JSON) but adds no meaning beyond the schema, and query_name gets no elaboration. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource ("Read a BW Query definition") and then enumerates exactly what parts are returned — variables, filter, layout, measures, exceptions, cells. This is enough to distinguish it from siblings like bw_query_data (data retrieval) and bw_get_ckf (single object) without opening a schema.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the agent infers this is for inspecting a query definition as opposed to reading its data. It does give useful operational guidance on the active/inactive version fallback and the format choice, but never names an alternative sibling or a when-not condition, so routing remains partly inferential.

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

bw_get_query_rolesA

Get all roles and folders where a specific BW query is currently published. Returns the role name, description, and folder for each assignment. If the query is not published anywhere, returns a clear message.

ParametersJSON Schema
NameRequiredDescriptionDefault
query_nameYesTechnical name of the BW query (case-insensitive).

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description is the sole source of behavioral info. It discloses that the tool retrieves assignments, returns specific fields, and provides a clear message when no results. However, it does not mention permissions, side effects (presumably read-only), or performance implications. The disclosure is adequate for a simple get operation.

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

Conciseness5/5

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

Two sentences, each essential. The first sentence states the action and what is returned; the second handles the edge case. No unnecessary words.

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

Completeness4/5

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

With no output schema, the description must explain return structure. It does so by listing fields (role name, description, folder) and implies a list via 'for each assignment.' It also covers the empty case. The tool is simple with one param, and the description provides sufficient context 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.

Parameters3/5

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

Schema coverage is 100% (one parameter with description). The schema already documents 'Technical name... (case-insensitive).' The tool description adds no additional parameter details beyond the schema, so baseline score applies.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'roles and folders where a specific BW query is published.' It specifies output fields (role name, description, folder) and handles the case of no results, distinguishing it from siblings like bw_get_role_queries which likely queries in reverse.

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

Usage Guidelines3/5

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

The description implies usage when needing to know where a query is published, but it does not explicitly state when not to use this tool versus alternatives like bw_get_role_queries or bw_get_roles. There is no mention of preconditions or exclusions.

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

bw_get_remodeling_requestA

Full status of one remodeling request: header, the five processing steps (CHECK, SAVE, CONVERT, ACTIVATE, CLEANUP) with their individual status, and the application log messages. Read-only. This is the tool to diagnose a failed remodeling — the log carries the reason. A "running" status is never reported on the monitor service alone: it is buffered and keeps reporting Running after a run has finished, so the status is cross-checked against the runtime tables and the batch job. A corrected status names its source; if the run is demonstrably over but the header still lags, the output warns about it. Poll this tool to wait for a run to finish.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format. "text" (default): readable summary. "raw": full parsed JSON.
include_logNoInclude the application log messages (default true).
info_providerYesInfoProvider technical name the rule belongs to. Case-insensitive.
request_numberNoOptional request GUID from bw_list_remodeling_requests output. When omitted, the most recent request of the given InfoProvider and rule is resolved automatically.
remodeling_ruleYesRemodeling rule ID, from bw_list_remodeling_requests output.

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and it does so richly: it marks the operation read-only, explains the buffered 'Running' behavior, says the status is cross-checked against runtime tables and the batch job, notes that a corrected status names its source, and warns when the header lags. This goes well beyond a simple getter description and prepares the agent for a commonly confusing behavior.

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

Conciseness4/5

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

The description is concise for the behavioral complexity it has to convey, and the key facts are front-loaded: what is returned and read-only first. Each subsequent sentence adds new information about diagnosis, the buffered status pitfall, and polling, rather than repeating the schema. It is longer than a two-line description, but the length is justified by the non-obvious status behavior.

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

Completeness5/5

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

For a fairly complex diagnostic tool with no output schema, the description covers what an agent needs: returned fields, the log as diagnostic carrier, the meaning of the status edge cases, and the polling recommendation. The five-step list, corrected-source behavior, and lag-warning behavior provide context an agent would otherwise not infer from the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3: the schema already documents every parameter including the enum, defaults, case-insensitivity, and the auto-resolution of the request number. The description does not add much parameter-level semantics, though it does mention bw_list_remodeling_requests as the source for two of the identifiers, which is mildly useful.

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

Purpose5/5

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

The description names a specific verb ('get') and resource ('one remodeling request') and states exactly what is returned: header, per-step statuses for the five processing steps, and log messages. It distinguishes itself from the sibling bw_list_remodeling_requests by being the single-request status/diagnosis tool, so an agent can pick it apart from the list tool without opening the schema.

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

Usage Guidelines4/5

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

The description says this is 'the tool to diagnose a failed remodeling' and explicitly instructs to 'poll this tool to wait for a run to finish', which gives concrete when-to-use guidance. It does not name the alternative tools or explicitly say when not to use it, but the context makes the intended use clear enough.

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

bw_get_requestA

Full status analysis of one load request in a single call, bundling the request header, DTP information (including start, finish and duration), the process step chain and the message log, errors with their long text. Read-only. For a DTP request that did not finish green, the messages of its data packages are added from the step log of the process chain run that executed it — with message variables and the program location of a runtime error. A request run outside a process chain has no such log, and the output says so. The request TSN comes from bw_list_requests output.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format. "text" (default): readable summary. "raw": full parsed JSON of all four payloads, plus the process chain step log where one is read.
storageNoStorage area code (default "AQ"). Take it from the "Storage" line of the bw_list_requests output — the code differs by target type (e.g. AQ inbound, AT/AX active data aDSO, ATTE active text table InfoObject). A wrong code 404s the header/DTP/process sections, but the message log is still returned.
request_tsnYesInternal request TSN from bw_list_requests output.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does well: it declares 'Read-only' and discloses the conditional behavior that a request run outside a process chain has no log and the output states so, plus that error messages include long text and runtime-error location. It omits auth/permission requirements and any rate/volume caveats, so not fully exhaustive.

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

Conciseness4/5

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

Front-loads the core purpose ('Full status analysis of one load request in a single call') before the enumeration of payloads. Dense but each sentence adds information; the 'Read-only' and process-chain edge case earn their place. Slightly over-packed but not padded.

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

Completeness4/5

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

There is no output schema, and the description compensates by enumerating the four payloads returned and describing the conditional step-log addition, which is the key thing an agent must anticipate. Missing details on the error/404 path are covered in the schema, so the description is nearly sufficient for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents request_tsn, storage, and format in detail. The description only echoes the TSN provenance already present in the schema and adds no syntax or defaulting guidance beyond it, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb (get) and resource (one load request) and enumerates exactly what the response bundles: header, DTP info, process step chain, message log, and error long texts. An agent can distinguish it from bw_list_requests (which only supplies the TSN) without opening either schema.

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

Usage Guidelines4/5

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

Gives a clear prerequisite: 'The request TSN comes from bw_list_requests output,' telling the agent which sibling precedes this call. It also frames the scenario where the extra step-log data appears (a DTP request that did not finish green), but names no explicit exclusion against near neighbors like bw_get_dtp or bw_get_process_chain_run_detail.

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

bw_get_rkfA

Read a global Restricted Key Figure (RKF) defined at CompositeProvider level. Returns technical name, description, base measure, characteristic filters, metadata, and the full dependency graph of referenced CKF/RKF sub-components.

ParametersJSON Schema
NameRequiredDescriptionDefault
component_nameYesTechnical name of the RKF (e.g. "RKF_NAME").

TDQS

A3.5/5.0
Behavior3/5

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

No annotations provided; description correctly indicates a read operation and lists return fields, but lacks information on error conditions, permissions, or side effects beyond the obvious.

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

Conciseness5/5

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

Single sentence that concisely states the action and outputs, with no unnecessary words.

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

Completeness3/5

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

For a simple read tool with one well-documented parameter, the description covers purpose and outputs; however, no output schema and limited behavioral context make it minimally adequate.

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

Parameters3/5

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

Single parameter has full 100% schema coverage including description; tool description adds no extra semantics beyond what is already in the schema.

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

Purpose5/5

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

The description clearly states the tool reads a global Restricted Key Figure (RKF) and lists the returned fields (technical name, description, etc.), differentiating it from other BW get tools like bw_get_ckf.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs. alternatives (e.g., bw_get_ckf), nor any preconditions or context for usage.

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

bw_get_role_queriesA

List all BW queries published in BW roles (via the "Publish to Role" mechanism). Returns each role with its assigned queries, including technical name, description, object type, and InfoProvider. Note: only SAP_BW_QUERY objects are returned; PFCG menu entries of other types (e.g. AFO workbooks added as transactions) are not included. Use role_name to filter to a specific role; omit it to see all roles with published queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
role_nameNoOptional. Technical name of the role to filter by (e.g. from bw_get_roles). Omit to return all roles.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses the return structure and exclusions (only SAP_BW_QUERY objects, not other PFCG types). However, it does not mention read-only nature explicitly, potential errors, or performance characteristics.

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

Conciseness5/5

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

Three concise sentences: first defines purpose and return, second clarifies behavioral boundary, third gives usage guidance. No redundant or extraneous information.

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

Completeness4/5

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

Given no output schema and no annotations, the description covers the core functionality, parameter usage, and return structure reasonably well. Lacks details on error handling, sorting, or pagination, but these are 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.

Parameters4/5

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

The schema with 100% description coverage already documents the role_name parameter. The description adds value by connecting role_name to bw_get_roles and reiterates the filtering logic, clarifying the behavior beyond the schema.

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

Purpose5/5

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

The description clearly states the tool lists BW queries published in roles via the 'Publish to Role' mechanism, and specifies the returned information (role, query technical name, description, object type, InfoProvider). It distinguishes itself from sibling tools by focusing on published queries only, not other PFCG entries.

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

Usage Guidelines3/5

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

The description provides explicit guidance on using the role_name parameter to filter or omitting it to get all roles. However, it lacks explicit direction on when to use this tool versus alternatives like bw_get_query_roles or bw_set_query_roles, relying on contextual understanding from sibling names.

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

bw_get_rolesA

Load the complete BW query role hierarchy as shown in the "Publish to Role" dialog. Returns all roles (ROLE nodes) and their folder structure (FOLDER nodes) with nodeids. Use this to discover role names and folder names needed for bw_set_query_roles. Optionally filter to roles whose name starts with a given prefix.

ParametersJSON Schema
NameRequiredDescriptionDefault
role_filterNoOptional prefix to filter results. Only ROLE nodes whose name starts with this prefix are included (e.g. "BW:").

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided, but the description indicates the tool loads hierarchy (read-only implied) and optionally filters. It does not mention any side effects or specific permissions needed, which would enhance transparency, but it is adequate given the operation nature.

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

Conciseness5/5

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

Two sentences, front-loaded with the main purpose, no wasted words. Highly concise and well-structured.

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

Completeness4/5

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

No output schema, but the description states the return values include roles, folders, and nodeids. It lacks detail on the exact structure of the return, but for a simple list tool, it is nearly complete. Could mention the format or hierarchy depth.

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

Parameters3/5

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

Schema coverage is 100% for the single parameter, and the schema description already covers the parameter's meaning. The description adds minimal value by restating the optional prefix filter, but this is consistent. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool loads the BW query role hierarchy and returns roles and folder structure with nodeids. It distinguishes itself by mentioning it's for discovering names needed for a specific sibling tool (bw_set_query_roles).

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

Usage Guidelines4/5

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

The description explicitly says to use this tool for discovering role and folder names needed for bw_set_query_roles. It implies when to use it but does not provide explicit when-not-to-use or alternatives, 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.

bw_get_source_systemA

Read the metadata of a single logical source system (LSYS) — type, description, connection details, and maintenance properties.

ParametersJSON Schema
NameRequiredDescriptionDefault
source_systemYesLogical source system name (e.g. "LSYS_NAME"). Case-insensitive.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It states the operation is a read, but does not disclose authentication needs, rate limits, or behavior on missing source systems. It is adequate but could be more transparent.

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

Conciseness5/5

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

The description is a single sentence that is front-loaded with the verb 'Read' and the resource. No extraneous words; every part earns its place.

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

Completeness4/5

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

For a simple read tool with one parameter and no output schema, the description lists the returned fields, which is sufficient. It could mention error handling or required permissions, but overall it provides a complete picture.

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

Parameters4/5

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

The input schema already describes the parameter with 100% coverage. The description adds value by specifying what fields will be returned (type, description, etc.), helping the agent understand the tool's output beyond the schema.

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

Purpose5/5

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

The description clearly states the action ('Read'), the resource ('metadata of a single logical source system'), and specifies the fields (type, description, connection details, maintenance properties). It distinguishes itself from siblings like 'bw_list_source_systems' which lists all systems.

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

Usage Guidelines3/5

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

The description implies usage for retrieving details of a single LSYS, but does not explicitly state when to use it over alternatives like 'bw_list_source_systems'. No exclusions or prerequisites are mentioned.

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

bw_get_structureA

Read a global Structure defined at CompositeProvider level. Returns the ordered member list with type (Selection/Formula), referenced component or IOBJ name, characteristic filters, and the full dependency graph.

ParametersJSON Schema
NameRequiredDescriptionDefault
component_nameYesTechnical name of the Structure (e.g. "STR_NAME").

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It clearly indicates this is a read operation (non-destructive) and details the specific data returned, providing good behavioral insight. However, it omits any mention of authentication requirements, rate limits, or potential side effects, though as a read operation, those are less critical.

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

Conciseness5/5

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

Two concise, front-loaded sentences that convey the tool's purpose and return value without redundancy. Every sentence adds value.

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

Completeness4/5

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

Given the simplicity (1 parameter, no output schema, no annotations), the description is sufficiently complete. It explains what the tool does and what it returns. It could add more on output structure or dependencies, but overall adequate.

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

Parameters3/5

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

Schema coverage is 100% for a single parameter, so the baseline is 3. The description adds context ('global Structure at CompositeProvider level') but does not add significant meaning beyond the schema's description ('Technical name of the Structure'). The example 'STR_NAME' is helpful.

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

Purpose5/5

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

The description clearly states the action ('Read'), the resource ('global Structure'), and the scope ('at CompositeProvider level'), distinguishing it from sibling tools like bw_get_ckf or bw_get_rkf. It also lists what is returned (ordered member list, types, referenced components, filters, dependency graph).

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

Usage Guidelines3/5

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

The description implies usage when a structure needs to be read, but does not explicitly state when to use this tool over alternatives, nor does it mention prerequisites or when not to use it. Sibling tools exist for other get operations, but no guidance is provided.

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

bw_get_transformationA

Read a Transformation structure — source/target segments, mapping rules. Transformation names are UUID-like generated keys (e.g. "TRFN_UUID_KEY"). Use bw_xref on the aDSO to find the transformation name.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format. "text" (default): compact human-readable summary. "raw": raw XML from BW.
transformation_nameYesTransformation name (UUID-like key, e.g. "TRFN_UUID_KEY").

TDQS

A4.2/5.0
Behavior3/5

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

Description indicates a read operation, but with no annotations, it doesn't disclose additional behavioral traits like permissions or rate limits. Adequate but minimal.

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

Conciseness5/5

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

Two concise sentences with no redundant information. Each sentence adds necessary context.

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

Completeness4/5

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

No output schema, but description explains returned structure (source/target, mapping rules) and output formats. Covers key aspects for a read tool.

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

Parameters4/5

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

Schema coverage is 100%, but description adds value by explaining transformation names are UUID-like keys and suggesting how to find them. This enhances parameter understanding beyond the schema.

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

Purpose5/5

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

The description clearly states 'Read a Transformation structure' with specific content (source/target segments, mapping rules). It distinguishes from siblings like bw_xref by mentioning how to find the transformation name.

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

Usage Guidelines4/5

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

Provides explicit guidance to use bw_xref before calling this tool, aiding in selecting the correct tool. Lacks explicit when-not-to-use but gives clear context.

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

bw_get_variableA

Read a reusable BW Variable: reference characteristic, description, variable type, processing type, selection type, input type, input readiness, reusability, package and InfoArea. Use it after bw_create_variable to confirm what was stored — the modeling API accepts an enum literal it does not know, saves its default and still reports the object as consistent, so a create alone proves nothing about the processing or selection type. Reading the variable through a query does not answer this: a query resolves the technical name of a variable reference, never its definition.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format: "text" (default) for the parsed definition, "raw" for the unmodified XML.
variable_nameYesTechnical name of the variable (e.g. "VAR_NAME").

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it excels. It discloses a significant behavioral trap: the modeling API accepts an unknown enum literal, saves its default, and still reports consistency, making create results unreliable. It also explains the limitation of query-based reading with respect to variable definitions. This is rich, non-obvious behavioral context beyond mere 'this is a getter.'

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

Conciseness5/5

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

The description is detailed yet tight. The first sentence states the action and scope, the second provides the usage context and the API pitfall, and the third closes with the key limitation of alternative approaches. Every sentence earns its place; there is no filler or repetition.

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

Completeness4/5

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

For a read-only tool with only two parameters, the description covers what the tool returns (an explicit list of fields), when to use it, and why alternatives fail. It does not describe the exact output structure or error cases, but given there is no output schema and the tool's scope is narrow, the description is sufficiently complete 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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters: variable_name as the technical name and format with its enum values and defaults. The description adds no parameter-specific details, but none are needed since the schema carries the semantic load. Baseline 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Read a reusable BW Variable,' followed by an explicit list of fields (reference characteristic, description, variable type, processing type, etc.). It also distinguishes the tool from query-based reading, which resolves technical names rather than definitions, making its purpose unambiguous even among many siblings.

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

Usage Guidelines5/5

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

The description explicitly states when to use it: 'Use it after bw_create_variable to confirm what was stored.' It also explains why a create alone is insufficient, due to the modeling API silently accepting unknown enum literals, and why a query is not an alternative. This gives clear when-to-use and when-not-to-use guidance.

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

bw_list_changeable_transportsA

List transport requests and their tasks via the BW transport state (cto/check). Defaults to the caller's modifiable requests. Use this to find an open request to assign an object to.

ParametersJSON Schema
NameRequiredDescriptionDefault
own_onlyNoOnly the caller's own requests (default true). false widens to all users.
include_objectsNoInclude the objects contained in each task (default false).
modifiable_onlyNoOnly modifiable requests, i.e. status "D" (default true). false also returns released requests.

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided, so the description carries the full burden. It discloses the mechanism (cto/check), default filters (own_only, modifiable_only), and the output (list of requests and tasks). However, it does not describe the return format, error behavior, or any potential side effects. Adequate but not comprehensive.

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

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: one stating the function and mechanism, another giving usage guidance. No redundant information. Front-loaded with key information. Highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with no output schema, the description adequately covers purpose, usage, defaults, and mechanism. It mentions that both requests and tasks are listed. Could hint at pagination or response structure, but overall sufficient for an agent to use effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline 3. The description adds value by explaining the defaults for own_only and modifiable_only, and ties these to the usage context ('find an open request'). This goes beyond the schema descriptions, justifying a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the action (list), resource (transport requests and tasks), context (via BW transport state), and distinguishes from siblings like bw_list_requests by focusing on changeable/modifiable requests. It states the default scope (caller's modifiable requests) and the purpose (find an open request to assign an object).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this to find an open request to assign an object to', providing clear guidance on when to use this tool. It implies that other tools might be used for different purposes, but doesn't explicitly mention alternatives. However, given the sibling context, this is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_list_contentsA

Read the direct children of any node in the BW repository tree. The path parameter maps to the navigation hierarchy: use "/" or "" for all InfoAreas, "area/{name}" for InfoArea contents (object type folders), "area/{name}/{folder}" for objects within a folder (e.g. "area/MYAREA/adso"), "{type}/{name}" to expand an object (e.g. "hcpr/CP_NAME" → sub-folders), "{type}/{name}/{subfolder}" for objects within a sub-folder (e.g. "adso/ADSO_NAME/trfn"). Returns name, description, object_type, object_subtype, status, has_children, self_url, fiori_only, and children_path (pass directly to bw_list_contents to drill down).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesRepository path to list. Use "/" or "" for all InfoAreas. Examples: "area/MYAREA", "area/MYAREA/hcpr", "hcpr/CP_NAME", "hcpr/CP_NAME/elem_ckf", "adso/ADSO_NAME/trfn".

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Describes the behavior as read-only, lists return fields, and explains how path affects output. No contradictions, and behavior is fully disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph that packs in purpose, path details, and return fields. It is efficient but could be better structured with bullet points or sections for improved readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description lists all relevant return fields. Covers navigation patterns, making the tool fully understandable for its browsing purpose. Complete for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and description adds significant context by explaining the hierarchical path patterns with examples (e.g., 'area/{name}/{folder}', 'hcpr/CP_NAME'). This goes well beyond the schema's brief description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads direct children of any node in the BW repository tree. It uses a specific verb ('Read') and resource ('direct children'), and distinguishes from sibling tools like getters and search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit examples of path patterns for navigation (e.g., '/', 'area/{name}', '{type}/{name}') and advises that 'children_path' can be passed directly to drill down. Lacks explicit when-not-to-use guidance but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_list_datasourcesA

List all DataSources (RSDS) available under a logical source system. Recursively traverses the full application component (APCO) hierarchy — may take time for large systems. Returns each DataSource with name, source_system, description, status, self_url, and apco_path (ordered list of application component titles from root to the DataSource). Optional apco_path_filter restricts the result to a hierarchy subtree and also prunes traversal.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format. "text" (default): compact plain-text table. "raw": raw XML feed bodies from BW.
source_systemYesLogical source system name (e.g. "LSYS_NAME"). Case-insensitive.
apco_path_filterNoOptional APCO hierarchy filter. A contiguous sequence of APCO names, "/"-style separated by ">". May start at any depth in the hierarchy (not root-anchored). Example: "LEVEL_1 > LEVEL_2" returns every DataSource that lives under a path containing LEVEL_1 directly followed by LEVEL_2. Each segment matches case-insensitively against the APCO display title OR the technical APCO name (trimmed). A single segment like "IS-U" returns all DataSources under any APCO subtree named "IS-U", at any depth.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses recursive traversal and possible slowness. Describes the return fields and the filter behavior. With no annotations, this provides sufficient behavioral insight for a read-only list tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences front-loading core purpose, then providing detail on traversal, output, and optional filter. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all necessary aspects: resource type, scope, behavior (recursive, slow), output fields, filter syntax, and default format. Lacks only pagination/limits, but this is acceptable for such a tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds meaning beyond schema: explains apco_path_filter with example, notes case-insensitivity for source_system, and confirms default format. Schema covers all params, but description enriches usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the verb 'List' and the resource 'DataSources (RSDS)' under a logical source system. Distinguishes itself from siblings like bw_get_datasource by listing all vs. single, and bw_search by focusing on hierarchy traversal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Contextually clear when to use (listing all datasources under a system) and mentions potential performance impact for large systems. Does not explicitly exclude alternatives but the purpose implies distinct use from single-resource tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_list_process_chain_last_statusA

Read the latest execution status and scheduling state for every process chain in the system — one row per chain. Includes last run status, runtime deviation, scheduling status, next scheduled start, and the log_id of the most recent run (pass into bw_get_process_chain_run_detail to drill down). Chains that have never run appear here too. Optionally filter to chains whose last run has a specific status or whose last start date falls in a range.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoOptional maximum number of chains to return. Omit to return all.
statusNoOptional filter on last run status code. Returns only chains whose most recent run matches this status.
last_start_toNoOptional upper bound for last run start date (ISO format). Maps to lastStartDate le datetime filter.
last_start_fromNoOptional lower bound for last run start date (ISO format, e.g. "YYYY-MM-DD"). Maps to lastStartDate ge datetime filter.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description must carry the burden. It explicitly states it is a read operation, includes chains that never ran, returns one row per chain, and allows filtering. It does not mention permissions or rate limits, but the described behavior is transparent enough for a read-only listing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose and output fields. The second sentence adds important edge cases (never-run chains) and filter options. No wasted words; every sentence is essential and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a listing tool with no output schema, the description covers the output content (fields listed), optional filters, and references a sibling for drill-down. It handles edge cases (chains that never ran) and mentions optional date range filtering. This is complete for its complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. The description adds value by explaining that the log_id can be used to drill down with a sibling tool and provides format hints for date parameters (ISO format with example). This extra context helps the agent use the parameters correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it reads the latest execution status and scheduling state for every process chain, one row per chain. It distinguishes from siblings by specifying it returns aggregate per-chain info and mentions using bw_get_process_chain_run_detail for drill-down, showing clear differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: when you need an overview of all chains with their latest status, scheduling, and optional filtering by status or date. It also suggests an alternative (bw_get_process_chain_run_detail) for drilling into a specific run. However, it does not explicitly state when not to use it relative to other siblings like bw_get_process_chain, but the distinction is implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_list_process_chain_runsA

List execution runs of one or all process chains from the process chain monitoring log. Each row represents one chain run with overall status, runtime deviation, start/end timestamps, and duration. Optionally filter by chain technical name, start date range, and status code. Returns the log_id of each run — pass chain_id + log_id into bw_get_process_chain_run_detail for step-level details. Ordered by start time descending. Default limit 20 runs.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of runs to return (default 20).
statusNoOptional status code filter (e.g. as returned by the status field of previous runs). Resolves to eq filter on the status field.
date_toNoOptional upper bound for run start date (ISO format). Maps to startDate le datetime filter.
date_fromNoOptional lower bound for run start date (ISO format, e.g. "YYYY-MM-DD" or "YYYY-MM-DDTHH:MM:SS"). Maps to startDate ge datetime filter.
chain_nameNoOptional process chain technical name to restrict to runs of a single chain (e.g. "CHAIN_NAME"). Omit for system-wide results.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses return fields (status, runtime deviation, timestamps, duration, log_id), ordering by start time descending, default limit 20. No annotations provided, so description carries full burden. Covers main behavioral traits but omits potential rate limits or data freshness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each with distinct purpose: purpose, row content, filtering and linking, ordering and limit. No unnecessary words, highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, description sufficiently explains return values and how to use them. Parameter descriptions are complete. Tool is simple but description covers all necessary context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description adds value by explaining ISO format for dates, optional nature of chain_name, and how status filter works (eq). Provides more meaning than schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it lists execution runs from process chain monitoring log, with specific fields and filters. Distinguishes from sibling bw_get_process_chain_run_detail by mentioning it returns log_id to pass for step-level details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains when to use (listing runs) and provides filtering options. Mentions linking to detail tool for step-level info. Implicitly distinguishes from bw_list_process_chain_last_status by offering full run data. Lacks explicit 'when not to use' but provides clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_list_remodeling_requestsA

List remodeling requests from the remodeling monitor, with decoded status, last run and creator. Remodeling changes the structure of an existing InfoProvider (e.g. adding, deleting or reassigning a field of an aDSO) and converts the data it already holds. Read-only. Rules are not created by this tool family — BW creates one automatically when an aDSO holding data is activated after a change that cannot be applied to the existing data in place (changing the key definition, deleting a field, changing a data type). Merely appending a field does not trigger one: the column is added and old records keep the initial value. The activation reports "remodeling rule created instead of the activation"; that ID is the remodeling_rule of the resulting request.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoUpper cap on the number of requests to return (default 20). When the cap cuts the list short, the output says so and reports the total — do not read a truncated list as the complete set of open requests.
statusNoOptional comma-separated status codes to include: N not scheduled, S scheduled, R running, C completed, E error. Omit to list every request regardless of status.
info_providerNoOptional InfoProvider technical name (e.g. "OBJECT_NAME") to filter on. Case-insensitive. Omit to list requests of all InfoProviders.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden of behavioral disclosure. It explicitly states 'Read-only,' explains how remodeling rules arise, and notes that this tool family does not create rules. This meaningfully clarifies side effects and interpretation of returned remodeling_rule IDs, though it does not cover behaviors like ordering, errors, or authentication.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the primary purpose and then adds a concise but detailed explanation of remodeling semantics. Each paragraph earns its place; the text is somewhat dense and long, but it avoids filler and is structured from the list action to the conceptual background that an agent needs to interpret results.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Combined with the high schema coverage, the description gives enough to call and interpret the tool: it names output fields, explains what a remodeling_rule is, and clarifies key edge cases like the 'empty column' scenario. There is no output schema, so a fuller example of the returned request object would improve completeness, but the current text is not materially incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of the three parameters with clear descriptions (top cap, status codes, info_provider filter). The description adds useful context around what 'status' refers to conceptually and how remodeling_rule IDs are created, but it does not add new parameter-level meaning beyond the schema, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List remodeling requests from the remodeling monitor.' It also names the meaningful output fields ('decoded status, last run and creator') and frames remodeling as a distinct operation from normal request listing, clearly distinguishing this sibling from bw_list_requests and bw_get_remodeling_request.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for when remodeling concepts matter, including when a remodeling rule is automatically created vs. when appending a field does not trigger one. It does not explicitly name alternative list-based siblings or state 'use this instead of bw_list_requests,' but the remodeling-monitor framing implies the intended use strongly enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_list_remote_entitiesA

List the remote entities (HANA views / virtual tables) a source system exposes as a DataSource basis — read-only discovery (the value help Eclipse shows on the DataSource proposal page). Each entity's technical_name is exactly what binds into bw_create_datasource as the HANA entity. Use this to find a valid hana_entity before creating a DataSource.

ParametersJSON Schema
NameRequiredDescriptionDefault
result_sizeNoMaximum number of rows to return (default 200). Check result_complete to see if truncated.
source_systemYesLogical source system name (e.g. "LSYS_NAME"). A HANA/SDA/SDI source system.
search_patternNoWildcard pattern filtering on technicalName (default "*" for all).

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description clearly labels the tool as read-only discovery, which is transparent. No annotations are provided, so the description carries the burden and does well. However, it could mention that it's a list operation without side effects, but the context is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise with three sentences. It front-loads the purpose, then provides usage guidance. No unnecessary words; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema is present, but the description gives enough context about the return (list of entities with technical_name). For a listing tool, it's adequately complete, though a mention of return structure would be slightly better.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% coverage with descriptions. The tool description adds value by explaining the result_size parameter's role in truncation and the search_pattern's filtering on technicalName. It also emphasizes that technical_name is key for the binding tool, enhancing schema meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists remote entities (HANA views/virtual tables) exposed by a source system as DataSource basis. It specifies the read-only discovery nature and references the Eclipse value help, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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: to find a valid hana_entity before creating a DataSource. It also links the technical_name to the bw_create_datasource tool, providing clear usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_list_requestsA

List the recent load requests of an InfoProvider from the runtime request monitor, with decoded request status, record counts and timestamps. Returns one entry per request including the internal request TSN, which is the input for bw_get_request. Read-only. Use bw_search to find the target technical name first. Performance: listing cost scales with the number of returned rows because each row is enriched on the backend (a per-row cross-reference read). top bounds the result set; created_from and status only help by returning fewer rows, not by making a row cheaper. For providers with long load histories, use a narrow created_from window or a small top.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoUpper cap on the number of requests to return (default 3). Each returned row triggers an expensive per-row backend read, so keep this small; raise it only when needed.
statusNoComma-separated request status codes to include (default "N,GG,GR,YG,RR,YR,RG,U,Y,X").
targetYesTarget InfoProvider technical name (e.g. "OBJECT_NAME"). Case-insensitive.
storageNoComma-separated storage area codes (default "AQ,AX,AT"; for target_type "IOBJ" "ATAT,ATTE,ATHI" — attributes, texts, hierarchies).
target_typeNoTarget object type (default "ADSO").
created_fromNoOptional server-side lower time bound, ISO 8601 with milliseconds and Z (24 chars, e.g. "YYYY-MM-DDTHH:MM:SS.000Z"). Returns only requests created at or after this time (open upper bound = now). Narrows the result set, which reduces per-row backend enrichment cost. Recommended for providers with long load histories.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it declares read-only, discloses that each returned row triggers an expensive per-row cross-reference read on the backend, and clarifies that status/created_from reduce row count rather than per-row cost. This is non-obvious behavioral context an agent could not infer from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what it returns, then the chaining hint, then a clearly labled performance note. Dense but earns its sentences; the performance guidance is slightly repetitive of the top/created_from schema descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must cover return values, which it does (one entry per request with decoded status, record counts, timestamps, and the internal TSN). Combined with the performance and chaining guidance, an agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3; the description adds real meaning by explaining that top bounds the result set and that created_from/status only help by returning fewer rows, not by making each row cheaper. This cost-model nuance goes beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (List) + resource (recent load requests of an InfoProvider) + source (runtime request monitor), with the returned fields enumerated. It is clearly distinguishable from sibling readers like bw_get_request, bw_list_remodeling_requests and bw_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent to use bw_search first to resolve the target technical name, and states that the returned TSN is the input for bw_get_request, establishing the call chain. It does not, however, say when to prefer this over sibling list/get tools or state exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_list_source_systemsA

List logical source systems (LSYS) registered in the BW datasource structure. If source_system_type is provided, lists only source systems of that type (e.g. "ODP_SAP", "ODP_BW", "FILE"). If omitted, lists all source systems across all types. Returns each LSYS with name, description, source_system_type, status, self_url, and children_path (pass children_path directly to bw_list_datasources as the source_system argument).

ParametersJSON Schema
NameRequiredDescriptionDefault
source_system_typeNoOptional source system type filter. Known values: ODP_BW, ODP_SAP, ODP_CDS, ODP, FILE. Omit to list all source systems.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the behavioral burden. It specifies return fields (name, description, source_system_type, status, self_url, children_path) and filtering behavior. It does not explicitly state read-only status, but the 'list' verb implies it. Overall, clear 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences: purpose, filtering, and output usage. No unnecessary words; each sentence contributes meaningful information. Excellent front-loading.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a simple list tool with one optional parameter and no output schema, the description covers the return structure, filtering, and how to chain with another tool. It is fully complete for the agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a detailed description of the one parameter. The description repeats the filtering info and adds examples but does not provide new semantic meaning beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists logical source systems (LSYS) registered in the BW datasource structure. It uses a specific verb-resource combination and distinguishes from sibling tools like bw_get_source_system (single) and bw_list_datasources (drill-down) by mentioning how the returned children_path can be used.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the optional filter and provides a clear chaining instruction: pass children_path to bw_list_datasources. However, it lacks explicit guidance on when not to use it (e.g., for retrieving a single LSYS) versus using bw_get_source_system.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_move_objectA

Move a BW object (aDSO, InfoObject, InfoArea, …) to a different InfoArea. Single POST operation — no lock/unlock needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameYesTechnical name of the object to move (e.g. "OBJECT_NAME").
object_typeYesBW object type URL segment (e.g. "adso", "iobj", "area").
target_info_areaYesTechnical name of the target InfoArea (e.g. "MCPBW").

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description reveals it is a single POST operation with no lock/unlock required. This gives mild behavioral insight, but missing details on reversibility, permissions, or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, consisting of two sentences with no fluff. Essential information is front-loaded, and every word serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a move operation with three parameters and no output schema, the description covers the basic purpose. However, it lacks details on return values, error conditions, or idempotency, which would enhance completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description adds little beyond schema descriptions. It reinforces the purpose but does not provide additional parameter-level detail that the schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (move), the resource (BW object with examples), and the destination (different InfoArea). It effectively distinguishes from sibling tools like bw_delete or bw_create_adso.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions that no lock/unlock is needed, providing some usage context. However, it does not specify when to use this tool versus alternatives or when not to use it, leaving room for ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_preview_datasourceA

Fetch a live data preview / sample rows from a DataSource (RSDS) — reads the first N rows directly from the source system and returns them as a formatted table with field names as column headers. Use this when the user wants to see, sample, preview, or inspect the actual data behind a DataSource (e.g. "show me data from DS_X", "preview 50 rows", "what does DS_X look like"). For data from an aDSO, CompositeProvider, or BEx query, use bw_query_data instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
recordsNoNumber of records to fetch (default: 20). SAP returns at most this many rows.
source_systemYesLogical source system name (e.g. "LSYS_NAME"). Case-insensitive.
datasource_nameYesDataSource name (e.g. "DS_NAME"). Case-insensitive.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries burden. It discloses it reads first N rows, returns formatted table, default 20 records, and SAP caps at that. However, it does not mention permissions or potential performance implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Compact and efficient. Front-loads purpose, then usage guidance. Every sentence serves a purpose, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, description mentions return format. Covers purpose, usage, and parameter details adequately for a simple preview tool. No major gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. Description adds context: case-insensitivity, source system naming, default for records, and SAP behavior. This adds value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it fetches a live data preview from a DataSource, reads first N rows, returns formatted table. It distinguishes itself from bw_query_data for other data types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use (user wants to preview data from DataSource) and when not (use bw_query_data for aDSO, CompositeProvider, BEx query), providing an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_push_dataA

Push data records directly into an aDSO inbound table via the SAP BW/4HANA write interface. The aDSO must have write_interface enabled (pushMode="true"). Use bw_get_push_schema first to verify field names and types. Success = HTTP 204 (SAP returns empty body). DATS fields must be formatted as YYYYMMDD strings. INT4 fields as JSON integers.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPush mode. "one_step" (default): implicit request per call. "messaging": uses ?request=MESSAGING param.
recordsYesArray of record objects. Field names must match aDSO field names exactly (uppercase).
adso_nameYesaDSO technical name (e.g. "ADSO_NAME").

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses that success returns an empty body (HTTP 204) and specifies format requirements for DATS and INT4 fields. Could mention error cases or idempotency, but provides adequate 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences plus format notes. No wasted words. Prerequisites, success indicator, and constraints are front-loaded and concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers prerequisite tool, required interface setting, success response, and field formatting. Does not address error handling or record size limits, but for a data push operation it is fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all parameters, but description adds significant value: explains default mode, clarifies that DATS fields require YYYYMMDD strings and INT4 as JSON integers, and details the messaging mode. These are not in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it pushes data records into an aDSO inbound table via the SAP BW/4HANA write interface, specifying the verb and resource. Distinguishes from sibling bw_get_push_schema by referencing it as a prerequisite.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear prerequisite (use bw_get_push_schema first) and success condition (HTTP 204). Does not explicitly mention when not to use or alternatives, but provides strong context for appropriate use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_query_dataA

Execute a BW query or preview data from a provider (CompositeProvider, aDSO, etc.) via the BICS reporting endpoint. ALWAYS call the appropriate read tool first before querying data: bw_get_composite_provider for a CompositeProvider (is_provider=true), bw_get_adso for an aDSO (is_provider=true), bw_get_query for a BEx Query — this gives you the available fields, key figures, and the query structure before you attempt a data call. Then perform a GET (no state/variables) first to discover the current axis layout, characteristic ids, variables, and background filters before sending any POST. IMPORTANT — always call bw_get_filter_values before applying any filter or variable value. This is the only way to know the correct internal key format for a characteristic (e.g. date/time characteristics like 0CALMONTH, 0CALYEAR, 0CALDAY may use non-obvious formats). Never guess or assume filter value formats — always look them up first. If the GET response shows inputRequired="true", variables must be filled via POST before data is available. If unsure whether a BEx Query exists for the desired analysis, use bw_search or bw_list_contents first before falling back to a direct provider call (is_provider=true). Result is rendered as a formatted table with hierarchy indentation. KEY FIGURE STRUCTURE FILTER: to restrict which key figures appear in the result, apply filterValues directly on the structure dimension (isStructure=true) in state.infoObjects — use the technical name of the calculated or restricted key figure as the low value (e.g. "CKF_NAME" or "RKF_NAME"). Hierarchical children of the filtered member are included automatically. This is the correct approach because ad-hoc threshold filters on key figure values are not supported via the state mechanism; only structure-member selection is possible this way. CRITICAL: variable id and name values in the variablesContainer are session-specific and change between GET calls. Always extract variable id and name exactly from the variablesContainer in the GET response and use them immediately in the next POST — never reuse IDs from a previous GET call or from bw_get_query output. The variable name includes trailing spaces and a 4-digit suffix (e.g. "VARNAME 0004") that must be copied verbatim from the GET response. format="raw" returns XML.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoAxis layout and optional per-characteristic filters. Rows and columns show exactly what the state lists there, in the order given, and everything else drops out of the result — the key figure structure too, which leaves no data. So list the complete layout wanted on ROWS and COLUMNS, structures included. Characteristics staying on FREE need not be listed. id values must come from the GET metadata response.
formatNo"text" (default): structured human-readable output. "raw": raw XML response body.
to_rowNoEnd row for pagination (default 1000). The text answer says whether more rows follow and from which from_row to continue.
comp_idYesBEx Query name or InfoProvider name (ADSO, HCPR, etc.) to query.
from_rowNoStart row for pagination (default 0).
variablesNoVariable values to fill. name must match exactly as returned by GET (may contain trailing spaces). id and other metadata fields come from the GET variablesContainer response.
is_providerNoSet to true when comp_id is an InfoProvider name (CompositeProvider, aDSO, etc.) rather than a BEx Query name. Adds the required "!" prefix to the compid URL parameter. If unsure whether a query exists for the desired analysis, use bw_search or bw_list_contents first to check before falling back to a direct provider call.
with_statisticsNoAppend the timing of the call and the BW statistics of its navigation step: BW runtime by layer (OLAP, cache, authorizations, database, transfer), top events, records read and transferred, the effective "Operations in SAP HANA" setting, and how the HTTP time splits into BW runtime and transfer. Needs statistics switched on for the query or provider (transaction RSDDSTAT) and ADT DataPreview access.
drill_operationsNoOptional. Expand or collapse hierarchy nodes or key figure structure nodes in the current result. Each operation targets one node by its 1-based tuple index. drill_state: 3 = expand, 2 = collapse. element_idx: which dimension within the tuple (1 = first, 2 = second, etc.) — use 2 when ROWS has multiple dimensions and the target node is on the second one. Requires the full state and variables to be sent again in the same POST (stateless endpoint). Use after an initial bw_query_data call to drill into a collapsed structure node or hierarchy node.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it does: it discloses the GET-then-POST flow, inputRequired='true' semantics, session-specific variable ids that change between calls, the structure-filter mechanism, format='raw' returning XML, and the stateless requirement to resend state and variables with drill operations. This is unusually rich behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the critical workflow ordering are front-loaded, and for a tool this complex most sentences earn their place. It is a dense block with some redundancy against the schema (is_provider prefix, structure filtering), so not maximally tight, but far from padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter, nested-schema tool with no output schema and no annotations, the description covers workflow ordering, variable handling, pagination, filtering, and rendering, which is everything an agent needs to invoke it correctly. Nothing material is left to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine cross-parameter meaning: the key figure structure filter via filterValues on isStructure dimensions, the verbatim trailing-space/suffix requirement for variable names, and the interaction between state, variables, and drill_operations. Much of the field-level detail is duplicated in the schema, capping this at 4 rather than 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Execute a BW query or preview data from a provider ... via the BICS reporting endpoint') and immediately distinguishes itself from sibling read tools by naming bw_get_query, bw_get_adso, and bw_get_composite_provider as prerequisites. An agent can tell exactly what this tool does versus the metadata readers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when/when-not guidance: always call the read tool first, always GET before POST, always call bw_get_filter_values before applying filters, and use bw_search/bw_list_contents if unsure a query exists. Alternatives (provider vs BEx query, is_provider=true) are named with their selecting conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_query_statisticsA

Read the BW query statistics (RSDDSTAT) of any frontend, as RSRT statistics and ST03 show them, without SAP GUI. With query_name or provider: the executions in a time window (default the last 24 hours) — count, the last execution and its user, executions per user, min / median / p90 / max runtime (over the latest 5,000 when there are more), plus the breakdown of the slowest ones. With step_uid: one navigation step in full — BW runtime by layer, top events, records read and transferred, the effective "Operations in SAP HANA" setting and the data manager time per provider. Statistics must be switched on for the object (transaction RSDDSTAT). To measure one call of this server, use bw_query_data with_statistics instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd of the window (default now).
fromNoStart of the window, ISO date or timestamp (UTC unless an offset is given).
hoursNoWindow length when from is not given (default 24).
slowestNoHow many of the slowest executions to break down (default 3, at most 10, 0 for none).
providerNoInfoProvider queried directly, as bw_query_data with is_provider does (e.g. "PROVIDER_NAME").
step_uidNoOne navigation step, as shown in an earlier answer.
query_nameNoQuery whose executions to read (e.g. "QUERY_NAME").

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the organizational prerequisite (statistics enabled in RSDDSTAT), the runtime sampling rule (min/median/p90/max over the latest 5,000 when there are more), and the default window. It doesn't explicitly confirm read-only safety, but 'Read' strongly implies a non-mutating operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but well-structured, starting with what it reads and following with mode-specific behavior, prerequisite, and alternative. Every sentence carries information; it is on the longer side for a tool description but not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, so the description compensates by enumerating the returned metrics (count, last execution and user, per-user executions, runtime percentiles, slowest breakdown; and for step_uid the per-layer runtime, top events, records, HANA setting, data manager time). An agent has enough to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the prose adds real meaning: it explains the mutual exclusivity/roles of query_name vs provider vs step_uid and notes that slowest is capped (at most 10, 0 for none). This goes beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Read) and resource (BW query statistics / RSDDSTAT), and enumerates the two distinct access modes (query_name/provider vs step_uid). It also names a sibling (bw_query_data with_statistics) so the agent can distinguish it from alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly maps each parameter mode to its use: query_name/provider for windowed executions, step_uid for one navigation step. It states the prerequisite (statistics must be switched on via RSDDSTAT) and redirects a related need — measuring a server call — to bw_query_data with_statistics.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_read_metadata_tablesA

Read a BW object definition from its metadata tables (ADT DataPreview, read-only; needs ADT authorization). The route for objects without a REST resource on this system. object_type → result: TRFN transformation with rules and routine code; DTPA DTP; ODSO classic DSO, CUBE InfoCube, MPRO MultiProvider (parts with their type) — each with load history; ADSO load history only; ANPR analysis process (nodes, field rules, routine code; "Z*" lists them); ISIP InfoPackage (a DataSource name lists its InfoPackages); RSPC process chain definition; RSPCLOG chain runs; PLSE planning function; PLSQ planning sequence; PLCR planning properties; PLDS data slices. Details per type are in the object_type parameter. Prefer the REST tool (bw_get_transformation, bw_get_dtp, …) where the system publishes one.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameYesTechnical name of the object (for TRFN the UUID-like transformation ID; for PLCR and PLDS the InfoProvider, not the aggregation level; for RSPCLOG a chain name, a run log id, or a pattern such as "Z*" for the last status per chain; for ANPR a process name or a pattern such as "Z*"; for ISIP the InfoPackage id, or a DataSource name to list its InfoPackages).
object_typeYesObject type to read. TRFN: rules incl. start/end/expert and field routine source code. DTPA: settings; the filter definition (selections, filter routine, semantic group, package sizes) is a serialised ABAP object, reported only where the optional helper endpoint of bw75/README.md is installed and named as unreadable where it is not. ADSO: load history only — structure and settings come from bw_get_adso. ODSO, CUBE, MPRO: structure, and for MPRO the part providers with their type, so each can be passed on directly; a name read under the wrong provider type names the right one. ADSO, ODSO, CUBE and MPRO end with the load history (request, status, update mode, start, user, duration, records, source) — on a classic release the only route to load status. RSPC: steps with variant parameters in execution order; parallel branches have no order among themselves, so read the "After" line of each step. RSPCLOG: process chain runs — a chain name gives the run history plus the steps of the newest run, a 25-character log id the steps of that run, a pattern with * the last status of every matching chain; the message log of a failed step is not readable here. PLSE: planning function type, aggregation level, characteristic usage, conditions, parameters, FOX formula as source code. PLSQ: planning sequence steps in execution order. PLCR: planning properties and characteristic relationships. PLDS: data slices (no REST resource on any release). PLCR and PLDS are keyed by the InfoProvider, not the aggregation level. ANPR: analysis process (APD, classic only) — nodes in execution order with the object each source reads and each target writes, the edges with their field rules (copies and constants), filters, formulas and routine code; a pattern with * lists the analysis processes, which bw_search cannot find. ISIP: InfoPackage (classic only) — DataSource, file settings, selections with routines, deletion settings, the process chains using it, load history.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it declares read-only, ADT authorization requirement, and explicit limits ('the message log of a failed step is not readable here', filter definition reported as unreadable where the helper endpoint is absent). It stops short of return-size/pagination or error behavior, so not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the REST-alternative rule are front-loaded, but the body is one massive run-on enumerating 14 object types with heavy parenthetical detail. Given the breadth it mostly earns its length, yet the lack of structure (no bulleted per-type list) hurts scanability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must describe returns — and it does so per object type (rules and routine code for TRFN, nodes/edges/field rules for ANPR, load history fields for ADSO/ODSO/CUBE/MPRO, etc.). For a 14-way dispatcher this is complete enough to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the two parameters are already documented. The 'object_type → result' list in the description largely mirrors the schema's object_type description rather than adding new syntax or format detail, so this sits at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Read a BW object definition from its metadata tables') and explicitly positions itself against siblings: it is 'the route for objects without a REST resource on this system' and names bw_get_transformation, bw_get_dtp as the preferred alternatives. An agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('for objects without a REST resource') and when-not ('Prefer the REST tool … where the system publishes one'), with concrete alternative tool names. It also notes per-type conditions such as 'ADSO load history only — structure and settings come from bw_get_adso'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_remove_process_chain_edgeA

Remove the dependency (edge) between two existing steps of a Process Chain (RSPC), via the BW/4HANA Cockpit REST API. In-place edit: reads the current model, drops the matching edge(s), and PUTs it back. By default every edge between the two steps is removed, which is what an "always continue" dependency needs (it is stored as an on-success plus an on-error edge); pass status to remove just one of them. Use this together with bw_add_process_chain_edge to re-route a mis-wired chain. Removing an edge can leave a step unreachable from the start — the chain will not activate until every step has a path from the trigger. Reports a skip when no matching edge exists. A 412 on the PUT means the ETag was stale (chain modified between read and write); the error reports this explicitly.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesTarget step. Same reference forms as "from".
fromYesSource step. Node reference forms: a DTP or process-variant name; an aDSO held by an ADSOACT/ADSOREM node; the program of an ABAP step, or "PROGRAM/VARIANT"; "TRIGGER" or a collector type ("AND"/"OR"); or "#<index>" using the step numbers printed by bw_get_process_chain.
nameYesProcess chain technical name (e.g. "CHAIN_NAME"). Case-insensitive.
statusNoRemove only edges with this condition. Omit to remove every edge between the two steps.
activateNoIf true, activate the chain immediately after the edit. Default false.
sub_statusNoRemove only edges with this branch condition (a DECISION branch EVENTNO, e.g. "01"). Omit to ignore the branch condition.
transport_requestNoOptional transport request to record the change into. Only relevant when the chain is in a transportable package (not $TMP). If the chain is transportable and exactly one request is available, it is chosen automatically; pass this to disambiguate when several are available. Ignored for $TMP (local) chains.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even with no annotations provided, the description fully discloses behavioral traits: it performs an in-place read-modify-write via the REST API, removes all matching edges by default due to the two-edge representation of 'always continue', reports a skip if no edge exists, and surfaces ETag/412 stale-write behavior. This is unusually transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Six dense sentences, every one carrying operational information. The core operation is front-loaded; behavior details, warnings, and error handling follow logically. No filler or restatement of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description covers the critical context an agent needs: what the tool does, how it mutates the model, the edge model behind 'always continue', skip behavior, stale-ETag failure, and the inability to activate until the chain is reachable. This is unusually complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful interpretation, especially explaining why omitting 'status' removes both the on-success and on-error edges, and clarifying that 'sub_status' selects a DECISION branch. It builds on the schema without replacing it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with 'Remove the dependency (edge) between two existing steps of a Process Chain (RSPC)', a specific verb and resource. It clearly distinguishes this from related tools like bw_remove_process_chain_step and pairs it with bw_add_process_chain_edge, making the tool's scope obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: together with bw_add_process_chain_edge to re-route a mis-wired chain. It also provides situational guidance about edge semantics, activation-preventing unreachable steps, and the behavior when no matching edge exists, giving an agent enough context to choose and invoke it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_remove_process_chain_stepA

Remove one step (node) from a Process Chain (RSPC), via the BW/4HANA Cockpit REST API. In-place edit: reads the current model, drops the node together with every edge touching it and its inline process variant, and PUTs it back. By default the gap is bridged — every predecessor of the removed step takes over every successor, keeping the condition of the edge that ran into the removed step — so the strand stays connected. Pass reconnect=false to leave the successors disconnected. Use this to roll back a step that was inserted in the wrong place. The TRIGGER (Start) step cannot be removed. A 412 on the PUT means the ETag was stale (chain modified between read and write); the error reports this explicitly.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProcess chain technical name (e.g. "CHAIN_NAME"). Case-insensitive.
stepYesStep to remove. Node reference forms: a DTP or process-variant name; an aDSO held by an ADSOACT/ADSOREM node; the program of an ABAP step, or "PROGRAM/VARIANT"; a collector type ("AND"/"OR"); or "#<index>" using the step numbers printed by bw_get_process_chain. An ambiguous name is rejected with the candidates listed — use "#<index>" then.
activateNoIf true, activate the chain immediately after the edit. Default false.
reconnectNotrue (default): bridge the gap so each predecessor of the removed step links to each of its successors. false: drop the edges without bridging, which leaves the successors as a strand nothing leads to (the chain then will not activate until they are re-wired with bw_add_process_chain_edge).
transport_requestNoOptional transport request to record the change into. Only relevant when the chain is in a transportable package (not $TMP). If the chain is transportable and exactly one request is available, it is chosen automatically; pass this to disambiguate when several are available. Ignored for $TMP (local) chains.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full burden of explaining behavior, and it does so exceptionally. It discloses that this is an in-place read-modify-write operation, that edges and inline process variants are removed, that reconnection will bridge predecessors to successors, and it explicitly calls out the 412 ETag staleness condition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact yet information-dense. Every sentence contributes meaningful operational guidance: purpose, in-place behavior, reconnection semantics, intended use, restriction, and error handling. No filler or redundant restatement exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 5 parameters and no annotations, the description is remarkably complete: it explains the full mutation lifecycle, the side effects on edges and process variants, how accurate reconnection behaves, the important TRIGGER restriction, invalid name behavior, and ETag failure handling. Even without an output schema, an agent has enough context to invoke the tool correctly and interpret the most likely error condition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all five parameters with meaningful descriptions, including the subtle semantics of step references. The tool description does not add much parameter-level meaning beyond that, so a baseline score of 3 is appropriate since the schema fully carries the weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: removing one step/node from a Process Chain, and immediately distinguishes it from related tools like bw_remove_process_chain_edge by explicitly saying 'step (node)'. It also names the relevant API context and gives concrete behavioral detail, so an agent can tell this tool apart from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use it: to roll back a step inserted in the wrong place. It also gives exclusion guidance (the TRIGGER/Start step cannot be removed) and explains the consequence of reconnect=false, including how to recover by rewiring with bw_add_process_chain_edge. This gives clear decision support.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_run_dtpA

Start (execute) a run of an existing, active DTP. Triggers the load with a single request and returns the new run request id. The returned request_id is the RSPM request TSN: pass it straight into bw_get_request (as request_tsn) to monitor load status — no bw_list_requests lookup needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
dtp_nameYesTechnical name of the DTP to run (e.g. "DTP_...").

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It explains that it triggers a load and returns a request_id, but does not disclose whether it is synchronous or asynchronous, or potential side effects like concurrent run restrictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no redundancy, efficient. Every sentence adds value: first states action, second explains output usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description covers the essential context: prerequisite (existing active DTP), action, and follow-up step. Lacks error scenario details but is sufficient for typical use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the description adds a usage example ('e.g. "DTP..."'). This provides slight additional clarity but does not significantly exceed what the schema already conveys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool starts an existing active DTP run. It differentiates from siblings by explaining that the returned request_id can be passed directly to bw_get_request, avoiding bw_list_requests.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states to use on an existing active DTP and guides how to monitor the load using the returned request_id with bw_get_request. Lacks explicit 'when not to use' or alternative tool mentions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_run_remodelingA

Start, restart or reset a remodeling request. WRITE OPERATION WITH DATA IMPACT: executing a remodeling rule restructures the InfoProvider and converts its existing data — it is not a plain reload and cannot simply be undone. Asynchronous: the call schedules the run; monitor completion with bw_get_remodeling_request. Actions: "execute" starts a request that has not run, "restart" resumes a failed one, "reset" resets the whole request, "reset_step" resets only the current step.

ParametersJSON Schema
NameRequiredDescriptionDefault
startNoStart time for "execute" and "restart": "immediate" (default) or an ISO 8601 timestamp to schedule the background job for a later point in time. Ignored by the reset actions.
actionNoAction to perform (default "execute").
info_providerYesInfoProvider technical name the rule belongs to. Case-insensitive.
request_numberNoOptional request GUID from bw_list_remodeling_requests output. When omitted, the most recent request of the given InfoProvider and rule is resolved automatically.
remodeling_ruleYesRemodeling rule ID, from bw_list_remodeling_requests output.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the safety burden. It clearly warns that this is a WRITE OPERATION WITH DATA IMPACT, that data is restructured/converted, and that it cannot simply be undone. It also explains that the call is asynchronous, which prevents the agent from wrongly expecting immediate completion.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the most critical information, the destructive/asynchronous nature, before defining the actions. Each sentence contributes distinct information with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex write operation with no output schema, the description covers the essential points: what the actions are, why the operation is dangerous, and how to check completion. It is complete enough for an agent to invoke the tool correctly and safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already has 100% description coverage, so the baseline is 3. The description adds real value by explaining what each action value does: execute starts, restart resumes, reset resets whole, reset_step resets the current step. This goes beyond what the schema alone provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Start, restart or reset a remodeling request', and it goes beyond the name by enumerating the four actions. It immediately signals that this is not read-only, distinguishing it from monitoring tools like bw_get_remodeling_request.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context on when to invoke it — for a new request, a failed one, or to reset whole/current step — and tells the agent to monitor completion via bw_get_remodeling_request. It does not explicitly spell out 'do not use this for plain reloads' but it says 'not a plain reload', which effectively excludes that alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_set_datasource_fieldsA

Set the transfer flag of one or more DataSource fields (fieldProperties@transfer) and/or the segment language field designation. Full read-modify-write; only the field transfer flags and/or the segment languageField change. Fields marked transferNotAllowed are skipped when enabling transfer. At least one of fields / language_field must be given. Leaves the DataSource inactive — activate separately with bw_activate (object_type "rsds"). Pass transport for a transportable DataSource so the change is recorded on that request.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoFields to change and their target transfer flag.
transportNoTransport request (e.g. DEVK900123). Required for a transportable DataSource; omit for local ($TMP).
source_systemYesSource system of the DataSource (compound key), e.g. "SOURCE_SYSTEM".
language_fieldNoSet to a field name (e.g. "FIELD_NAME") to designate the segment language field, set to "" to clear the designation. Clearing it fixes ODP text loads that abort with "Filter condition cannot be interpreted by DataSource" (RODPS_SAPI004). After the change, activate the DataSource with bw_activate (object_type "rsds").
datasource_nameYesTechnical name of the DataSource (e.g. "DATASOURCE_NAME").

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavioral traits: full read-modify-write, only changes specified fields, skips transferNotAllowed fields, leaves DataSource inactive, and requires separate activation. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise paragraph with no wasted sentences. Front-loaded main action, includes necessary details in logical order. Every sentence adds essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complex domain (SAP BW), the description covers all essential aspects: parameters fully described in schema, behavioral details (read-modify-write, activation requirement), error scenario, and transport handling. No output schema exists, but the description adequately informs what the tool does and its side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with parameter descriptions, but the tool description adds meaningful context beyond schema: explains the language_field clearing fixes a specific error, clarifies transport requirement for transportable DataSources, and notes that fields with transferNotAllowed are skipped. Adds value without redundancy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool sets transfer flags of DataSource fields and/or the segment language field designation, specifying it is a full read-modify-write operation. It distinguishes from sibling tools like bw_change_datasource_delta or bw_get_datasource by focusing on transfer and language field settings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use: to change field transfer flags or the segment language field. Includes critical guidance: 'At least one of fields / language_field must be given', 'Fields marked transferNotAllowed are skipped', 'Leaves the DataSource inactive', and explains transport requirement. Also gives a concrete error-fix use case for clearing language_field.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_set_dtp_filter_routineA

Set an ABAP filter routine on a DTP filter field. Use this only when custom ABAP code is needed for the filter logic; for value sets, ranges and patterns use the filter parameters of bw_update_dtp. Repeatable on the same field: the routine replaces the previous one, existing value selections on the field are kept, and a failed attempt leaves neither a routine nor a generated report behind.

ParametersJSON Schema
NameRequiredDescriptionDefault
dtp_nameYesDTP name (e.g. "DTP_...").
field_nameYesFilter field name as it appears in the DTP XML fields element.
global_codeNoOptional global declarations for the routine.
routine_codeYesABAP routine code (plain text, without FORM/ENDFORM wrapper).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden and it delivers meaningful details: repeated calls replace the previous routine, existing value selections are preserved, and a failed attempt leaves no routine or generated report. This reveals side effects and failure atomicity well beyond the basic schema, though it does not discuss permissions or return behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences pack purpose, usage boundaries, and important behavioral caveats with zero filler. The most important distinction (when to use versus bw_update_dtp) comes in the second sentence, and the entire description remains efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description gives essential context about placement, conditions, and edge behavior. It could go slightly further by mentioning expected side effects on activation or what 'generated report' refers to, but the description is strong enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already documents each parameter, including that routine_code must not contain a FORM/ENDFORM wrapper. The description reinforces the domain of the code but does not add additional parameter-specific meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Set an ABAP filter routine on a DTP filter field'), making the tool's function unmistakable. It also differentiates itself from the value-based filtering path in bw_update_dtp, so an agent can distinguish the two at a glance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is present: use only when custom ABAP code is needed, and use bw_update_dtp for value sets, ranges, and patterns. The repeatability caveat further clarifies when it is safe to invoke on the same field again.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_set_query_rolesA

Publish or unpublish a BW query in a role or folder. action "add": assigns the query to the given role or folder. action "remove": removes the query from the given role or folder. Use bw_get_roles to discover role/folder names and bw_get_query_roles to see current assignments.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes"add" to publish, "remove" to unpublish.
query_nameYesTechnical name of the BW query (case-insensitive).
target_nameYesFor target_type "role": the name attribute of the ROLE node (e.g. from bw_get_roles). For target_type "folder": the txt (display name) of the FOLDER node.
target_typeYes"role" to assign at role level, "folder" to assign into a specific subfolder.
parent_role_nameNoRequired when target_type is "folder". The name attribute of the parent ROLE node that contains the target folder.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It explains the two actions (add/remove) and their effects, but does not disclose side effects, permissions, or error handling. It implies a state change but lacks details on idempotency or concurrency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, starting with the main purpose, then detailing actions, then providing cross-references. No wasted words, well-organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters and no output schema, the description covers parameter usage and prerequisite tools. It lacks details on return values or success/failure indicators, but is otherwise complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining the 'action' enum, clarifying that target_name depends on target_type, and specifying that parent_role_name is required for folders. This goes beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool publishes or unpublishes a BW query in a role or folder. It distinguishes from siblings by naming specific actions and referencing related discovery tools (bw_get_roles, bw_get_query_roles).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It instructs users to use bw_get_roles for discovering names and bw_get_query_roles for current assignments, providing clear context for when to use this tool. However, it does not explicitly mention when not to use it or list alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_set_transformation_expert_routineA

Write the CODE of an existing Start/End/Expert routine into the Transformation MASTER so it survives TLOGO regeneration — a full bw_activate(trfn) AND a transport import — then activate. Use this instead of abap-adt WriteSource on the generated /BIC/_M class: WriteSource updates only the generated class body, which BW re-generates from the old master on the next trfn activation or transport import (symptom: "return type mismatch … OUTTAB[…]"). This tool replicates the Eclipse editor: it writes the class, then re-saves the transformation master and runs a TLOGO activation via the BW modeling endpoints. The routine must already exist (create it first with bw_set_transformation_routine). Activates automatically — no separate bw_activate needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNoThe complete routine method block: "METHOD <NAME> BY DATABASE PROCEDURE … ENDMETHOD." for AMDP (HANA) routines, or "METHOD <NAME> … ENDMETHOD." for ABAP routines — the same block shape abap-adt WriteSource(method=…) expects. AMDP SQLSCRIPT must be 7-bit ASCII (no umlauts / no <=). If omitted, the generated class is left untouched and only the master re-save + activation runs (to commit code already edited on the class).
transportNoTransport request number (e.g. DEVK900123). Required if the BW system requires transport assignment.
class_nameNoOptional override for the generated class name (e.g. "/BIC/<uuid>_M"). Defaults to the class derived from the transformation. Use for non-standard/field routines.
method_nameNoOptional override for the routine method name (e.g. a field-routine method). Defaults to GLOBAL_<ROUTINE_TYPE>. When set, the routine-exists guard is skipped.
routine_typeNo"expert" → GLOBAL_EXPERT (default), "start" → GLOBAL_START, "end" → GLOBAL_END. Selects the generated method name.
transformation_nameYesTransformation name (UUID-like key).

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It details the internal mechanism (writes to master, re-saves, activates), constraints (AMDP 7-bit ASCII), and behavior when source is omitted. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Despite being a single paragraph, every sentence adds unique information. No fluff, highly efficient use of words covering purpose, method, and constraints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Thoroughly explains the problem, solution, prerequisites, steps, and activation behavior. All 6 parameters are addressed directly or indirectly. No output schema needed given the descriptive detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear parameter descriptions. The tool description adds value by explaining defaults (routine_type, method_name) and clarifying the source block shape. Adds context beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool writes code into the transformation master to persist through regeneration. Distinguishes from sibling bw_set_transformation_routine by specifying that the routine must already exist.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises to use this instead of abap-adt WriteSource, explains why WriteSource fails, and notes that the routine must be created first. Provides clear when-to-use context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_set_transformation_routineA

Add a Start, End, or Expert routine to a Transformation. Creates the global routine group (group id="0") and ABAP/AMDP method stub. Returns lock_handle for bw_activate.

ParametersJSON Schema
NameRequiredDescriptionDefault
transportNoTransport request number (e.g. DEVK900123). Only required if the BW system requires transport assignment.
routine_typeYes"start" → GLOBAL_START, "end" → GLOBAL_END, "expert" → GLOBAL_EXPERT.
transformation_nameYesTransformation name (UUID-like key).

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries the full burden. It explains the creation of routine group and method stub, and the return value (lock_handle), but does not disclose side effects, idempotency, or how conflicts are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The first sentence states the action, the second provides the outcome and return value. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains the return value. It covers the main behavior and the optional transport parameter. Lacks mention of prerequisites (e.g., transformation must exist), but overall adequate for a simple creation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds value by stating the return value (lock_handle) but does not provide additional parameter-level details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verbs ('Add') and resources ('routine to a Transformation'), and distinguishes from sibling tools like bw_delete_transformation_routine by specifying the creation of global routine group and method stub.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While the purpose implies when to use it (when adding a routine), there is no explicit guidance on when not to use it or alternatives. No prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_set_transformation_routine_fieldsA

Edit the list of target fields the global END routine writes ("Felder setzen" in SAP GUI). Requires an existing END routine — use bw_set_transformation_routine to create one first. Provide exactly one of: fields (explicit complete set of target fields the END routine should write) or exclude_fields (all target fields minus these). Rejected if neither or both are given, if any field name does not exist in the target segment, or if the resolved field set is empty. Does not activate. Returns lock_handle for bw_activate.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoExplicit complete set of target field names the END routine should write (e.g. ["FIELD_A", "FIELD_B"]). Case-insensitive. Mutually exclusive with exclude_fields.
transportNoTransport request number (e.g. DEVK900123). Only required if the BW system requires transport assignment.
exclude_fieldsNoTarget fields to exclude from the END routine — all other target fields are written. Case-insensitive. Mutually exclusive with fields.
transformation_nameYesTransformation name (UUID-like key).

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose all behavioral traits. It states that the tool does not activate but returns a lock_handle, and describes rejection conditions. However, it does not mention potential side effects like locking, permission requirements, or whether the change is reversible. Adds sufficient but not exhaustive context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured paragraph. It front-loads the main purpose, then covers prerequisites, constraints, and return value concisely. Every sentence adds necessary information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description covers the return value (lock_handle) and references related tools (bw_set_transformation_routine, bw_activate). The description is sufficient for an agent to understand the tool's role and constraints, though it could briefly mention that transformation_name is required (already in schema).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with each parameter described. The tool description adds critical semantics: mutual exclusivity of fields and exclude_fields, case-insensitivity, and the condition that field names must exist in the target segment. This goes beyond the schema's basic descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Edit' and the resource 'list of target fields' for the global END routine. It differentiates from siblings such as bw_set_transformation_routine (which creates the routine) and bw_activate (which activates after editing).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit prerequisites (requires existing END routine), specifies mutually exclusive parameters (fields or exclude_fields), and lists rejection conditions. It indirectly suggests a workflow by returning a lock_handle for bw_activate. However, it does not explicitly state when not to use this tool (e.g., if the routine does not exist).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_set_transformation_runtimeA

Switch a Transformation between HANA and ABAP runtime. Only changes the HANARuntime attribute — no rule changes. The current runtime is read from the active version; if it already matches, returns early. Activates automatically and verifies the change landed in the active version — no separate bw_activate needed. Returns an error (not success) if the switch does not persist, e.g. when the server refuses HANA runtime for this transformation.

ParametersJSON Schema
NameRequiredDescriptionDefault
runtimeYes"hana" sets HANARuntime="true", "abap" sets HANARuntime="false".
transportNoTransport request number (e.g. DEVK900123). Only required if the BW system requires transport assignment.
transformation_nameYesTransformation name (UUID-like key).

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It does so by stating the tool only changes HANARuntime, reads from active version, activates automatically, verifies the change, and returns an error if the switch does not persist. It also notes no separate bw_activate is needed. Missing details on permissions or rate limits, but good overall.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured paragraph. It front-loads the purpose and then provides behavioral details. It is concise with no wasted words, though slightly dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 parameters, no output schema, and no annotations, the description covers purpose, behavior, and conditional error return. However, it does not specify the success output format (e.g., what is returned on success), leaving a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all three parameters. The description adds minimal value beyond the schema; it mostly reiterates what is already in the schema descriptions (e.g., runtime enum meanings, transport requirement condition). Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool switches a transformation between HANA and ABAP runtime, modifying only the HANARuntime attribute. It distinguishes this from other transformation tools like bw_update_transformation which handle other changes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool (to switch runtime) and notes early return if already matches. However, it does not explicitly state when not to use it or mention alternatives (e.g., bw_update_transformation for other changes).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_start_process_chainA

Start a process chain once, now, as the BW/4HANA Cockpit does with "Execute" (asynchronous): the run goes to the background under the technical user of the chain, independent of its start condition, and its scheduling is left unchanged. The chain must be active. Returns the log ID of the run, its status and the messages of the steps reached so far. With wait_seconds the tool waits for the run to finish, checking every 5 seconds; otherwise it answers right after the start. Follow the run with bw_get_process_chain_run_detail (chain_id + the returned log_id) for step-level details and error long texts.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProcess chain technical name (e.g. "CHAIN_NAME"). Case-insensitive.
wait_secondsNoWait up to this many seconds for the run to end before answering (0 = answer right after the start, the default; at most 600).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it does well: it discloses asynchronous background execution under the chain's technical user, that scheduling is unchanged, the active-chain prerequisite, and what the call returns (log ID, status, step messages). It omits auth/permission requirements and failure modes, leaving some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and packs useful details (async, prerequisite, return values, follow-up) with little waste. The opening sentence is long and clause-heavy, but each element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter mutation-style tool with no annotations and no output schema, the description covers the essential prerequisites, execution semantics, return values, and follow-up path. It is nearly self-sufficient, with only permission/error behavior left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters, setting a baseline of 3. The description adds behavioral meaning beyond the schema by explaining that wait_seconds polls every 5 seconds and otherwise the tool answers immediately after the start, clarifying the parameter's effect.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (start a process chain) with precise scope: one immediate, asynchronous run. It distinguishes itself from siblings like bw_create_process_chain and bw_activate_process_chain by describing the run as happening now, independent of the chain's start condition, without altering its schedule.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context (equivalent to the Cockpit's Execute) and an explicit prerequisite (the chain must be active), and routes the agent to bw_get_process_chain_run_detail for follow-up. It does not explicitly contrast when NOT to use this versus a scheduled/triggered run, but the when-to-use context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_swap_process_chain_dtpA

Swap one DTP load variant for another in an existing Process Chain (RSPC), via the BW/4HANA Cockpit REST API. In-place edit: reads the current model, replaces the matching DTP_LOAD node's variant, and PUTs it back — edges and all other nodes are preserved unchanged. Prefer this over bw_update_process_chain for a single-variant swap, since it does not require re-specifying the whole chain. Optionally activates afterwards. A 412 on the PUT means the ETag was stale (chain modified between read and write); the error reports this explicitly.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProcess chain technical name (e.g. "CHAIN_NAME"). Case-insensitive.
new_dtpYesDTP variant name to set instead (e.g. "DTP_NAME_NEW").
old_dtpYesDTP variant name currently in the chain (e.g. "DTP_NAME_OLD").
activateNoIf true, activate the chain immediately after the edit. Default false.
transport_requestNoOptional transport request to record the change into. Only relevant when the chain is in a transportable package (not $TMP). If the chain is transportable and exactly one request is available, it is chosen automatically; pass this to disambiguate when several are available. Ignored for $TMP (local) chains.
refresh_descriptionNoIf true (default), pull the new variant's step description from its metadata. Cosmetic; the existing description is kept if metadata is unavailable.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Thoroughly describes the read-PUT-write mechanism, that edges and other nodes are preserved, and the ETag stale error (412). With no annotations, this fully covers behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five sentences, each serving a clear purpose: purpose, mechanism, usage guidance, activation, error handling. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and 6 parameters, the description covers the tool's behavior, error cases, parameter guidance, and relationship to siblings. Complete for an API tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds value: explains case-insensitivity for name, default values for activate and refresh_description, and the usage of transport_request for disambiguation. One point off because it's already well-covered in schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Swap one DTP load variant for another in an existing Process Chain'. Uses specific verb+resource and explicitly distinguishes from sibling bw_update_process_chain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly recommends this tool over bw_update_process_chain for single-variant swaps, explains the in-place edit advantage, and describes when to use optional parameters like activate and transport_request.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_system_profileA

Find out what the connected BW system is and which of this server's tools will work on it. Distinguishes SAP BW/4HANA from classic SAP BW (7.5) via the system's own b4hanamode flag, lists which REST endpoint groups the system publishes, and verifies three preconditions: Accept-header handling (a broken one makes almost every call fail with HTTP 406 on BW 7.5), access to the ADT DataPreview service, and whether the reporting resource of the modeling API is implemented — the REST route to query data, which a classic release publishes without implementing; BICS itself is present there, and InA clients reach it by their own route. Call it before planning work on a system whose release you do not already know: the answer says which tool groups are available and which route to take where they are not — on classic BW, for instance, transformations, DTPs and the classic providers have no REST resource and are read with bw_read_metadata_tables instead. One call beats inferring the release from failed ones.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It details three specific preconditions it verifies (Accept-header handling, ADT DataPreview access, reporting resource implementation), and explains the consequence of a broken Accept-header (HTTP 406 on BW 7.5). It also notes that the REST route may be published but not implemented on classic BW. This is exemplary transparency for a system-check tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph but each sentence adds value: system type detection, endpoint groups, three preconditions, and routing advice. It could be slightly more structured (e.g., bullets), but it is not verbose or redundant. Every sentence earns its place, though the wall-of-text format is slightly suboptimal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description is remarkably complete. It covers what it does, when to use it, what it checks, and what actions to take based on the results. An agent has everything it needs to decide when and how to invoke this tool, and what to do with the information it returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. There is nothing to document, and the description appropriately focuses on behavior rather than inputs. No schema details needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear, specific purpose: identify the BW system type and which tools are compatible. It explicitly distinguishes SAP BW/4HANA from classic BW via the b4hanamode flag, and mentions checking REST endpoint groups and preconditions. This clearly separates it from sibling tools like bw_query_data or bw_read_metadata_tables, which are mentioned as alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit usage guidance: call this before planning work on a system whose release you don't know. It also names a specific alternative (bw_read_metadata_tables) for classic BW when certain REST resources are missing, and explains why—one call beats inferring from failures. This is precise and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_unlockA

Release a lock on a BW object without activating it. Use this to discard changes and free the lock, e.g. after an aborted create or update. For DTPs (dtpa) this releases the DTP framework enqueue lock (SM12: RSBKDTP) that can otherwise linger and block the next run or edit of the same DTP.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameYesObject name (e.g. "OBJECT_NAME").
object_typeYesObject type: adso, trfn, trcs, iobj, area (InfoArea), dtpa (DTP), hcpr (CompositeProvider) or alvl (Aggregation Level).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It discloses that changes are discarded, the lock is freed without activation, and for DTPs the framework enqueue lock is released. It does not cover error conditions or authorization, but is transparent about core 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no filler, and each sentence earns its place: the core action, the concrete use case, and the important DTP-specific caveat. Front-loaded with the primary purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, no-output-schema tool, the description is nearly complete. It covers behavior, use case, and a critical edge case. Minor gaps like idempotency or failure responses keep it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value beyond the schema by explaining the special meaning of dtpa (DTP framework enqueue lock) and how the object type/name combine in the unlock operation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'Release a lock on a BW object without activating it.' It also differentiates from sibling actions like bw_activate by explicitly noting the operation does not activate the object.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit use context: 'Use this to discard changes and free the lock, e.g., after an aborted create or update.' It does not explicitly list alternatives or when-not-to-use cases, but the usage 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.

bw_update_adsoA

Add/remove fields, change aDSO type/settings, manage key fields, or update individual field properties. action "add_field" (default): add one or more InfoObject-backed fields — infoobject_name required. action "remove_field": removes the field from the aDSO (and from the key if it was a key field). action "add_pure_field": add one or more pure (non-InfoObject) fields — pass fields array with name, label, data_type, optional length/precision/scale/aggregation_behavior/is_key. action "update_settings": change aDSO type preset and/or individual boolean flags — no infoobject_name needed. action "manage_keys": replace the complete key field list — pass key_fields array (empty = no key fields). action "update_field_properties": modify sidDeterminationMode, aggregationBehavior, fixedCurrency/Unit, a unit/currency field reference (unit_currency_field), the field group (dimension), or descriptions of a single field — pass field_name and properties. Field groups: pass "dimension" on add_field/add_pure_field to place new fields in the right group straight away — a field added without it lands in the catch-all group and moving it afterwards costs a second activation. Returns a lock_handle that must be passed to bw_activate to complete the operation. Sequence: bw_update_adso → bw_activate (adso) → bw_activate (trfn) → bw_activate (each dtpa).

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNo"add_field" (default), "remove_field", "add_pure_field", "update_settings", "manage_keys", or "update_field_properties".
fieldsNoPure field definitions for action "add_pure_field".
settingsNoSettings to apply (only for action "update_settings").
adso_nameYesaDSO name (e.g. "ADSO_NAME").
dimensionNoField group ("Feldgruppe") to place the field in, given as the bare group name — e.g. "__KEYFIGURES" for the key figure group or "ALL" for the catch-all. Must be a group the aDSO declares; an unknown name is rejected with the declared groups listed rather than silently falling back. Read the current assignment from the DIM column of bw_get_adso. Applies to every field added by this call (action "add_field").
transportNoTransport request number (e.g. DEVK900123). Only required if the BW system requires transport assignment.
field_nameNoField name to modify (only for action "update_field_properties"), e.g. "FIELD_NAME" or "AMOUNT_P".
key_fieldsNoList of field names that should be key fields (only for action "manage_keys"). Empty array removes all key fields.
propertiesNoField properties to update (only for action "update_field_properties").
infoobject_nameNoInfoObject name or comma-separated list to add or remove (e.g. "IOBJ_NAME" or "IOBJ_A,IOBJ_B"). Required for add_field and remove_field.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure, and it honors that obligation: it states that remove_field also removes the field from the key if applicable, manage_keys replaces the complete list and allows an empty array, update_settings needs no infoobject_name, and adding a field without dimension falls into the catch-all group requiring an extra activation to move later. It also exposes the two-step lock+activate contract, which is a material behavioral side effect not evident from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is front-loaded with a clear action list and each of the six actions is described in 1–2 focused lines. However, the description is verbose and recreates a lot of action detail as prose; it also interleaves related logical consequences (like dimension and activation cost) in a way that requires careful rereading. The length is justifiable for a 6-action tool with nested objects, but it could be tighter by moving purely recursive details such as field-group examples entirely into the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, this definition is not only lists the lock_handle result but also gives the exact sequence of lock_handle return and success. It documents prerequisites (info_objects for add_field, the need for DIM from bw_get_adso, transport requirement conditionality), and all nested parameter structures. For a n-ten-parameter tool with complex nested objects, there are no decision-critical blank spots left.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema already covers 100% of the parameter names, the description adds non-mechanical meaning that is not in the schema: action-specific parameter dependencies, that an infoobject_name can be a comma-separated list, that key_fields=[] clears all keys, that unit_currency_field should be a field reference to a UNIT/CUKY field, and that a missing transport should only be supplied when the BW system requires it. It also explains subtle type behavior such as fixed-length/scale constraints for pure fields, so the agent can correctly compose calls without trying every combination.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a precise operation (updating an aDSO) and immediately breaks it into six specific, mutually exclusive actions, from adding/removing fields to updating settings and key management. This differentiates the tool from the sibling bw_get_adso and bw_create_adso by being the update/alter tool for aDSO resources. No ambiguity remains about what resource the tool operates on or what kinds of changes it can perform.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Every action is given its own clear condition and prerequisite: infoobject_name is required for add_field/remove_field, fields array only for add_pure_field, settings only for update_settings, field_name/properties for update_field_properties, and key_fields for manage_keys. The description also explicitly warns about the cost of forgetting dimension (a second activation) and tells the caller to read the current group assignment from bw_get_adso. This gives an agent concrete when-to-use and when-to-omit guidance, plus the required follow-up activation sequence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_aggregation_levelA

Add fields to or remove fields from an existing Aggregation Level (TLOGO ALVL). action "add_fields" exposes further characteristics or key figures of the underlying InfoProvider; action "remove_fields" drops them from the Aggregation Level. Fields already exposed (add) or not exposed at all (remove) are reported as skipped, not treated as errors. The Aggregation Level becomes inactive — activate it with bw_activate using object_type "alvl" and lock_handle "". A removal that would leave no characteristic or no key figure is refused before writing. On a CompositeProvider both the prefixed field name and the bare name are accepted.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNoDefaults to "add_fields".
fieldsYesFields to add or remove (e.g. ["FIELD_NAME", "IOBJ_NAME"]). Names are resolved against the underlying InfoProvider.
transportNoTransport request number. Required on systems with transport obligation.
aggregation_level_nameYesTechnical name of the Aggregation Level (e.g. "OBJECT_NAME").

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden–and it does well, disclosing that the object becomes inactive, that skips are not errors, that invalid removals are refused, and that CompositeProvider accepts both prefixed and bare names. It does not mention potential failure modes like authentication or transport-level permissions, but it covers the most decision-relevant behavioral 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but never verbose. It front-loads the core purpose and action names, then adds procedural, edge-case, and compatibility details in a logical order with almost no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core operation, action-specific nuances, skipped-field behavior, post-update activation requirement, all fields the guard condition for removals, and special CompositeProvider handling. An agent has enough behavioral context to call this tool correctly even without annotations or an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers all 4 parameters well, giving a strong baseline. The description still adds meaningful semantics by explaining what add_fields and remove_fields actually do to the Aggregation Level, who field resolution works, and how CompositeProvider naming behaves.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates an existing Aggregation Level by adding or removing fields, with explicit action names. It distinguishes itself from related siblings like bw_create_aggregation_level and bw_get_aggregation_level by emphasizing modification of existing objects rather than creation or retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: when fields need to be added to or removed from an existing Aggregation Level. It also explains the expected follow-up activation step with bw_activate, but it does not explicitly state when not to use it or name alternative update/create paths.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_ckfA

Change a reusable Calculated Key Figure. Two call forms: pass "formula" to replace the whole expression, or "operations" for targeted edits that leave the rest of the formula untouched — the usual case being "add another summand to a sum" without having to know or rebuild the existing formula. All operations are applied to one document and written in a single save, so a rejected operation leaves the stored formula unchanged rather than half edited.

ParametersJSON Schema
NameRequiredDescriptionDefault
formulaNoReplacement formula tree (mutually exclusive with "operations"). Formula tree. A node is one of: {"type":"operator","code":"+","operands":[...]} (codes as in the BW formula editor: + - * / , NDIV0, IF, MAX, %A, …); {"type":"component","component_name":"..."} for a reusable CKF/RKF; {"type":"key_figure","name":"..."} for a basic key figure InfoObject; {"type":"variable","variable_name":"..."} for a formula variable; {"type":"constant","value":100}. Operand counts are checked against the operator catalog before anything is written.
decimalsNoNumber of decimal places (0-9).
operationsNoTargeted edits on the existing formula, applied in order.
descriptionNoNew description.
component_nameYesTechnical name of the CKF.
transport_requestNoTransport request to record the change in.
exception_aggregationNoException aggregation of the CKF itself, e.g. { "type": "SUM", "reference_characteristic": "IOBJ_NAME" }, or false (null is accepted too) to return to standard aggregation. Independent of "formula" / "operations": the formula stays as it is. Takes back unchanged what bw_get_ckf reports in exception_aggregation.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden, and it delivers the key trait: all operations are written in a single save, so a rejected operation leaves the stored formula unchanged rather than half-edited. It omits permissions/transport-locking requirements and any note that a change may need a subsequent activation step.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose then the two call forms then the atomicity guarantee. Every sentence adds information and nothing is repeated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex nested-object mutation tool with no output schema, it explains the two modes and the write semantics well. It leaves a minor gap around whether activation, transport recording, or locking is required for the change to take effect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already documents formula/operations mutual exclusivity, operand trees, and defaults thoroughly. The description paraphrases the same formula-vs-operations split but adds no syntax, format, or edge-case detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Change') and resource ('reusable Calculated Key Figure'), making clear it is the mutation counterpart to bw_create_ckf / bw_get_ckf. It does not, however, explicitly name a sibling or disambiguate against e.g. bw_update_rkf, so it sits at a clear-but-not-routing 4.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly splits behavior into two call forms and says which to pick: 'formula' to replace the whole expression vs 'operations' for targeted edits, with the typical case called out. It gives no exclusions or sibling alternatives (e.g. read the current formula first via bw_get_ckf), 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.

bw_update_composite_providerA

Change a CompositeProvider (HCPR): its fields, its source providers, their field mappings, the join condition, or root settings. Every action returns a lock_handle that must be passed to bw_activate (object type hcpr) — an HCPR cannot be activated without it. Fields: "add_field" (default) adds an element plus a mapping in every part provider supplying it, taking the field metadata from there; "remove_field" removes the element and all mappings referencing it. Sources: "add_input" attaches a source provider, creates the target elements it needs and returns the generated alias; "remove_input" strips one by alias, leaving its elements and any join reference behind. Mappings: "update_mapping" replaces the complete mapping list of one input; pass no mappings to map every field of its source one to one. This is also how an input attached at creation time gets its mappings. Joins: "update_join" sets the condition between one pair of inputs — call it once per pair to build an N-way join — and "remove_join" drops one pair. Note that both sides of a join key must be mapped onto the SAME target field, otherwise activation fails with "join fields need at least one common target field"; auto-mapping does not do this, so map the second side's key fields explicitly. Field groups and name usage: every field the tool creates goes into a field group (CHARACTERISTICS or KEYFIGURES unless dimension names another) and, when it is named after its InfoObject, uses that InfoObject directly by name — the form a query needs to find it. "update_fields" moves existing fields into a group and/or switches their name usage; "update_group" creates a group, changes its label or renames it. Settings: "update_settings" edits label, stackable, default node and aggregation behaviour.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoupdate_settings: new description. update_group: label of the field group.
actionNoDefaults to "add_field".
mappingsNoadd_input / update_mapping. Omit or pass an empty list to map every field of the source one to one.
dimensionNoField group name (e.g. "GROUP_NAME"). add_field / add_input / update_mapping: group for the fields the call creates, defaults to CHARACTERISTICS or KEYFIGURES. update_fields: group to move the listed fields into. A group other than the two defaults must be declared first with "update_group". update_group: the group to create, relabel or rename.
join_typeNoupdate_join: "inner" (default), "leftOuter", etc. — lowercase first letter.
key_pairsNoupdate_join: the join key field pairs, named as they appear on each side's own source.
stackableNoupdate_settings.
transportNoOptional transport request (e.g. DEVK900123). Omit for local objects.
left_aliasNoupdate_join / remove_join: alias of the left input.
name_usageNoHow an InfoObject-bound field is exposed. "direct" uses the InfoObject directly by name, so a query finds the field under the InfoObject name; "unique_name" exposes it as "<prefix>-<FIELD>" instead. add_field / add_input / update_mapping: applies to the fields the call creates; defaults to "direct" for a field named after its InfoObject, "unique_name" otherwise. update_fields: switches the listed existing fields.
cardinalityNoupdate_join: defaults to "CN_N".
input_aliasNoremove_input / update_mapping: alias of the input (e.g. "U1.ADSO.1").
right_aliasNoupdate_join / remove_join: alias of the right input.
default_nodeNoupdate_settings: path reference to the default view node (e.g. "#///U1").
provider_nameNoadd_input: technical name of the source InfoProvider to attach.
provider_typeNoadd_input: TLOGO-style suffix used in the generated alias (e.g. "ADSO"). Defaults to "ADSO".
info_object_nameNoadd_field / remove_field / update_fields: field name or comma-separated list (e.g. "IOBJ_NAME" or "IOBJ_A,IOBJ_B").
source_providersNoadd_field only. Comma-separated part provider names or aliases (e.g. "PROVIDER_NAME" or "U1.ADSO.1") to restrict which inputs get a mapping. Omit to map the field in every part provider that contains it.
new_dimension_nameNoupdate_group: rename the group to this name; its fields move along.
aggregation_behaviourNoupdate_settings.
composite_provider_nameYesTechnical name of the CompositeProvider (e.g. "HCPR_NAME").

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so thoroughly: it discloses the mandatory lock_handle and bw_activate dependency, activation failure conditions for joins, destructive side effects of remove_input (leaves elements behind), auto-mapping limitations, and the distinction between direct and unique_name exposure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loaded with the core purpose and the critical lock_handle/activation caveat before diving into per-action details. Given 10 distinct actions and 21 parameters, the length largely earns its place, though a bulleted structure would improve scanability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex multi-action mutation tool with no annotations and no output schema, the description is remarkably complete: it covers every action, the lock/activation workflow, field group and name-usage behavior, join construction and failure modes, and the meaning of returned aliases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds meaningful action-level semantics beyond the schema, including that add_field maps the field in every part provider supplying it, that update_mapping replaces the complete list, and the critical join caveat that both key sides must map to the same target field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Change a CompositeProvider (HCPR)') and enumerates the exact scope: fields, source providers, mappings, join conditions, and root settings. It clearly distinguishes this mutation tool from siblings like bw_create_composite_provider and bw_get_composite_provider.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives strong per-action usage guidance and explicitly routes the agent to bw_activate (required for activation). However, it does not explicitly contrast this tool with close alternatives such as bw_create_composite_provider or bw_get_composite_provider, so it falls short of a full when-to-use/when-not-to-use comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_dtpA

Update DTP properties: description, the value selection of one filter field, extraction mode (Full vs Delta), and/or the semantic group. Use this for setting filter values on existing filter fields. A filter is written per field as a complete selection — a second call on the same field replaces the first, it does not add to it, so pass the whole value set at once. Note: switching extraction mode between Delta and Full (and back) has BW delta-init implications — a later delta load may require re-initialization of the delta on the source.

ParametersJSON Schema
NameRequiredDescriptionDefault
dtp_nameYesDTP name to update (e.g. "DTP_...").
transportNoTransport request number. Required on systems with transport obligation.
descriptionNoNew description text for the DTP.
filter_fieldNoFilter field to set. Use the exact field name from bw_get_dtp; a name that does not exist is rejected. Requires filter_value or filter_selections.
filter_valueNoOne or more values for an Equal selection, comma-separated (e.g. "VAL1,VAL2,VAL3"). REPLACE semantics: the list is the complete selection of that field, so pass all values in one call. An empty string selects the BW initial value (not the literal "#"). For ranges, patterns, exclusions or values containing a comma, use filter_selections. Look values up with bw_get_filter_values first — a wrong value activates cleanly and filters everything away.
extraction_modeNoSwitch the DTP extraction mode. "full" sets extractionMode="F"; "delta" sets extractionMode="D" (only valid for delta-capable sources). Switching modes has delta-init implications — see the tool note.
filter_excludingNoIf true, all values of filter_value are excluded instead of included. Default false. Applies to filter_value only; filter_selections carries a sign per entry.
filter_selectionsNoFull selection vocabulary for one filter field, equivalent to an ABAP RANGE table. REPLACE semantics like filter_value, and mutually exclusive with it. Each entry is validated against the operators the field itself publishes, so an unsupported operator is an error instead of a silently ignored setting.
filter_clear_fieldsNoComma-separated list of field names whose value selections are removed. The field is deselected as well unless it carries a filter routine, which then stays the active filter.
semantic_group_fieldsNoComma-separated list of field names that form the semantic group (e.g. "FIELD_NAME,/BIC/FIELD_NAME"). Replaces the current selection completely: the listed fields become the semantic group, all others are deselected. Pass an empty string to clear the semantic group. Use bw_get_dtp to read the available group field names — they must match exactly, including any /BIC/ prefix.
transport_lock_holderNoTransport lock holder. The transport request that currently owns the object lock. Required on some systems when updating an existing object.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so exceptionally: it discloses REPLACE semantics ('a second call on the same field replaces the first, it does not add to it'), the delta-init re-initialization hazard when switching extraction modes, and the failure mode of a wrong filter value ('activates cleanly and filters everything away'). This goes far beyond what a terse 'Update DTP' would provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact for its payload: the first sentence, what? it's a large DTP with 11 params; all four sentences earn place. The behavior: REPLACE semantics is front-loaded rather than buried. No cleaned-up repetition between the description and the parameter schemas.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter mutation tool with no annotations and no output schema, the description plus param schemata cover virually every prerequisite call the agent needs: exact field naming, value lookup, transport control site, delta-init side effects, and the clear the semantic-optional rules. The missing piece is the return outcome confirmation — whether the successful call returns an ack, a status object, or the updated DTP — which an agent cannot know in advance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter already has a rich description, so the baseline is 3. The tool description adds meaningful interaction-level semantics: the whole-selection contract, mutual exclusivity between filter_value and filter_selections, and the cross-tool reading order (bw_get_dtp' then bw_get_filter_values) — raising it to a 4 but not 5 since the schema itself does most parameter-legible work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb + resource statement: 'Update DTP properties' and enumerates the exact updateable aspects — description, value selection of one filter field, extraction mode, and semantic group. The phrase 'Use this for setting filter values on existing filter fields' differentiates it from the many bw_get_*/bw_create_*/bw_set_* siblings, especially bw_create_dtp and bw_set_dtp_filter_routine.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the intended use case clearly ('Use this for setting filter values on existing filter fields') and names prerequisite tools — bw_get_dtp for exact field names and bw_get_filter_values for valid values — giving an actionable call order. It does not explicitly state when NOT to use this tool or name the alternative for filter routines (bw_set_dtp_filter_routine), so the 'when-not/alternatives' bar is not fully met.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_hierarchyA

Change a hierarchy: its description and/or its tree, then activate it. The tree is replaced as a whole, not merged — read it with bw_get_hierarchy, change it, and pass the complete new tree in the same nested form bw_create_hierarchy takes. The hierarchy keeps its id, so queries that use it keep working.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodesNoThe complete new tree, as in bw_create_hierarchy. Replaces every node the hierarchy has now.
activateNoActivate after saving (default true); false keeps the change as revised version.
descriptionNoNew description (up to 60 characters).
characteristicYesCharacteristic the hierarchy belongs to.
hierarchy_nameYesHierarchy to change.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose the critical behavioral trait: the tree is replaced wholesale, not merged. It also notes the hierarchy id is preserved so dependent queries keep working. It omits operational traits such as authorization/locking requirements or what happens on a partial failure, which is why it is not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action, then the replacement rule, then the id-preservation guarantee. No filler and each sentence adds a distinct fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-annotation, no-output-schema mutation tool, the description covers the essential hazards: whole-tree replacement, id stability, and the read-modify-write workflow. It lacks only peripheral detail like failure/rollback behavior or whether a separate activation step is ever required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters including activate and description are already documented in the schema. The description largely restates the nodes replacement semantics and cross-references bw_create_hierarchy for the nested form, adding only marginal meaning over the structured data — the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (Change) and resource (hierarchy) and enumerates the mutable parts — description and/or tree. It also differentiates itself from siblings by pointing at bw_get_hierarchy for reading and bw_create_hierarchy for tree shape, 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit workflow — read with bw_get_hierarchy, modify, pass the full tree — which is exactly the context needed before invoking this update. It does not state when NOT to use it (e.g. versus creating a new hierarchy, or when only activation is wanted via bw_activate), so it stops short of a full when/when-not treatment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_infoobjectA

Update a Characteristic InfoObject: change description, the lower case flag, and/or replace the attribute list. Supplying attributes replaces all existing ones (pass an empty array to remove all); omitting them leaves the list untouched. Also supports Key Figure (KYF) updates: set fixed_unit or fixed_currency. Sequence: lock → GET → PUT → activate → unlock — all in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesInfoObject name (e.g. "IOBJ_NAME").
transportNoWorkbench transport order number (e.g. "DEVK900000"). Required when object is in a non-local package.
attributesNoNew attribute list, replacing all existing ones. Pass [] to remove all attributes; omit to leave them unchanged.
fixed_unitNoKYF only. Fixed unit of measure (e.g. "KWH", "M3"). Sets fixedUnit on a QUAN key figure.
lower_caseNoCHA only. Allow lower case letters (RSDCHABAS-LOWERCASE). Omit to keep existing. Set true for characteristics whose values may contain lower case letters or characters outside the permitted character set (RSKC), such as umlauts. Changing the flag on a characteristic already used by a provider that holds data is accepted; a load that failed activation on such a value can then simply be activated again.
descriptionNoNew short and long description text. Omit to keep existing.
fixed_currencyNoKYF only. Fixed currency (e.g. "EUR"). Sets fixedCurrency on a CURR key figure.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does so well: it explicitly discloses that supplying attributes replaces the entire list, that an empty array removes all attributes, that omitting them leaves the list untouched, and that the operation internally performs lock → GET → PUT → activate → unlock. This gives the agent a strong mental model of a mutating, potentially destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact yet information-dense: two sentences cover scope, destructive replacement behavior, KYF support, and the internal call sequence. Every clause earns its place and key caveats are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation tool with no output schema and no annotations, the description covers the essential operational context: what can be updated, how attribute replacement works, and the internal sequence. It does not describe return values or failure behavior, which is a minor gap given the schema already thoroughly documents parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds helpful context around attributes (replace vs omit) and KYF applicability, but most parameter-level meaning is already present in the schema. It does not substantially enrich individual parameter semantics beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Update') and a specific resource ('InfoObject'), and immediately enumerates what can be changed: description, lower-case flag, attributes, and KYF fixed unit/currency. This clearly distinguishes it from sibling tools like bw_get_infoobject, bw_create_infoobject, and bw_update_infosource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: updating a Characteristic InfoObject or a Key Figure's fixed unit/currency, and it explains how to behave when attributes are supplied vs omitted. It does not explicitly name alternative tools for related operations, but the use case is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_infosourceA

Update an InfoSource — change description, add/remove fields, and update labels. Provide fields as an array of the fields to add, and remove_fields as an array of field names to delete; other existing fields are always preserved verbatim. Each field can reference an InfoObject (set infoobject_name) or be a local field (omit infoobject_name). Returns a lock_handle for bw_activate.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesInfoSource name (e.g. "INFOSOURCE_NAME").
fieldsNoFields to add (or whose label to update). Existing fields are preserved; omit to leave fields unchanged.
transportNoTransport request number (e.g. DEVK900123). Only required if the BW system requires transport assignment.
descriptionNoNew description text (optional — omit to leave unchanged).
remove_fieldsNoField names to remove from the InfoSource (e.g. FIELD_NAME). Other existing fields are preserved.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that existing fields are preserved, fields can reference InfoObjects or be local, and it returns a lock_handle. It lacks discussion of authorization or side effects but is sufficient 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured paragraph with three clear sentences. It is front-loaded with the main purpose and efficiently covers key behaviors and parameters without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters and no output schema, the description provides a good overview, including the return value. It could be improved by mentioning error handling or prerequisites, but it is adequately complete given the schema richness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining the preservation behavior, the distinction between InfoObject fields and local fields, and the lock_handle return. This goes beyond the schema's descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Update' and the resource 'InfoSource', and specifies the modifiable aspects (description, fields, labels). It distinguishes itself from sibling tools like 'bw_create_infosource' and 'bw_get_infosource'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (when updating an InfoSource) but does not explicitly differentiate from other update tools for different objects or provide when-not-to-use guidelines. No alternatives are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_planning_filterA

Change a planning filter: set the values or the variable of a characteristic (replacing its current restriction), remove a restriction, or change the description. Restrictions not named stay as they are.

ParametersJSON Schema
NameRequiredDescriptionDefault
transportNoTransport request number. Required on systems with transport obligation.
operationsNoRestrictions to set or remove, applied in order.
descriptionNoNew description.
filter_nameYesTechnical name of the filter (e.g. "OBJECT_NAME").

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose important mutation semantics: set_values/set_variable replace the existing restriction and unnamed restrictions remain untouched (partial update). However it is silent on transport/lock obligations, whether activation is required, and error behavior for a write tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and resource followed by the supported operations. Every clause earns its place with no repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the core semantics of the update but, for a mutation tool with zero annotations and no output schema, it omits operational essentials such as transport/lock requirements and activation. Given the deletion/overwrite implications of replacing restrictions, this is adequate but incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is already 100%, so the baseline is 3. The description earns above baseline by clarifying that set operations replace the current restriction and that unlisted restrictions are preserved, which is semantic meaning beyond the schema's field-level docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Change) plus resource (planning filter) and enumerates the exact mutation modes: set values/variable, remove a restriction, change the description. This clearly separates it from the create/get siblings by resource and operation, though it never names an alternative tool explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the enumerated operations rather than stated as when-to-use conditions. There is no explicit routing to alternatives (bw_create_planning_filter, bw_get_planning_filter) or prerequisites, so the agent must infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_planning_functionA

Change an existing Planning Function (TLOGO PLSE): the characteristic usage (FIELDS_TO_BE_CHANGED / FIELD_FOR_CONDITIONS / NONE), the conditions, single-value parameter values (constant or variable, including the FOX code of a FORMULA function) and the description. Changes not passed stay as they are. The function is saved straight to the active version — there is no activation step. Before changing the code of a custom exit function, check the block characteristics with bw_get_planning_function: records meant to be combined in one call must not differ in any of them.

ParametersJSON Schema
NameRequiredDescriptionDefault
ruleNoFor function types with several rules: the 1-based rule that conditions and parameters apply to. Defaults to 1.
transportNoTransport request number. Required on systems with transport obligation.
char_usageNoCharacteristic usage per characteristic. FIELDS_TO_BE_CHANGED: the function may change its values, and records that differ in it are processed together. FIELD_FOR_CONDITIONS: not changed, but conditions may restrict it. NONE: neither. Every characteristic that is not FIELDS_TO_BE_CHANGED is a block characteristic — the function runs once per combination of their values. On a CompositeProvider the bare characteristic name is accepted as well as the prefixed one.
conditionsNoConditions of the rule, per characteristic. The given constraints replace every constraint the characteristic has; an empty or omitted constraints list removes the condition. A condition is only valid on a characteristic with usage FIELD_FOR_CONDITIONS.
parametersNoParameter values of the rule, as shown in the parameter tree of bw_get_planning_function. Applies to single-value parameters; a nested one may be named by its path ("STRUCTURE/FIELD") or, where unambiguous, by its own name. Pass value for a constant or variable for a variable reference. The FOX code of a FORMULA function is the value of its FLINE parameter. A key figure selection (e.g. KYFSEL) takes key_figures, a data selection (e.g. the from and to selections of a copy) takes selection. In a table parameter row n of every field belongs together; row = current rows + 1 adds a row.
descriptionNoNew description.
planning_function_nameYesTechnical name of the Planning Function (e.g. "OBJECT_NAME").

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: it discloses partial-update semantics ('Changes not passed stay as they are') and the non-obvious fact that the function is written straight to the active version with no activation step. It omits reversibility, permission requirements, and error behavior, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the verb and the enumeration of changeable facets, followed by the update semantics and the prerequisite warning. Every sentence carries information, though the parenthetical lists make it dense; it is well organized rather than bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, it covers the essentials: what changes, that changes are additive, that there is no activation step, and one safety prerequisite. It leaves permission/transport-obligation behavior and failure modes unexplained, so not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning beyond the schema: it maps the four changeable areas to the parameter set, clarifies that unpassed changes are preserved, and explains the block-characteristic interaction that governs how records are grouped across a call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Change') and resource ('an existing Planning Function (TLOGO PLSE)'), then enumerates exactly which facets can be changed (characteristic usage, conditions, parameter values, description). It is trivially distinguishable from bw_create_planning_function and bw_get_planning_function without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context: unmentioned fields are left untouched (partial update), and it names a prerequisite — check block characteristics via bw_get_planning_function before editing custom exit code. It stops short of explicit when-not or a named alternative for other update paths, so 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.

bw_update_planning_sequenceA

Change a planning sequence: replace its steps with the list given, in that order, and/or change its description. To add, remove or move one step, read the sequence with bw_get_planning_sequence and pass the whole new list.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsNoThe steps in execution order. A planning_function step runs the function on the data the filter selects; an input_template step only opens that selection for manual input.
transportNoTransport request number. Required on systems with transport obligation.
descriptionNoNew description.
sequence_nameYesTechnical name of the sequence (e.g. "OBJECT_NAME").

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it delivers the single most important behavioral trait: steps are wholesale replaced in the given order (so omitting a step deletes it). It still omits permissions, whether the sequence must be inactive, and reversibility, so it is not fully transparent for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, tightly front-loaded with the mutation semantics before the alternative workflow. Every clause earns its place; nothing is redundant padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an update tool with no annotations and no output schema, the description covers the critical replacement semantics and the read-first workflow. Gaps remain around prerequisites (transport obligation, activation state) that an agent would need before calling it, keeping it short of full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so steps, transport, description and sequence_name are already documented in the schema. The description's ordering note ('in that order') largely duplicates the schema's 'steps in execution order', and it adds no syntax or constraint detail beyond what structured fields provide. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (change/update) on a specific resource (planning sequence) and pinpoints exactly what is mutated: the step list (full replacement, in order) and/or the description. An agent can distinguish this from bw_get_planning_sequence and bw_create_planning_sequence without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit workflow for the common case: to add, remove or move a step, read the sequence with bw_get_planning_sequence and pass the whole new list. This names the sibling tool and the read-modify-write pattern required, rather than leaving the agent to infer it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_process_chainA

Replace the step model (nodes and edges) of an existing Process Chain (RSPC) via the BW/4HANA Cockpit REST API. Reads the current chain to obtain the ETag and preserve the existing trigger node (with its scheduling configuration) and the current header. Replaces only the steps and edges; the trigger is always preserved as-is. Optionally overrides description and infoarea in the header. Optionally activates after the update. A 412 on the PUT means the ETag was stale (chain modified between read and write); the error reports this explicitly. Use bw_create_process_chain to create a new chain; use this tool to update an existing one. This tool REPLACES the whole step model, so every step that should survive must be listed — a step left out is deleted. For a small change to a big chain prefer the targeted tools (bw_append_process_chain_dtp, bw_add_process_chain_program, bw_add_process_chain_edge, bw_remove_process_chain_edge, bw_remove_process_chain_step), which edit the server's own model in place and cannot drop a step they do not model. Supported step types: DTP_LOAD (DTP load), ADSOACT (DSO data activation), ADSOREM (DSO request cleanup), ABAP (execute an ABAP program, optionally with an SE38 selection variant), CHAIN (start a local sub-chain, verified), DECISION (branch on a decision variant, requires the variant field), and collectors AND / OR / XOR; the start trigger is implicit. A generic referenced-step path (any process type string plus an object name, bIsReference=true) is available and verified for DTP_LOAD and CHAIN; for other types it may work but is untested. Other inline-configuration process types (for example OS command, attribute change run) are not supported in this version — a chain containing one cannot be rewritten with this tool without losing that step. Edges support on-success (positive) and unconditional (neutral) links; on-error (negative) links are accepted in the schema but not emitted by default. DECISION branch edges: set sub_status to the branch EVENTNO ("01"/"02"); such edges are always positive. The trigger is preserved as-is unless trigger_event is passed (which sets an event start-condition); an existing event start-condition is preserved across updates.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProcess chain technical name (e.g. "CHAIN_NAME"). Case-insensitive.
edgesYesComplete replacement edge list. Use the step id or the literal "TRIGGER" for the start node. Status defaults: "neutral" when the source is "TRIGGER" or a collector (AND/OR/XOR); "positive" otherwise. For a branch edge out of a DECISION node, set sub_status to the branch EVENTNO ("01"/"02"); such edges are forced to "positive".
stepsYesComplete replacement step list. The TRIGGER (Start) node is implicit at index 0 — do not include it here. Same shape as in bw_create_process_chain.
activateNoIf true, activate the chain immediately after the update. Default false.
infoareaNoOptional new InfoArea. If omitted, the existing InfoArea is kept.
descriptionNoOptional new description. If omitted, the existing chain description is kept.
trigger_eventNoOptional event start-condition for the trigger (start type "E"). When omitted, an existing event start-condition is preserved and a non-event trigger stays immediate.
transport_requestNoOptional transport request to record the change into. Only relevant when the chain is in a transportable package (not $TMP). If the chain is transportable and exactly one request is available, it is chosen automatically; pass this to disambiguate when several are available. Ignored for $TMP (local) chains.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden and meets it thoroughly: the destructive replacement semantics ('a step left out is deleted'), the stale-ETag 412 behavior with explicit error reporting, preservation of the trigger node and existing event start-condition, the fact that on-error negative links are accepted but not emitted by default, and the support boundary for untested/unsupported step types. No annotation contradicts the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long (~700 words), but the structure is exemplary: purpose first, then the core behavioral contract (read → preserve → replace), the safety-critical warning, named alternatives, then step types and edge semantics. Every sentence carries context-dependent information and there is no tautology or filler; it merely approaches the upper limit of what a single description should hold and would benefit from pushing some step-type detail into the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description carries the entire burden of agent-safe invocation. It covers the destructive edge (dropped steps), transport state ($TMP vs transportable), trigger semantics (implicit vs explicit event start), verified vs. unverified generic types, the ETag conflict path, and the full step-type catalog with required fields. Nothing a calling agent needs to decide whether to call, or what to pass, is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even though schema coverage is 100%, the description adds crucial semantics the schema cannot express: the TRIGGER node is implicit and must be omitted from the step list, default edge statuses derive from source node type ('neutral' for TRIGGER/collector, 'positive' otherwise), re-specifying every existing ABAP step is required or it is dropped, 'program_variant' is an SE38 report variant distinct from the DECISION variant field, and transport_request auto-selection rules when exactly one request is available. These details turn a syntactically correct call into a semantically correct one.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the operation concretely: 'Replace the step model (nodes and edges) of an existing Process Chain (RSPC)'. The verb 'Replace' plus the resource make the action unmistakable, and the description immediately contrasts with the create flow ('Use bw_create_process_chain to create a new chain; use this tool to update an existing one') and with targeted editing tools, so an agent cannot confuse it with any sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to and when-not-to guidance. It names the alternative tools for small edits (bw_append_process_chain_dtp, bw_add_process_chain_program, bw_add_process_chain_edge, bw_remove_process_chain_edge, bw_remove_process_chain_step) and explains the deciding factor — those tools 'edit the server's own model in place and cannot drop a step they do not model.' This is textbook usage routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_query_cellsA

Manage the cell definitions of an existing BW Query that has two structures (one on each axis): add reference cells (make the value at an intersection of a member of each structure addressable), add formula cells at an intersection, add help cells (formula or selection cells outside the grid, used as reusable operands such as a unit-free denominator), change a cell's formula, description, decimals or scaling, and remove cells. Members and cells are addressed by description or id; bw_get_query lists the existing cells with the member descriptions they sit on. All operations are applied in a single save.

ParametersJSON Schema
NameRequiredDescriptionDefault
transportNoTransport request number (e.g. DEVK900123). Only needed when the query lives on a transportable package; omit for $TMP queries.
operationsYesCell changes, applied in order in one save cycle. A later operation can reference a cell an earlier one added, by its description.
query_nameYesTechnical name of the query to modify (e.g. "QUERY_NAME").

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that all operations apply in one save, that remove_cell is refused while another formula references the cell, and that a reference cell is auto-created when an intersection lacks one. It omits any mention of permissions/locking or error behavior, keeping it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single dense paragraph, front-loaded with the core purpose and operations, and every clause is informative. Some operation enumeration and cross-references are lengthy, but there is little waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation tool with no annotations and no output schema, the description covers the operations, addressing scheme, constraints (reference refusal, auto-creation), and transaction behavior. It is nearly complete, lacking only explicit guidance on sibling choice and error/permission context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters thoroughly (operations, formula tree, member addressing). The description adds only marginal param meaning (addressing by description or id, members at any depth), which is the expected baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb (manage cell definitions) and resource (an existing BW Query with two structures, one per axis), then enumerates the exact operations supported. This clearly distinguishes it from siblings like bw_update_query_key_figures or bw_update_query_layout, which target different query objects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear precondition (query must have two structures) and routes the agent to bw_get_query for listing existing cells to reference. It also notes the atomic single-save behavior. It stops short of explicitly stating when to prefer this over sibling update tools, so it isn't a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_query_characteristicA

Set the display and access properties of the characteristics in an existing BW Query - the per-characteristic settings of the rows, columns, and free-characteristics areas: display of result rows, display as key/text, access type for result values (read mode), sorting, cumulation, display level, and the hierarchy assignment with its display options. Pass "*" as infoobject to apply one set of properties to every characteristic in the layout. Every property also accepts "default", which drops the explicit value and falls back to the InfoObject/query default. All specs are applied in a single save. Characteristics must already be in the layout - add them with bw_update_query_layout first. All names must be technical names (e.g. "QUERY_NAME", "CHAR_NAME").

ParametersJSON Schema
NameRequiredDescriptionDefault
transportNoTransport request number (e.g. DEVK900123). Only needed when the query lives on a transportable package; omit for $TMP queries.
query_nameYesTechnical name of the query to modify (e.g. "QUERY_NAME").
characteristicsYesOne entry per characteristic, or a single entry with infoobject "*" for all of them.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It reasonably discloses the important behavioral traits: applying to every characteristic with '*', accepting 'default' to fall back, applying all specs in a single save, and requiring the characteristic to already exist in the layout. It does not describe output/response or rollback behavior, which prevents a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and product, then packs the key variants of the trait into a long but informative list. It contains no real filler, although the run-on enumeration and the slight overgeneralization about 'default' keep it from being a model of discretion.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The definition is complete enough for a complicated tool with a rich input schema: it explains the wildcard infoobject, the meaning of 'default', the single-save behavior, the necessity of a prior layout, and the need for technical names. It is less complete about the return contract or what happens after a failed save, but the operation itself is clearly described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides full descriptions for all parameters, so the description did not need to compensate heavily. It does add useful shorthand about 'default' and '*' semantics, but the statement that 'Every property also accepts default' is overbroad because the schema excludes 'default' from several enums items such as text_type and sorting.direction. Because schema coverage is 100%, the baseline is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a concrete verb-resource pairing: 'Set the display and access properties of the characteristics in an existing BW Query.' It enumerates the exact property groups affected (result rows, display as key/text, access type, sorting, etc.), which distinguishes it from related update tools like bw_update_query_layout, bw_update_query_key_figures, and bw_update_query_settings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states an explicit precondition: characteristics must already exist in the layout, and routes the agent to bw_update_query_layout if they need to be added first. It could be stronger by naming the alternative tools it should not be used for, but the very-specific scope ('characteristics' in a query layout) provides enough usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_query_filterA

Modify an existing BW Query filter. Supported restrictions: fixed values — single values, intervals (via "high"), and exclusions (via "exclude") — and reusable variable references (via "set_variable"). All operations are applied in a single save. Key figure members are not yet supported. All names must be technical names (e.g. "IOBJ_NAME", "QUERY_NAME", "VAR_NAME").

ParametersJSON Schema
NameRequiredDescriptionDefault
transportNoTransport request number (e.g. DEVK900123). Only needed when the query lives on a transportable package; omit for $TMP queries.
operationsYesFilter changes to apply in one save cycle.
query_nameYesTechnical name of the query to modify (e.g. "QUERY_NAME").

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Lacking annotations, the description carries the burden. It discloses that operations are applied in a single save and that key figure members are unsupported, but does not address side effects, permissions, reversibility, or failure behavior. Adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise: three sentences covering purpose, supported operations, naming rules, and a limitation. Front-loaded with the core action, no extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description should clarify return behavior (e.g., success indication), which it omits. It does cover the main use case, operations, and limitations, but lacks completeness on what the tool returns after modification.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds context about technical naming conventions and unsupported key figure members, though much of this information is already in the schema descriptions. No significant new semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'Modify', the resource 'BW Query filter', and the supported restriction types. It distinguishes from siblings like bw_update_query_layout or bw_update_query_key_figures by focusing specifically on filters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by listing supported operations and limitations (no key figure members), but does not explicitly state when to use this tool versus alternatives (e.g., update_layout, update_key_figures). No when-not-to-use guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_query_key_figuresA

Manage the key figure structure of an existing BW Query: add basic key figures, add references to reusable CKFs/RKFs (with optional local restrictions), add local formula members (recursive operator/operand tree), set member display and planning properties (decimals, scaling, hidden, sign inversion, input readiness, disaggregation, constant selection, local calculation) and exception aggregation, nest members and place them at a position, and remove members. All operations are applied in a single save. Member operations also apply to a reusable key figure structure referenced via bw_update_query_layout add_structure. All names must be technical names (e.g. "IOBJ_NAME", "CKF_NAME", "QUERY_NAME").

ParametersJSON Schema
NameRequiredDescriptionDefault
transportNoTransport request number (e.g. DEVK900123). Only needed when the query lives on a transportable package; omit for $TMP queries.
operationsYesKey figure changes to apply in one save cycle.
query_nameYesTechnical name of the query to modify (e.g. "QUERY_NAME").
structure_targetNoContainer for the key figure structure when it is created by the first add operation (default "columns"). Ignored once a structure already exists.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it does disclose meaningful behavior: all operations are applied atomically in a single save, member operations also mutate a reusable key figure structure referenced elsewhere, and all names must be technical. It does not discuss permission requirements or failure modes at the description level, but the atomicity and cross-structure side effects are substantive disclosures.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first clause, and the second and third sentences add genuinely useful constraints (single save, cross-structure effect, technical names). The opening sentence is a very long run-on enumeration, which slightly hurts readability, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex multi-operation mutation tool with no annotations and no output schema, the description supplies purpose, atomicity semantics, key sibling relationships, and naming rules, while the 100%-covered schema handles parameter details. It is close to complete, with only permission/transport preconditions left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the input schema and the baseline is 3. The description adds only the technical-name requirement and the note that member operations reach a referenced reusable structure, neither of which is parameter-level clarification beyond what the schema offers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Manage the key figure structure of an existing BW Query") and then enumerates the exact operations covered: add basic key figures, CKF/RKF references, local formulas, property changes, nesting, and removal. An agent can immediately distinguish this from bw_update_query_characteristic, bw_update_query_filter, and bw_update_query_layout, which are referenced by name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes context (an existing query, applied in one save) and cross-references bw_update_query_layout add_structure for reusable key figure structures, which implicitly signals scope. However, it never explicitly states when to choose this tool over its siblings or what it should not be used for, leaving selection guidance to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_query_layoutA

Modify an existing BW Query layout: add or remove characteristics in the rows, columns, or free-characteristics area, and add or remove references to reusable structures (a structure is a layout container). All operations are applied in a single save. All names must be technical names (e.g. "IOBJ_NAME", "STRUCTURE_NAME", "QUERY_NAME").

ParametersJSON Schema
NameRequiredDescriptionDefault
transportNoTransport request number (e.g. DEVK900123). Only needed when the query lives on a transportable package; omit for $TMP queries.
operationsYesLayout changes to apply in one save cycle.
query_nameYesTechnical name of the query to modify (e.g. "QUERY_NAME").

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description is the sole source. It discloses single-save behavior and technical naming requirement but lacks details on failure modes, authorization needs, or what happens if layout doesn't exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three clear sentences, front-loaded with purpose, then transactional behavior and naming convention. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description covers operation types, target containers, and naming. Missing details on error handling or what happens with invalid operations, but adequate for typical use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds context like 'structure is a layout container' and emphasizes technical names, but the schema already describes each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'Modify an existing BW Query layout' which clearly states the verb and resource. It enumerates specific actions (add/remove characteristics, add/remove structure references) that distinguish this from sibling query tools like bw_update_query_filter or bw_update_query_settings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions 'All operations are applied in a single save,' implying bundling. While the purpose is clear, there is no explicit guidance on when to use vs alternatives or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_query_settingsA

Change query-level display and behaviour settings of an existing BW Query (description, zero suppression, result position, sign presentation, zero presentation, universal display hierarchy, document links, and related flags). Only the provided settings are applied in a single save. The InfoProvider, technical name, and package cannot be changed. All names must be technical names (e.g. "QUERY_NAME").

ParametersJSON Schema
NameRequiredDescriptionDefault
transportNoTransport request number (e.g. DEVK900123). Only needed when the query lives on a transportable package; omit for $TMP queries.
query_nameYesTechnical name of the query to modify (e.g. "QUERY_NAME").
descriptionNoQuery description text.
document_linksNoDocument link visibility.
adjust_formattingNoAdjust formatting.
sign_presentationNoSign presentation (e.g. "inFrontOf", "after").
result_position_topNoPlace the result row on top.
show_scaling_factorNoShow the scaling factor.
result_position_leftNoPlace the result column on the left.
zero_suppression_rowsNoSuppress zero-value rows.
hierarchy_display_rowsNoUniversal display hierarchy for rows.
zero_presentation_kindNoZero presentation kind (e.g. "withCurrency").
zero_suppression_columnsNoSuppress zero-value columns.
hierarchy_display_columnsNoUniversal display hierarchy for columns.
suppress_repeated_key_valuesNoSuppress repeated key values.
zero_presentation_custom_valueNoCustom value shown for zeros.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states the tool modifies an existing query, applies only provided settings in one save, and lists immutable fields. It does not mention side effects, authorization needs, or concurrency considerations, but it covers basic behavioral traits adequately.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences long, each with a clear role: first states what the tool does, second clarifies partial updates, third lists what cannot be changed and naming convention. No redundant words; efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (16 parameters, nested objects) and no output schema, the description provides a solid overview. It covers the tool's effect, scope, and constraints. It could mention prerequisites like the query must exist, but the description is largely complete for an update tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already describes each parameter. The description adds context by listing the categories of settings and noting that names must be technical names, but does not provide additional semantics beyond what the schema offers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses 'change' as the verb and specifies 'query-level display and behaviour settings', distinguishing it from sibling tools like bw_update_query_layout which handle layout. It lists specific settings (zero suppression, result position, sign presentation, etc.), making the purpose clear and unique.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states 'Only the provided settings are applied in a single save', indicating partial updates. It also says which properties cannot be changed (InfoProvider, technical name, package). However, it does not explicitly mention when to use this tool versus siblings like bw_update_query_filter, though the context makes it clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_rkfA

Change a reusable Restricted Key Figure in place: description, base key figure and/or restrictions. The UID stays the same, so references from CKFs, structures and queries stay intact — unlike the delete-and-recreate that was the only correction path before, which is impossible once the RKF is referenced anywhere and blocked entirely on tiers where deletion is disabled. "restrictions" replaces the full set of characteristic restrictions when given.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNoNew description.
restrictionsNoReplaces ALL characteristic restrictions. Every value is validated against the InfoProvider and mapped to its internal key before anything is written.
component_nameYesTechnical name of the RKF.
base_key_figureNoNew base key figure InfoObject.
transport_requestNoTransport request to record the change in.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden and does well: it reveals UID stability, intact references, full replacement of restrictions when provided, and the in-place nature. It does not mention authorization or what happens when no mutable field is supplied, but the core side effects are transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first phrase front-loads the purpose, but the single sentence becomes long due to the delete-and-recreate comparison. That comparison is relevant and earns its place; splitting it into two sentences would improve structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an update tool with no output schema and no annotations, the description covers the core behavior, the consequences for references, and full-replacement semantics. Minor gaps include explicit handling when only component_name is provided and transport/activation requirements, but neither blocks correct invocation in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description mostly repeats what the schema already documents about 'restrictions' replacing ALL characteristic restrictions; it adds no significant new meaning beyond that for the individual parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Change') and resource ('reusable Restricted Key Figure in place') and names the exact mutable attributes. It also distinguishes itself from the delete-and-recreate correction path, making it clear this is an in-place update with UID preservation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives the key usage context: use the in-place update when you need to preserve references from CKFs, structures, and queries, and explains why delete-and-recreate is impossible once the RKF is referenced or deletion is disabled. It does not explicitly name sibling tools like bw_create_rkf, but the alternative path is clearly identified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_structureA

Change a reusable structure: add, remove or re-configure members. The change reaches every query that embeds the structure — which is the point, and the reason this goes at the structure itself rather than through one query that happens to use it. All operations are applied to one document and written in a single save.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationsYesMember operations, applied in order.
descriptionNoNew description of the structure itself.
component_nameYesTechnical name of the structure.
transport_requestNoTransport request to record the change in.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose two non-obvious traits: the change reaches every embedding query (blast radius) and all operations are applied to one document in a single save (atomicity/ordering). It says nothing about required authorizations, the transport_request requirement, reversibility, or what happens if a member match fails, so the behavioral picture is incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, and the rationale sentence earns its place by explaining the structure-level scope. The phrasing ('which is the point, and the reason...') is slightly discursive for a tool definition but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers purpose, scope, and atomicity but omits permissions, transport handling, failure behavior, and return value expectations. The rich input schema offsets much of this, but the definition is only adequate for a write operation of this nature.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the per-parameter descriptions are detailed (action enum semantics, parent/position/member_id behavior), so the schema already does the heavy lifting. The description adds no parameter-level meaning beyond it, which is the expected baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (change) plus resource (reusable structure) and enumerates the member-level actions (add, remove, re-configure). It also implicitly distinguishes itself from query-level siblings like bw_update_query_key_figures by framing the change as happening at the structure, though it never names an alternative tool directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear usage rationale: use this when the change must propagate to every query embedding the structure, rather than editing one query that happens to use it. It stops short of explicit when-not-to-use conditions or naming the alternative tools an agent could pick instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_transformationA

Map a source field to a target InfoObject in a Transformation, or convert an existing rule to a field routine (StepRoutine) or formula rule (StepFormula). rule_type="direct" (default): changes a StepNoUpdate/StepInitial rule to StepDirect. rule_type="routine": converts an existing StepDirect, StepInitial, or StepNoUpdate rule to StepRoutine (AMDP field routine). rule_type="formula": writes the rule as StepFormula whatever step type it has now, including an existing formula rule whose text is to be changed — no ABAP class generated, BW evaluates the formula natively. Every operand of the expression is registered as a source of the rule, so a formula over several source fields works; the operands are read out of the formula and need not be listed. rule_type="constant": sets a fixed constant value on the target field — no source field needed. For routine on StepNoUpdate rules, source_field is required. For routine on StepDirect/StepInitial rules, source_field is ignored (field is already mapped). source_field is always ignored for rule_type="constant". rule_type="direct" with unit_source_field set: creates a COMBINED key-figure + unit/currency direct rule (multi-source/target) — maps a quantity together with its unit (or an amount with its currency) in one rule, as the Eclipse rule editor shows it. A rule on a key figure with a currency or unit takes the value over unconverted unless conversion is set. aggregation sets how the rule aggregates into a target key figure (SUM, MOV, MIN, MAX, NOP), alone or with a rule change. Returns a lock_handle for bw_activate.

ParametersJSON Schema
NameRequiredDescriptionDefault
formulaNoFormula expression for rule_type="formula" (required). Source fields are referenced by their technical field name: use /BIC/FIELDNAME for custom InfoObjects (e.g. "/BIC/FIELD_NAME + 10"), or the direct field name for standard InfoObjects. Operators: +, -, *, /. Functions: IF, ABS, CONCATENATE, DATE_YEAR, etc. Comparison operators < > <= >= <> are supported (escaping is handled automatically, in either spelling). Every operand of the expression is wired up as a source of the rule; operands that name a source-segment field are recognised in the expression itself, so a multi-operand formula works without listing them.
rule_typeNoRule type to assign. "direct" (default): maps source field directly (StepDirect). "routine": converts the rule to an AMDP field routine (StepRoutine) — the server generates the ABAP class automatically. "formula": writes the rule as a formula rule (StepFormula) — requires the formula parameter; also used to change the formula text of an existing formula rule. "constant": sets a fixed constant value (StepConstant) — requires the constant_value parameter, source_field is ignored. "lookup": converts the rule to a StepRead (Lookup) rule — requires lookup_object and lookup_object_type. "no_update": reverts any existing mapping back to StepNoUpdate (no mapping, field stays empty). IMPORTANT: AMDP SQLSCRIPT methods only allow ASCII 7-bit characters — no German umlauts or special symbols in code or comments.
transportNoTransport request number (e.g. DEVK900123). Only required if the BW system requires transport assignment.
conversionNoCurrency or unit conversion for a direct rule on a key figure with a currency or unit (rule_type="direct"). Omitted or type "none": no conversion — the value is taken over as it is, which is also what direct, formula and constant rules on such a key figure get by default. Type "currency": convert with a currency translation type; type "unit": convert with a unit conversion type. The name is checked against the types defined on the system, and an unknown name is refused with the list of available ones. The source currency/unit comes from source_unit_field, else from the source key figure's own unit reference; a conversion type with a fixed source needs neither. The transformation's currency/unit handling is switched on.
aggregationNoAggregation type of the rule on a target key figure: "SUM" (summation), "MOV" (overwrite), "MIN", "MAX" or "NOP" (no aggregation). It decides what happens when several source records end up in one target record. Given alone (with transformation_name and target_infoobject only), it changes the aggregation and leaves the rule as it is; given with a rule change, both are saved together. Refused for a target field whose aggregation the target does not let a transformation override.
source_fieldNoSource field name in the source segment (e.g. "FIELD_NAME"). Required for rule_type="direct" if the existing rule has no source mapping. Also required for routine/formula when the target has no source mapping yet (StepNoUpdate). Required for rule_type="lookup".
lookup_objectNoName of the InfoObject or aDSO to read from (Nachlese-Objekt). Required for rule_type="lookup".
constant_valueNoConstant value for rule_type="constant" (required). The value is written as-is into the target field during data loading. Example: "X" for a flag field, "USD" for a currency field.
target_infoobjectYesTarget InfoObject name in the target segment (e.g. "IOBJ_NAME").
unit_source_fieldNoSource unit/currency field for a COMBINED key-figure + unit/currency direct rule (rule_type="direct"). When set, target_infoobject is the key figure and this is the source field that fills its unit or currency. The target unit/currency field is derived automatically from the key figure's unit reference in the aDSO (the target key figure must reference a unit/currency field). The standalone unit/currency rule is folded into the combined rule and the transformation's currency/unit handling is switched on. Example: target_infoobject="QUANTITY", unit_source_field="QUANTITYUNIT".
lookup_object_typeNoType of the lookup object. "IOBJ" for InfoObject, "ADSO" for aDSO. Required for rule_type="lookup".
transformation_nameYesTransformation name (UUID-like key).
additional_source_fieldsNoAdditional source fields for rule_type="formula" when the formula references more than one source field. Combined with source_field, all listed fields are registered as inputs on the StepFormula rule — alongside the operands read out of the formula itself, so this is only needed for a field the expression does not name under its source-segment name. Example: ["QUANTITY_SOLD", "COST_PER_UNIT"].

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses that a lock_handle is returned for bw_activate, that the server generates the ABAP class for routines, that an unknown conversion name is refused with the list of valid ones, that operands are auto-registered as sources, and the ASCII 7-bit AMDP limitation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and default behavior are front-loaded in the first sentence, and the rule_type breakdown follows logically. It is dense and repeats some parameter detail already present in the schema, but nearly every sentence carries cross-parameter semantics rather than pure duplication.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter tool with a nested conversion object and no output schema, the description covers the operational behavior thoroughly enough to invoke it correctly. It omits essentially nothing critical, though some error-handling beyond the conversion-case refusal is undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real cross-parameter meaning the schema alone doesn't convey (e.g. source_field being ignored for direct/constant, unit_source_field creating a combined key-figure+unit rule, formula requiring formula/additional_source_fields). It goes beyond restating field docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource: mapping a source field to a target InfoObject, or converting a rule to a StepRoutine/StepFormula. The multiple rule_type modes are enumerated precisely. It does not explicitly name siblings (e.g. bw_create_transformation, bw_set_transformation_routine) to route the agent, which keeps it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives per-mode conditions: direct for StepNoUpdate/StepInitial, routine requires source_field on StepNoUpdate, constant ignores source_field, formula needs the formula param, etc. This is strong in-tool guidance, but there is no explicit when-to-use-this-vs-alternative-tool routing against the transformation siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_update_variableA

Change a reusable BW Variable in place: description, input readiness, input type (optional / mandatory), selection type and processing type, and on a formula variable its default value, unit and currency. The UID stays the same, so references from queries, CKFs and structures survive the change — unlike the delete-and-recreate that was the only correction path before, which BW refuses as soon as anything references the variable, and deleting a query does not remove its reusable components either. The reference characteristic and the variable type cannot be changed: BW accepts such a write, reports it as consistent and keeps the old value, so both are rejected here instead of being sent. Read the result back with bw_get_variable.

ParametersJSON Schema
NameRequiredDescriptionDefault
unitNoFormula variables only: unit of measure (dimension Quantity or Price); an empty string removes it where the dimension allows.
currencyNoFormula variables only: currency key (dimension Amount or Price); an empty string removes it where the dimension allows.
input_typeNoWhether a value is required: Optional, MandatoryWithInitial (entry required, initial value allowed) or MandatoryWithoutInitial (entry required, initial value rejected).
representsNoSelection type. Interval is a from/to range, SelectionOption allows the full set of comparison operators.
descriptionNoNew description.
default_valueNoFormula variables only: new default value, or null to remove it. A fractional value needs the logon user's decimal notation, as in bw_create_variable.
variable_nameYesTechnical name of the variable.
processing_typeNoHow the variable is filled. ReplacementPath is limited to the current-member variant, the same one bw_create_variable writes. A formula variable takes UserEntry or CustomerExit only.
ready_for_inputNoWhether the variable is shown on the variable screen for user input.
transport_requestNoTransport request to record the change in.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and delivers strong context: the write is in-place with a stable UID, references survive, and BW silently accepts writes to the immutable reference characteristic/variable type while keeping the old value, so those are rejected client-side. It omits whether the change needs activation or how transport recording behaves, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and mutable fields before the rationale and constraints. The second sentence is dense and runs long (delete-and-recreate aside, query-deletion aside), but each element carries useful behavioral information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter mutation tool with no annotations and no output schema, the description covers scope, immutability constraints, the silent-write hazard, decimal-notation caveat, and a read-back pointer. Missing activation/transport semantics are the only notable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all ten parameters (including enum meanings) are already documented in the schema, making 3 the baseline. The description adds only light framing such as which fields are formula-variable-only, largely restating rather than extending the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Change a reusable BW Variable in place') and enumerates the mutable fields (description, readiness, input/selection/processing type, formula default/unit/currency). It distinguishes itself from the delete-and-recreate path and implicitly from bw_create_variable by emphasizing in-place mutation with UID stability.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly frames when to use it: to correct a variable while preserving references from queries, CKFs and structures, since delete-and-recreate fails once anything references it. It also states the excluded cases (reference characteristic and variable type) and names bw_get_variable for read-back, though it does not explicitly route to a sibling tool for creating a new variable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bw_xrefA

Find where-used / dependencies for a BW object. Returns all objects that reference the given object. Use this to find the Transformation and DTPs that reference an aDSO, or to find which DTPs depend on a Transformation. Every transformation and DTP hit carries its source and target (type and name) and its direction relative to the object: upstream (feeds it) or downstream (fed from it) — follow upstream hits hop by hop to trace a data flow back to its DataSource. On classic SAP BW the analysis processes that write to or read from a provider (ADSO, ODSO, CUBE, MPRO, IOBJ) are listed too, with direction. On every release the aggregation levels built on a provider are listed as upstream (planned values are written into the provider through them), and object_type=ALVL lists the InfoProvider underneath (downstream) and the planning functions on the level (upstream) next to its queries. Use object_type=DTPA to find the process chain(s) a DTP belongs to — this is preferred over bw_get_dtp when only the process chain is needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameYesObject name (e.g. "ADSO_NAME" or "TRFN_UUID_KEY").
object_typeYesObject type: ADSO, TRFN, DTPA, IOBJ, etc.
source_systemNoRequired for object_type "RSDS". Logical source system name (e.g. "LSYS_NAME"). The correct padded objectName is built automatically.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so in detail: it explains that transformation and DTP hits carry source, target, type, name, and upstream/downstream direction, and it discloses special listings for analysis processes, aggregation levels, objects beneath an ALVL, and planning functions. It also clarifies how to trace data flow hop by hop, which is substantive return/payload context beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and primary use case are front-loaded in the first two sentences, and the remaining detail is relevant to this complex tool. The description is long and formatted as a single dense paragraph rather than structured sections, which slightly reduces skimmability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description is complete enough: it explains what the tool returns, how to interpret direction, special object-type behaviors, and the preferred alternative for DTP-to-process-chain lookups. It covers the complex xref semantics an agent needs to invoke and interpret the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds meaning for object_type values such as ALVL and DTPA beyond what the schema alone conveys. It does not specifically clarify source_system behavior, which remains schema-only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: find where-used/dependencies for a BW object, returning all referencing objects. It distinguishes itself from siblings by naming bw_get_dtp and explaining when this tool is preferred. An agent can identify the tool's scope without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit usage contexts—finding transformations and DTPs for an aDSO, tracing DTP dependencies, and using object_type=DTPA for process chains—and names bw_get_dtp as an alternative for that last case. It also describes special handling for classic SAP BW and aggregation levels, providing clear routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 29 tool updatesv1.8.1
    • Changedbw_create_ckf1 field changed
      • changedInput schema / properties / formula / description
        Previous value: -"Formula tree. A node is one of: {\"type\":\"operator\",\"code\":\"+\",\"operands\":[...]} (codes as in the BW formula editor: + - * / , NDIV0, IF, MAX, %A, …); {\"type\":\"component\",\"component_name\":\"...\"} for a reusable CKF/RKF; {\"type\":\"key_figure\",\"name\":\"...\"} for a basic key figure InfoObject; {\"type\":\"constant\",\"value\":100}. Operand counts are checked against the operator catalog before anything is written."New value: +"Formula tree. A node is one of: {\"type\":\"operator\",\"code\":\"+\",\"operands\":[...]} (codes as in the BW formula editor: + - * / , NDIV0, IF, MAX, %A, …); {\"type\":\"component\",\"component_name\":\"...\"} for a reusable CKF/RKF; {\"type\":\"key_figure\",\"name\":\"...\"} for a basic key figure InfoObject; {\"type\":\"variable\",\"variable_name\":\"...\"} for a formula variable; {\"type\":\"constant\",\"value\":100}. Operand counts are checked against the operator catalog before anything is written."
    • Addedbw_create_conversion_type
    • Addedbw_create_hierarchy
    • Addedbw_create_planning_filter
    • Addedbw_create_planning_function
    • Addedbw_create_planning_sequence
    • Changedbw_create_transformation2 fields changed
      • addedInput schema / properties / activate
        Added value: +{
        +  "description": "Activate the transformation in the same call (default false). The answer then carries the activation messages, and success reflects the activation.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / transport
        Added value: +{
        +  "description": "Transport request (e.g. \"DEVK900123\") to record the transformation on. Needed for a transportable package; with \"activate\" it is passed to the activation as well.",
        +  "type": "string"
        +}
    • Changedbw_create_variable14 fields changed
      • addedInput schema / properties / currency
        Added value: +{
        +  "description": "Formula variables only: currency key. Required for dimension Amount, optional for Price.",
        +  "type": "string"
        +}
      • addedInput schema / properties / default_value
        Added value: +{
        +  "description": "Formula variables only: the value proposed on the variable screen. BW parses it in the logon user's decimal notation, so a fractional value needs read access to that setting (USR01 through ADT DataPreview); without it only whole numbers are accepted.",
        +  "type": "number"
        +}
      • addedInput schema / properties / dimension
        Added value: +{
        +  "description": "Formula variables only: what the number stands for. Defaults to Number.",
        +  "enum": [
        +    "Number",
        +    "Amount",
        +    "Quantity",
        +    "Price",
        +    "Quota",
        +    "Date",
        +    "Time"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / iobj_name / description
        Previous value: -"Technical name of the InfoObject (characteristic) this variable is based on (e.g. \"0CALMONTH\"). Must exist in the system."New value: +"Technical name of the InfoObject (characteristic) this variable is based on (e.g. \"CHARACTERISTIC\"). Must exist in the system. Required for a characteristic variable and for a text variable by replacement path (the characteristic whose value it shows); leave it out for a formula variable and for a text variable filled by CustomerExit or UserEntry."
      • addedInput schema / properties / offset_length
        Added value: +{
        +  "description": "Text variables by replacement path only: number of characters shown; 0 (default) shows the rest.",
        +  "type": "number"
        +}
      • addedInput schema / properties / offset_start
        Added value: +{
        +  "description": "Text variables by replacement path only: first character of the value shown, counted from 0 (default 0).",
        +  "type": "number"
        +}
      • changedInput schema / properties / ready_for_input / description
        Previous value: -"Whether the variable is shown on the variable screen for user input. Defaults to true. Set false for a variable that only the customer exit fills."New value: +"Whether the variable is shown on the variable screen for user input. Defaults to true, for a text variable only with UserEntry. Set false for a variable that only the customer exit fills. A text variable by replacement path cannot be ready for input."
      • addedInput schema / properties / replacement_interval
        Added value: +{
        +  "description": "Text variables by replacement path only: for a range, the lower bound (default), the upper bound, or the difference.",
        +  "enum": [
        +    "FromValue",
        +    "ToValue",
        +    "Difference"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / replacement_type
        Added value: +{
        +  "description": "Text variables by replacement path only: what the text shows of the characteristic value — the key (default), the external key, or its text (Name).",
        +  "enum": [
        +    "Key",
        +    "ExternalCharacteristic",
        +    "Name"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / replacement_variable
        Added value: +{
        +  "description": "Text variables by replacement path only: a characteristic value variable on the same characteristic (iobj_name) to read the value from, instead of the characteristic itself (e.g. \"VAR_NAME\").",
        +  "type": "string"
        +}
      • addedInput schema / properties / unit
        Added value: +{
        +  "description": "Formula variables only: unit of measure. Required for dimension Quantity (a query cannot be generated without it), optional for Price.",
        +  "type": "string"
        +}
      • changedInput schema / properties / variable_type / description
        Previous value: -"What the variable stands for: a characteristic value (default), a whole hierarchy, or hierarchy nodes. Hierarchy variables still reference a characteristic via iobj_name."New value: +"What the variable stands for: a characteristic value (default), a whole hierarchy, hierarchy nodes, a number (Formula) or a text (Text). Hierarchy variables still reference a characteristic via iobj_name; formula and text variables always represent a single value."
      • changedInput schema / properties / variable_type / enum
        Previous value: -[
        -  "CharacteristicValue",
        -  "Hierarchy",
        -  "HierarchyNodes"
        -]New value: +[
        +  "CharacteristicValue",
        +  "Hierarchy",
        +  "HierarchyNodes",
        +  "Formula",
        +  "Text"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "variable_name",
        -  "iobj_name",
        -  "description"
        -]New value: +[
        +  "variable_name",
        +  "description"
        +]
    • Addedbw_delete_hierarchy
    • Changedbw_get_aggregation_level1 field changed
      • addedInput schema / properties / format
        Added value: +{
        +  "description": "\"text\" (default): readable summary. \"raw\": the unmodified XML.",
        +  "enum": [
        +    "text",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • Addedbw_get_conversion_type
    • Changedbw_get_dtp1 field changed
      • addedInput schema / properties / format
        Added value: +{
        +  "description": "\"text\" (default): readable summary. \"raw\": the unmodified XML.",
        +  "enum": [
        +    "text",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • Addedbw_get_hierarchy
    • Addedbw_get_planning_filter
    • Changedbw_get_planning_function1 field changed
      • addedInput schema / properties / format
        Added value: +{
        +  "description": "\"text\" (default): readable summary. \"raw\": the unmodified XML.",
        +  "enum": [
        +    "text",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • Changedbw_get_planning_properties1 field changed
      • addedInput schema / properties / format
        Added value: +{
        +  "description": "\"text\" (default): readable summary. \"raw\": the unmodified XML.",
        +  "enum": [
        +    "text",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • Changedbw_get_planning_sequence1 field changed
      • addedInput schema / properties / format
        Added value: +{
        +  "description": "\"text\" (default): readable summary. \"raw\": the unmodified XML.",
        +  "enum": [
        +    "text",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
    • Changedbw_get_process_chain_run_detail1 field changed
      • addedInput schema / properties / include_warnings
        Added value: +{
        +  "description": "Also show long text, variables and program location for warnings, not only for errors (default false).",
        +  "type": "boolean"
        +}
    • Changedbw_get_request1 field changed
      • changedInput schema / properties / format / description
        Previous value: -"Output format. \"text\" (default): readable summary. \"raw\": full parsed JSON of all four payloads."New value: +"Output format. \"text\" (default): readable summary. \"raw\": full parsed JSON of all four payloads, plus the process chain step log where one is read."
    • Changedbw_query_data8 fields changed
      • changedInput schema / properties / state / description
        Previous value: -"Axis layout and optional per-characteristic filters. All InfoObjects from the query must be listed (even those staying on FREE axis). id values must come from the GET metadata response."New value: +"Axis layout and optional per-characteristic filters. Rows and columns show exactly what the state lists there, in the order given, and everything else drops out of the result — the key figure structure too, which leaves no data. So list the complete layout wanted on ROWS and COLUMNS, structures included. Characteristics staying on FREE need not be listed. id values must come from the GET metadata response."
      • changedInput schema / properties / state / properties / infoObjects / items / properties / filterValues / items / properties / high / description
        Previous value: -"Upper bound for interval operator BT."New value: +"Upper bound for interval operator BT, in the same format as the lower bound (internal with lowInt, external with low)."
      • changedInput schema / properties / state / properties / infoObjects / items / properties / filterValues / items / properties / lowInt / description
        Previous value: -"Filter value in internal key format (e.g. GUID like 00O2...). Use when the member has no altName and only an internal GUID is known. Sends presentationMode=\"INT\" in BICS XML."New value: +"Filter value in internal key format (e.g. GUID like 00O2...). Use when the member has no altName and only an internal GUID is known, and always for a hierarchy node: the node name as bw_get_hierarchy shows it. Sends presentationMode=\"INT\" in BICS XML."
      • changedInput schema / properties / state / properties / infoObjects / items / properties / filterValues / items / properties / nodeId / description
        Previous value: -"Node selection mode: 0=leaf member (default), 1=hierarchy node (use when filtering a collapsed hierarchy node like a group)."New value: +"Node selection mode: 0=leaf member (default), 1=hierarchy node of the display hierarchy of the query. Pass the node as lowInt; set nodeType for a text node."
      • addedInput schema / properties / state / properties / infoObjects / items / properties / filterValues / items / properties / nodeType
        Added value: +{
        +  "description": "InfoObject of the hierarchy node: \"0HIER_NODE\" for a text node, otherwise the characteristic (the default with nodeId=1). bw_get_hierarchy shows which a node is. BW turns an excluded node into an included one; that is reported under \"Not applied\".",
        +  "type": "string"
        +}
      • changedInput schema / properties / state / properties / infoObjects / items / properties / hierarchy / description
        Previous value: -"Active hierarchy for this characteristic. Required when filtering by hierarchy node (nodeId=1). Copy id, name, hryId, hryDateFrom, hryDateTo from the <hierarchy> element in the GET response."New value: +"Not applied by BW: the display hierarchy always comes from the query definition (bw_get_query shows it; change it with bw_update_query_characteristic), and a different one here is reported under \"Not applied\". Not needed to filter on a hierarchy node."
      • changedInput schema / properties / to_row / description
        Previous value: -"End row for pagination (default 1000)."New value: +"End row for pagination (default 1000). The text answer says whether more rows follow and from which from_row to continue."
      • addedInput schema / properties / with_statistics
        Added value: +{
        +  "description": "Append the timing of the call and the BW statistics of its navigation step: BW runtime by layer (OLAP, cache, authorizations, database, transfer), top events, records read and transferred, the effective \"Operations in SAP HANA\" setting, and how the HTTP time splits into BW runtime and transfer. Needs statistics switched on for the query or provider (transaction RSDDSTAT) and ADT DataPreview access.",
        +  "type": "boolean"
        +}
    • Addedbw_query_statistics
    • Addedbw_start_process_chain
    • Changedbw_update_ckf2 fields changed
      • changedInput schema / properties / formula / description
        Previous value: -"Replacement formula tree (mutually exclusive with \"operations\"). Formula tree. A node is one of: {\"type\":\"operator\",\"code\":\"+\",\"operands\":[...]} (codes as in the BW formula editor: + - * / , NDIV0, IF, MAX, %A, …); {\"type\":\"component\",\"component_name\":\"...\"} for a reusable CKF/RKF; {\"type\":\"key_figure\",\"name\":\"...\"} for a basic key figure InfoObject; {\"type\":\"constant\",\"value\":100}. Operand counts are checked against the operator catalog before anything is written."New value: +"Replacement formula tree (mutually exclusive with \"operations\"). Formula tree. A node is one of: {\"type\":\"operator\",\"code\":\"+\",\"operands\":[...]} (codes as in the BW formula editor: + - * / , NDIV0, IF, MAX, %A, …); {\"type\":\"component\",\"component_name\":\"...\"} for a reusable CKF/RKF; {\"type\":\"key_figure\",\"name\":\"...\"} for a basic key figure InfoObject; {\"type\":\"variable\",\"variable_name\":\"...\"} for a formula variable; {\"type\":\"constant\",\"value\":100}. Operand counts are checked against the operator catalog before anything is written."
      • changedInput schema / properties / operations / items / properties / operand / description
        Previous value: -"Operand to add (append_operand). Formula tree. A node is one of: {\"type\":\"operator\",\"code\":\"+\",\"operands\":[...]} (codes as in the BW formula editor: + - * / , NDIV0, IF, MAX, %A, …); {\"type\":\"component\",\"component_name\":\"...\"} for a reusable CKF/RKF; {\"type\":\"key_figure\",\"name\":\"...\"} for a basic key figure InfoObject; {\"type\":\"constant\",\"value\":100}. Operand counts are checked against the operator catalog before anything is written."New value: +"Operand to add (append_operand). Formula tree. A node is one of: {\"type\":\"operator\",\"code\":\"+\",\"operands\":[...]} (codes as in the BW formula editor: + - * / , NDIV0, IF, MAX, %A, …); {\"type\":\"component\",\"component_name\":\"...\"} for a reusable CKF/RKF; {\"type\":\"key_figure\",\"name\":\"...\"} for a basic key figure InfoObject; {\"type\":\"variable\",\"variable_name\":\"...\"} for a formula variable; {\"type\":\"constant\",\"value\":100}. Operand counts are checked against the operator catalog before anything is written."
    • Addedbw_update_hierarchy
    • Addedbw_update_planning_filter
    • Addedbw_update_planning_function
    • Addedbw_update_planning_sequence
    • Changedbw_update_query_key_figures1 field changed
      • changedInput schema / properties / operations / items / properties / formula / description
        Previous value: -"Formula tree for \"add_formula\" (recursive). Node forms: { \"type\": \"operator\", \"code\": \"+|-|*|/|MAX|...\", \"operands\": [node, ...] } (codes +,-,*,/ are infix, any other code is a prefix function); { \"type\": \"member\", \"description\": \"...\" } or { \"type\": \"member\", \"member_id\": \"...\" } (references another structure member); { \"type\": \"component\", \"component_name\": \"CKF_NAME\" } (references the structure member that wraps that CKF/RKF — the component must already be added as a structure member; a query formula cannot reference a component id directly); { \"type\": \"key_figure\", \"name\": \"IOBJ_NAME\" }; { \"type\": \"constant\", \"value\": \"5\" }. Operator codes (BW analytic engine, operand counts enforced): basic +,- (1-2), *,/ (2); ** power, DIV, MOD (2). math ABS, CEIL, FLOOR, FRAC, TRUNC, SIGN, SQRT, EXP, LOG, LOG10, MAX0, MIN0 (1); MAX, MIN (2). percentage %, %A, %_A (2); %CT, %GT, %RT, %XT, %YT (1). data COUNT, DELTA, NDIV0, NODIM, NOERR, FIX, DATE, TIME, CMR, SUMCT, SUMGT, SUMRT, SUMXT, SUMYT (1). trig SIN, COS, TAN, SINH, COSH, TANH, ASIN, ACOS, ATAN (1). boolean NOT (1); AND, OR, XOR and relational <, <=, <>, ==, >, >= (2); IF cond;true;false (3). (LEAF is not supported — BW needs a dedicated nullary token this tool does not emit.) The infix/prefix XML encoding does not matter: BW stores formulas as an execution tree and normalizes the display, so binary operators (%, **, MOD, relational, boolean) are accepted when emitted as prefix — tested and confirmed. Only +,-,*,/ are emitted as XML infix."New value: +"Formula tree for \"add_formula\" (recursive). Node forms: { \"type\": \"operator\", \"code\": \"+|-|*|/|MAX|...\", \"operands\": [node, ...] } (codes +,-,*,/ are infix, any other code is a prefix function); { \"type\": \"member\", \"description\": \"...\" } or { \"type\": \"member\", \"member_id\": \"...\" } (references another structure member); { \"type\": \"component\", \"component_name\": \"CKF_NAME\" } (references the structure member that wraps that CKF/RKF — the component must already be added as a structure member; a query formula cannot reference a component id directly); { \"type\": \"variable\", \"variable_name\": \"VAR_NAME\" } (a formula variable — see bw_create_variable; it is embedded in the query on save, a characteristic variable is refused); { \"type\": \"key_figure\", \"name\": \"IOBJ_NAME\" }; { \"type\": \"constant\", \"value\": \"5\" }. Operator codes (BW analytic engine, operand counts enforced): basic +,- (1-2), *,/ (2); ** power, DIV, MOD (2). math ABS, CEIL, FLOOR, FRAC, TRUNC, SIGN, SQRT, EXP, LOG, LOG10, MAX0, MIN0 (1); MAX, MIN (2). percentage %, %A, %_A (2); %CT, %GT, %RT, %XT, %YT (1). data COUNT, DELTA, NDIV0, NODIM, NOERR, FIX, DATE, TIME, CMR, SUMCT, SUMGT, SUMRT, SUMXT, SUMYT (1). trig SIN, COS, TAN, SINH, COSH, TANH, ASIN, ACOS, ATAN (1). boolean NOT (1); AND, OR, XOR and relational <, <=, <>, ==, >, >= (2); IF cond;true;false (3). (LEAF is not supported — BW needs a dedicated nullary token this tool does not emit.) The infix/prefix XML encoding does not matter: BW stores formulas as an execution tree and normalizes the display, so binary operators (%, **, MOD, relational, boolean) are accepted when emitted as prefix — tested and confirmed. Only +,-,*,/ are emitted as XML infix."
    • Changedbw_update_variable4 fields changed
      • addedInput schema / properties / currency
        Added value: +{
        +  "description": "Formula variables only: currency key (dimension Amount or Price); an empty string removes it where the dimension allows.",
        +  "type": "string"
        +}
      • addedInput schema / properties / default_value
        Added value: +{
        +  "description": "Formula variables only: new default value, or null to remove it. A fractional value needs the logon user's decimal notation, as in bw_create_variable.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedInput schema / properties / processing_type / description
        Previous value: -"How the variable is filled. ReplacementPath is limited to the current-member variant, the same one bw_create_variable writes."New value: +"How the variable is filled. ReplacementPath is limited to the current-member variant, the same one bw_create_variable writes. A formula variable takes UserEntry or CustomerExit only."
      • addedInput schema / properties / unit
        Added value: +{
        +  "description": "Formula variables only: unit of measure (dimension Quantity or Price); an empty string removes it where the dimension allows.",
        +  "type": "string"
        +}
  2. 10 tool updatesv1.7.1
    • Changedbw_create_ckf1 field changed
      • addedInput schema / properties / exception_aggregation
        Added value: +{
        +  "description": "Exception aggregation of the CKF itself, e.g. { \"type\": \"SUM\", \"reference_characteristic\": \"IOBJ_NAME\" }. Needed for a weighted average: a helper CKF \"unit value * quantity\" with SUM over the finest characteristic, divided by the quantity in a second CKF. Without it the product is formed from values already summed up — numerically plausible and wrong. Standard aggregation when omitted.",
        +  "properties": {
        +    "exclude": {
        +      "description": "Aggregate over all characteristics except the reference characteristics. Default false.",
        +      "type": "boolean"
        +    },
        +    "reference_characteristic": {
        +      "description": "Reference characteristic the exception aggregation runs over (e.g. \"IOBJ_NAME\").",
        +      "type": "string"
        +    },
        +    "reference_characteristics": {
        +      "description": "Several reference characteristics (up to five). Takes precedence over reference_characteristic.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "maxItems": 5,
        +      "type": "array"
        +    },
        +    "type": {
        +      "description": "Aggregation type: SUM, MAX, MIN, AVG (all values), AV0 (average of non-zero values), AV1 / AV2 (average weighted by calendar / working days), CNT (count all), CN0 (count non-zero), FIR / LAS (first / last value), NO1 / NO2 / NOP (no aggregation if more than one record / value / non-zero value), STD, VAR. Any other literal is refused, because the backend would silently store standard aggregation instead.",
        +      "enum": [
        +        "SUM",
        +        "MAX",
        +        "MIN",
        +        "AVG",
        +        "AV0",
        +        "AV1",
        +        "AV2",
        +        "CNT",
        +        "CN0",
        +        "FIR",
        +        "LAS",
        +        "NO1",
        +        "NO2",
        +        "NOP",
        +        "STD",
        +        "VAR"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
    • Changedbw_delete_request1 field changed
      • changedInput schema / properties / storage / description
        Previous value: -"Storage area code the request lives in (default \"AQ\"). Take it from the \"Storage\" line of bw_list_requests. AT/AX mark an activation request, which is rolled back rather than deleted."New value: +"Storage area code the request lives in (default \"AQ\"). Take it from the \"Storage\" line of bw_list_requests. AT/AX mark an activation request, which is rolled back rather than deleted; so does every InfoObject storage (ATAT, ATTE, ATHI), since InfoObject loads write straight into active data."
    • Changedbw_list_requests1 field changed
      • changedInput schema / properties / storage / description
        Previous value: -"Comma-separated storage area codes (default \"AQ,AX,AT\")."New value: +"Comma-separated storage area codes (default \"AQ,AX,AT\"; for target_type \"IOBJ\" \"ATAT,ATTE,ATHI\" — attributes, texts, hierarchies)."
    • Changedbw_read_metadata_tables2 fields changed
      • changedInput schema / properties / object_name / description
        Previous value: -"Technical name of the object (for TRFN the UUID-like transformation ID; for PLCR and PLDS the InfoProvider, not the aggregation level; for RSPCLOG a chain name, a run log id, or a pattern such as \"Z*\" for the last status per chain)."New value: +"Technical name of the object (for TRFN the UUID-like transformation ID; for PLCR and PLDS the InfoProvider, not the aggregation level; for RSPCLOG a chain name, a run log id, or a pattern such as \"Z*\" for the last status per chain; for ANPR a process name or a pattern such as \"Z*\"; for ISIP the InfoPackage id, or a DataSource name to list its InfoPackages)."
      • changedInput schema / properties / object_type / description
        Previous value: -"Object type to read. Supported: TRFN, DTPA, ADSO (load history only), ODSO, CUBE, MPRO, RSPC, PLSE (planning function), PLSQ (planning sequence), PLCR (planning properties and characteristic relationships of an InfoProvider), PLDS (data slices of an InfoProvider), RSPCLOG (process chain runs) and ANPR (analysis process / APD)."New value: +"Object type to read. TRFN: rules incl. start/end/expert and field routine source code. DTPA: settings; the filter definition (selections, filter routine, semantic group, package sizes) is a serialised ABAP object, reported only where the optional helper endpoint of bw75/README.md is installed and named as unreadable where it is not. ADSO: load history only — structure and settings come from bw_get_adso. ODSO, CUBE, MPRO: structure, and for MPRO the part providers with their type, so each can be passed on directly; a name read under the wrong provider type names the right one. ADSO, ODSO, CUBE and MPRO end with the load history (request, status, update mode, start, user, duration, records, source) — on a classic release the only route to load status. RSPC: steps with variant parameters in execution order; parallel branches have no order among themselves, so read the \"After\" line of each step. RSPCLOG: process chain runs — a chain name gives the run history plus the steps of the newest run, a 25-character log id the steps of that run, a pattern with * the last status of every matching chain; the message log of a failed step is not readable here. PLSE: planning function type, aggregation level, characteristic usage, conditions, parameters, FOX formula as source code. PLSQ: planning sequence steps in execution order. PLCR: planning properties and characteristic relationships. PLDS: data slices (no REST resource on any release). PLCR and PLDS are keyed by the InfoProvider, not the aggregation level. ANPR: analysis process (APD, classic only) — nodes in execution order with the object each source reads and each target writes, the edges with their field rules (copies and constants), filters, formulas and routine code; a pattern with * lists the analysis processes, which bw_search cannot find. ISIP: InfoPackage (classic only) — DataSource, file settings, selections with routines, deletion settings, the process chains using it, load history."
    • Changedbw_update_ckf1 field changed
      • addedInput schema / properties / exception_aggregation
        Added value: +{
        +  "description": "Exception aggregation of the CKF itself, e.g. { \"type\": \"SUM\", \"reference_characteristic\": \"IOBJ_NAME\" }, or false (null is accepted too) to return to standard aggregation. Independent of \"formula\" / \"operations\": the formula stays as it is. Takes back unchanged what bw_get_ckf reports in exception_aggregation.",
        +  "properties": {
        +    "exclude": {
        +      "description": "Aggregate over all characteristics except the reference characteristics. Default false.",
        +      "type": "boolean"
        +    },
        +    "reference_characteristic": {
        +      "description": "Reference characteristic the exception aggregation runs over (e.g. \"IOBJ_NAME\").",
        +      "type": "string"
        +    },
        +    "reference_characteristics": {
        +      "description": "Several reference characteristics (up to five). Takes precedence over reference_characteristic.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "maxItems": 5,
        +      "type": "array"
        +    },
        +    "type": {
        +      "description": "Aggregation type: SUM, MAX, MIN, AVG (all values), AV0 (average of non-zero values), AV1 / AV2 (average weighted by calendar / working days), CNT (count all), CN0 (count non-zero), FIR / LAS (first / last value), NO1 / NO2 / NOP (no aggregation if more than one record / value / non-zero value), STD, VAR. Any other literal is refused, because the backend would silently store standard aggregation instead.",
        +      "enum": [
        +        "SUM",
        +        "MAX",
        +        "MIN",
        +        "AVG",
        +        "AV0",
        +        "AV1",
        +        "AV2",
        +        "CNT",
        +        "CN0",
        +        "FIR",
        +        "LAS",
        +        "NO1",
        +        "NO2",
        +        "NOP",
        +        "STD",
        +        "VAR"
        +      ],
        +      "type": "string"
        +    }
        +  }
        +}
    • Changedbw_update_composite_provider8 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "add_field",
        -  "remove_field",
        -  "add_input",
        -  "remove_input",
        -  "update_mapping",
        -  "update_join",
        -  "remove_join",
        -  "update_settings"
        -]New value: +[
        +  "add_field",
        +  "remove_field",
        +  "add_input",
        +  "remove_input",
        +  "update_mapping",
        +  "update_join",
        +  "remove_join",
        +  "update_fields",
        +  "update_group",
        +  "update_settings"
        +]
      • addedInput schema / properties / dimension
        Added value: +{
        +  "description": "Field group name (e.g. \"GROUP_NAME\"). add_field / add_input / update_mapping: group for the fields the call creates, defaults to CHARACTERISTICS or KEYFIGURES. update_fields: group to move the listed fields into. A group other than the two defaults must be declared first with \"update_group\". update_group: the group to create, relabel or rename.",
        +  "type": "string"
        +}
      • changedInput schema / properties / info_object_name / description
        Previous value: -"add_field / remove_field: field name or comma-separated list (e.g. \"IOBJ_NAME\" or \"IOBJ_A,IOBJ_B\")."New value: +"add_field / remove_field / update_fields: field name or comma-separated list (e.g. \"IOBJ_NAME\" or \"IOBJ_A,IOBJ_B\")."
      • changedInput schema / properties / label / description
        Previous value: -"update_settings: new description."New value: +"update_settings: new description. update_group: label of the field group."
      • addedInput schema / properties / mappings / items / properties / dimension
        Added value: +{
        +  "description": "Field group of a newly created target element; overrides the top-level dimension.",
        +  "type": "string"
        +}
      • addedInput schema / properties / mappings / items / properties / name_usage
        Added value: +{
        +  "description": "Name usage of a newly created target element; overrides the top-level name_usage.",
        +  "enum": [
        +    "direct",
        +    "unique_name"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / name_usage
        Added value: +{
        +  "description": "How an InfoObject-bound field is exposed. \"direct\" uses the InfoObject directly by name, so a query finds the field under the InfoObject name; \"unique_name\" exposes it as \"<prefix>-<FIELD>\" instead. add_field / add_input / update_mapping: applies to the fields the call creates; defaults to \"direct\" for a field named after its InfoObject, \"unique_name\" otherwise. update_fields: switches the listed existing fields.",
        +  "enum": [
        +    "direct",
        +    "unique_name"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / new_dimension_name
        Added value: +{
        +  "description": "update_group: rename the group to this name; its fields move along.",
        +  "type": "string"
        +}
    • Addedbw_update_query_cells
    • Changedbw_update_query_key_figures11 fields changed
      • changedInput schema / properties / operations / items / properties / exception_aggregation / description
        Previous value: -"Exception aggregation for the member (add_key_figure / add_ckf / add_rkf / add_formula). Shape: { \"type\": \"AVG\", \"reference_characteristic\": \"IOBJ_NAME\" }."New value: +"Exception aggregation of a local formula member (\"add_formula\" only). Shape: { \"type\": \"AVG\", \"reference_characteristic\": \"IOBJ_NAME\" } — the same shape bw_get_query reports per member. Refused on add_key_figure / add_ckf / add_rkf: a selection member has no calculation step, and the backend drops the setting without an error. For a CKF set it on the CKF itself with bw_create_ckf / bw_update_ckf — that is also the only place another CKF referencing it picks the setting up from."
      • addedInput schema / properties / operations / items / properties / exception_aggregation / properties / exclude
        Added value: +{
        +  "description": "Aggregate over all characteristics except the reference characteristics. Default false.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / operations / items / properties / exception_aggregation / properties / reference_characteristic / description
        Previous value: -"Reference characteristic technical name (e.g. \"IOBJ_NAME\")."New value: +"Reference characteristic the exception aggregation runs over (e.g. \"IOBJ_NAME\")."
      • addedInput schema / properties / operations / items / properties / exception_aggregation / properties / reference_characteristics
        Added value: +{
        +  "description": "Several reference characteristics (up to five). Takes precedence over reference_characteristic.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 5,
        +  "type": "array"
        +}
      • changedInput schema / properties / operations / items / properties / exception_aggregation / properties / type / description
        Previous value: -"Aggregation type (e.g. \"AVG\", \"MAX\", \"LAS\")."New value: +"Aggregation type: SUM, MAX, MIN, AVG (all values), AV0 (average of non-zero values), AV1 / AV2 (average weighted by calendar / working days), CNT (count all), CN0 (count non-zero), FIR / LAS (first / last value), NO1 / NO2 / NOP (no aggregation if more than one record / value / non-zero value), STD, VAR. Any other literal is refused, because the backend would silently store standard aggregation instead."
      • addedInput schema / properties / operations / items / properties / exception_aggregation / properties / type / enum
        Added value: +[
        +  "SUM",
        +  "MAX",
        +  "MIN",
        +  "AVG",
        +  "AV0",
        +  "AV1",
        +  "AV2",
        +  "CNT",
        +  "CN0",
        +  "FIR",
        +  "LAS",
        +  "NO1",
        +  "NO2",
        +  "NOP",
        +  "STD",
        +  "VAR"
        +]
      • changedInput schema / properties / operations / items / properties / exception_aggregation / required
        Previous value: -[
        -  "type",
        -  "reference_characteristic"
        -]New value: +[
        +  "type"
        +]
      • addedInput schema / properties / operations / items / properties / properties / properties / calculation
        Added value: +{
        +  "description": "Local calculation of the member, or false to restore the default. Fields not given keep their current value. result_as (\"calculate results as\"): blank, summation, maximum, mininum (the model's spelling of minimum), detValuesCounter, detValuesCounterNonEmpty, average, averageNonEmpty, standardDeviation, variance, hide, firstValue, lastValue, summationRoundedValues. single_values_as (\"calculate single values as\"): blank, minimum, maximum, detValuesCounter, detValuesCounterNonEmpty, movingAverage, movingAverageNonEmpty (read back as movingAverage), normalizeNGLR, normalizeOverall, normalizeUnrestOverall, rankNumber, olympicRankNumber, hide. apply_to_result: use the calculated single values for the result (false is what the modeling tools write). cumulation: show values cumulated.",
        +  "properties": {
        +    "apply_to_result": {
        +      "type": "boolean"
        +    },
        +    "cumulation": {
        +      "type": "boolean"
        +    },
        +    "result_as": {
        +      "type": "string"
        +    },
        +    "single_values_as": {
        +      "type": "string"
        +    }
        +  }
        +}
      • changedInput schema / properties / operations / items / properties / properties / properties / exception_aggregation / description
        Previous value: -"Exception aggregation { \"type\": \"AVG\", \"reference_characteristic\": \"IOBJ_NAME\" }, or false to reset it."New value: +"Exception aggregation { \"type\": \"AVG\", \"reference_characteristic\": \"IOBJ_NAME\" }, or false to reset it. Same fields as the operation-level exception_aggregation; formula members only."
      • addedInput schema / properties / operations / items / properties / properties / properties / exception_aggregation / properties
        Added value: +{
        +  "exclude": {
        +    "description": "Aggregate over all characteristics except the reference characteristics. Default false.",
        +    "type": "boolean"
        +  },
        +  "reference_characteristic": {
        +    "description": "Reference characteristic the exception aggregation runs over (e.g. \"IOBJ_NAME\").",
        +    "type": "string"
        +  },
        +  "reference_characteristics": {
        +    "description": "Several reference characteristics (up to five). Takes precedence over reference_characteristic.",
        +    "items": {
        +      "type": "string"
        +    },
        +    "maxItems": 5,
        +    "type": "array"
        +  },
        +  "type": {
        +    "description": "Aggregation type: SUM, MAX, MIN, AVG (all values), AV0 (average of non-zero values), AV1 / AV2 (average weighted by calendar / working days), CNT (count all), CN0 (count non-zero), FIR / LAS (first / last value), NO1 / NO2 / NOP (no aggregation if more than one record / value / non-zero value), STD, VAR. Any other literal is refused, because the backend would silently store standard aggregation instead.",
        +    "enum": [
        +      "SUM",
        +      "MAX",
        +      "MIN",
        +      "AVG",
        +      "AV0",
        +      "AV1",
        +      "AV2",
        +      "CNT",
        +      "CN0",
        +      "FIR",
        +      "LAS",
        +      "NO1",
        +      "NO2",
        +      "NOP",
        +      "STD",
        +      "VAR"
        +    ],
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / operations / items / properties / properties / properties / scaling
        Added value: +{
        +  "description": "Scaling as a power of ten, 0-9 (3 = thousands), or false to restore the default."
        +}
    • Changedbw_update_structure4 fields changed
      • changedInput schema / properties / operations / items / properties / action / description
        Previous value: -"add_member: insert a member showing component_name or key_figure. remove_member / set_member_properties: act on an existing member, matched by member_id, description or component_name."New value: +"add_member: insert a member showing component_name or key_figure. remove_member / set_member_properties: act on an existing member, matched by member_id, description or component_name. set_member_properties changes properties, moves the member (position / parent), or both — at least one of the three is required."
      • changedInput schema / properties / operations / items / properties / parent / description
        Previous value: -"Nest the new member under this one, by id or description."New value: +"Parent member, by id or description. add_member: nest the new member under it. set_member_properties: move the member under it; an empty string moves it to the top level; omitted, the member keeps its current parent."
      • changedInput schema / properties / operations / items / properties / position / description
        Previous value: -"Position among the siblings (0-based). Appends when omitted."New value: +"Position among the siblings (0-based). add_member: appends when omitted. set_member_properties: moves the member to this position among its (new) siblings; with only parent given, it goes last."
      • changedInput schema / properties / operations / items / properties / properties / description
        Previous value: -"Display and planning properties. Only the fields given are changed."New value: +"Display and planning properties. Only the fields given are changed. Optional on set_member_properties when position or parent is given."
    • Changedbw_update_transformation2 fields changed
      • addedInput schema / properties / aggregation
        Added value: +{
        +  "description": "Aggregation type of the rule on a target key figure: \"SUM\" (summation), \"MOV\" (overwrite), \"MIN\", \"MAX\" or \"NOP\" (no aggregation). It decides what happens when several source records end up in one target record. Given alone (with transformation_name and target_infoobject only), it changes the aggregation and leaves the rule as it is; given with a rule change, both are saved together. Refused for a target field whose aggregation the target does not let a transformation override.",
        +  "enum": [
        +    "SUM",
        +    "MOV",
        +    "MIN",
        +    "MAX",
        +    "NOP"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / conversion
        Added value: +{
        +  "description": "Currency or unit conversion for a direct rule on a key figure with a currency or unit (rule_type=\"direct\"). Omitted or type \"none\": no conversion — the value is taken over as it is, which is also what direct, formula and constant rules on such a key figure get by default. Type \"currency\": convert with a currency translation type; type \"unit\": convert with a unit conversion type. The name is checked against the types defined on the system, and an unknown name is refused with the list of available ones. The source currency/unit comes from source_unit_field, else from the source key figure's own unit reference; a conversion type with a fixed source needs neither. The transformation's currency/unit handling is switched on.",
        +  "properties": {
        +    "name": {
        +      "description": "Currency translation type or unit conversion type (e.g. \"CONV_TYPE\").",
        +      "type": "string"
        +    },
        +    "source_unit_field": {
        +      "description": "Source field holding the source currency or unit (e.g. \"CURRENCY_FIELD\").",
        +      "type": "string"
        +    },
        +    "type": {
        +      "enum": [
        +        "none",
        +        "currency",
        +        "unit"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "type"
        +  ],
        +  "type": "object"
        +}
  3. 2 tool updatesv1.6.0
    • Addedbw_get_variable
    • Addedbw_update_variable
  4. 11 tool updatesv1.5.0
    • Addedbw_create_ckf
    • Changedbw_create_infoobject1 field changed
      • addedInput schema / properties / lower_case
        Added value: +{
        +  "description": "CHA only. Allow lower case letters (RSDCHABAS-LOWERCASE). Default false. Set true for characteristics whose values may contain lower case letters or characters outside the permitted character set (RSKC), such as umlauts — the flag switches off that check for this characteristic. Without it, a load carrying such values is accepted but fails later during request activation.",
        +  "type": "boolean"
        +}
    • Addedbw_create_structure
    • Addedbw_delete_request
    • Changedbw_read_metadata_tables2 fields changed
      • changedInput schema / properties / object_name / description
        Previous value: -"Technical name of the object (for TRFN the UUID-like transformation ID)."New value: +"Technical name of the object (for TRFN the UUID-like transformation ID; for PLCR and PLDS the InfoProvider, not the aggregation level; for RSPCLOG a chain name, a run log id, or a pattern such as \"Z*\" for the last status per chain)."
      • changedInput schema / properties / object_type / description
        Previous value: -"Object type to read. Supported: TRFN, DTPA, ODSO, CUBE, MPRO, RSPC."New value: +"Object type to read. Supported: TRFN, DTPA, ADSO (load history only), ODSO, CUBE, MPRO, RSPC, PLSE (planning function), PLSQ (planning sequence), PLCR (planning properties and characteristic relationships of an InfoProvider), PLDS (data slices of an InfoProvider), RSPCLOG (process chain runs) and ANPR (analysis process / APD)."
    • Addedbw_update_ckf
    • Changedbw_update_infoobject2 fields changed
      • changedInput schema / properties / attributes / description
        Previous value: -"New attribute list. Omit or pass [] to remove all attributes."New value: +"New attribute list, replacing all existing ones. Pass [] to remove all attributes; omit to leave them unchanged."
      • addedInput schema / properties / lower_case
        Added value: +{
        +  "description": "CHA only. Allow lower case letters (RSDCHABAS-LOWERCASE). Omit to keep existing. Set true for characteristics whose values may contain lower case letters or characters outside the permitted character set (RSKC), such as umlauts. Changing the flag on a characteristic already used by a provider that holds data is accepted; a load that failed activation on such a value can then simply be activated again.",
        +  "type": "boolean"
        +}
    • Changedbw_update_query_key_figures9 fields changed
      • changedInput schema / properties / operations / items / properties / action / description
        Previous value: -"add_key_figure: add a basic key figure (infoobject). add_ckf / add_rkf: add a reference to a reusable calculated / restricted key figure (component_name). add_formula: add a local formula member (description + formula). remove_member: remove a member matched by member_id, description, and/or component_name. set_member_properties: change display properties / exception aggregation of a matched member."New value: +"add_key_figure: add a basic key figure (infoobject). add_ckf / add_rkf: add a reference to a reusable calculated / restricted key figure (component_name). add_formula: add a local formula member (description + formula). remove_member: remove a member matched by member_id, description, and/or component_name. set_member_properties: change properties, exception aggregation, the inverse formula, or the place in the structure (parent / position) of a matched member. Members are matched at any depth, so a nested child can be targeted too."
      • addedInput schema / properties / operations / items / properties / inverse
        Added value: +{
        +  "description": "Inverse formula of an input-ready formula member (for \"add_formula\" and \"set_member_properties\"). Without it the backend refuses input readiness on a formula while still storing the flag, leaving a member that cannot be planned on.",
        +  "properties": {
        +    "description": {
        +      "description": "Description of the inverse formula member.",
        +      "type": "string"
        +    },
        +    "formula": {
        +      "description": "How the written-back value is derived; same node shape as \"formula\". Defaults to a reference to the formula member itself.",
        +      "type": "object"
        +    },
        +    "target": {
        +      "description": "Member an entered value is written back to, by member id or description — normally the plannable child of the formula.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "target"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / operations / items / properties / parent
        Added value: +{
        +  "description": "Nest the member under this one, by member id or description. On an add action the new member is created as a child; on \"set_member_properties\" an existing member is moved there. A member that is already nested can be moved to a different parent or reordered within its parent, but cannot be lifted back to the top level — remove and re-add it for that.",
        +  "type": "string"
        +}
      • addedInput schema / properties / operations / items / properties / position
        Added value: +{
        +  "description": "Position among the siblings (0 inserts before the first). Appends when omitted. On \"set_member_properties\" without \"parent\" the member stays on its current level.",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / operations / items / properties / properties / description
        Previous value: -"Member display properties (for \"set_member_properties\"; also allowed on \"add_formula\"). Only the provided fields are changed."New value: +"Member display and planning properties. Accepted on \"set_member_properties\" and on every add action. Only the provided fields are changed."
      • addedInput schema / properties / operations / items / properties / properties / properties / constant_selection
        Added value: +{
        +  "description": "Constant selection on the member itself.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / operations / items / properties / properties / properties / disaggregation
        Added value: +{
        +  "description": "How an entered value is distributed: \"copy\", \"no\", \"absolute\", or false to restore the default."
        +}
      • addedInput schema / properties / operations / items / properties / properties / properties / disaggregation_reference
        Added value: +{
        +  "description": "Reference member for disaggregation \"absolute\", by member id or description.",
        +  "type": "string"
        +}
      • addedInput schema / properties / operations / items / properties / properties / properties / input_mode
        Added value: +{
        +  "description": "Input readiness — required for a member to be writable in a planning query. \"inputReady\" turns input on, \"not\" turns it explicitly off, false restores the default (also not input-ready). The lock flag is derived by the backend and is deliberately not settable."
        +}
    • Addedbw_update_rkf
    • Addedbw_update_structure
    • Changedbw_update_transformation3 fields changed
      • changedInput schema / properties / additional_source_fields / description
        Previous value: -"Additional source fields for rule_type=\"formula\" when the formula references more than one source field. Combined with source_field, all listed fields are registered as inputs on the StepFormula rule. Example: [\"QUANTITY_SOLD\", \"COST_PER_UNIT\"]."New value: +"Additional source fields for rule_type=\"formula\" when the formula references more than one source field. Combined with source_field, all listed fields are registered as inputs on the StepFormula rule — alongside the operands read out of the formula itself, so this is only needed for a field the expression does not name under its source-segment name. Example: [\"QUANTITY_SOLD\", \"COST_PER_UNIT\"]."
      • changedInput schema / properties / formula / description
        Previous value: -"Formula expression for rule_type=\"formula\" (required). Source fields are referenced by their technical field name: use /BIC/FIELDNAME for custom InfoObjects (e.g. \"/BIC/FIELD_NAME + 10\"), or the direct field name for standard InfoObjects. Operators: +, -, *, /. Functions: IF, ABS, CONCATENATE, DATE_YEAR, etc. Comparison operators < > <= >= <> are supported (will be XML-escaped automatically)."New value: +"Formula expression for rule_type=\"formula\" (required). Source fields are referenced by their technical field name: use /BIC/FIELDNAME for custom InfoObjects (e.g. \"/BIC/FIELD_NAME + 10\"), or the direct field name for standard InfoObjects. Operators: +, -, *, /. Functions: IF, ABS, CONCATENATE, DATE_YEAR, etc. Comparison operators < > <= >= <> are supported (escaping is handled automatically, in either spelling). Every operand of the expression is wired up as a source of the rule; operands that name a source-segment field are recognised in the expression itself, so a multi-operand formula works without listing them."
      • changedInput schema / properties / rule_type / description
        Previous value: -"Rule type to assign. \"direct\" (default): maps source field directly (StepDirect). \"routine\": converts the rule to an AMDP field routine (StepRoutine) — the server generates the ABAP class automatically. \"formula\": converts the rule to a formula rule (StepFormula) — requires the formula parameter. \"constant\": sets a fixed constant value (StepConstant) — requires the constant_value parameter, source_field is ignored. \"lookup\": converts the rule to a StepRead (Lookup) rule — requires lookup_object and lookup_object_type. \"no_update\": reverts any existing mapping back to StepNoUpdate (no mapping, field stays empty). IMPORTANT: AMDP SQLSCRIPT methods only allow ASCII 7-bit characters — no German umlauts or special symbols in code or comments."New value: +"Rule type to assign. \"direct\" (default): maps source field directly (StepDirect). \"routine\": converts the rule to an AMDP field routine (StepRoutine) — the server generates the ABAP class automatically. \"formula\": writes the rule as a formula rule (StepFormula) — requires the formula parameter; also used to change the formula text of an existing formula rule. \"constant\": sets a fixed constant value (StepConstant) — requires the constant_value parameter, source_field is ignored. \"lookup\": converts the rule to a StepRead (Lookup) rule — requires lookup_object and lookup_object_type. \"no_update\": reverts any existing mapping back to StepNoUpdate (no mapping, field stays empty). IMPORTANT: AMDP SQLSCRIPT methods only allow ASCII 7-bit characters — no German umlauts or special symbols in code or comments."
  5. 22 tool updatesv1.4.0
    • Changedbw_activate3 fields changed
      • changedInput schema / properties / lock_handle / description
        Previous value: -"Lock handle from bw_update_adso or bw_update_transformation. Use empty string \"\" for DTP and DataSource (rsds) activation."New value: +"Lock handle from bw_update_adso or bw_update_transformation. Use empty string \"\" for DTP and DataSource (rsds) activation, and for an Aggregation Level (alvl) created with bw_create_aggregation_level."
      • changedInput schema / properties / object_type / description
        Previous value: -"Object type: adso, trfn, dtpa, iobj, trcs, rsds (DataSource), or hcpr (CompositeProvider)."New value: +"Object type: adso, trfn, dtpa, iobj, trcs, rsds (DataSource), hcpr (CompositeProvider), or alvl (Aggregation Level)."
      • changedInput schema / properties / object_type / enum
        Previous value: -[
        -  "adso",
        -  "trfn",
        -  "dtpa",
        -  "iobj",
        -  "trcs",
        -  "rsds",
        -  "hcpr"
        -]New value: +[
        +  "adso",
        +  "trfn",
        +  "dtpa",
        +  "iobj",
        +  "trcs",
        +  "rsds",
        +  "hcpr",
        +  "alvl"
        +]
    • Addedbw_add_process_chain_edge
    • Changedbw_append_process_chain_dtp5 fields changed
      • changedInput schema / properties / adsoact / description
        Previous value: -"Optional aDSO name (e.g. \"ADSO_NAME\"). When given, an ADSOACT step activating this aDSO is added right after the DTP (per-DTP activation)."New value: +"Optional aDSO name (e.g. \"ADSO_NAME\"). When given, an ADSOACT step activating this aDSO is added right after the DTP (per-DTP activation) and the two form one block that is placed together."
      • addedInput schema / properties / after
        Added value: +{
        +  "description": "Insert the block IN SERIES AFTER this node — it runs between the target and its former successors. Mutually exclusive with \"before\".",
        +  "type": "string"
        +}
      • addedInput schema / properties / before
        Added value: +{
        +  "description": "Insert the block IN SERIES BEFORE this node: the target's incoming edges are rerouted into the block, then the block links to the target. Node reference — see the note below. Mutually exclusive with \"after\".",
        +  "type": "string"
        +}
      • changedInput schema / properties / edge_mode / description
        Previous value: -"\"both\" (default): add an on-success and an on-error edge per link. \"success_only\": add only the on-success edge."New value: +"\"both\" (default): add an on-success AND an on-error edge per link, so the successor runs even after a failed load (\"always continue\"). \"success_only\": add only the on-success edge. Match whatever the chain's existing steps use — the default adds an error edge that a success-only chain does not have."
      • changedInput schema / properties / predecessor / description
        Previous value: -"Node to append behind: a DTP variant name, an aDSO whose ADSOACT node holds it, or the literal \"strand_end_auto\" (default). For \"strand_end_auto\" the terminal node closest to the trigger is chosen (ties → first)."New value: +"Used only when neither before nor after is given. Node to APPEND behind, or the literal \"strand_end_auto\" (default = terminal node closest to the trigger, ties → first). An append leaves the target's existing successors untouched, so the new block runs in parallel to them — pass before/after instead when it must run in sequence. Node reference forms (same for before / after / predecessor): a DTP or process-variant name; an aDSO held by an ADSOACT/ADSOREM node; the program of an ABAP step, or \"PROGRAM/VARIANT\"; \"TRIGGER\" or a collector type (\"AND\"/\"OR\"); or \"#<index>\" using the step numbers printed by bw_get_process_chain. An ambiguous name is rejected with the candidates listed — use \"#<index>\" then."
    • Addedbw_create_aggregation_level
    • Addedbw_create_composite_provider
    • Changedbw_create_dtp5 fields changed
      • removedInput schema / properties / filter_dta_name
        Removed value: -{
        -  "description": "Internal dtaName for the filter field.",
        -  "type": "string"
        -}
      • addedInput schema / properties / filter_excluding
        Added value: +{
        +  "description": "If true, all values of filter_value are excluded instead of included. Default false. Applies to filter_value only; filter_selections carries a sign per entry.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / filter_field / description
        Previous value: -"Field name to filter on. Requires filter_dta_name and filter_value."New value: +"Filter field to set. Use the exact field name from bw_get_dtp; a name that does not exist is rejected. Requires filter_value or filter_selections."
      • addedInput schema / properties / filter_selections
        Added value: +{
        +  "description": "Full selection vocabulary for one filter field, equivalent to an ABAP RANGE table. REPLACE semantics like filter_value, and mutually exclusive with it. Each entry is validated against the operators the field itself publishes, so an unsupported operator is an error instead of a silently ignored setting.",
        +  "items": {
        +    "properties": {
        +      "high": {
        +        "description": "Upper bound. Only for operator \"Between\", where it is mandatory.",
        +        "type": "string"
        +      },
        +      "low": {
        +        "description": "Value, lower bound (Between) or pattern (ContainsPattern). Empty string = BW initial value.",
        +        "type": "string"
        +      },
        +      "operator": {
        +        "description": "Selection operator (default \"Equal\"). RANGE equivalents: EQ = Equal, NE = NotEqual, BT = Between, CP = ContainsPattern (use \"*\" as the wildcard), GT/GE/LT/LE = the comparison operators. The comparison operators are include-only on the fields seen so far; the field metadata decides.",
        +        "enum": [
        +          "Equal",
        +          "NotEqual",
        +          "Between",
        +          "ContainsPattern",
        +          "GreaterThan",
        +          "GreaterEqual",
        +          "LessThan",
        +          "LessEqual"
        +        ],
        +        "type": "string"
        +      },
        +      "sign": {
        +        "description": "I = include (default), E = exclude. Includes and excludes may be mixed on one field.",
        +        "enum": [
        +          "I",
        +          "E"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "low"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / filter_value / description
        Previous value: -"Filter value for the Equal selection (e.g. \"PL_001\")."New value: +"One or more values for an Equal selection, comma-separated (e.g. \"VAL1,VAL2,VAL3\"). REPLACE semantics: the list is the complete selection of that field, so pass all values in one call. An empty string selects the BW initial value (not the literal \"#\"). For ranges, patterns, exclusions or values containing a comma, use filter_selections. Look values up with bw_get_filter_values first — a wrong value activates cleanly and filters everything away."
    • Changedbw_create_process_chain10 fields changed
      • changedInput schema / properties / steps / description
        Previous value: -"Ordered list of steps. The TRIGGER (Start) node is implicit at index 0 — do not include it here. Each step has a caller-chosen id used for edge wiring. Step types: DTP_LOAD (requires dtp field), ADSOACT (requires datastores array), ADSOREM (requires remDatastores array), CHAIN (requires object = sub-chain name), DECISION (requires variant = decision variant name), AND / OR / XOR (collector, no extra fields), or any other BW process type (requires object field)."New value: +"Ordered list of steps. The TRIGGER (Start) node is implicit at index 0 — do not include it here. Each step has a caller-chosen id used for edge wiring. Step types: DTP_LOAD (requires dtp field), ADSOACT (requires datastores array), ADSOREM (requires remDatastores array), ABAP (requires program field, optional program_variant), CHAIN (requires object = sub-chain name), DECISION (requires variant = decision variant name), AND / OR / XOR (collector, no extra fields), or any other BW process type (requires object field)."
      • addedInput schema / properties / steps / items / properties / local
        Added value: +{
        +  "description": "ABAP only. Call location. true (default) runs the program on this system (X_LOCAL). Only the default is verified.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / steps / items / properties / object / description
        Previous value: -"Technical name of the referenced BW object. Required for CHAIN (sub-chain name) and other generic referenced step types (any type other than DTP_LOAD, ADSOACT, ADSOREM, AND, OR, XOR)."New value: +"Technical name of the referenced BW object. Required for CHAIN (sub-chain name) and other generic referenced step types (any type other than DTP_LOAD, ADSOACT, ADSOREM, ABAP, AND, OR, XOR)."
      • addedInput schema / properties / steps / items / properties / program
        Added value: +{
        +  "description": "ABAP program / report to execute (e.g. \"REPORT_NAME\"). Required when type is \"ABAP\". The call is stored as an inline variant in the chain — no separate variant object is created.",
        +  "type": "string"
        +}
      • addedInput schema / properties / steps / items / properties / program_description
        Added value: +{
        +  "description": "ABAP only. Optional report description (cosmetic).",
        +  "type": "string"
        +}
      • addedInput schema / properties / steps / items / properties / program_package
        Added value: +{
        +  "description": "ABAP only. Optional package of the report (cosmetic value-help enrichment; the server re-derives it when omitted).",
        +  "type": "string"
        +}
      • addedInput schema / properties / steps / items / properties / program_variant
        Added value: +{
        +  "description": "ABAP only. Optional ABAP report (SE38) selection variant name (e.g. \"VARIANT_NAME\"). Note this is a report variant, not the DECISION variant field above.",
        +  "type": "string"
        +}
      • addedInput schema / properties / steps / items / properties / synchronous
        Added value: +{
        +  "description": "ABAP only. Call mode. true (default) runs the program synchronously (X_SYNCHRON). Only the default is verified.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / steps / items / properties / type / description
        Previous value: -"Process type: \"DTP_LOAD\", \"ADSOACT\", \"ADSOREM\", \"CHAIN\", \"DECISION\", \"AND\", \"OR\", \"XOR\", or any BW process type string."New value: +"Process type: \"DTP_LOAD\", \"ADSOACT\", \"ADSOREM\", \"ABAP\", \"CHAIN\", \"DECISION\", \"AND\", \"OR\", \"XOR\", or any BW process type string."
      • addedInput schema / properties / steps / items / properties / variant_description
        Added value: +{
        +  "description": "ABAP only. Optional report-variant description (cosmetic).",
        +  "type": "string"
        +}
    • Addedbw_create_variable
    • Addedbw_get_remodeling_request
    • Addedbw_list_remodeling_requests
    • Addedbw_read_metadata_tables
    • Addedbw_remove_process_chain_edge
    • Addedbw_remove_process_chain_step
    • Addedbw_run_remodeling
    • Addedbw_system_profile
    • Changedbw_unlock2 fields changed
      • changedInput schema / properties / object_type / description
        Previous value: -"Object type: adso, trfn, trcs, iobj, area (InfoArea), or dtpa (DTP)."New value: +"Object type: adso, trfn, trcs, iobj, area (InfoArea), dtpa (DTP), hcpr (CompositeProvider) or alvl (Aggregation Level)."
      • changedInput schema / properties / object_type / enum
        Previous value: -[
        -  "adso",
        -  "trfn",
        -  "trcs",
        -  "iobj",
        -  "area",
        -  "dtpa"
        -]New value: +[
        +  "adso",
        +  "trfn",
        +  "trcs",
        +  "iobj",
        +  "area",
        +  "dtpa",
        +  "hcpr",
        +  "alvl"
        +]
    • Changedbw_update_adso3 fields changed
      • addedInput schema / properties / dimension
        Added value: +{
        +  "description": "Field group (\"Feldgruppe\") to place the field in, given as the bare group name — e.g. \"__KEYFIGURES\" for the key figure group or \"ALL\" for the catch-all. Must be a group the aDSO declares; an unknown name is rejected with the declared groups listed rather than silently falling back. Read the current assignment from the DIM column of bw_get_adso. Applies to every field added by this call (action \"add_field\").",
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / items / properties / dimension
        Added value: +{
        +  "description": "Field group (\"Feldgruppe\") to place the field in, given as the bare group name — e.g. \"__KEYFIGURES\" for the key figure group or \"ALL\" for the catch-all. Must be a group the aDSO declares; an unknown name is rejected with the declared groups listed rather than silently falling back. Read the current assignment from the DIM column of bw_get_adso.",
        +  "type": "string"
        +}
      • addedInput schema / properties / properties / properties / dimension
        Added value: +{
        +  "description": "Field group (\"Feldgruppe\") to place the field in, given as the bare group name — e.g. \"__KEYFIGURES\" for the key figure group or \"ALL\" for the catch-all. Must be a group the aDSO declares; an unknown name is rejected with the declared groups listed rather than silently falling back. Read the current assignment from the DIM column of bw_get_adso. Moves the field between groups without touching any other property.",
        +  "type": "string"
        +}
    • Addedbw_update_aggregation_level
    • Addedbw_update_composite_provider
    • Changedbw_update_dtp7 fields changed
      • changedInput schema / properties / filter_clear_fields / description
        Previous value: -"Comma-separated list of field names whose filter selections should be removed entirely."New value: +"Comma-separated list of field names whose value selections are removed. The field is deselected as well unless it carries a filter routine, which then stays the active filter."
      • removedInput schema / properties / filter_dta_name
        Removed value: -{
        -  "description": "Internal dtaName for the filter field. Reserved for future use.",
        -  "type": "string"
        -}
      • changedInput schema / properties / filter_excluding / description
        Previous value: -"If true, the filter excludes the given values (excluding=\"true\"). Default false (inclusive)."New value: +"If true, all values of filter_value are excluded instead of included. Default false. Applies to filter_value only; filter_selections carries a sign per entry."
      • changedInput schema / properties / filter_field / description
        Previous value: -"Field name to filter on. Requires filter_value."New value: +"Filter field to set. Use the exact field name from bw_get_dtp; a name that does not exist is rejected. Requires filter_value or filter_selections."
      • addedInput schema / properties / filter_selections
        Added value: +{
        +  "description": "Full selection vocabulary for one filter field, equivalent to an ABAP RANGE table. REPLACE semantics like filter_value, and mutually exclusive with it. Each entry is validated against the operators the field itself publishes, so an unsupported operator is an error instead of a silently ignored setting.",
        +  "items": {
        +    "properties": {
        +      "high": {
        +        "description": "Upper bound. Only for operator \"Between\", where it is mandatory.",
        +        "type": "string"
        +      },
        +      "low": {
        +        "description": "Value, lower bound (Between) or pattern (ContainsPattern). Empty string = BW initial value.",
        +        "type": "string"
        +      },
        +      "operator": {
        +        "description": "Selection operator (default \"Equal\"). RANGE equivalents: EQ = Equal, NE = NotEqual, BT = Between, CP = ContainsPattern (use \"*\" as the wildcard), GT/GE/LT/LE = the comparison operators. The comparison operators are include-only on the fields seen so far; the field metadata decides.",
        +        "enum": [
        +          "Equal",
        +          "NotEqual",
        +          "Between",
        +          "ContainsPattern",
        +          "GreaterThan",
        +          "GreaterEqual",
        +          "LessThan",
        +          "LessEqual"
        +        ],
        +        "type": "string"
        +      },
        +      "sign": {
        +        "description": "I = include (default), E = exclude. Includes and excludes may be mixed on one field.",
        +        "enum": [
        +          "I",
        +          "E"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "low"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / filter_value / description
        Previous value: -"Filter value(s) for the selection. Comma-separated for multiple values (e.g. \"VAL1,VAL2\")."New value: +"One or more values for an Equal selection, comma-separated (e.g. \"VAL1,VAL2,VAL3\"). REPLACE semantics: the list is the complete selection of that field, so pass all values in one call. An empty string selects the BW initial value (not the literal \"#\"). For ranges, patterns, exclusions or values containing a comma, use filter_selections. Look values up with bw_get_filter_values first — a wrong value activates cleanly and filters everything away."
      • addedInput schema / properties / semantic_group_fields
        Added value: +{
        +  "description": "Comma-separated list of field names that form the semantic group (e.g. \"FIELD_NAME,/BIC/FIELD_NAME\"). Replaces the current selection completely: the listed fields become the semantic group, all others are deselected. Pass an empty string to clear the semantic group. Use bw_get_dtp to read the available group field names — they must match exactly, including any /BIC/ prefix.",
        +  "type": "string"
        +}
    • Changedbw_update_process_chain8 fields changed
      • addedInput schema / properties / steps / items / properties / local
        Added value: +{
        +  "description": "ABAP only. Call location. true (default) runs the program on this system (X_LOCAL). Only the default is verified.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / steps / items / properties / program
        Added value: +{
        +  "description": "ABAP program / report to execute (e.g. \"REPORT_NAME\"). Required when type is \"ABAP\". The call is stored as an inline variant in the chain — no separate variant object is created. Re-specify every existing ABAP step here, otherwise the replacement drops it; read the current program and report variant from bw_get_process_chain.",
        +  "type": "string"
        +}
      • addedInput schema / properties / steps / items / properties / program_description
        Added value: +{
        +  "description": "ABAP only. Optional report description (cosmetic).",
        +  "type": "string"
        +}
      • addedInput schema / properties / steps / items / properties / program_package
        Added value: +{
        +  "description": "ABAP only. Optional package of the report (cosmetic value-help enrichment; the server re-derives it when omitted).",
        +  "type": "string"
        +}
      • addedInput schema / properties / steps / items / properties / program_variant
        Added value: +{
        +  "description": "ABAP only. Optional ABAP report (SE38) selection variant name (e.g. \"VARIANT_NAME\"). Note this is a report variant, not the DECISION variant field above. Omitting it on an existing step silently drops the step's selection variant.",
        +  "type": "string"
        +}
      • addedInput schema / properties / steps / items / properties / synchronous
        Added value: +{
        +  "description": "ABAP only. Call mode. true (default) runs the program synchronously (X_SYNCHRON). Only the default is verified.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / steps / items / properties / type / description
        Previous value: -"Process type: \"DTP_LOAD\", \"ADSOACT\", \"ADSOREM\", \"CHAIN\", \"DECISION\", \"AND\", \"OR\", \"XOR\", or any BW process type string."New value: +"Process type: \"DTP_LOAD\", \"ADSOACT\", \"ADSOREM\", \"ABAP\", \"CHAIN\", \"DECISION\", \"AND\", \"OR\", \"XOR\", or any BW process type string."
      • addedInput schema / properties / steps / items / properties / variant_description
        Added value: +{
        +  "description": "ABAP only. Optional report-variant description (cosmetic).",
        +  "type": "string"
        +}
    • Addedbw_update_query_characteristic
  6. 25 tool updatesv1.2.0
    • Addedbw_add_process_chain_error_links
    • Addedbw_add_process_chain_program
    • Addedbw_append_process_chain_dtp
    • Addedbw_change_datasource_delta
    • Addedbw_create_decision_variant
    • Changedbw_create_dtp2 fields changed
      • addedInput schema / properties / target_object_subtype
        Added value: +{
        +  "description": "InfoObject sub-object to load into. Only applies when target_type is \"IOBJ\". ATTR (default) = attributes/master data (IOBJA), TEXT = texts (IOBJT), HIER = hierarchies (IOBJH). Must match the sub-object the transformation chain targets.",
        +  "enum": [
        +    "ATTR",
        +    "TEXT",
        +    "HIER"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / target_type / description
        Previous value: -"Target object type (e.g. \"ADSO\"). Use \"IOBJ\" to load into an InfoObject's attributes (encoded server-side as IOBJA). InfoObject text/hierarchy targets (IOBJT/IOBJH) are not yet supported."New value: +"Target object type (e.g. \"ADSO\"). Use \"IOBJ\" to load into an InfoObject; the loaded sub-object (attributes / texts / hierarchies) is selected with target_object_subtype."
    • Changedbw_create_process_chain9 fields changed
      • changedInput schema / properties / edges / description
        Previous value: -"Directed edges connecting steps. Use the step id or the literal \"TRIGGER\" for the start node. Status defaults: \"neutral\" when the source is \"TRIGGER\" or a collector (AND/OR/XOR); \"positive\" otherwise."New value: +"Directed edges connecting steps. Use the step id or the literal \"TRIGGER\" for the start node. Status defaults: \"neutral\" when the source is \"TRIGGER\" or a collector (AND/OR/XOR); \"positive\" otherwise. For a branch edge out of a DECISION node, set sub_status to the branch EVENTNO (\"01\"/\"02\"); such edges are forced to \"positive\"."
      • addedInput schema / properties / edges / items / properties / sub_status
        Added value: +{
        +  "description": "Branch condition (DECISION out-edges only): the branch EVENTNO, e.g. \"01\" (THEN/JA) or \"02\" (ELSE/NEIN). Defaults to \"00\" (normal edge).",
        +  "type": "string"
        +}
      • changedInput schema / properties / steps / description
        Previous value: -"Ordered list of steps. The TRIGGER (Start) node is implicit at index 0 — do not include it here. Each step has a caller-chosen id used for edge wiring. Step types: DTP_LOAD (requires dtp field), ADSOACT (requires datastores array), CHAIN (requires object = sub-chain name), AND / OR / XOR (collector, no extra fields), or any other BW process type (requires object field)."New value: +"Ordered list of steps. The TRIGGER (Start) node is implicit at index 0 — do not include it here. Each step has a caller-chosen id used for edge wiring. Step types: DTP_LOAD (requires dtp field), ADSOACT (requires datastores array), ADSOREM (requires remDatastores array), CHAIN (requires object = sub-chain name), DECISION (requires variant = decision variant name), AND / OR / XOR (collector, no extra fields), or any other BW process type (requires object field)."
      • changedInput schema / properties / steps / items / properties / description / description
        Previous value: -"Step display description (used for DTP_LOAD, CHAIN, and generic referenced steps)."New value: +"Step display description (used for DTP_LOAD, CHAIN, DECISION, and generic referenced steps)."
      • changedInput schema / properties / steps / items / properties / object / description
        Previous value: -"Technical name of the referenced BW object. Required for CHAIN (sub-chain name) and other generic referenced step types (any type other than DTP_LOAD, ADSOACT, AND, OR, XOR)."New value: +"Technical name of the referenced BW object. Required for CHAIN (sub-chain name) and other generic referenced step types (any type other than DTP_LOAD, ADSOACT, ADSOREM, AND, OR, XOR)."
      • addedInput schema / properties / steps / items / properties / remDatastores
        Added value: +{
        +  "description": "Required when type is \"ADSOREM\" (DSO request cleanup). One entry per aDSO whose requests to clean up, each with its own cleanup action and request selection.",
        +  "items": {
        +    "properties": {
        +      "action": {
        +        "description": "Cleanup action code from the cockpit \"Bereinigungsaktion\" dropdown (single character). Observed: \"A\" = activate requests, \"C\" = remove old requests from the change log. The valid action depends on the aDSO type; an unsuitable action is rejected at activation.",
        +        "type": "string"
        +      },
        +      "allRequests": {
        +        "description": "Clean up all requests (ALL_REQUESTS). When true, the count/age selectors are ignored. Default false.",
        +        "type": "boolean"
        +      },
        +      "datastore": {
        +        "description": "aDSO technical name (e.g. \"ADSO_NAME\").",
        +        "type": "string"
        +      },
        +      "numberDays": {
        +        "description": "Remove requests older than N days (NUMBER_DAYS). Default 0.",
        +        "type": "number"
        +      },
        +      "numberRequests": {
        +        "description": "Keep the last N requests (NUMBER_REQUESTS); older ones are removed. Default 0.",
        +        "type": "number"
        +      },
        +      "packageSize": {
        +        "description": "Processing package size (PACKAGE_SIZE); 0 = server default.",
        +        "type": "number"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / steps / items / properties / type / description
        Previous value: -"Process type: \"DTP_LOAD\", \"ADSOACT\", \"CHAIN\", \"AND\", \"OR\", \"XOR\", or any BW process type string."New value: +"Process type: \"DTP_LOAD\", \"ADSOACT\", \"ADSOREM\", \"CHAIN\", \"DECISION\", \"AND\", \"OR\", \"XOR\", or any BW process type string."
      • addedInput schema / properties / steps / items / properties / variant
        Added value: +{
        +  "description": "Decision variant technical name to reference. Required when type is \"DECISION\". Create it first with bw_create_decision_variant.",
        +  "type": "string"
        +}
      • addedInput schema / properties / trigger_event
        Added value: +{
        +  "description": "Optional event start-condition for the trigger (start type \"E\"). Omit for the default immediate start (start type \"I\").",
        +  "properties": {
        +    "event_id": {
        +      "description": "Event id, e.g. \"SAP_TEST\".",
        +      "type": "string"
        +    },
        +    "event_parameter": {
        +      "description": "Event parameter. Defaults to the chain name when omitted.",
        +      "type": "string"
        +    },
        +    "event_type": {
        +      "description": "Event type. Defaults to \"OtherEvent\".",
        +      "type": "string"
        +    },
        +    "only_once": {
        +      "description": "Start only once. Default false.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "event_id"
        +  ],
        +  "type": "object"
        +}
    • Addedbw_create_query
    • Addedbw_create_rkf
    • Addedbw_create_transport_task
    • Changedbw_delete1 field changed
      • changedInput schema / properties / object_type / description
        Previous value: -"BW object type: adso, iobj, trfn, dtpa, etc."New value: +"BW object type: adso, iobj, trfn, dtpa, query (alias elem), etc."
    • Changedbw_get_request1 field changed
      • changedInput schema / properties / storage / description
        Previous value: -"Storage area code (default \"AQ\")."New value: +"Storage area code (default \"AQ\"). Take it from the \"Storage\" line of the bw_list_requests output — the code differs by target type (e.g. AQ inbound, AT/AX active data aDSO, ATTE active text table InfoObject). A wrong code 404s the header/DTP/process sections, but the message log is still returned."
    • Addedbw_list_changeable_transports
    • Addedbw_set_datasource_fields
    • Addedbw_set_transformation_expert_routine
    • Addedbw_swap_process_chain_dtp
    • Changedbw_unlock2 fields changed
      • changedInput schema / properties / object_type / description
        Previous value: -"Object type: adso, trfn, trcs, iobj, or area (InfoArea)."New value: +"Object type: adso, trfn, trcs, iobj, area (InfoArea), or dtpa (DTP)."
      • changedInput schema / properties / object_type / enum
        Previous value: -[
        -  "adso",
        -  "trfn",
        -  "trcs",
        -  "iobj",
        -  "area"
        -]New value: +[
        +  "adso",
        +  "trfn",
        +  "trcs",
        +  "iobj",
        +  "area",
        +  "dtpa"
        +]
    • Changedbw_update_adso3 fields changed
      • changedInput schema / properties / fields / items / properties / precision / description
        Previous value: -"Precision (total digits) for DEC. For CURR/QUAN use scale instead."New value: +"Total digits. For DEC (required) and, optionally, for CURR/QUAN (total length, default 17 when only scale is given)."
      • changedInput schema / properties / fields / items / properties / scale / description
        Previous value: -"Decimal places for CURR, QUAN, DEC (maps to XML precision attribute for CURR/QUAN)."New value: +"Decimal places. Required for CURR/QUAN (> 0 — BW rejects scale 0) and used for DEC. Emitted as the XML scale attribute."
      • addedInput schema / properties / properties / properties / unit_currency_field
        Added value: +{
        +  "description": "Unit/currency FIELD reference for a pure QUAN/CURR field: the name of another field in the same aDSO that supplies the unit or currency (sets <unitCurrencyElement>#///FIELD</unitCurrencyElement>). Use this instead of fixed_unit/fixed_currency to fill the unit/currency dynamically from a field (the referenced field must be a UNIT or CUKY field). Any fixed_unit/fixed_currency is removed. null removes the reference. Example: on \"QUANTITY\" set unit_currency_field=\"QUANTITYUNIT\"."
        +}
    • Changedbw_update_infosource2 fields changed
      • changedInput schema / properties / fields / description
        Previous value: -"Complete list of fields. Replaces all existing fields. Omit to leave fields unchanged."New value: +"Fields to add (or whose label to update). Existing fields are preserved; omit to leave fields unchanged."
      • addedInput schema / properties / remove_fields
        Added value: +{
        +  "description": "Field names to remove from the InfoSource (e.g. FIELD_NAME). Other existing fields are preserved.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedbw_update_process_chain8 fields changed
      • changedInput schema / properties / edges / description
        Previous value: -"Complete replacement edge list. Use the step id or the literal \"TRIGGER\" for the start node. Status defaults: \"neutral\" when the source is \"TRIGGER\" or a collector (AND/OR/XOR); \"positive\" otherwise."New value: +"Complete replacement edge list. Use the step id or the literal \"TRIGGER\" for the start node. Status defaults: \"neutral\" when the source is \"TRIGGER\" or a collector (AND/OR/XOR); \"positive\" otherwise. For a branch edge out of a DECISION node, set sub_status to the branch EVENTNO (\"01\"/\"02\"); such edges are forced to \"positive\"."
      • addedInput schema / properties / edges / items / properties / sub_status
        Added value: +{
        +  "description": "Branch condition (DECISION out-edges only): the branch EVENTNO, e.g. \"01\" (THEN/JA) or \"02\" (ELSE/NEIN). Defaults to \"00\" (normal edge).",
        +  "type": "string"
        +}
      • changedInput schema / properties / steps / items / properties / description / description
        Previous value: -"Step display description (DTP_LOAD, CHAIN, and generic referenced steps)."New value: +"Step display description (DTP_LOAD, CHAIN, DECISION, and generic referenced steps)."
      • addedInput schema / properties / steps / items / properties / remDatastores
        Added value: +{
        +  "description": "Required when type is \"ADSOREM\" (DSO request cleanup). One entry per aDSO whose requests to clean up, each with its own cleanup action and request selection.",
        +  "items": {
        +    "properties": {
        +      "action": {
        +        "description": "Cleanup action code from the cockpit \"Bereinigungsaktion\" dropdown (single character). Observed: \"A\" = activate requests, \"C\" = remove old requests from the change log. The valid action depends on the aDSO type; an unsuitable action is rejected at activation.",
        +        "type": "string"
        +      },
        +      "allRequests": {
        +        "description": "Clean up all requests (ALL_REQUESTS). When true, the count/age selectors are ignored. Default false.",
        +        "type": "boolean"
        +      },
        +      "datastore": {
        +        "description": "aDSO technical name (e.g. \"ADSO_NAME\").",
        +        "type": "string"
        +      },
        +      "numberDays": {
        +        "description": "Remove requests older than N days (NUMBER_DAYS). Default 0.",
        +        "type": "number"
        +      },
        +      "numberRequests": {
        +        "description": "Keep the last N requests (NUMBER_REQUESTS); older ones are removed. Default 0.",
        +        "type": "number"
        +      },
        +      "packageSize": {
        +        "description": "Processing package size (PACKAGE_SIZE); 0 = server default.",
        +        "type": "number"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / steps / items / properties / type / description
        Previous value: -"Process type: \"DTP_LOAD\", \"ADSOACT\", \"CHAIN\", \"AND\", \"OR\", \"XOR\", or any BW process type string."New value: +"Process type: \"DTP_LOAD\", \"ADSOACT\", \"ADSOREM\", \"CHAIN\", \"DECISION\", \"AND\", \"OR\", \"XOR\", or any BW process type string."
      • addedInput schema / properties / steps / items / properties / variant
        Added value: +{
        +  "description": "Decision variant technical name to reference. Required when type is \"DECISION\".",
        +  "type": "string"
        +}
      • addedInput schema / properties / transport_request
        Added value: +{
        +  "description": "Optional transport request to record the change into. Only relevant when the chain is in a transportable package (not $TMP). If the chain is transportable and exactly one request is available, it is chosen automatically; pass this to disambiguate when several are available. Ignored for $TMP (local) chains.",
        +  "type": "string"
        +}
      • addedInput schema / properties / trigger_event
        Added value: +{
        +  "description": "Optional event start-condition for the trigger (start type \"E\"). When omitted, an existing event start-condition is preserved and a non-event trigger stays immediate.",
        +  "properties": {
        +    "event_id": {
        +      "description": "Event id, e.g. \"SAP_TEST\".",
        +      "type": "string"
        +    },
        +    "event_parameter": {
        +      "description": "Event parameter. Defaults to the chain name when omitted.",
        +      "type": "string"
        +    },
        +    "event_type": {
        +      "description": "Event type. Defaults to \"OtherEvent\".",
        +      "type": "string"
        +    },
        +    "only_once": {
        +      "description": "Start only once. Default false.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "event_id"
        +  ],
        +  "type": "object"
        +}
    • Addedbw_update_query_filter
    • Addedbw_update_query_key_figures
    • Addedbw_update_query_layout
    • Addedbw_update_query_settings
    • Changedbw_update_transformation1 field changed
      • addedInput schema / properties / unit_source_field
        Added value: +{
        +  "description": "Source unit/currency field for a COMBINED key-figure + unit/currency direct rule (rule_type=\"direct\"). When set, target_infoobject is the key figure and this is the source field that fills its unit or currency. The target unit/currency field is derived automatically from the key figure's unit reference in the aDSO (the target key figure must reference a unit/currency field). The standalone unit/currency rule is folded into the combined rule and the transformation's currency/unit handling is switched on. Example: target_infoobject=\"QUANTITY\", unit_source_field=\"QUANTITYUNIT\".",
        +  "type": "string"
        +}
  7. 2 tool updatesv0.9.2
    • Addedbw_change_package
    • Changedbw_create_transformation2 fields changed
      • addedInput schema / properties / source_object_subtype
        Added value: +{
        +  "description": "InfoObject sub-type of the source. Only applies when source_object_type is IOBJ. Valid values: TEXT (text table), ATTR (attributes / master data), HIER (hierarchy).",
        +  "type": "string"
        +}
      • addedInput schema / properties / target_object_subtype
        Added value: +{
        +  "description": "InfoObject sub-type of the target. Only applies when target_object_type is IOBJ. Valid values: TEXT (text table), ATTR (attributes / master data), HIER (hierarchy).",
        +  "type": "string"
        +}
  8. 23 tool updatesv0.9.1
    • Changedbw_activate5 fields changed
      • changedInput schema / properties / lock_handle / description
        Previous value: -"Lock handle from bw_update_adso or bw_update_transformation. Use empty string \"\" for DTP activation."New value: +"Lock handle from bw_update_adso or bw_update_transformation. Use empty string \"\" for DTP and DataSource (rsds) activation."
      • changedInput schema / properties / object_name / description
        Previous value: -"Object name (e.g. \"OBJECT_NAME\" or \"DTP_...\")."New value: +"Object name (e.g. \"OBJECT_NAME\" or \"DTP_...\"). For rsds, the DataSource name."
      • changedInput schema / properties / object_type / description
        Previous value: -"Object type: adso, trfn, dtpa, iobj, or trcs."New value: +"Object type: adso, trfn, dtpa, iobj, trcs, rsds (DataSource), or hcpr (CompositeProvider)."
      • changedInput schema / properties / object_type / enum
        Previous value: -[
        -  "adso",
        -  "trfn",
        -  "dtpa",
        -  "iobj",
        -  "trcs"
        -]New value: +[
        +  "adso",
        +  "trfn",
        +  "dtpa",
        +  "iobj",
        +  "trcs",
        +  "rsds",
        +  "hcpr"
        +]
      • addedInput schema / properties / source_system
        Added value: +{
        +  "description": "Source system name. Required when object_type is \"rsds\" (e.g. \"LSYS_NAME\").",
        +  "type": "string"
        +}
    • Addedbw_activate_process_chain
    • Addedbw_activate_request
    • Changedbw_create_adso3 fields changed
      • addedInput schema / properties / source_system
        Added value: +{
        +  "description": "Source system name of the DataSource. Required when template_type is \"RSDS\".",
        +  "type": "string"
        +}
      • changedInput schema / properties / template_name / description
        Previous value: -"Existing aDSO to copy from (action \"from_template\" only)."New value: +"Template object to propose fields from (action \"from_template\" only). An aDSO name when template_type is \"ADSO\", or a DataSource name when template_type is \"RSDS\"."
      • addedInput schema / properties / template_type
        Added value: +{
        +  "description": "Type of the template object for action \"from_template\": \"ADSO\" (default) to copy from an existing aDSO, or \"RSDS\" to propose fields from a DataSource. When \"RSDS\", source_system is required.",
        +  "enum": [
        +    "ADSO",
        +    "RSDS"
        +  ],
        +  "type": "string"
        +}
    • Addedbw_create_datasource
    • Changedbw_create_dtp3 fields changed
      • addedInput schema / properties / source_system
        Added value: +{
        +  "description": "Source system name of the DataSource. Required when source_type is \"RSDS\".",
        +  "type": "string"
        +}
      • changedInput schema / properties / source_type / description
        Previous value: -"Source object type (e.g. \"ADSO\", \"TRCS\", \"RSDS\")."New value: +"Source object type (e.g. \"ADSO\", \"TRCS\", \"RSDS\"). Use \"RSDS\" for a DataSource source — source_system is then required."
      • changedInput schema / properties / target_type / description
        Previous value: -"Target object type (e.g. \"ADSO\")."New value: +"Target object type (e.g. \"ADSO\"). Use \"IOBJ\" to load into an InfoObject's attributes (encoded server-side as IOBJA). InfoObject text/hierarchy targets (IOBJT/IOBJH) are not yet supported."
    • Addedbw_create_process_chain
    • Addedbw_get_aggregation_level
    • Addedbw_get_open_hub
    • Addedbw_get_planning_function
    • Addedbw_get_planning_properties
    • Addedbw_get_planning_sequence
    • Addedbw_get_process_chain_run_detail
    • Addedbw_get_request
    • Addedbw_list_process_chain_last_status
    • Addedbw_list_process_chain_runs
    • Addedbw_list_remote_entities
    • Addedbw_list_requests
    • Addedbw_run_dtp
    • Changedbw_search1 field changed
      • changedInput schema / properties / object_type / description
        Previous value: -"Optional TLOGO filter to restrict results to one object type. Common values: ADSO (aDSO), ELEM (BEx/BW query), TRFN (transformation), DTPA (DTP), IOBJ (InfoObject), ISFS (InfoSource), HCPR (CompositeProvider), RSDS (DataSource), AREA (InfoArea), PRCH (process chain). Leave empty to search all types."New value: +"Optional TLOGO filter to restrict results to one object type. Common values: ADSO (aDSO), ELEM (BEx/BW query), TRFN (transformation), DTPA (DTP), IOBJ (InfoObject), TRCS (InfoSource), HCPR (CompositeProvider), RSDS (DataSource), AREA (InfoArea), RSPC (process chain). Leave empty to search all types."
    • Addedbw_set_transformation_routine_fields
    • Changedbw_update_dtp1 field changed
      • addedInput schema / properties / extraction_mode
        Added value: +{
        +  "description": "Switch the DTP extraction mode. \"full\" sets extractionMode=\"F\"; \"delta\" sets extractionMode=\"D\" (only valid for delta-capable sources). Switching modes has delta-init implications — see the tool note.",
        +  "enum": [
        +    "full",
        +    "delta"
        +  ],
        +  "type": "string"
        +}
    • Addedbw_update_process_chain
  9. 50 tool updatesv0.7.0
    • First observedbw_activate
    • First observedbw_create_adso
    • First observedbw_create_dtp
    • First observedbw_create_infoarea
    • First observedbw_create_infoobject
    • First observedbw_create_infosource
    • First observedbw_create_transformation
    • First observedbw_delete
    • First observedbw_delete_transformation_routine
    • First observedbw_get_adso
    • First observedbw_get_ckf
    • First observedbw_get_composite_provider
    • First observedbw_get_dataflow
    • First observedbw_get_datasource
    • First observedbw_get_dtp
    • First observedbw_get_dtps
    • First observedbw_get_filter_values
    • First observedbw_get_infoarea
    • First observedbw_get_infoobject
    • First observedbw_get_infosource
    • First observedbw_get_process_chain
    • First observedbw_get_process_variant
    • First observedbw_get_push_schema
    • First observedbw_get_query
    • First observedbw_get_query_roles
    • First observedbw_get_rkf
    • First observedbw_get_role_queries
    • First observedbw_get_roles
    • First observedbw_get_source_system
    • First observedbw_get_structure
    • First observedbw_get_transformation
    • First observedbw_list_contents
    • First observedbw_list_datasources
    • First observedbw_list_source_systems
    • First observedbw_move_object
    • First observedbw_preview_datasource
    • First observedbw_push_data
    • First observedbw_query_data
    • First observedbw_search
    • First observedbw_set_dtp_filter_routine
    • First observedbw_set_query_roles
    • First observedbw_set_transformation_routine
    • First observedbw_set_transformation_runtime
    • First observedbw_unlock
    • First observedbw_update_adso
    • First observedbw_update_dtp
    • First observedbw_update_infoobject
    • First observedbw_update_infosource
    • First observedbw_update_transformation
    • First observedbw_xref

TDQS

A3.6/5.0

Scored across 123 tools

Disambiguation4/5

Most tools have a distinct resource+action, and descriptions explicitly distinguish overlapping cases (e.g., bw_activate vs bw_activate_request, bw_get_dtp vs bw_get_dtps, in-place process-chain edits vs full replacement). However the 123-tool surface includes several confusable pairs (query/role tools, REST vs metadata-table fallbacks) that require careful reading.

Naming Consistency4/5

All names use a consistent bw_ prefix and lower snake_case, mostly verb_noun (create/get/update/delete/list). A few deviations (bw_system_profile, bw_search, bw_xref) and verb variety (set/change/move/swap) are minor, so the pattern remains predictable.

Tool Count1/5

123 tools far exceed the practical 3-15 range and exceed the 50+ threshold for extreme mismatch. Even for a large domain like SAP BW modeling, the set is overwhelming for reliable agent selection.

Completeness4/5

Coverage is very deep: create/get/update/delete/activate for aDSOs, InfoObjects, queries, transformations, DTPs, planning objects, process chains, datasources, and more. Gaps remain for a few object types (Open Hub destination, analysis process, InfoPackage, classic providers) that are read-only, and some lifecycle operations rely on generic bw_delete/bw_activate.

Maintenance

ActivityNo data
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to read, write, activate, and transport ABAP code in SAP systems via ABAP ADT REST API, without needing SAP GUI.
    24
    361 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A Model Context Protocol (MCP) server that enables AI assistants like Claude to work directly inside SAP BW/4HANA systems — reading, creating and modifying BW modeling objects via the internal REST API used by Eclipse BWMT.
    64 npm
    MIT