Skip to main content
Glama

add_cell

Adds one new org block (group, subsidiary, vertical, transversal, external, division, node, infrastructure…) at the x/y you give: absolute canvas coordinates for a root block, relative to the parent's top-left corner for a child of a parent in 'container' mode. Fits a single addition; several blocks with their content belong to apply_batch (positions computed server-side), an ERD table to add_entity, a node of an arch/process/journey/captable diagram to add_kind_node. With parentId it also creates the structural dependency (ID: struct-{parentId}-{cellId}) and grows the parent to hold the child; a parent does not enclose its children on every type (the parent's displayMode decides), and in 'hat' mode the children are root blocks without parentId, linked by structural dependencies (add_dependency); update_cell switches a block between container and hat and converts its children's coordinates. REFUSED, nothing written, when the id already exists, when the parent is unknown, or when the project locks root placement and a root block is created without confirmRootPlacement: true. x/y is only an initial position: the post-call tidy-up may recompute it, and the card height may be raised to fit desc/content. Over MCP the final values come back in the response cell; in the chat the tidy-up runs after the whole burst of tool calls, so the final position is the one get_cell_details reports. Returns cell, structuralDependency and a note. An existing block is changed with update_cell, re-parented with move_cell and duplicated with clone_cell.

Input Schema

NameRequiredDescriptionDefault
xYesX position in pixels: from the top-left corner of the canvas for a root block, from the top-left corner of the parent for a child of a parent in 'container' mode. Only an initial position: the post-call tidy-up may recompute it.
yYesY position in pixels: from the top-left corner of the canvas for a root block, from the top-left corner of the parent for a child of a parent in 'container' mode. Only an initial position: the post-call tidy-up may recompute it.
idYesUnique kebab-case ID (e.g. 'data-lab', 'world-models')
descNoShort description of the block (supports \n for line breaks)
iconNoEmoji or image URL
nameYesDisplay name of the block
noteNoInternal note of the block (context not shown on the card, visible in the panel).
typeYesBlock type that determines the visual rendering
labelNoLabel under the type (e.g. 'Subsidiary · Vertical')
orderNoPosition in the parent's list of children
widthNoWidth in pixels (default: depends on the type, ~280px)
heightNoHeight in pixels (default: depends on the type, ~100px)
originNoOrigin of the project (e.g. 'Referred by Marc')
statusNoStatus badge (e.g. 'Exploring', 'Considered', 'In discussion')
colorKeyNoBlock color, taken from the supported colors. When omitted, it is DERIVED from the type (cell-type-config.ts) — same pattern as apply_batch: an omitted field gives the color of the type.
parentIdNoID of the parent block in the hierarchy. ⚠️ Declaring a parent is NOT enough for the children to be DRAWN INSIDE it: only groupe/filiale/sous-filiale/container enclose by default. On any other type (transversale, verticale, externe, node, infrastructure), the children are displayed NEXT TO the parent card, joined by an arrow; displayMode:'container' on the parent makes them drawn INSIDE.
layoutHintNoPlacement hint, OPTIONAL: DERIVED from the type at creation (like colorKey) when omitted. 'column-side' forces the side column, 'bottom-center' forces the bottom band.
statusTypeNoStyle of the status badge. 'done'/'abandoned' (kind='org' only) visually fade the card — 'abandoned' also strikes through the title — to flag a closed subject without deleting it or making it disappear from the view.
displayModeNoRendering mode when the block has children: 'container' (visually encloses the children, in RELATIVE coordinates) | 'hat' (a hat above with structural arrows to each child, without containment — useful when the hierarchy is a 'family tree'; the size of a stake does not decide it: a stake percentage always stays on a `business` link). ⚠️ WHEN OMITTED, the behavior depends on the TYPE: groupe/filiale/sous-filiale/container enclose, all the others do NOT. On a transversale, a verticale, an externe, a node or an infrastructure that must contain its children, this field is therefore REQUIRED — otherwise the hierarchy will be right in the database but wrong on screen.
kindMetadataNoLegal metadata of the block (kind='org'): ISO 3166-1 alpha-2 jurisdiction, legal form, entity class, share capital, incorporation date. Shown on the card.
childrenLabelNoLabel above the children (e.g. 'Verticals & services')
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 block has no parentId: without it, the creation of a NEW root is refused. Not applicable if the root placement is not locked, or if a parentId is provided.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / displayMode / description
      Previous value: -"Rendering mode when the block has children: 'container' (visually encloses the children, in RELATIVE coordinates) | 'hat' (a hat above with structural arrows to each child, without containment — useful when ownership is partial or when the hierarchy is a 'family tree'). ⚠️ WHEN OMITTED, the behavior depends on the TYPE: groupe/filiale/sous-filiale/container enclose, all the others do NOT. On a transversale, a verticale, an externe, a node or an infrastructure that must contain its children, this field is therefore REQUIRED — otherwise the hierarchy will be right in the database but wrong on screen."New value: +"Rendering mode when the block has children: 'container' (visually encloses the children, in RELATIVE coordinates) | 'hat' (a hat above with structural arrows to each child, without containment — useful when the hierarchy is a 'family tree'; the size of a stake does not decide it: a stake percentage always stays on a `business` link). ⚠️ WHEN OMITTED, the behavior depends on the TYPE: groupe/filiale/sous-filiale/container enclose, all the others do NOT. On a transversale, a verticale, an externe, a node or an infrastructure that must contain its children, this field is therefore REQUIRED — otherwise the hierarchy will be right in the database but wrong on screen."
  2. Changed2 schema fields changed
    • changedInput schema / properties / x / description
      Previous value: -"X position in pixels from the top-left corner of the canvas"New value: +"X position in pixels: from the top-left corner of the canvas for a root block, from the top-left corner of the parent for a child of a parent in 'container' mode. Only an initial position: the post-call tidy-up may recompute it."
    • changedInput schema / properties / y / description
      Previous value: -"Y position in pixels from the top-left corner of the canvas"New value: +"Y position in pixels: from the top-left corner of the canvas for a root block, from the top-left corner of the parent for a child of a parent in 'container' mode. Only an initial position: the post-call tidy-up may recompute it."
  3. Changed23 schema fields changed
    • changedInput schema / properties / childrenLabel / description
      Previous value: -"Étiquette au-dessus des enfants (ex: 'Verticales & services')"New value: +"Label above the children (e.g. 'Verticals & services')"
    • changedInput schema / properties / colorKey / description
      Previous value: -"Couleur du bloc. DOIT être une des couleurs supportées. Omis, elle est DÉRIVÉE du type (cell-type-config.ts) — même patron que apply_batch (D44) : un champ omis donne la couleur du type."New value: +"Block color, taken from the supported colors. When omitted, it is DERIVED from the type (cell-type-config.ts) — same pattern as apply_batch: an omitted field gives the color of the type."
    • changedInput schema / properties / confirmRootPlacement / description
      Previous value: -"⚠️ Requis (true) UNIQUEMENT si le projet a verrouillé son placement racine (Réglages) ET que ce bloc n'a pas de parentId : sans lui, la création d'une NOUVELLE racine est refusée. Sans objet si le placement racine n'est pas verrouillé, ou si un parentId est fourni."New value: +"⚠️ Required (true) ONLY if the project has locked its root placement (Settings) AND this block has no parentId: without it, the creation of a NEW root is refused. Not applicable if the root placement is not locked, or if a parentId is provided."
    • changedInput schema / properties / desc / description
      Previous value: -"Description courte du bloc (supporte \\n pour les retours à la ligne)"New value: +"Short description of the block (supports \\n for line breaks)"
    • changedInput schema / properties / displayMode / description
      Previous value: -"Mode de rendu quand le bloc a des enfants: 'container' (englobe les enfants visuellement, en coordonnées RELATIVES) | 'hat' (chapeau au-dessus avec flèches structurelles vers chaque enfant, sans containment — utile quand la possession est partielle ou que la hiérarchie est de type 'arbre généalogique'). ⚠️ OMIS, le comportement dépend du TYPE : groupe/filiale/sous-filiale/container englobent, tous les autres NON. Sur une transversale, une verticale, un externe, un node ou une infrastructure qui doit contenir ses enfants, ce champ est donc OBLIGATOIRE — sinon la hiérarchie sera juste en base mais fausse à l'écran."New value: +"Rendering mode when the block has children: 'container' (visually encloses the children, in RELATIVE coordinates) | 'hat' (a hat above with structural arrows to each child, without containment — useful when ownership is partial or when the hierarchy is a 'family tree'). ⚠️ WHEN OMITTED, the behavior depends on the TYPE: groupe/filiale/sous-filiale/container enclose, all the others do NOT. On a transversale, a verticale, an externe, a node or an infrastructure that must contain its children, this field is therefore REQUIRED — otherwise the hierarchy will be right in the database but wrong on screen."
    • 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: -"Hauteur en pixels (défaut: selon le type ~100px)"New value: +"Height in pixels (default: depends on the type, ~100px)"
    • changedInput schema / properties / icon / description
      Previous value: -"Emoji ou URL d'image"New value: +"Emoji or image URL"
    • changedInput schema / properties / id / description
      Previous value: -"ID unique kebab-case (ex: 'data-lab', 'world-models')"New value: +"Unique kebab-case ID (e.g. 'data-lab', 'world-models')"
    • changedInput schema / properties / kindMetadata / description
      Previous value: -"Métadonnées légales du bloc (kind='org') : juridiction ISO 3166-1 alpha-2, forme juridique, classe d'entité, capital social, date d'immatriculation. Affichées sur la carte."New value: +"Legal metadata of the block (kind='org'): ISO 3166-1 alpha-2 jurisdiction, legal form, entity class, share capital, incorporation date. Shown on the card."
    • changedInput schema / properties / label / description
      Previous value: -"Étiquette sous le type (ex: 'Sous-filiale · Verticale')"New value: +"Label under the type (e.g. 'Subsidiary · Vertical')"
    • changedInput schema / properties / layoutHint / description
      Previous value: -"Indice de placement, OPTIONNEL : DÉRIVÉ du type à la création (comme colorKey, D44) quand il est omis. 'column-side' force la colonne latérale, 'bottom-center' force la bande du bas."New value: +"Placement hint, OPTIONAL: DERIVED from the type at creation (like colorKey) when omitted. 'column-side' forces the side column, 'bottom-center' forces the bottom band."
    • changedInput schema / properties / name / description
      Previous value: -"Nom affiché du bloc"New value: +"Display name of the block"
    • changedInput schema / properties / note / description
      Previous value: -"Note interne du bloc (contexte non affiché sur la carte, visible dans le panneau)."New value: +"Internal note of the block (context not shown on the card, visible in the panel)."
    • changedInput schema / properties / order / description
      Previous value: -"Position dans la liste des enfants du parent"New value: +"Position in the parent's list of children"
    • changedInput schema / properties / origin / description
      Previous value: -"Origine du projet (ex: 'Relation Marc')"New value: +"Origin of the project (e.g. 'Referred by Marc')"
    • changedInput schema / properties / parentId / description
      Previous value: -"ID du bloc parent dans la hiérarchie. ⚠️ Déclarer un parent ne suffit PAS à ce que les enfants soient DESSINÉS DEDANS : seuls groupe/filiale/sous-filiale/container englobent par défaut. Sur tout autre type (transversale, verticale, externe, node, infrastructure), les enfants s'affichent À CÔTÉ de la carte parente, reliés par une flèche ; displayMode:'container' sur le parent les fait dessiner DEDANS."New value: +"ID of the parent block in the hierarchy. ⚠️ Declaring a parent is NOT enough for the children to be DRAWN INSIDE it: only groupe/filiale/sous-filiale/container enclose by default. On any other type (transversale, verticale, externe, node, infrastructure), the children are displayed NEXT TO the parent card, joined by an arrow; displayMode:'container' on the parent makes them drawn INSIDE."
    • changedInput schema / properties / status / description
      Previous value: -"Badge de statut (ex: 'Exploration', 'Envisagé', 'En discussion')"New value: +"Status badge (e.g. 'Exploring', 'Considered', 'In discussion')"
    • changedInput schema / properties / statusType / description
      Previous value: -"Style du badge de statut. 'done'/'abandoned' (kind='org' uniquement) atténuent visuellement la carte — 'abandoned' barre aussi le titre — pour signaler un sujet clos sans le supprimer ni le faire disparaître de la vue."New value: +"Style of the status badge. 'done'/'abandoned' (kind='org' only) visually fade the card — 'abandoned' also strikes through the title — to flag a closed subject without deleting it or making it disappear from the view."
    • changedInput schema / properties / type / description
      Previous value: -"Type de cellule déterminant le rendu visuel"New value: +"Block type that determines the visual rendering"
    • changedInput schema / properties / width / description
      Previous value: -"Largeur en pixels (défaut: selon le type ~280px)"New value: +"Width in pixels (default: depends on the type, ~280px)"
    • changedInput schema / properties / x / description
      Previous value: -"Position X en pixels depuis le coin supérieur gauche du canvas"New value: +"X position in pixels from the top-left corner of the canvas"
    • changedInput schema / properties / y / description
      Previous value: -"Position Y en pixels depuis le coin supérieur gauche du canvas"New value: +"Y position in pixels from the top-left corner of the canvas"
  4. Changed3 schema fields changed
    • changedInput schema / properties / colorKey / description
      Previous value: -"Couleur du bloc. DOIT être une des couleurs supportées. Omis, elle est DÉRIVÉE du type (cell-type-config.ts) — même patron que apply_batch (D44) : ne devine pas une couleur, laisse-la absente."New value: +"Couleur du bloc. DOIT être une des couleurs supportées. Omis, elle est DÉRIVÉE du type (cell-type-config.ts) — même patron que apply_batch (D44) : un champ omis donne la couleur du type."
    • changedInput schema / properties / layoutHint / description
      Previous value: -"Indice de placement, OPTIONNEL — OMETS-LE : DÉRIVÉ du type à la création (comme colorKey, D44). 'column-side' force la colonne latérale, 'bottom-center' force la bande du bas."New value: +"Indice de placement, OPTIONNEL : DÉRIVÉ du type à la création (comme colorKey, D44) quand il est omis. 'column-side' force la colonne latérale, 'bottom-center' force la bande du bas."
    • changedInput schema / properties / parentId / description
      Previous value: -"ID du bloc parent dans la hiérarchie. ⚠️ Déclarer un parent ne suffit PAS à ce que les enfants soient DESSINÉS DEDANS : seuls groupe/filiale/sous-filiale/container englobent par défaut. Sur tout autre type (transversale, verticale, externe, node, infrastructure), les enfants s'affichent À CÔTÉ de la carte parente, reliés par une flèche — pose displayMode:'container' sur le parent si tu veux qu'il les contienne."New value: +"ID du bloc parent dans la hiérarchie. ⚠️ Déclarer un parent ne suffit PAS à ce que les enfants soient DESSINÉS DEDANS : seuls groupe/filiale/sous-filiale/container englobent par défaut. Sur tout autre type (transversale, verticale, externe, node, infrastructure), les enfants s'affichent À CÔTÉ de la carte parente, reliés par une flèche ; displayMode:'container' sur le parent les fait dessiner DEDANS."
  5. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare non-read-only and non-destructive; the description adds substantial behavior: creation of the struct-{parentId}-{cellId} dependency, parent growth, the container-vs-hat rendering rule, refusal semantics with 'nothing written', and the post-call tidy-up that may recompute x/y or raise card height. It even explains the divergence between MCP responses and chat bursts for final coordinates.

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?

Front-loaded with the core action and coordinate rule, then routing, then edge cases — a sensible order. It is a single dense paragraph of ~200 words with some redundancy against the schema (displayMode and confirmRootPlacement caveats are repeated), which keeps it just short of a 5 for a tool this complex.

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 mutation tool with no output schema, the description covers what matters: refusal conditions, side effects on the parent, the returned fields (cell, structuralDependency, note), and the caveat that the returned position may change after tidy-up. An agent has enough to call it correctly and interpret the result.

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 cross-parameter meaning the schema does not: x/y are relative only for a child of a 'container' parent, and in 'hat' mode children should be root blocks linked by structural dependencies instead. It does not add much on the remaining 20+ fields (colorKey, layoutHint, statusType, kindMetadata), which is acceptable given their thorough schema docs.

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 ('Adds one new org block') and immediately scopes it to a single block at given x/y coordinates, including the root-vs-child coordinate frame. It then names the sibling tools that handle adjacent cases (apply_batch, add_entity, add_kind_node), so an agent can distinguish it without opening any 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?

Explicit routing: single addition here, multiple blocks with content to apply_batch, ERD tables to add_entity, diagram nodes to add_kind_node, and existing blocks to update_cell/move_cell/clone_cell. It also states when the call is refused (duplicate id, unknown parent, locked root placement without confirmRootPlacement).

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.