Skip to main content
Glama
dnic-dev

bw-modeling-mcp

by dnic-dev

bw_update_composite_provider

Modify SAP BW/4HANA CompositeProvider (HCPR) components—fields, source providers, mappings, joins, and settings—and receive a lock handle required for activation.

Instructions

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.

Input Schema

TableJSON 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").

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changedv1.7.1
    • 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"
      +}
  2. Addedv1.4.0

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.

Deploy Server

Other Tools