Skip to main content
Glama
bw-modeling-mcp

bw-modeling-mcp

by dnic-dev

bw_update_query_key_figures

Update BW Query key figure and characteristic structures in one save: add CKFs/RKFs, formulas, selections, member properties, restrictions, or remove members.

Instructions

Manage the key figure structure and the characteristic 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. Restrict members to hierarchy nodes or hierarchy node variables, replace a member's restrictions, and move all node restrictions from one hierarchy to another. 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").

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": {
      "query_name": "<query_name>",
      "operations": "<operations>"
    },
    "name": "bw_update_query_key_figures"
  }
}

Input Schema

NameRequiredDescriptionDefault
structureNoStructure the operations address (default "key_figures"). "characteristics" is the second structure of a query, the one without key figures: add_structure creates it; add_selection, add_formula, remove_member, set_member_properties (e.g. hidden or position), set_member_restrictions and switch_hierarchy work on it. A formula there computes with members of that structure, constants and formula variables.
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"), and for the characteristic structure that add_structure creates. Ignored once the structure already exists.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv1.10.0
    • changedInput schema / properties / operations / items / properties / restrictions / items / properties / hierarchy / description
      Previous value: -"Hierarchy of the characteristic (e.g. \"HIERARCHY_NAME\"). When set, each value is a hierarchy node name, restricting to the node and everything below it; intervals and exclusions are not available for nodes. Version and key date stay blank. Also the hierarchy node_variable selects nodes of."New value: +"Hierarchy of the characteristic (e.g. \"HIERARCHY_NAME\"). When set, each value is a node of that hierarchy, restricting to the node and everything below it: a text node by its name, or a characteristic value in the tree by its external or internal key. Intervals and exclusions are not available for nodes. Version and key date stay blank. Also the hierarchy node_variable selects nodes of."
  2. Changed6 schema fields changedv1.9.1
    • 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 properties, exception aggregation, the inverse formula, or the place in the structure (parent / position) of a matched member. add_selection: add a member to the characteristic structure (description + restrictions). set_member_restrictions: replace or remove the characteristic restrictions of a matched member, keeping its key figure. switch_hierarchy: move every node restriction (fixed nodes and node variables) from from_hierarchy to to_hierarchy, in the whole structure or, with a matcher, in one member. Members are matched at any depth, so a nested child can be targeted too."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. add_selection: add a member to the characteristic structure (description + restrictions). add_structure: create the characteristic structure in structure_target, at position among the elements already there, with an optional description; follow it with add_selection / add_formula in the same call. set_member_restrictions: replace or remove the characteristic restrictions of a matched member, keeping its key figure. switch_hierarchy: move every node restriction (fixed nodes and node variables) from from_hierarchy to to_hierarchy, in the whole structure or, with a matcher, in one member. Members are matched at any depth, so a nested child can be targeted too."
    • changedInput schema / properties / operations / items / properties / action / enum
      Previous value: -[
      -  "add_key_figure",
      -  "add_ckf",
      -  "add_rkf",
      -  "add_formula",
      -  "add_selection",
      -  "remove_member",
      -  "set_member_properties",
      -  "set_member_restrictions",
      -  "switch_hierarchy"
      -]New value: +[
      +  "add_key_figure",
      +  "add_ckf",
      +  "add_rkf",
      +  "add_formula",
      +  "add_selection",
      +  "add_structure",
      +  "remove_member",
      +  "set_member_properties",
      +  "set_member_restrictions",
      +  "switch_hierarchy"
      +]
    • changedInput schema / properties / operations / items / properties / description / description
      Previous value: -"Member description. Defaults to the key figure / component name on add; required for \"add_formula\"; matches the member description on \"remove_member\" / \"set_member_properties\"."New value: +"Member description. Defaults to the key figure / component name on add; required for \"add_formula\"; matches the member description on \"remove_member\" / \"set_member_properties\". On \"add_structure\" the description of the new structure (the server numbers it when omitted)."
    • changedInput schema / properties / operations / items / properties / position / description
      Previous value: -"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."New value: +"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. On \"add_structure\" the position among the characteristics and the key figure structure already in the target container (0 places the new structure first)."
    • changedInput schema / properties / structure / description
      Previous value: -"Structure the operations address (default \"key_figures\"). \"characteristics\" is the second structure of a query, the one without key figures: add_selection, remove_member, set_member_properties (e.g. hidden), set_member_restrictions and switch_hierarchy work on it; it must already exist."New value: +"Structure the operations address (default \"key_figures\"). \"characteristics\" is the second structure of a query, the one without key figures: add_structure creates it; add_selection, add_formula, remove_member, set_member_properties (e.g. hidden or position), set_member_restrictions and switch_hierarchy work on it. A formula there computes with members of that structure, constants and formula variables."
    • changedInput schema / properties / structure_target / description
      Previous value: -"Container for the key figure structure when it is created by the first add operation (default \"columns\"). Ignored once a structure already exists."New value: +"Container for the key figure structure when it is created by the first add operation (default \"columns\"), and for the characteristic structure that add_structure creates. Ignored once the structure already exists."
  3. Changed11 schema fields changedv1.9.0
    • 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 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."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. add_selection: add a member to the characteristic structure (description + restrictions). set_member_restrictions: replace or remove the characteristic restrictions of a matched member, keeping its key figure. switch_hierarchy: move every node restriction (fixed nodes and node variables) from from_hierarchy to to_hierarchy, in the whole structure or, with a matcher, in one member. Members are matched at any depth, so a nested child can be targeted too."
    • changedInput schema / properties / operations / items / properties / action / enum
      Previous value: -[
      -  "add_key_figure",
      -  "add_ckf",
      -  "add_rkf",
      -  "add_formula",
      -  "remove_member",
      -  "set_member_properties"
      -]New value: +[
      +  "add_key_figure",
      +  "add_ckf",
      +  "add_rkf",
      +  "add_formula",
      +  "add_selection",
      +  "remove_member",
      +  "set_member_properties",
      +  "set_member_restrictions",
      +  "switch_hierarchy"
      +]
    • addedInput schema / properties / operations / items / properties / from_hierarchy
      Added value: +{
      +  "description": "Hierarchy whose node restrictions are moved (\"switch_hierarchy\", e.g. \"HIERARCHY_NAME\").",
      +  "type": "string"
      +}
    • addedInput schema / properties / operations / items / properties / node_map
      Added value: +{
      +  "additionalProperties": {
      +    "type": "string"
      +  },
      +  "description": "Node renames for \"switch_hierarchy\", old node name to new node name, for nodes named differently in the new hierarchy. Nodes not listed keep their name.",
      +  "type": "object"
      +}
    • changedInput schema / properties / operations / items / properties / restrictions / description
      Previous value: -"Optional local restrictions on the member. Each entry restricts one characteristic; the value schema matches bw_update_query_filter set_values."New value: +"Local restrictions on the member. Each entry restricts one characteristic; the value schema matches bw_update_query_filter set_values. Optional on the add actions; required on \"add_selection\" and \"set_member_restrictions\". On \"set_member_restrictions\" an entry replaces the member's restriction on that characteristic, and an entry without values and node_variable removes it. A characteristic can be restricted in only one of the two structures of a query."
    • addedInput schema / properties / operations / items / properties / restrictions / items / properties / hierarchy
      Added value: +{
      +  "description": "Hierarchy of the characteristic (e.g. \"HIERARCHY_NAME\"). When set, each value is a hierarchy node name, restricting to the node and everything below it; intervals and exclusions are not available for nodes. Version and key date stay blank. Also the hierarchy node_variable selects nodes of.",
      +  "type": "string"
      +}
    • addedInput schema / properties / operations / items / properties / restrictions / items / properties / node_variable
      Added value: +{
      +  "description": "Hierarchy node variable (type HierarchyNodes) on this characteristic (e.g. \"VAR_NAME\"); requires hierarchy. It is embedded in the query on save.",
      +  "type": "string"
      +}
    • changedInput schema / properties / operations / items / properties / restrictions / items / properties / values / description
      Previous value: -"Restriction values (single values, intervals via \"high\", exclusions via \"exclude\")."New value: +"Restriction values (single values, intervals via \"high\", exclusions via \"exclude\"), or node names when hierarchy is set."
    • changedInput schema / properties / operations / items / properties / restrictions / items / required
      Previous value: -[
      -  "infoobject",
      -  "values"
      -]New value: +[
      +  "infoobject"
      +]
    • addedInput schema / properties / operations / items / properties / to_hierarchy
      Added value: +{
      +  "description": "Hierarchy the node restrictions are moved to (\"switch_hierarchy\", e.g. \"HIERARCHY_NAME\").",
      +  "type": "string"
      +}
    • addedInput schema / properties / structure
      Added value: +{
      +  "description": "Structure the operations address (default \"key_figures\"). \"characteristics\" is the second structure of a query, the one without key figures: add_selection, remove_member, set_member_properties (e.g. hidden), set_member_restrictions and switch_hierarchy work on it; it must already exist.",
      +  "enum": [
      +    "key_figures",
      +    "characteristics"
      +  ],
      +  "type": "string"
      +}
  4. Changed1 schema field changedv1.8.1
    • 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."
  5. Changed11 schema fields changedv1.7.1
    • 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."
      +}
  6. Changed9 schema fields changedv1.5.0
    • 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."
      +}
  7. Addedv1.2.0

TDQS

A3.9/5.0
Behavior4/5

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

No annotations are present, but the description states critical atomicity behavior ('All operations are applied in a single save') and scope extension to reusable key figure structures, while the schema adds explicit backend refusal and silent-drop caveats. It still does not cover authorization, irreversibility or rollback, or prerequisites such as query state, 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?

The description is front-loaded and dense: it names the resource, enumerates the operations, then records atomic save, scope, and naming constraints. It is appropriately sized for a complex modeling tool, though the long opening sentence and one-paragraph format could be easier to scan.

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 or output schema, it covers the operation set, atomic save behavior, cross-tool structure reuse, and naming conventions, while the schema covers all parameters. It lacks prerequisites such as required query state and does not explain the response or confirmation, but the core context is present.

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

Parameters3/5

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

Schema description coverage is 100%, so the per-parameter documentation already carries the semantic load. The description adds only general reminders such as technical names and applicability to reusable key figure structures, not new syntax or constraints beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

Starts with a specific verb and resource ('Manage the key figure structure and the characteristic structure of an existing BW Query') and enumerates add, remove, set, restrict, nest, and move operations. The mention of bw_update_query_layout add_structure and the operation list make its scope distinguishable from layout, cells, exceptions, and filter siblings.

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

Usage Guidelines3/5

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

The action enum descriptions explain what each action does and include some cross-tool conditions, such as following add_structure with add_selection/add_formula and member operations applying to a structure referenced via bw_update_query_layout. However, the top-level description never states when to choose this tool over bw_update_query_layout, bw_update_query_characteristic, bw_update_query_filter, or bw_update_query_settings, nor 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.

Deploy Server

Other Tools