Skip to main content
Glama

Scribe Mail

Update a signature

update_signature
DestructiveIdempotent

Update a signature template by UUID. Stages draft_content (the working copy) — the live content only changes when you publish_signature. Only the fields you pass change (omit = leave as-is; draft_content: null / folder_id: null clear them). When editing draft_content, call get_content_schema first for the block-tree schema, enum values (incl. the non-obvious icon names), and a worked example; an invalid tree returns 422 naming each offending field and its allowed values. Blocks are CLOSED: every key you add must exist in the schema, so build each block by adapting the schema's example rather than attaching extra keys to carry styling or smart-field values — an invented key fails the whole update with unknown_property.

Input Schema

NameRequiredDescriptionDefault
idYesThe signature's UUID (the `id` from list_signatures).
nameNo
contextYesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution."
priorityNoOrdering priority (lower = higher).
folder_idNoUUID of the folder to file the signature under; null detaches it.
draft_contentNoDraft block tree (ILayoutBlock): a `stack` root whose `children` are blocks. Strict-validated server-side. Omit to leave unchanged; null to clear. Every node (block AND token) needs an `id` that is a fresh LOWERCASE uuid — any other string, including an uppercase uuid, is rejected 422. Every numeric size is in PIXELS, never a CSS multiplier: `lineHeight` is a px line box (~1.3x fontSize, e.g. fontSize 14 -> 18), so 1.3 is rejected. Call get_content_schema for the full schema, every enum value, and a worked example.
signature_installation_activatedNoWhether installation is activated for this template.

Output Schema

NameRequiredDescriptionDefault
dataYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed15 schema fields changed
    • changedInput schema / properties / draft_content / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "blockStyle": {
      -        "additionalProperties": {},
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "children": {
      -        "items": {
      -          "additionalProperties": {},
      -          "properties": {
      -            "id": {
      -              "description": "Lowercase uuid (8-4-4-4-12 hex), e.g. 6f1e8a2c-4b0d-4c8e-9f3a-2d7b5e9c1a4f. Generate a fresh one per element and keep it stable across updates so a link keeps its click-tracking identity.",
      -              "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      -              "type": "string"
      -            },
      -            "role": {
      -              "anyOf": [
      -                {
      -                  "type": "string"
      -                },
      -                {
      -                  "type": "null"
      -                }
      -              ]
      -            },
      -            "type": {
      -              "enum": [
      -                "stack",
      -                "text",
      -                "image",
      -                "icon",
      -                "list",
      -                "listItem",
      -                "listItemLabel",
      -                "socialList",
      -                "socialListItem",
      -                "button",
      -                "divider",
      -                "marketing"
      -              ],
      -              "type": "string"
      -            },
      -            "visible": {
      -              "type": "boolean"
      -            }
      -          },
      -          "required": [
      -            "id",
      -            "type",
      -            "role",
      -            "visible"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "id": {
      -        "description": "Lowercase uuid (8-4-4-4-12 hex), e.g. 6f1e8a2c-4b0d-4c8e-9f3a-2d7b5e9c1a4f. Generate a fresh one per element and keep it stable across updates so a link keeps its click-tracking identity.",
      -        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      -        "type": "string"
      -      },
      -      "role": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "type": {
      -        "const": "stack",
      -        "type": "string"
      -      },
      -      "visible": {
      -        "type": "boolean"
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "type",
      -      "role",
      -      "visible",
      -      "blockStyle",
      -      "children"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "blockStyle": {
      +        "additionalProperties": {},
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "children": {
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "id": {
      +              "description": "Lowercase uuid (8-4-4-4-12 hex), e.g. 6f1e8a2c-4b0d-4c8e-9f3a-2d7b5e9c1a4f. Generate a fresh one per element and keep it stable across updates so a link keeps its click-tracking identity.",
      +              "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      +              "type": "string"
      +            },
      +            "role": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "type": {
      +              "enum": [
      +                "stack",
      +                "text",
      +                "image",
      +                "icon",
      +                "list",
      +                "listItem",
      +                "listItemLabel",
      +                "socialList",
      +                "socialListItem",
      +                "button",
      +                "divider",
      +                "marketing"
      +              ],
      +              "type": "string"
      +            },
      +            "visible": {
      +              "type": "boolean"
      +            }
      +          },
      +          "required": [
      +            "id",
      +            "type",
      +            "role",
      +            "visible"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "id": {
      +        "description": "Lowercase uuid (8-4-4-4-12 hex), e.g. 6f1e8a2c-4b0d-4c8e-9f3a-2d7b5e9c1a4f. Generate a fresh one per element and keep it stable across updates so a link keeps its click-tracking identity.",
      +        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      +        "type": "string"
      +      },
      +      "role": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "const": "stack",
      +        "type": "string"
      +      },
      +      "visible": {
      +        "type": "boolean"
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "type",
      +      "role",
      +      "visible",
      +      "blockStyle",
      +      "children"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / folder_id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / folder_id / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / data / properties / folder_id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / data / properties / folder_id / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / data / properties / internal_variant_uuid / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / data / properties / internal_variant_uuid / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / data / properties / last_published_at / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / data / properties / last_published_at / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / data / properties / name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / data / properties / name / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / data / properties / priority / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / data / properties / priority / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / data / properties / reply_variant_uuid / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / data / properties / reply_variant_uuid / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and idempotentHint=true, but the description supplies the context that makes those meaningful: only the draft is mutated, fields not passed are preserved, nulls clear fields, and invalid trees fail with a 422 naming each offending field. It further discloses the closed-block `unknown_property` failure mode, which is non-obvious and materially affects how the tool is called.

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 draft-vs-live rule, then validation guidance; nearly every sentence carries operational weight. It does restate some schema-level detail (lowercase UUIDs, pixel sizing, call get_content_schema) that also appears in the parameter descriptions, so it is slightly redundant rather than maximally tight.

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?

Covers the draft/publish lifecycle, partial-update semantics, the prerequisite schema-fetch step, and the failure modes an agent will hit (422 field errors, unknown_property). With an output schema present, nothing further about return values is required.

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 already 86%, so the baseline is 3; the description still adds real semantics for the trickiest parameters — partial-update/clearing behavior for `draft_content` and `folder_id`, and the lowercase-UUID and pixel-vs-multiplier constraints. Minor overlap with the schema's own parameter notes keeps it from a 5.

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?

States a specific verb and resource plus the identifier ('Update a signature template by UUID'), and implicitly scopes the write to the draft copy, which separates it from publish_signature and update_signature_variant. An agent can identify the target object and action without opening the 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?

Explicitly says this stages `draft_content` and that live `content` only changes via `publish_signature`, so the when-to-use vs. the publish sibling is unambiguous. It also routes to `get_content_schema` before editing and explains partial-update semantics (omit = leave as-is, null = clear).

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.