Skip to main content
Glama

update_kind_metadata

Destructive

Updates the kind-specific metadata of an existing block. BY DEFAULT this is a MERGE: only the fields provided are modified, the others are preserved — no need to reread the block to change just one. Since an absent field is therefore kept, clearing is an EXPLICIT action: the fields to clear are listed in clear. mode: 'replace' restores full replacement (any field not provided is lost). kind acts as a safeguard: if the stored block is not of the announced kind, the call is rejected. A refusal is ATOMIC — nothing is written — and names the offending field, the violated constraint and the value received.

Input Schema

NameRequiredDescriptionDefault
idYesID of the block to update.
kindYesKind of the block: arch | process | journey | captable ONLY ('org' belongs to update_cell, 'entity' to update_entity/update_field). Must match the stored kind, acts as a safeguard against cross-kind mix-ups.
modeNo'merge' (DEFAULT): only the fields provided are modified, the others stay — like update_cell. 'replace': the metadata provided REPLACES the old one ENTIRELY, any field not provided is lost. In merge mode, `clear` clears a specific field; the absence of a field does not clear it.
clearNoFields to CLEAR explicitly (merge mode only). Needed because in merge, an absent field is PRESERVED — an omitted field is therefore never erased. A name that is not a field of the kind is refused (a typo is not taken for an erasure), and a required field cannot be cleared.
metadataNoMetadata fields to write. In merge mode (default), only the fields that change are provided. The complete shape per kind is that of add_kind_node (see its description): arch → archType (required) + technology?/cloudProvider?/region?/capacity?/cost?/slo?/dataClassification?/trustBoundary?/providerLogo? ; process → processType (required) + laneId?/taskType?/duration?/sla?/isBottleneck?/complianceTags?… ; journey → journeyType (required) + phaseId?/swimlane?/emotion?… ; captable → captableType (required, 'holder' or 'round') + the fields of the variant. An OBJECT field (cost, slo, duration, safeTerms…) is written ENTIRELY — the merge does not descend into it, so it is sent back complete: sub-fields not sent back are lost (the response flags it). Each field is validated server-side: a refusal NAMES the field, the constraint and the value received, and writes NOTHING.
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.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed56 schema fields changed
    • changedInput schema / properties / clear / description
      Previous value: -"Champs à VIDER explicitement (mode merge uniquement). Nécessaire parce qu'en merge, un champ absent est PRÉSERVÉ — un champ omis n'est donc jamais effacé. Un nom qui n'est pas un champ du kind est refusé (une faute de frappe ne doit pas passer pour un effacement), et un champ obligatoire ne peut pas être vidé."New value: +"Fields to CLEAR explicitly (merge mode only). Needed because in merge, an absent field is PRESERVED — an omitted field is therefore never erased. A name that is not a field of the kind is refused (a typo is not taken for an erasure), and a required field cannot be cleared."
    • 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 / id / description
      Previous value: -"ID de la cellule à mettre à jour."New value: +"ID of the block to update."
    • changedInput schema / properties / kind / description
      Previous value: -"Kind de la cellule : arch | process | journey | captable UNIQUEMENT ('org' relève d'update_cell, 'entity' d'update_entity/update_field). Doit correspondre au kind stocké, sert de garde-fou contre les confusions cross-kind."New value: +"Kind of the block: arch | process | journey | captable ONLY ('org' belongs to update_cell, 'entity' to update_entity/update_field). Must match the stored kind, acts as a safeguard against cross-kind mix-ups."
    • changedInput schema / properties / metadata / description
      Previous value: -"Champs de metadata à écrire. En mode merge (défaut), seuls les champs qui changent sont fournis. La shape complète par kind est celle d'add_kind_node (voir sa description) : arch → archType (obligatoire) + technology?/cloudProvider?/region?/capacity?/cost?/slo?/dataClassification?/trustBoundary?/providerLogo? ; process → processType (obligatoire) + laneId?/taskType?/duration?/sla?/isBottleneck?/complianceTags?… ; journey → journeyType (obligatoire) + phaseId?/swimlane?/emotion?… ; captable → captableType (obligatoire, 'holder' ou 'round') + les champs de la variante. Un champ OBJET (cost, slo, duration, safeTerms…) est écrit EN ENTIER — la fusion ne descend pas dedans, donc il se renvoie complet : les sous-champs non renvoyés sont perdus (la réponse le signale). Chaque champ est validé côté serveur : un refus NOMME le champ, la contrainte et la valeur reçue, et n'écrit RIEN."New value: +"Metadata fields to write. In merge mode (default), only the fields that change are provided. The complete shape per kind is that of add_kind_node (see its description): arch → archType (required) + technology?/cloudProvider?/region?/capacity?/cost?/slo?/dataClassification?/trustBoundary?/providerLogo? ; process → processType (required) + laneId?/taskType?/duration?/sla?/isBottleneck?/complianceTags?… ; journey → journeyType (required) + phaseId?/swimlane?/emotion?… ; captable → captableType (required, 'holder' or 'round') + the fields of the variant. An OBJECT field (cost, slo, duration, safeTerms…) is written ENTIRELY — the merge does not descend into it, so it is sent back complete: sub-fields not sent back are lost (the response flags it). Each field is validated server-side: a refusal NAMES the field, the constraint and the value received, and writes NOTHING."
    • changedInput schema / properties / metadata / properties / actor / description
      Previous value: -"Acteur/rôle exécutant cette tâche précise, si différent de l'acteur par défaut de la lane."New value: +"Actor/role performing this specific task, if different from the lane's default actor."
    • changedInput schema / properties / metadata / properties / amountRaised / description
      Previous value: -"Montant total levé lors de ce round."New value: +"Total amount raised in this round."
    • changedInput schema / properties / metadata / properties / archType / description
      Previous value: -"Nature du composant d'architecture — détermine l'icône et la couleur par défaut du nœud. 'service' = appli/API, 'datastore' = DB/storage, 'queue' = message broker, 'gateway' = API gateway/LB, 'external' = dépendance tierce hors du périmètre, 'lambda' = fonction serverless, 'batch' = job/cron, 'network' = VPC/subnet/segment réseau, 'cdn' = edge/CDN, 'cache' = cache mémoire (Redis, Memcached...)."New value: +"Nature of the architecture component — determines the node's default icon and color. 'service' = app/API, 'datastore' = DB/storage, 'queue' = message broker, 'gateway' = API gateway/LB, 'external' = third-party dependency outside the perimeter, 'lambda' = serverless function, 'batch' = job/cron, 'network' = VPC/subnet/network segment, 'cdn' = edge/CDN, 'cache' = in-memory cache (Redis, Memcached...)."
    • changedInput schema / properties / metadata / properties / capacity / description
      Previous value: -"Dimensionnement libre (ex: '4 vCPU / 8GB', 'db.r6g.large', 'auto-scale 2-10 pods')."New value: +"Free-form sizing (e.g. '4 vCPU / 8GB', 'db.r6g.large', 'auto-scale 2-10 pods')."
    • changedInput schema / properties / metadata / properties / captableType / description
      Previous value: -"Discriminant fixe — identifie cette cellule comme un actionnaire/détenteur de titres (par opposition à un round)."New value: +"Fixed discriminant — identifies this block as a shareholder/holder of securities (as opposed to a round)."
    • changedInput schema / properties / metadata / properties / channel / description
      Previous value: -"Canal principal via lequel cette interaction a lieu."New value: +"Main channel through which this interaction takes place."
    • changedInput schema / properties / metadata / properties / channels / description
      Previous value: -"Canaux multiples si le touchpoint est multi-canal (channel seul suffit pour un canal unique)."New value: +"Multiple channels if the touchpoint is multi-channel (channel alone is enough for a single channel)."
    • changedInput schema / properties / metadata / properties / cloudProvider / description
      Previous value: -"Fournisseur cloud hébergeant ce composant."New value: +"Cloud provider hosting this component."
    • changedInput schema / properties / metadata / properties / collapsed / description
      Previous value: -"true pour replier visuellement un subprocess (masque ses enfants sur le canvas)."New value: +"true to visually collapse a subprocess (hides its children on the canvas)."
    • changedInput schema / properties / metadata / properties / complianceTags / description
      Previous value: -"Tags réglementaires applicables à cette étape (ex: 'gdpr', 'sox', 'pci', 'hipaa', 'kyc', 'aml', 'iso27001', 'four-eyes')."New value: +"Regulatory tags that apply to this step (e.g. 'gdpr', 'sox', 'pci', 'hipaa', 'kyc', 'aml', 'iso27001', 'four-eyes')."
    • changedInput schema / properties / metadata / properties / cost / description
      Previous value: -"Coût mensuel estimé — affiché sur le nœud si présent."New value: +"Estimated monthly cost — shown on the node when present."
    • changedInput schema / properties / metadata / properties / dataClassification / description
      Previous value: -"Sensibilité des données traitées/stockées par ce composant : 'public' | 'internal' | 'confidential' | 'pii' | 'secret'. Utilisée pour mettre en évidence les composants à surveiller (ex: tout ce qui touche 'pii')."New value: +"Sensitivity of the data processed/stored by this component: 'public' | 'internal' | 'confidential' | 'pii' | 'secret'. Used to highlight the components to watch (e.g. anything that touches 'pii')."
    • changedInput schema / properties / metadata / properties / date / description
      Previous value: -"Date de closing du round (YYYY-MM-DD)."New value: +"Closing date of the round (YYYY-MM-DD)."
    • changedInput schema / properties / metadata / properties / duration / description
      Previous value: -"Durée de traitement typique de cette étape."New value: +"Typical processing time of this step."
    • changedInput schema / properties / metadata / properties / emotion / description
      Previous value: -"Score émotionnel du client à cette étape, de -2 (très négatif/frustration) à +2 (très positif/enchantement), 0 = neutre. N'est PAS rendu comme courbe sur le canvas automatiquement (voir compute_emotion_curve pour l'agréger) — un score ≤ -1 signale typiquement un point de friction à documenter via une cellule 'pain' associée."New value: +"Customer emotional score at this step, from -2 (very negative/frustration) to +2 (very positive/delight), 0 = neutral. Is NOT automatically rendered as a curve on the canvas (see compute_emotion_curve to aggregate it) — a score ≤ -1 typically signals a pain point to document via an associated 'pain' block."
    • changedInput schema / properties / metadata / properties / esopRefreshPct / description
      Previous value: -"% de refresh du pool ESOP effectué à l'occasion de ce round."New value: +"% of ESOP pool refresh carried out on the occasion of this round."
    • changedInput schema / properties / metadata / properties / executionPct / description
      Previous value: -"% des instances du process qui passent réellement par cette étape (100 = chemin toujours emprunté)."New value: +"% of the process instances that actually go through this step (100 = path always taken)."
    • changedInput schema / properties / metadata / properties / holderType / description
      Previous value: -"Catégorie de détenteur : 'founder' (co-fondateur), 'employee' (salarié avec BSPCE/options), 'investor' (VC/business angel), 'pool' (réserve ESOP non-allouée), 'entity' (personne morale, holding, SPV)."New value: +"Category of holder: 'founder' (co-founder), 'employee' (employee with BSPCE/options), 'investor' (VC/business angel), 'pool' (unallocated ESOP reserve), 'entity' (legal entity, holding, SPV)."
    • changedInput schema / properties / metadata / properties / isBottleneck / description
      Previous value: -"true pour marquer visuellement cette étape comme goulot d’étranglement identifié (durée/SLA problématique)."New value: +"true to visually mark this step as an identified bottleneck (problematic duration/SLA)."
    • changedInput schema / properties / metadata / properties / isConcentrated / description
      Previous value: -"true pour marquer ce holder comme signal de concentration (utilisé par validate_captable)."New value: +"true to mark this holder as a concentration signal (used by validate_captable)."
    • changedInput schema / properties / metadata / properties / isMomentOfTruth / description
      Previous value: -"true pour marquer un instant décisif qui influence fortement la perception globale du client (mis en évidence visuellement)."New value: +"true to mark a decisive moment that strongly influences the customer's overall perception (visually highlighted)."
    • changedInput schema / properties / metadata / properties / journeyType / description
      Previous value: -"Rôle de la cellule dans la carte de parcours : 'phase' (grande étape, colonne d'en-tête), 'step' (action concrète de l'utilisateur), 'touchpoint' (point de contact avec un canal/produit), 'pain' (point de friction/irritant), 'opportunity' (piste d'amélioration identifiée), 'headline' (bloc de titre/contexte libre)."New value: +"Role of the block in the journey map: 'phase' (major stage, header column), 'step' (concrete user action), 'touchpoint' (point of contact with a channel/product), 'pain' (pain point/irritant), 'opportunity' (identified improvement lead), 'headline' (free title/context block)."
    • changedInput schema / properties / metadata / properties / laneId / description
      Previous value: -"ID de la lane parente (cellule processType='lane') à laquelle rattacher cette task/event — kebab-case, comme retourné par add_swimlane (ex: 'lane-sales')."New value: +"ID of the parent lane (block with processType='lane') to attach this task/event to — kebab-case, as returned by add_swimlane (e.g. 'lane-sales')."
    • changedInput schema / properties / metadata / properties / liquidationPreference / description
      Previous value: -"Préférence de liquidation applicable (typique pour preferred)."New value: +"Liquidation preference that applies (typical for preferred)."
    • changedInput schema / properties / metadata / properties / metrics / description
      Previous value: -"Indicateurs chiffrés rattachés à cette étape (NPS, taux, durée...)."New value: +"Figures attached to this step (NPS, rates, duration...)."
    • changedInput schema / properties / metadata / properties / name / description
      Previous value: -"Nom du round (ex: 'Seed', 'Series A', 'Bridge')."New value: +"Name of the round (e.g. 'Seed', 'Series A', 'Bridge')."
    • changedInput schema / properties / metadata / properties / orderInPhase / description
      Previous value: -"Ordre horizontal au sein de la phase (0 = en premier). Absent = append à droite."New value: +"Horizontal order within the phase (0 = first). Absent = appended on the right."
    • changedInput schema / properties / metadata / properties / phaseId / description
      Previous value: -"ID de la phase parente (cellule journeyType='phase', créée via add_journey_phase) — positionne la cellule dans la bonne colonne."New value: +"ID of the parent phase (block with journeyType='phase', created via add_journey_phase) — places the block in the right column."
    • changedInput schema / properties / metadata / properties / preMoneyValuation / description
      Previous value: -"Valorisation pré-money du round, en monnaie du projet."New value: +"Pre-money valuation of the round, in the project currency."
    • changedInput schema / properties / metadata / properties / pricePerShare / description
      Previous value: -"Prix payé par action lors de l'émission — absent pour un SAFE non converti."New value: +"Price paid per share at issuance — absent for an unconverted SAFE."
    • changedInput schema / properties / metadata / properties / processType / description
      Previous value: -"Rôle BPMN-lite de la cellule — détermine sa forme sur le canvas : 'task' (rectangle), 'event-start'/'event-end' (cercle début/fin), 'event-intermediate-timer'/'event-intermediate-error' (cercle intermédiaire), 'gateway-xor'/'gateway-and'/'gateway-or' (losange de décision), 'subprocess' (rectangle double-bordure), 'lane' (couloir — normalement créé via add_swimlane, pas via add_kind_node directement)."New value: +"BPMN-lite role of the block — determines its shape on the canvas: 'task' (rectangle), 'event-start'/'event-end' (start/end circle), 'event-intermediate-timer'/'event-intermediate-error' (intermediate circle), 'gateway-xor'/'gateway-and'/'gateway-or' (decision diamond), 'subprocess' (double-bordered rectangle), 'lane' (swimlane — normally created via add_swimlane, not directly via add_kind_node)."
    • changedInput schema / properties / metadata / properties / providerLogo / description
      Previous value: -"Logo de service tiers à afficher sur le nœud (ex: 'aws', 'stripe', 'supabase') — purement visuel, indépendant de cloudProvider."New value: +"Third-party service logo to show on the node (e.g. 'aws', 'stripe', 'supabase') — purely visual, independent of cloudProvider."
    • changedInput schema / properties / metadata / properties / publicAccess / description
      Previous value: -"true si le composant est exposé publiquement sur internet (pas seulement en interne)."New value: +"true if the component is publicly exposed on the internet (not just internally)."
    • changedInput schema / properties / metadata / properties / quote / description
      Previous value: -"Verbatim client illustrant ce point du parcours."New value: +"Customer verbatim illustrating this point of the journey."
    • changedInput schema / properties / metadata / properties / region / description
      Previous value: -"Région d'hébergement (ex: 'eu-west-3', 'cdg1')."New value: +"Hosting region (e.g. 'eu-west-3', 'cdg1')."
    • changedInput schema / properties / metadata / properties / riskTags / description
      Previous value: -"Signaux de risque associés à ce round : 'down-round', 'concentration', 'underwater-options', 'anti-dilution'."New value: +"Risk signals associated with this round: 'down-round', 'concentration', 'underwater-options', 'anti-dilution'."
    • changedInput schema / properties / metadata / properties / safeTerms / description
      Previous value: -"Termes du SAFE — requis si securityType='safe', ignoré sinon."New value: +"Terms of the SAFE — required if securityType='safe', ignored otherwise."
    • changedInput schema / properties / metadata / properties / securityRound / description
      Previous value: -"ID du round (cellule captableType='round') dans lequel ce titre a été émis — absent = émission fondatrice (t=0). UUID ou kebab-case, comme le reste des ids de cellule."New value: +"ID of the round (block with captableType='round') in which this security was issued — absent = founding issuance (t=0). UUID or kebab-case, like the rest of the block ids."
    • changedInput schema / properties / metadata / properties / securityType / description
      Previous value: -"Type de titre détenu : 'common' (actions ordinaires, typiquement fondateurs), 'preferred' (actions de préférence, typiquement investisseurs priced round), 'safe' (SAFE non converti — voir safeTerms), 'convertible' (obligation convertible), 'option' (stock-options/BSPCE non exercées)."New value: +"Type of security held: 'common' (common stock, typically founders), 'preferred' (preferred stock, typically priced-round investors), 'safe' (unconverted SAFE — see safeTerms), 'convertible' (convertible note), 'option' (unexercised stock options/BSPCE)."
    • changedInput schema / properties / metadata / properties / severity / description
      Previous value: -"Gravité d'un pain point ou priorité d'une opportunity."New value: +"Severity of a pain point or priority of an opportunity."
    • changedInput schema / properties / metadata / properties / shares / description
      Previous value: -"Nombre de parts/actions détenues (entier ou décimal selon la granularité du cap table)."New value: +"Number of shares held (integer or decimal depending on the granularity of the cap table)."
    • changedInput schema / properties / metadata / properties / sla / description
      Previous value: -"Délai maximum contractuel/cible pour cette étape (comparé à duration pour détecter les dépassements)."New value: +"Maximum contractual/target delay for this step (compared with duration to detect overruns)."
    • changedInput schema / properties / metadata / properties / slo / description
      Previous value: -"Objectifs de niveau de service (latence, disponibilité)."New value: +"Service-level objectives (latency, availability)."
    • changedInput schema / properties / metadata / properties / swimlane / description
      Previous value: -"Couloir horizontal (modèle service blueprint) : 'customer' (actions visibles du client), 'frontstage' (interactions client-visibles côté entreprise), 'backstage' (opérations internes invisibles du client), 'support' (systèmes/process support)."New value: +"Horizontal lane (service blueprint model): 'customer' (actions visible to the customer), 'frontstage' (customer-visible interactions on the company side), 'backstage' (internal operations invisible to the customer), 'support' (support systems/processes)."
    • changedInput schema / properties / metadata / properties / swimlaneOrder / description
      Previous value: -"Ordre vertical au sein de la lane (rarement utilisé — à défaut, l’ordre des lanes suit `order`, puis l’id)."New value: +"Vertical order within the lane (rarely used — otherwise the order of the lanes follows `order`, then the id)."
    • changedInput schema / properties / metadata / properties / taskType / description
      Previous value: -"Type d'exécutant pour une task : 'user' (humain via UI), 'service' (système/API), 'manual' (humain hors-système, ex: papier), 'script' (automatisation batch)."New value: +"Type of performer for a task: 'user' (human via the UI), 'service' (system/API), 'manual' (human outside the system, e.g. paper), 'script' (batch automation)."
    • changedInput schema / properties / metadata / properties / technology / description
      Previous value: -"Techno/framework concret (ex: 'Node.js 22', 'Amazon Aurora PostgreSQL 15.4 Serverless v2')."New value: +"Concrete technology/framework (e.g. 'Node.js 22', 'Amazon Aurora PostgreSQL 15.4 Serverless v2')."
    • changedInput schema / properties / metadata / properties / termSheetNote / description
      Previous value: -"Note libre sur les conditions négociées (clauses particulières, board seat, pro-rata rights...)."New value: +"Free-form note on the negotiated terms (special clauses, board seat, pro-rata rights...)."
    • changedInput schema / properties / metadata / properties / trustBoundary / description
      Previous value: -"Nom de la zone de confiance/périmètre de sécurité (ex: 'DMZ', 'VPC privé', 'zone PCI') — les composants partageant le même trustBoundary sont visuellement groupables."New value: +"Name of the trust zone/security perimeter (e.g. 'DMZ', 'private VPC', 'PCI zone') — components sharing the same trustBoundary can be grouped visually."
    • changedInput schema / properties / metadata / properties / vestingSchedule / description
      Previous value: -"Calendrier de vesting applicable à ces parts (typique pour founder/employee)."New value: +"Vesting schedule that applies to these shares (typical for founder/employee)."
    • changedInput schema / properties / mode / description
      Previous value: -"'merge' (DÉFAUT) : seuls les champs fournis sont modifiés, les autres restent — comme update_cell. 'replace' : la metadata fournie remplace INTÉGRALEMENT l'ancienne, tout champ non fourni est perdu. En mode merge, `clear` vide un champ précis ; l'absence d'un champ ne le vide pas."New value: +"'merge' (DEFAULT): only the fields provided are modified, the others stay — like update_cell. 'replace': the metadata provided REPLACES the old one ENTIRELY, any field not provided is lost. In merge mode, `clear` clears a specific field; the absence of a field does not clear it."
  2. Changed6 schema fields changed
    • changedInput schema / properties / clear / description
      Previous value: -"Champs à VIDER explicitement (mode merge uniquement). Nécessaire parce qu'en merge, un champ absent est PRÉSERVÉ — omettre un champ ne l'efface donc jamais. Un nom qui n'est pas un champ du kind est refusé (une faute de frappe ne doit pas passer pour un effacement), et un champ obligatoire ne peut pas être vidé."New value: +"Champs à VIDER explicitement (mode merge uniquement). Nécessaire parce qu'en merge, un champ absent est PRÉSERVÉ — un champ omis n'est donc jamais effacé. Un nom qui n'est pas un champ du kind est refusé (une faute de frappe ne doit pas passer pour un effacement), et un champ obligatoire ne peut pas être vidé."
    • changedInput schema / properties / kind / description
      Previous value: -"Kind de la cellule : arch | process | journey | captable UNIQUEMENT (pour 'org' utilise update_cell, pour 'entity' utilise update_entity/update_field). Doit correspondre au kind stocké, sert de garde-fou contre les confusions cross-kind."New value: +"Kind de la cellule : arch | process | journey | captable UNIQUEMENT ('org' relève d'update_cell, 'entity' d'update_entity/update_field). Doit correspondre au kind stocké, sert de garde-fou contre les confusions cross-kind."
    • changedInput schema / properties / metadata / description
      Previous value: -"Champs de metadata à écrire. En mode merge (défaut), tu ne fournis QUE ceux qui changent. La shape complète par kind est celle d'add_kind_node (voir sa description) : arch → archType (obligatoire) + technology?/cloudProvider?/region?/capacity?/cost?/slo?/dataClassification?/trustBoundary?/providerLogo? ; process → processType (obligatoire) + laneId?/taskType?/duration?/sla?/isBottleneck?/complianceTags?… ; journey → journeyType (obligatoire) + phaseId?/swimlane?/emotion?… ; captable → captableType (obligatoire, 'holder' ou 'round') + les champs de la variante. Un champ OBJET (cost, slo, duration, safeTerms…) est écrit EN ENTIER — la fusion ne descend pas dedans, donc renvoie-le complet, sinon ses sous-champs non renvoyés sont perdus (la réponse te le signale). Chaque champ est validé côté serveur : un refus NOMME le champ, la contrainte et la valeur reçue, et n'écrit RIEN."New value: +"Champs de metadata à écrire. En mode merge (défaut), seuls les champs qui changent sont fournis. La shape complète par kind est celle d'add_kind_node (voir sa description) : arch → archType (obligatoire) + technology?/cloudProvider?/region?/capacity?/cost?/slo?/dataClassification?/trustBoundary?/providerLogo? ; process → processType (obligatoire) + laneId?/taskType?/duration?/sla?/isBottleneck?/complianceTags?… ; journey → journeyType (obligatoire) + phaseId?/swimlane?/emotion?… ; captable → captableType (obligatoire, 'holder' ou 'round') + les champs de la variante. Un champ OBJET (cost, slo, duration, safeTerms…) est écrit EN ENTIER — la fusion ne descend pas dedans, donc il se renvoie complet : les sous-champs non renvoyés sont perdus (la réponse le signale). Chaque champ est validé côté serveur : un refus NOMME le champ, la contrainte et la valeur reçue, et n'écrit RIEN."
    • changedInput schema / properties / metadata / properties / channels / description
      Previous value: -"Canaux multiples si le touchpoint est multi-canal (préférer channel seul si un canal unique suffit)."New value: +"Canaux multiples si le touchpoint est multi-canal (channel seul suffit pour un canal unique)."
    • changedInput schema / properties / metadata / properties / swimlaneOrder / description
      Previous value: -"Ordre vertical au sein de la lane (rarement utilisé — préférer order via auto_layout_process)."New value: +"Ordre vertical au sein de la lane (rarement utilisé — à défaut, l’ordre des lanes suit `order`, puis l’id)."
    • changedInput schema / properties / mode / description
      Previous value: -"'merge' (DÉFAUT) : seuls les champs fournis sont modifiés, les autres restent — comme update_cell. 'replace' : la metadata fournie remplace INTÉGRALEMENT l'ancienne, tout champ non fourni est perdu. Pour vider un champ précis en mode merge, utilise `clear` — ne compte pas sur son absence."New value: +"'merge' (DÉFAUT) : seuls les champs fournis sont modifiés, les autres restent — comme update_cell. 'replace' : la metadata fournie remplace INTÉGRALEMENT l'ancienne, tout champ non fourni est perdu. En mode merge, `clear` vide un champ précis ; l'absence d'un champ ne le vide pas."
  3. First observed

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the destructiveHint=true annotation, the description explains exactly what is preserved and what is lost: merge preserves omitted fields, replace loses anything not provided, and object fields are overwritten entirely. It also discloses the atomic refusal behavior and that validation errors name the field, constraint, and received value.

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

Conciseness5/5

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

The description is compact and front-loaded, immediately establishing the default merge behavior before covering clearing, replace mode, kind safeguarding, and atomic refusals. Every sentence carries operational meaning.

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 mutation tool with no output schema, the description covers the important behavioral details: default merge semantics, explicit clearing, replace risk, kind safety checks, and atomic failure behavior. The rich schema and annotations handle the remaining structured detail.

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 coverage is 100%, so the schema already documents id, kind, mode, clear, metadata, and expectedProjectId in detail. The description reinforces the merge/clear/replace interaction, but most parameter meaning is already present in the schema, so this sits at the baseline.

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

Purpose4/5

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

The description states a specific verb and resource: "Updates the kind-specific metadata of an existing block." That distinguishes it from broader sibling tools like update_cell, though it does not explicitly name those alternatives the way a 5 would.

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?

It gives clear usage context: merge is the default, `clear` is required to erase fields, and `mode: 'replace'` is for full replacement. It does not explicitly state when to prefer a sibling such as update_cell or add_kind_node, so it is clear but not complete on alternatives.

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.