Skip to main content
Glama

Change items

update_items
Destructive

Change existing items of one kind, the same changes on every id.

When to use:

  • Renaming, moving or retagging items; editing what is inside a playlist, schedule, layout or screen group; screen, web link and data feed settings; swapping a screen's device; closing an alert.

  • Turning Repeat for each row on, changing its seconds or turning it off on a creative (repeat, useEachRow).

  • Franchise menus: share a creative live with child workspaces (shareWithWorkspaces), and set one location's own prices on a creative shared to it (localText) while the owner's design keeps updating.

When NOT to use:

  • Showing content on screens: use set_screen_content.

  • New items: use create_items. Removing: use delete_items.

What to know:

  • Per id, changes run as steps in a fixed order and stop at that id's first failure; earlier steps stay and are named; other ids go on. Each id returns the item as it is now.

  • Content that airs where review is required goes back to draft. Needs the kind's edit permission (screen moves: at both locations).

  • Changes go live at once: every screen playing an edited playlist, schedule or layout shows the new version at its next sync. There is no undo; overwritten values and removed playlist items are gone, so note the old values with get_items first.

  • Repeat for each row: one design and one data source play as a slideshow, one slide per row of the sheet. Set dataSourceId and repeat {over:"rows", secondsPerRow:12}; seconds run from 3 to 3600, default 12. A workspace without this feature refuses it with 403 feature_disabled and saves nothing, so tell the person instead of retrying.

  • Row tags follow the slide: {{row.column}} in a text box's text, row.column in a field box's field, {{row.photo}} as an image box's url or the backgroundUrl. {{rows.0.column}} stays on the sheet's first row on every slide.

  • The column name in a row tag is the sheet's header in lower case with accents removed, every other character changed to _, repeats collapsed and none at the ends: Date de début is row.date_de_debut, Région (€) is row.region. A missing column or an empty cell reads blank.

  • A picture cell must be a plain https address; anything else leaves that box empty on that slide.

  • At most 200 rows and 3 MB of slides play, and each slide is a whole copy of the design, so a large design fits fewer rows. Afterwards read it with get_items: repeatStatus gives rowCount, rowsThatFit, limitedBy, columns, missingColumns and warnings. Tell the person when rowsThatFit is below rowCount.

  • It reaches screens like any design: set_screen_content or start_takeover with contentKind creative, a schedule block or a layout zone. A playlist item has its own switch: appendItems with refKind creative may answer 403 feature_disabled, and then set_screen_content still works.

  • repeat:null turns it off and the design plays once; its row tags then have no row to read, so change them to {{rows.0.column}} in the same call's boxes.

Parameters:

  • kind and ids: every id must be of that kind; get them from list_items. Every id gets identical changes; for different values per item, call once per value.

  • changes: only the fields to change. Each field's description names the kinds that take it; a field the kind does not take is refused before anything changes.

  • zones, boxes, config and tags replace the whole value: read it with get_items first. In config, a value that reads •••••••• (sent back or left out) keeps what is stored; a new sign-in value, or clearing one, is refused because a person changes those in the Brix console.

  • Example: {kind:"screens", ids:["scr_lobby7", "scr_lobby8"], changes:{nodeId:"on_store12", tags:["lobby"]}}.

Input Schema

NameRequiredDescriptionDefault
idsYesItem ids.
kindYesKind of the ids.
changesYesFields to change.

Output Schema

NameRequiredDescriptionDefault
kindNoThe kind changed.
failedNoHow many stopped at a failed step.
resultsNoOne row per id, in the order given.
succeededNoHow many items changed fully.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / changes / properties / dataSourceId / description
      Previous value: -"Data source the field and list layers read. creatives."New value: +"Data source (ds_… from list_items kind data_sources) that the field, list and row layers read. creatives."
    • addedInput schema / properties / changes / properties / repeat
      Added value: +{
      +  "description": "Repeat for each row: {over:\"rows\", secondsPerRow:12}; null turns it off. A value out of range or an unknown field is refused. creatives.",
      +  "properties": {
      +    "over": {
      +      "description": "What it repeats over: the rows of the data source.",
      +      "enum": [
      +        "rows"
      +      ],
      +      "type": "string"
      +    },
      +    "secondsPerRow": {
      +      "description": "How long each row stays up, 3 to 3600 seconds; default 12.",
      +      "maximum": 3600,
      +      "minimum": 3,
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "over"
      +  ],
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / changes / properties / useEachRow
      Added value: +{
      +  "description": "true moves every binding on the sheet's first row (rows.0.column) to the current row (row.column), including a header with spaces or accents; other rows.N stay. Same as Use each row in the console. Needs a repeat, set here or already on the design. creatives.",
      +  "type": "boolean"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / changes / properties / config / description
      Previous value: -"All settings of the app or feed. apps, data_sources."New value: +"All settings of the app or feed, as get_items returned them, with no new sign-in values. apps, data_sources."
  3. Changed2 schema fields changed
    • addedInput schema / properties / changes / properties / transition
      Added value: +{
      +  "description": "Change between items: \"fade\" crossfades, \"slide-left\"/\"slide-right\"/\"slide-up\"/\"slide-down\" push the next item in from that side, \"zoom\" fades it in from slightly larger; \"none\" or null cuts. Refused (feature_disabled) where the workspace does not have playlist transitions yet. playlists.",
      +  "enum": [
      +    "none",
      +    "fade",
      +    "slide-left",
      +    "slide-right",
      +    "slide-up",
      +    "slide-down",
      +    "zoom",
      +    null
      +  ],
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / changes / properties / transitionMs
      Added value: +{
      +  "description": "How long the transition runs, in ms (200–1500); null = the default 450. Needs a transition. playlists.",
      +  "maximum": 1500,
      +  "minimum": 200,
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
  4. Changed3 schema fields changed
    • changedInput schema / properties / changes / properties / appendItems / items / properties / refId / description
      Previous value: -"Content id in THIS workspace (list_items kind media, apps, playlists or layouts)."New value: +"Content id in THIS workspace (list_items kind media, apps, playlists, layouts or creatives)."
    • changedInput schema / properties / changes / properties / appendItems / items / properties / refKind / description
      Previous value: -"Kind of content refId names (playlist = a nested playlist)."New value: +"Kind of content refId names (playlist = a nested playlist, creative = a design)."
    • changedInput schema / properties / changes / properties / appendItems / items / properties / refKind / enum
      Previous value: -[
      -  "media",
      -  "playlist",
      -  "app",
      -  "layout",
      -  "ad-slot"
      -]New value: +[
      +  "media",
      +  "playlist",
      +  "app",
      +  "layout",
      +  "ad-slot",
      +  "creative"
      +]
  5. Changed3 schema fields changed
    • addedInput schema / properties / changes / properties / localAt
      Added value: +{
      +  "description": "With localText: the location (list_items kind locations) whose text this is; omit for the whole workspace. creatives.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / changes / properties / localText
      Added value: +{
      +  "additionalProperties": {
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "description": "This location's own text on a creative shared to it, box id → text, e.g. {\"tacos-birria-tacos-price\":\"$14.49\"}; null puts the owner's text back. Only boxes the owner left editable (get_items shows each box's shareLock); other edits are refused. Boxes not named keep their local text. creatives.",
      +  "type": "object"
      +}
    • addedInput schema / properties / changes / properties / shareWithWorkspaces
      Added value: +{
      +  "description": "Child workspace ids to share this creative with, live: they play it and see every change you make, and may only change what its boxes' shareLock allows. creatives.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 50,
      +  "type": "array"
      +}
  6. Changed1 schema field changed
    • changedInput schema / properties / changes / properties / contentKind / enum
      Previous value: -[
      -  "media",
      -  "playlist",
      -  "app",
      -  "creative"
      -]New value: +[
      +  "media",
      +  "creative",
      +  "playlist",
      +  "app"
      +]
  7. Changed2 schema fields changed
    • addedInput schema / properties / changes / properties / closed
      Added value: +{
      +  "description": "true closes the alert by hand (the alert evaluator also closes it when the screen recovers). alerts.",
      +  "enum": [
      +    true
      +  ],
      +  "type": "boolean"
      +}
    • changedInput schema / properties / kind / enum
      Previous value: -[
      -  "screens",
      -  "media",
      -  "playlists",
      -  "schedules",
      -  "layouts",
      -  "creatives",
      -  "apps",
      -  "data_sources",
      -  "screen_groups",
      -  "locations",
      -  "media_folders",
      -  "emergency_templates"
      -]New value: +[
      +  "screens",
      +  "media",
      +  "playlists",
      +  "schedules",
      +  "layouts",
      +  "creatives",
      +  "apps",
      +  "data_sources",
      +  "screen_groups",
      +  "locations",
      +  "media_folders",
      +  "emergency_templates",
      +  "alerts"
      +]
  8. Changed1 schema field changed
    • addedInput schema / properties / changes / properties / replaceDeviceCode
      Added value: +{
      +  "description": "The 6-digit pairing code a NEW device shows; it takes over this screen with its name, content and location, and the old device is released. screens.",
      +  "pattern": "^[0-9]{6}$",
      +  "type": "string"
      +}
  9. Changed4 schema fields changed
    • changedInput schema / properties / changes / properties / boxes / description
      Previous value: -"The COMPLETE layer list; it replaces the old one, so read it with get_items first. Same box shape as create_items creatives. creatives."New value: +"All layers of the creative, same box shape as create_items creatives. creatives."
    • changedInput schema / properties / changes / properties / config / description
      Previous value: -"The COMPLETE settings object; it replaces the old one, so read it with get_items first. apps, data_sources."New value: +"All settings of the app or feed. apps, data_sources."
    • changedInput schema / properties / changes / properties / tags / description
      Previous value: -"Replaces the whole tag list. screens, media."New value: +"Tags. screens, media."
    • changedInput schema / properties / changes / properties / zones / description
      Previous value: -"The COMPLETE zone list; it replaces the old one, so read it with get_items first. layouts."New value: +"All zones of the layout. layouts."
  10. Changed3 schema fields changed
    • changedInput schema / properties / changes / description
      Previous value: -"Only the fields to change."New value: +"Fields to change."
    • changedInput schema / properties / ids / description
      Previous value: -"Ids of the items to change, 1 to 50; the same changes go to each. From list_items or get_items."New value: +"Item ids."
    • changedInput schema / properties / kind / description
      Previous value: -"The kind of every id."New value: +"Kind of the ids."
  11. Added

TDQS

A4.8/5.0
Behavior5/5

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

The annotations already flag mutation, destruction, non-idempotence, and open-world behavior, but the description adds substantial operational context: per-id step ordering, partial failure semantics, review/draft behavior, permission requirements, immediate live changes, no undo, feature-disabled errors, and row-limit warnings. It also explains bulk-update behavior and the fact that each id receives identical changes, which is critical beyond the annotations.

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

Conciseness4/5

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

The structure is front-loaded and useful: purpose, when/when-not, what to know, then parameters. It is long, but the length is largely justified by the tool's complexity; some repeat/row-tag details duplicate or expand schema-level information, keeping it just short of ideal concision.

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 destructive bulk-update tool, the description covers permissions, failure behavior, live propagation, undo risk, feature restrictions, repeat-row semantics, limits, and error handling. Output schema exists, so it does not need to describe return structure in detail, and its mention of get_items/repeatStatus is useful rather than redundant.

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 parameter schema already carries much of the field-level meaning. The description still adds valuable cross-parameter semantics: all ids must be the same kind, every id gets identical changes, missing fields are unchanged, whole-value replacement for zones/boxes/config/tags requires get_items first, sentinel secret handling in config, and a concrete example 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?

The description opens with a specific verb and scope: "Change existing items of one kind, the same changes on every id." It explicitly distinguishes the tool from set_screen_content, create_items, and delete_items, so an agent can choose it without inspecting 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?

It has explicit "When to use" and "When NOT to use" sections, naming alternatives such as set_screen_content, create_items, and delete_items. The guidance is concrete enough to route an agent correctly across the most likely sibling tools.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources