Skip to main content
Glama
bw-modeling-mcp

bw-modeling-mcp

by dnic-dev

bw_update_composite_provider

Modify SAP BW/4HANA CompositeProvider fields, source providers, field mappings, joins, and settings; every change returns 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. Navigation attributes: "update_navigation_attributes" switches navigation attributes of one InfoObject-bound field on or off. In a union every part provider that supplies the field must deliver the attribute too: an aDSO does, an aggregation level or another CompositeProvider only when it lists the attribute as a field; the result warns about parts that cannot. Settings: "update_settings" edits label, stackable, default node and aggregation behaviour.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "composite_provider_name": "<composite_provider_name>"
    },
    "name": "bw_update_composite_provider"
  }
}

Input Schema

NameRequiredDescriptionDefault
labelNoupdate_settings: new description. update_group: label of the field group.
actionNoDefaults to "add_field".
enabledNoupdate_navigation_attributes: true (default) switches the attributes on, false switches them off.
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"). update_navigation_attributes: the one field whose navigation attributes change.
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.
navigation_attributesNoupdate_navigation_attributes: attributes to switch, by attribute name ("ATTR_NAME") or as "<FIELD_IOBJ>__<ATTR_NAME>". Only navigation attributes of the InfoObject behind the field qualify; an unknown name is refused with the offered ones listed.
composite_provider_nameYesTechnical name of the CompositeProvider (e.g. "HCPR_NAME").

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv1.9.1
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "add_field",
      -  "remove_field",
      -  "add_input",
      -  "remove_input",
      -  "update_mapping",
      -  "update_join",
      -  "remove_join",
      -  "update_fields",
      -  "update_group",
      -  "update_settings"
      -]New value: +[
      +  "add_field",
      +  "remove_field",
      +  "add_input",
      +  "remove_input",
      +  "update_mapping",
      +  "update_join",
      +  "remove_join",
      +  "update_fields",
      +  "update_group",
      +  "update_navigation_attributes",
      +  "update_settings"
      +]
    • addedInput schema / properties / enabled
      Added value: +{
      +  "description": "update_navigation_attributes: true (default) switches the attributes on, false switches them off.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / info_object_name / description
      Previous value: -"add_field / remove_field / update_fields: 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\"). update_navigation_attributes: the one field whose navigation attributes change."
    • addedInput schema / properties / navigation_attributes
      Added value: +{
      +  "description": "update_navigation_attributes: attributes to switch, by attribute name (\"ATTR_NAME\") or as \"<FIELD_IOBJ>__<ATTR_NAME>\". Only navigation attributes of the InfoObject behind the field qualify; an unknown name is refused with the offered ones listed.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  2. 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"
      +}
  3. Addedv1.4.0

TDQS

A4.4/5.0
Behavior3/5

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

With no annotations at all, the description carries the full burden and does supply real behavioral detail: every action returns a lock_handle, activation is mandatory afterwards, and specific failure modes are quoted ("join fields need at least one common target field", unknown navigation attribute names are refused with the offered list, union parts that cannot deliver an attribute produce a warning). However it never states permission/authorization requirements, whether a transport is required for non-local objects beyond the transport param, or what happens to partially applied changes when an action fails.

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

Conciseness4/5

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

The critical constraint (lock_handle to bw_activate) is front-loaded and the body is organized under labeled categories, so scanning is feasible. It is still a dense wall of prose with some restatement of schema-level details, and an agent targeting a single action must read the whole block.

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 23-parameter, 11-action mutation tool with no annotations and no output schema, the description covers every action, the shared lock/activate contract, the alias conventions, and the two most likely activation failures. Nothing essential for calling it correctly appears to be 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 coverage is 100%, so the baseline is 3, but the description adds genuinely non-redundant meaning: that omitting mappings maps every source field one-to-one, that both sides of a join key must land on the SAME target field, and that auto-mapping does not achieve this so the second side's keys must be mapped explicitly. It also explains alias generation ("returns the generated alias") and the field-group/name-usage interaction, which the schema alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 and resource ("Change a CompositeProvider (HCPR)") and then enumerates exactly what is mutable: fields, source providers, field mappings, join conditions, root settings. The per-category breakdown (Fields/Sources/Mappings/Joins/Settings) lets an agent map its intent to the right action without consulting 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?

Gives explicit when-to-use guidance per action, including defaults ("add_field" is the default), sequencing rules ("call it once per pair to build an N-way join"), and a non-obvious routing fact: an input attached at creation time gets its mappings via update_mapping. It also states the hard prerequisite that the returned lock_handle must go to bw_activate and that the object cannot be activated without it, which is the key alternative-path guidance an agent needs.

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