Skip to main content
Glama

palette_customize

Changes the palette (colors, fonts, button styles, background) of ONE Riddle, as a path => value map, e.g. {"bgColor": "#ffffff", "font.name": "Roboto"} - the paths are palette_get's or riddle://reference/palette/fields. Never affects another Riddle: a palette inherited from the account/project default preset is not changed for the others, the values are stored as an override on this one. A built-in palette ("default:*") is stored nowhere and is therefore duplicated into a Riddle-owned copy automatically; newPaletteName always works on a copy. Two things to know. The new design only reaches the embedded (live) Riddle after another riddle_publish. A palette write does NOT move modifiedAt/modifiedBy (the Creator does not stamp them for a design change either), so polling those will not notice it: the detector is riddle_get's context.modified.hasChanges, true from the preset side. context.preset.drifted usually moves too but is not reliable alone - it means "diverged from the PARENT preset", so on a Riddle whose context.preset.parentId is null it stays false however much you change; read it only alongside parentId. Only if the Riddle's origin.writableByThisKey is true (riddle_get, riddle_list): riddle://reference/concepts/access.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
selectNoSelect the palette afterwards so the Riddle actually renders with it. Newly created palettes are always selected.
valuesYesMap of palette path => new value, e.g. {"bgColor": "#ffffff", "buttonColor": "rgba(0,0,0,0.8)", "font.name": "Roboto", "riddleBorderRadius": 12, "isImageInBgDisplayed": true}. Every path must be one of the paths listed in riddle://reference/palette/fields.
riddleUUIDYesThe UUID of the Riddle you want to restyle.
paletteUUIDNoThe palette to change. Omit to change the currently selected palette. Pass a built-in id ("default:timeless") to start from that palette.
newPaletteNameNoCreate a new palette with this name (copied from paletteUUID / the selected palette) and apply the values to the copy, leaving the original untouched.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / riddleUUID / description
      Previous value: -"The UUID of the Riddle you want to restyle. Only Riddles created via the Riddle Builder tools or generated by the Riddle AI can be restyled."New value: +"The UUID of the Riddle you want to restyle."
  2. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Goes far beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false): it explains override-vs-inheritance semantics, that built-in 'default:*' palettes are duplicated into a Riddle-owned copy, that newPaletteName always operates on a copy, that modifiedAt/modifiedBy are NOT bumped so polling won't detect it, and that the real detector is riddle_get's context.modified.hasChanges with caveats around context.preset.drifted and parentId. It also names the access precondition origin.writableByThisKey.

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-loads the core action and the scope constraint before the operational caveats, and almost every sentence carries unique information (override semantics, publish requirement, detector, access). It is dense and slightly run-on, with a mild bit of throat-clearing ('Two things to know'), so not maximally tight, but nothing is padding.

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 non-idempotent mutation with 5 params (nested values object) and no output schema, the description supplies everything an agent needs: scope, path source, copy/override behavior, propagation timing, detection signal, and access precondition. No material gap remains.

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% (baseline 3), and the description adds genuine meaning: newPaletteName always works on a copy leaving the original untouched, paletteUUID accepts built-in ids like 'default:timeless' to start from that palette, and omitting paletteUUID targets the currently selected palette. This complements rather than merely repeats the schema.

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 precise verb+resource+scope: 'Changes the palette (colors, fonts, button styles, background) of ONE Riddle, as a path => value map'. It explicitly names the sibling/related tool for paths (palette_get) and the reference resource, so it is distinguishable from palette_get without opening a schema.

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?

Clearly implies when to use it (restyle a single Riddle's palette via path=>value map), routes the agent to palette_get and riddle://reference/palette/fields for valid paths, and flags that the change only reaches the live embed after riddle_publish. It stops short of stating explicit exclusions (e.g. when to prefer palette_get or project-level preset tools), so it is strong context rather than full when/when-not guidance.

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