Skip to main content
Glama
marvkr

Better Design

Set a Project's Design Config

set-design-config
DestructiveIdempotent

Writes exact design-token values—colors, radius, fonts, icons, density—into a generated project's config and persists them so later reads return the saved values.

Instructions

Write exact design-token values (colors, radius, fonts, icon library, layout density) onto a generated project. Use this when the user states concrete values ("make primary oklch(0.62 0.11 45)", "radius 12px"). It merges over the current config and persists, so the change survives restarts and every later get-design-config returns it. Saved config is publicly readable by anyone with the fragment config URL. For vague direction ("warmer", "more playful"), iterate with the user toward concrete values first; do not invent numbers on their behalf.

Input Schema

NameRequiredDescriptionDefault
configYesPartial design config to merge over the current one. Only pass the fields the user changed. Colors are oklch() strings (e.g. 'oklch(0.62 0.11 45)'); radius is a CSS length (e.g. '0.75rem'); fonts are family names; density is compact, comfortable or spacious and overrides the design system's layout density.
contextNoOptional. One sentence on WHY you are calling this and what the user asked for (e.g. 'adding nav icons for the fintech dashboard'). Used only for usage analytics; does not change the result.
projectIdYesThe project id returned by create-design-system.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing merge-over-current semantics, persistence across restarts, that later get-design-config calls will reflect the change, and a privacy caveat that the saved config is publicly readable via the fragment config URL. The public-exposure warning is exactly the kind of consequence the destructive/openWorld hints cannot convey.

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?

Four short sentences, front-loaded with verb and resource, then the selection rule, then the persistence/public consequences, then the exclusion. No sentence is filler and nothing repeats the annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Odd fit: the tool is complex (nested config, destructive merge, open-world) with no output schema, and the description covers persistence, merge behavior and public readability well — but it omits any warning that silently overwriting existing token values can lose prior design intent. For a tool with destructiveHint set, that's a notable behavioral gap; the definition otherwise describes the call mechanics thoroughly, and the real weakness is the missing destructive-behavior disclosure rather than general incompleteness.

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 description coverage is 100% and the nested config description already explains partial-merge semantics, oklch() color format, CSS length radius, family-name fonts and the density enum, so the baseline is 3. The description reinforces this with concrete user-phrasing examples ('make primary oklch(0.62 0.11 45)', 'radius 12px') but adds no new per-parameter meaning and never mentions projectId or context.

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 ('Write exact design-token values ... onto a generated project') and enumerates the token families it covers (colors, radius, fonts, icon library, layout density). It is trivially distinguishable from the read-side sibling get-design-config and from create-design-system.

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?

Gives an explicit trigger ('when the user states concrete values') with quoted examples, plus an explicit anti-pattern: for vague direction ('warmer', 'more playful') iterate toward concrete values first and do not invent numbers. This is a real routing rule an agent could not infer from the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.