Skip to main content
Glama

update_cell

Destructive

Updates the properties of an existing block: only the fields provided are WRITTEN. ⚠️ That does NOT mean that x/y stay stable — the automatic tidy-up runs AFTER the call and may RECOMPUTE the position, notably when a change of width/height creates an overlap (a block enlarged "without moving it" can therefore end up elsewhere). This holds for ALL kinds, org INCLUDED: an org block only keeps its position if it carries a manual placement, which a block only acquires by being explicitly moved — otherwise the tidy-up places it again like the others. On the kinds with DERIVED placement (arch, entity, process, journey, captable) the position belongs to the engine and never to the caller, and the response SAYS so (placementRecomputed + placementNote). ⚠️ The position returned in cell: over MCP it is the one AFTER that tidy-up, hence reliable; in the chat the tidy-up only runs at the end of the burst of tool calls: the final position is then read with get_cell_details. The parent is changed with move_cell.

Input Schema

NameRequiredDescriptionDefault
xNoNew X position in pixels
yNoNew Y position in pixels
idYesID of the block to modify
descNo
iconNo
nameNo
noteNo
typeNoNature of the block. ⚠️ Switching a typed block (filiale, externe…) to 'container' (a division) makes it LOSE its capital shares (the assigned people stay): that is NOT the way to make it contain its children (the response then carries natureNote). A block contains its children when it keeps its type and carries displayMode:'container'.
labelNo
orderNo
widthNoNew width in pixels
heightNoNew height in pixels
originNo
statusNo
colorKeyNo
collapsedNoCollapses the card to its header (title + status + count chip), ~90px instead of its full height. The content is NOT deleted: it stays in the panel, the exports and the Tasks view. Useful when a card carries many content blocks and crushes the overview. `false` expands it again.
layoutHintNoPlacement hint. An OMITTED field touches nothing (keeps the DERIVED value set at creation by add_cell/apply_batch). 'column-side' forces the side column, 'bottom-center' forces the bottom band.
statusTypeNo'done'/'abandoned' (kind='org' only) fade the card and, for 'abandoned', strike through the title — to close a subject visually without deleting it.
displayModeNoSwitches between the 'container' rendering (encloses the children, in RELATIVE coordinates) and 'hat' (a hat above with downward arrows). ⚠️ This is THE field that decides whether the children are drawn INSIDE the card or NEXT TO it: on a type that does not enclose by default (everything except groupe/filiale/sous-filiale/container), leaving it empty makes the children display outside, even though the hierarchy is correct in the database.
kindMetadataNoLegal metadata (kind='org'): jurisdiction, legal form, entity class, share capital, incorporation date. MERGED with the existing values (like apply_batch and update_kind_metadata): you send ONLY the fields that change, the others STAY. A field is therefore never cleared by omitting it: naming it in `clearKindMetadata` clears it. If kindMetadata is entirely omitted, nothing is touched.
childrenLabelNo
clearKindMetadataNokindMetadata fields to CLEAR explicitly (kind='org' only). Needed because the write is a MERGE: an omitted field is preserved. Accepted fields: jurisdiction, legalType, entityClass, shareCapital, incorporationDate — naming them all clears the whole legal-metadata block. An unknown name is refused and NOTHING is written (a typo is not taken for an erasure).
expectedProjectIdNoUUID of the project targeted by THIS call. ACTUALLY targets this project instead of the session project. Refused without changing anything if access is not granted.
confirmRootPlacementNo⚠️ Required (true) ONLY if the project has locked its root placement (Settings) AND this displayMode:'hat' switch detaches EXISTING children (they become ROOT): without it, the switch is refused — nothing is written. Not applicable if the root placement is not locked, or if the block has no children.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed14 schema fields changed
    • changedInput schema / properties / clearKindMetadata / description
      Previous value: -"Champs de kindMetadata à VIDER explicitement (kind='org' uniquement). Nécessaire parce que l'écriture est une FUSION : un champ omis est préservé. Champs acceptés : jurisdiction, legalType, entityClass, shareCapital, incorporationDate — les nommer tous vide le bloc entier. Un nom inconnu est refusé et RIEN n'est écrit (une faute de frappe ne doit pas passer pour un effacement)."New value: +"kindMetadata fields to CLEAR explicitly (kind='org' only). Needed because the write is a MERGE: an omitted field is preserved. Accepted fields: jurisdiction, legalType, entityClass, shareCapital, incorporationDate — naming them all clears the whole legal-metadata block. An unknown name is refused and NOTHING is written (a typo is not taken for an erasure)."
    • changedInput schema / properties / collapsed / description
      Previous value: -"Replie la carte sur son en-tête (titre + statut + pastille de compte), ~90px au lieu de sa hauteur pleine. Le contenu n'est PAS supprimé : il reste dans le panneau, les exports et la vue Tâches. Utile quand une carte porte beaucoup de blocs et écrase la vue d'ensemble. `false` la redéplie."New value: +"Collapses the card to its header (title + status + count chip), ~90px instead of its full height. The content is NOT deleted: it stays in the panel, the exports and the Tasks view. Useful when a card carries many content blocks and crushes the overview. `false` expands it again."
    • changedInput schema / properties / confirmRootPlacement / description
      Previous value: -"⚠️ Requis (true) UNIQUEMENT si le projet a verrouillé son placement racine (Réglages) ET que ce basculement displayMode:'hat' détache des enfants EXISTANTS (ils deviennent RACINE) : sans lui, le basculement est refusé — rien n'est écrit. Sans objet si le placement racine n'est pas verrouillé, ou si la cellule n'a pas d'enfants."New value: +"⚠️ Required (true) ONLY if the project has locked its root placement (Settings) AND this displayMode:'hat' switch detaches EXISTING children (they become ROOT): without it, the switch is refused — nothing is written. Not applicable if the root placement is not locked, or if the block has no children."
    • changedInput schema / properties / displayMode / description
      Previous value: -"Bascule entre rendu 'container' (englobe les enfants, en coordonnées RELATIVES) et 'hat' (chapeau au-dessus avec flèches descendantes). ⚠️ C'est LE champ qui décide si les enfants sont dessinés DANS la carte ou À CÔTÉ : sur un type qui n'englobe pas par défaut (tout sauf groupe/filiale/sous-filiale/container), le laisser vide fait afficher les enfants à l'extérieur, alors même que la hiérarchie est correcte en base."New value: +"Switches between the 'container' rendering (encloses the children, in RELATIVE coordinates) and 'hat' (a hat above with downward arrows). ⚠️ This is THE field that decides whether the children are drawn INSIDE the card or NEXT TO it: on a type that does not enclose by default (everything except groupe/filiale/sous-filiale/container), leaving it empty makes the children display outside, even though the hierarchy is correct in the database."
    • changedInput schema / properties / expectedProjectId / description
      Previous value: -"UUID du projet visé par CET appel. Cible RÉELLEMENT ce projet au lieu du projet de session. Refusé sans rien modifier si l'accès n'est pas accordé."New value: +"UUID of the project targeted by THIS call. ACTUALLY targets this project instead of the session project. Refused without changing anything if access is not granted."
    • changedInput schema / properties / height / description
      Previous value: -"Nouvelle hauteur en pixels"New value: +"New height in pixels"
    • changedInput schema / properties / id / description
      Previous value: -"ID de la cellule à modifier"New value: +"ID of the block to modify"
    • changedInput schema / properties / kindMetadata / description
      Previous value: -"Métadonnées légales (kind='org') : juridiction, forme juridique, classe d'entité, capital social, date d'immatriculation. FUSIONNÉ avec l'existant (comme apply_batch et update_kind_metadata) : tu n'envoies QUE les champs qui changent, les autres RESTENT. Un champ ne se vide donc jamais en l'omettant : le nommer dans `clearKindMetadata` le vide. Si kindMetadata est entièrement omis, rien n'est touché."New value: +"Legal metadata (kind='org'): jurisdiction, legal form, entity class, share capital, incorporation date. MERGED with the existing values (like apply_batch and update_kind_metadata): you send ONLY the fields that change, the others STAY. A field is therefore never cleared by omitting it: naming it in `clearKindMetadata` clears it. If kindMetadata is entirely omitted, nothing is touched."
    • changedInput schema / properties / layoutHint / description
      Previous value: -"Indice de placement. Champ OMIS ne touche à rien (conserve la valeur DÉRIVÉE posée à la création par add_cell/apply_batch). 'column-side' force la colonne latérale, 'bottom-center' force la bande du bas."New value: +"Placement hint. An OMITTED field touches nothing (keeps the DERIVED value set at creation by add_cell/apply_batch). 'column-side' forces the side column, 'bottom-center' forces the bottom band."
    • changedInput schema / properties / statusType / description
      Previous value: -"'done'/'abandoned' (kind='org' uniquement) atténuent la carte et, pour 'abandoned', barrent le titre — pour clore un sujet visuellement sans le supprimer."New value: +"'done'/'abandoned' (kind='org' only) fade the card and, for 'abandoned', strike through the title — to close a subject visually without deleting it."
    • changedInput schema / properties / type / description
      Previous value: -"Nature du bloc. ⚠️ Passer un bloc typé (filiale, externe…) en 'container' (« pôle ») lui FAIT PERDRE ses parts de capital (les personnes assignées restent) : ce n'est PAS la façon de lui faire contenir ses enfants (la réponse porte alors natureNote). Un bloc contient ses enfants quand il garde son type et porte displayMode:'container'."New value: +"Nature of the block. ⚠️ Switching a typed block (filiale, externe…) to 'container' (a division) makes it LOSE its capital shares (the assigned people stay): that is NOT the way to make it contain its children (the response then carries natureNote). A block contains its children when it keeps its type and carries displayMode:'container'."
    • changedInput schema / properties / width / description
      Previous value: -"Nouvelle largeur en pixels"New value: +"New width in pixels"
    • changedInput schema / properties / x / description
      Previous value: -"Nouvelle position X en pixels"New value: +"New X position in pixels"
    • changedInput schema / properties / y / description
      Previous value: -"Nouvelle position Y en pixels"New value: +"New Y position in pixels"
  2. Changed3 schema fields changed
    • changedInput schema / properties / clearKindMetadata / description
      Previous value: -"Champs de kindMetadata à VIDER explicitement (kind='org' uniquement). Nécessaire parce que l'écriture est une FUSION : omettre un champ le préserve. Champs acceptés : jurisdiction, legalType, entityClass, shareCapital, incorporationDate — les nommer tous vide le bloc entier. Un nom inconnu est refusé et RIEN n'est écrit (une faute de frappe ne doit pas passer pour un effacement)."New value: +"Champs de kindMetadata à VIDER explicitement (kind='org' uniquement). Nécessaire parce que l'écriture est une FUSION : un champ omis est préservé. Champs acceptés : jurisdiction, legalType, entityClass, shareCapital, incorporationDate — les nommer tous vide le bloc entier. Un nom inconnu est refusé et RIEN n'est écrit (une faute de frappe ne doit pas passer pour un effacement)."
    • changedInput schema / properties / kindMetadata / description
      Previous value: -"Métadonnées légales (kind='org') : juridiction, forme juridique, classe d'entité, capital social, date d'immatriculation. FUSIONNÉ avec l'existant (comme apply_batch et update_kind_metadata) : tu n'envoies QUE les champs qui changent, les autres RESTENT. Un champ ne se vide donc jamais en l'omettant — nomme-le dans `clearKindMetadata`. Omettre kindMetadata entièrement ne touche à rien."New value: +"Métadonnées légales (kind='org') : juridiction, forme juridique, classe d'entité, capital social, date d'immatriculation. FUSIONNÉ avec l'existant (comme apply_batch et update_kind_metadata) : tu n'envoies QUE les champs qui changent, les autres RESTENT. Un champ ne se vide donc jamais en l'omettant : le nommer dans `clearKindMetadata` le vide. Si kindMetadata est entièrement omis, rien n'est touché."
    • changedInput schema / properties / type / description
      Previous value: -"Nature du bloc. ⚠️ Passer un bloc typé (filiale, externe…) en 'container' (« pôle ») lui FAIT PERDRE ses parts de capital (les personnes assignées restent) : ce n'est PAS la façon de lui faire contenir ses enfants (la réponse porte alors natureNote). Pour qu'un bloc contienne ses enfants, GARDE son type et pose displayMode:'container'."New value: +"Nature du bloc. ⚠️ Passer un bloc typé (filiale, externe…) en 'container' (« pôle ») lui FAIT PERDRE ses parts de capital (les personnes assignées restent) : ce n'est PAS la façon de lui faire contenir ses enfants (la réponse porte alors natureNote). Un bloc contient ses enfants quand il garde son type et porte displayMode:'container'."
  3. First observed

TDQS

A4.5/5.0
Behavior5/5

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

The description discloses extensive behavior beyond the annotations: post-call tidy-up may recompute x/y, org blocks need manual placement to keep position, derived-placement kinds are engine-controlled, and responses carry placementRecomputed/placementNote. It also explains MCP versus chat timing for the final position and points to get_cell_details when the tidy-up is deferred.

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-loads the core behavior and every sentence adds a relevant caveat about this destructive update. It could be easier to scan with bullets or paragraph breaks, but there is little pure 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 destructive update with many parameters and no output schema, the description covers the most dangerous cross-cutting behavior around placement recomputation and response flags. It leaves the full return shape and several parameter-specific semantics to the schema, so it is strong but not 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?

It adds crucial meaning beyond the schema for the position parameters: x/y are not guaranteed stable after the call, width/height changes can trigger overlap-driven recomputation, and derived-placement kinds ignore caller positioning. Many other parameters are left to the schema, which is reasonable but not exhaustive given 24 parameters and 58% description 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?

The first sentence states a specific verb and resource: updating properties of an existing block, with the important partial-write semantic that only provided fields are written. It also distinguishes the parent-change case by directing the agent to move_cell.

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 position-related behavior matters and names explicit alternatives for specific tasks: move_cell for parent changes and get_cell_details for final position in chat. It does not provide a general when-to-use versus add_cell/apply_batch/update_kind_metadata, so it stays below a full 5.

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.