Skip to main content
Glama

Mimic AI

Transforms HTML into Figma using only your design system, enforcing correct component usage and falling back safely when needed, while improving accuracy with every build.


npm version npm downloads CI License: MIT

Node.js: v20.6+ Platform: macOS / Windows Glama Install in VS Code Install in VS Code Insiders

Open-source MCP server. Runs locally. Your design data never leaves your machine.



Gated, not steered

AI writing into Figma isn't the hard part anymore; several tools do it now. The differences show up in what happens when the AI reaches for something your design system doesn't have. A tool that steers an agent toward your components can still land on a raw hex value, a raw pixel size, or a font your system doesn't use, and general guidance for that category of tool is that the result may need manual review and cleanup before it's usable. Mimic enforces at write time, inside the Figma plugin itself, not just in the prompt.

What the gate blocks

  • Raw hex/rgb fills where a DS color variable exists

  • Raw pixel font sizes where a DS text style exists

  • Fonts outside the design system

  • Variable category mismatches (e.g. a background token used as a stroke)

  • Primitive frames for elements the DS already has as components (buttons, badges, inputs, table cells, and more)

If the DS genuinely has no equivalent, Mimic says so in the build report instead of quietly leaving a raw value in place.

What the learning accumulates

  • Component recipes, replayed automatically once confirmed across builds

  • Majority-wins variant defaults, learned from your own usage patterns

  • Design rules you set once by correcting a build, enforced on every one after

  • No-good compilation: patterns tried and confirmed not to work, so they aren't retried

  • Staleness detection: flags a stored recipe the moment it stops matching your current DS

  • All scoped per design system library: nothing bleeds across unrelated files

Nothing else accumulates this across builds. A hand-authored Figma Agent Skill is static text; it doesn't learn from what you correct.

What the report proves Every build ends in a compliance-audited report: components used and their keys, primitives built and why, which stored rules were checked and whether they held, and where the DS still has coverage gaps. It's built to be shown to a stakeholder, not just read by the person who ran the build.


Related MCP server: Figma MCP

Why Mimic exists

You built a design system. Components, tokens, variables. Every decision intentional. Then someone needs a screen in Figma and starts from scratch. Hardcoded colors. Raw font sizes. Frames that break when you resize them. Your system sits right there in the library panel. Unused.

Mimic's output is the deliverable: real Figma layers with real component instances, variable bindings, and auto-layout. Nothing to convert. Nothing to swap. Hand it off.


It learns your system

The first build scans the design system. By the third, recurring components auto-verify. By the tenth, most decisions are instant. The knowledge compounds across every build.

Build

What Mimic knows

What you experience

1

Nothing. Cold start. Scans your entire DS.

"It found my components and used them. Some primitives where my DS has gaps."

5

Core patterns verified. Common components cached.

"It remembered that I use Button/Primary for CTAs. It didn't ask about tabs this time."

20

Deep knowledge. Recipes for every common component.

"I point it at an HTML and get a DS-compliant Figma screen in minutes. It knows my system better than the new hire."

50+

Comprehensive DS audit data. Recurring gaps visible.

"The gap report says I've used status badges as primitives 31 times. I finally built the component. Mimic started using it immediately."

Correct it once. Tell Mimic "That's not the right Badge, use Tag/Neutral." The mapping updates permanently. Every future build uses the correction without you having to repeat yourself.

Your DS evolves. Mimic keeps up. Component additions, removals, and variant changes are detected at the start of every build by comparing against what was cached last time — no manual re-sync. Deeper variable-level change detection (e.g. a renamed color token) is coming in a future release.

Every build is a DS review. After each build, Mimic generates a report: what components it used, what it built from primitives and why, what patterns it learned, and what your DS is missing. Recommendations come as questions, not commands: "Should your DS include a Status Badge? 4 elements across 3 builds were built as primitives."


How it works

Pick any starting point:

"Build a dashboard with three metric cards and an activity table"

"Here's the HTML from our staging environment, build it in Figma"

"Rebuild this Claude Design prototype with real components"

Mimic discovers the design system on your file, matches components and tokens, and builds structured Figma. Same rules, same output quality, regardless of how you start.


How Mimic compares

Mimic

Claude Design

Figma Make

Framelink

html.to.design

Output

Figma canvas (real layers)

HTML / React prototype

Interactive prototype

Read-only context

Figma canvas (paid)

Uses your components

Yes, real instances

No

Partial (Make Kits)

No (agent infers)

Partial

Variable bindings

Yes, every node

No

No (raw values)

No

No

Auto-layout

Every frame

N/A

N/A

N/A

Partial

Works with any library

Yes

No

Make Kits only

N/A

Limited

Learns across builds

Yes

No

No

No

No

DS gap detection

Yes, every build

No

No

No

No

Open source

Yes (MIT)

No

No

Yes (MIT)

No

Claude Design is great for ideation. Figma Make is great for interactive prototyping. Framelink is great for giving AI context about your designs. Mimic is for when the output needs to be the actual Figma file you ship with.


Who it's for

Mimic works with any Figma library: your team's, a community kit, or a client's published system.

  • Designers who want DS-compliant screens without manual component hunting

  • Design system leads testing their system by building real screens, surfacing coverage gaps with evidence

  • New team members learning a DS by building with it, seeing what components exist and what's missing

  • Agencies and freelancers picking up a client's library and needing to produce screens fast

  • DS migration teams rebuilding existing screens with a new system to assess coverage before committing

  • Developers who need a Figma reference that matches their frontend components

  • Product managers who want to mock up ideas using the DS without waiting for a designer


Get started

Requires: Node.js v20.6+ · the Figma desktop app (browser Figma isn't supported — download) · a Figma Professional plan or above (needed to publish and use team libraries).

1. Install

One-line installer:

bash <(curl -fsSL https://raw.githubusercontent.com/miapre/mimic-ai/main/install.sh)

This clones the repo to ~/mimic-ai, runs npm install, prompts for your Figma personal access token, and offers to register mimic-ai in Claude Code's settings.json automatically.

Manual install:

git clone https://github.com/miapre/mimic-ai.git
cd mimic-ai
npm install

Then set FIGMA_TOKEN in your MCP client's server config (or in ~/.mimic-ai.json — see "Figma setup details" further down for how to generate the token), and point your client's mimic-ai entry at the cloned mcp.js ({ "command": "node", "args": ["/path/to/mimic-ai/mcp.js"] }).

2. Add the Figma plugin

Plugins > Development > Import plugin from manifest > select ~/mimic-ai/plugin/manifest.json

3. Connect (each session)

Figma: Plugins > Development > Mimic AI > Run

The bridge starts automatically when you make your first tool call. No separate process to manage.

4. Enable your design system

Assets panel > Team library icon > toggle on. Once per file. Community libraries work out of the box.

5. Build

"Build a settings page with three form fields and a save button."

One call discovers the entire DS (variables, styles, components), preloads everything, and advances to build-ready. No multi-step setup.


What it learns and enforces

What it learns:

  • Component recipes: Configure a component once (variants, booleans, text slots), Mimic replays that configuration on every future insert. After 3 builds, the recipe is confirmed and auto-applied.

  • Layout patterns: Frame configs (direction, padding, gap, fills) captured from the first build and reused when the same pattern appears.

  • Design rules: Correct Mimic once ("brand color is only for links", "cards must have a card header component"), it saves the rule and enforces it on every future build.

  • DS gaps: Patterns built as primitives are tracked across builds. Mimic surfaces recommendations backed by evidence ("Status Badge used 31 times as primitives across 5 builds").

How it enforces:

  • Variable categories. Uses bg-* for a stroke? Mimic warns and suggests border-. Uses bg- as text color? Warns and suggests text-*.

  • Component-first from experience. If Mimic has used a Badge component in 3+ builds and you try to build one as a raw frame, it blocks with the component key and says "use this instead."

  • Rule compliance. Every build report audits stored rules against what was built. Violations are listed with evidence.

  • Chart color semantics. Brand, Success, Warning, and Error colors are excluded from chart palettes. Only neutral utility colors suggested for data visualization.

Efficiency features:

  • Text batch: All text overrides on a component instance set in a single call

  • Bulk table builder: An entire data table (headers, cells, variants, text) in one call

  • Bulk chart builder: Bar, line, donut, and radar charts in one call with DS color bindings


What gets checked automatically

Every build enforces 19 quality rules across 6 sequential phases.

  • Text uses DS text styles, not raw font properties

  • Colors bound to DS variables, not hardcoded

  • Variable categories enforced: text-* for text, bg-* for fills, border-* for strokes

  • Semantic colors (Brand, Success, Warning, Error) restricted to their intended use

  • Spacing and radius bound to DS tokens where available

  • Every frame uses auto-layout

  • Content matches the source exactly, character for character

  • DS components used wherever a match exists, including learned components from prior builds

  • Components fully configured: text overrides, variants, icon slots

  • User-defined design rules enforced at point of use and audited in the build report

  • Build report with component usage %, binding quality, rule compliance, and DS gap recommendations

Full specification: CLAUDE.md


Works with any design system

Design system type

What Mimic does

Team library (components + tokens)

Full usage: components, variables, text styles

Team library (components only)

Uses components, flags missing tokens, recommends adding them

Community libraries (public kits from Figma Community)

Full support including variable and component discovery

Enforcement adapts to what the DS provides. A library with text styles but no color variables enforces text styles and accepts raw colors. The build report shows what's missing and what adding it would unlock.


MCP client setup

Works with any MCP client. Optimized for Claude Code. Setup for Claude Code, Cursor, Codex CLI, and Gemini CLI (plus the general stdio-host case) is also in docs/HOSTS.md.

{
  "mcpServers": {
    "mimic-ai": {
      "command": "npx",
      "args": ["-y", "@miapre/mimic-ai"]
    }
  }
}

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "mimic-ai": {
      "command": "npx",
      "args": ["-y", "@miapre/mimic-ai"]
    }
  }
}

Click the install badge above, or add to settings:

{
  "mcp": {
    "servers": {
      "mimic-ai": {
        "command": "npx",
        "args": ["-y", "@miapre/mimic-ai"]
        }
    }
  }
}

Windsurf: ~/.codeium/windsurf/mcp_config.json JetBrains: Settings > Tools > AI Assistant > MCP Servers

{
  "mcpServers": {
    "mimic-ai": {
      "command": "npx",
      "args": ["-y", "@miapre/mimic-ai"]
    }
  }
}

All clients need the Figma plugin active. The bridge is embedded and starts automatically.


MCP Client (Claude Code, Cursor, VS Code)
    |
    | MCP Protocol (stdio)
    v
MCP Server (intelligence layer)
    - Tool registry, DS cache, knowledge store
    - Variable validation + suggestions before plugin
    - Circuit breaker (3 failures -> stop + report)
    - Chart geometry engine (Node.js)
    - Phase enforcement (6 sequential phases)
    |
    | Embedded WebSocket bridge (auto-starts)
    v
Figma Plugin (enforcement gate)
    - DS enforcement: rejects raw values when DS has tokens
    - Binding feedback: reports which bindings succeeded/failed
    - Thin handlers: mechanical operations only
    |
    v
Figma Plugin API > Canvas

Intelligence flows down. Binding feedback flows up. The MCP layer validates variable paths before reaching the plugin. The plugin reports exactly which DS bindings succeeded and which failed. Tool responses carry contextual hints so the LLM always knows what to do next.

  • Building is unlimited. Frames, components, and token bindings have no rate limit.

  • Inspecting is limited. Reading the library uses Figma's daily quota. Mimic caches aggressively to stay well under.

  • Token bindings are real. Update a variable in the DS, re-publish, and every node updates automatically.

  • Auto-layout everywhere. Every frame resizes correctly. Nothing is manually positioned.

A lean, consolidated surface (v3.0.0) — every tool carries MCP annotations (readOnlyHint, destructiveHint, idempotentHint) and the key workflow tools return structured output (outputSchema).

Status and learning: mimic_status, mimic_discover_ds, mimic_ai_knowledge_read, mimic_ai_knowledge_write, mimic_generate_build_report

DS setup: mimic_ds_assets (discover / preload / set_defaults), figma_list_ds (text styles / fill styles / variables), mimic_map_components

Build: figma_create_frame, figma_create_text, figma_create_shape (rectangle / ellipse), figma_create_svg, figma_insert_component, mimic_build_table, mimic_build_chart

Components: figma_component_text (single or batch overrides), figma_set_variant, figma_swap_main_component (swap / replace), figma_manage_slot (fill / reset)

Edit: figma_update_node (text, text_style, fill, layout, visibility, position, restyle, move, select, page), figma_variable_modes, figma_delete_node

Inspect and QA: figma_inspect (node, children, parent, text, pages, page, selection, variants, section), figma_validate_ds_compliance

Rendering and charts: mimic_pipeline_resolve, mimic_compute_chart

Desktop app required. Browser Figma won't work. Download

Personal Access Token. Figma > Profile > Settings > Security > Personal access tokens > Generate new token. Name: "Mimic AI", expiration: 90 days. Check five scopes: current_user:read, file_content:read, file_metadata:read, library_assets:read, library_content:read. All read-only. Mimic never writes to your library. Copy the token immediately.

Publish your DS. Components and tokens in a separate file, published as a team library. Re-publish after changes.

Professional plan or above. Free plan can't publish libraries.


FAQ

No. Mimic is free and MIT-licensed. The only requirements are your own Figma plan (Professional or above, to publish and use team libraries) and a read-only Figma personal access token. Note that Figma's own official MCP server and Design Agent are usage-metered as part of Figma's paid plans; Mimic isn't, it's a separate open-source project with no usage limits of its own.

Not yet. Today, each machine builds its own knowledge store scoped per design system library. Knowledge export/import between teammates is planned but not shipped. The store format (ds-knowledge.json) is a shareable JSON file, so a manual copy already works if you want to seed a teammate's setup.

Five read-only scopes: current_user:read, file_content:read, file_metadata:read, library_assets:read, library_content:read. There is no write scope in that list, so Mimic cannot use this token to modify any Figma file. All writes happen through the Figma plugin's own editor session, not the REST API.

Yes. Mimic discovers components and variables from any library enabled in your Figma file, including community-published libraries.

No. Everything runs locally. The only outbound call is to the Figma REST API for published component keys (read-only). No telemetry, no tracking.

Any MCP client works. The 6-phase protocol and contextual tool hints are optimized for Claude Code. Cursor, VS Code, Windsurf, and JetBrains get the full toolset but may not follow the protocol as closely.

Screenshot tools capture pixels, not structure. The result is a flat image you can't iterate on. Mimic reads semantic HTML and produces structured, layered Figma with real components, variable bindings, and auto-layout.

Mimic detects component and variant changes at the start of every build by comparing against what was cached from your last session. New components surface automatically. Removed components fall back gracefully with an explanation in the build report. Variable-level changes (e.g. a renamed color token) aren't detected yet — that's coming in a future release.

Yes, but with limited enforcement. Without published components, Mimic builds with primitives and raw values. Without tokens, it accepts hardcoded colors. The build report shows exactly what's missing and what adding it would unlock.


Privacy

Everything runs locally.

No design data leaves your machine. No telemetry. No tracking.

The only outbound call is to the Figma REST API for published component keys.


Constraints

  • Figma Professional plan required. Free plan can't publish libraries.

  • First-build font caching. Non-Inter DS fonts may fail on the first text node. Retry succeeds.

  • npx mode. Doesn't set FIGMA_ACCESS_TOKEN. Use the full installer for team library support.

  • Graduated DS enforcement. Adapts to what the DS provides. A component-only library gets components; raw values fill the gaps. The report shows what to add.

  • Claude-optimized. The 6-phase protocol and contextual tool hints work best with Claude Code. Other MCP clients get the tools but may not follow the full protocol.


Contributing

Issues and PRs welcome. See the issue tracker and CONTRIBUTING.md for dev setup and PR expectations. Found a security issue? See SECURITY.md instead of opening a public issue.


License

MIT

Available Tools

18 tools
figma_component_textA
Idempotent

Overrides text on a component instance in one call — pass an overrides array (a single override is just a one-item array). Each override sets one text node via textNodeName (matches by name — use for most cases) or textNodeId (exact match — use when configurationHints.textNodes gave you IDs, e.g. components with repeated node names). Use after figma_insert_component; configurationHints.textNodes lists every node that needs overriding. Saves N-1 tool calls vs. one call per node. Requires Phase 2.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesComponent instance node ID.
overridesYesArray of text overrides to apply. Each item needs textNodeName or textNodeId, plus content.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark the tool as idempotent and non-destructive. The description adds context about batch processing ('saves N-1 tool calls'), precedence of textNodeId over textNodeName, and the requirement for Phase 2, providing useful behavioral clues beyond the annotations.

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 highly concise, packing purpose, usage, and parameter details into a few sentences. It is front-loaded with the core action and efficiently adds context without redundancy.

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

Completeness4/5

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

Given the tool's simplicity and the presence of detailed schema annotations, the description covers essential aspects: usage flow, parameter selection, and efficiency benefits. It could mention error handling or limits, but the provided context is sufficient for an AI agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description enriches understanding by explaining the overrides array structure, the distinction between textNodeName (by name) and textNodeId (exact match), and the role of configurationHints.textNodes. This adds significant value beyond the raw 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?

The description clearly states it overrides text on a component instance, with specific details on usage after figma_insert_component and differentiation between textNodeName and textNodeId. It distinguishes itself from sibling tools like figma_update_node by focusing on text overrides in bulk.

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?

The description provides clear guidance on when to use the tool (after figma_insert_component, leveraging configurationHints.textNodes) and how to choose between textNodeName and textNodeId. It does not explicitly exclude other scenarios but offers sufficient context for appropriate use.

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

figma_create_frameA

Creates an auto-layout container frame (layout primitive) — the fallback when NO DS component exists for a section or layout. Every fill/padding/gap/radius binds to DS variables; component-like names are gated (pass confirmedNoComponent + primitiveOverrideReason for confirmed gaps). Name frames after their HTML role ("Header Section", "Card: Revenue"). Key params: parentId (omit for page-level artboard), direction, layoutSizing*, *Variable bindings, GRID mode. Check mimic_map_components FIRST. Phase 2+.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX position in pixels. Required for page-level artboards. Use rightmost existing artboard x + width + 80.
yNoY position in pixels. Defaults to 0 for artboards.
gapNoRaw item spacing in pixels. Use gapVariable when DS has spacing variables.
fillNoRaw hex color for background fill (e.g. "#ffffff"). Fallback when no DS styles/variables.
nameYesSemantic name describing the HTML role (e.g., "Header Section", "Metrics Row", "Card: Revenue"). Never use generic names like "Frame".
widthNoFixed width in pixels.
heightNoFixed height in pixels.
strokeNoRaw hex color for stroke (e.g. "#e4e6ee"). Fallback when no DS stroke variables.
paddingNoRaw uniform padding in pixels. Use paddingVariable when DS has spacing variables.
maxWidthNoMax width constraint.
parentIdNoParent node ID. Omit for page-level.
directionNoAuto-layout direction. Prefer HORIZONTAL or VERTICAL — NONE breaks portability. Use layoutPositioning ABSOLUTE for overlay children instead.
gridRowGapNoRaw row gap in pixels. Only used when layoutMode is GRID.
layoutModeNoSet to GRID to use CSS-grid-style layout (Grid automation, May 2026) instead of auto-layout. Requires gridRowCount/gridColumnCount. Errors clearly on Figma versions that do not support GRID layoutMode — fall back to direction HORIZONTAL/VERTICAL in that case.
paddingTopNoRaw top padding in pixels.
fillStyleIdNoDS fill style key for background (from figma_list_ds (kind: "fill_styles")). Preferred over fillVariable when DS has fill styles but no variables.
gapVariableNoDS variable path for item spacing.
gridRowSpanNoWhen this frame is a child of a GRID-layoutMode parent, how many rows it should span.
paddingLeftNoRaw left padding in pixels.
clipsContentNoClip content to frame bounds.
cornerRadiusNoRaw corner radius in pixels. Use cornerRadiusVariable when DS has radius variables.
fillVariableNoDS variable path for background fill.
gridRowCountNoNumber of grid rows. Only used when layoutMode is GRID.
paddingRightNoRaw right padding in pixels.
strokeWeightNoStroke weight in pixels.
gridColumnGapNoRaw column gap in pixels. Only used when layoutMode is GRID.
paddingBottomNoRaw bottom padding in pixels.
gridColumnSpanNoWhen this frame is a child of a GRID-layoutMode parent, how many columns it should span.
strokeVariableNoDS variable path for stroke color.
gridColumnCountNoNumber of grid columns. Only used when layoutMode is GRID.
paddingVariableNoDS variable path for uniform padding.
layoutPositioningNoSet to ABSOLUTE to position this frame as an overlay inside an auto-layout parent (out of flow but still contained). Use for grid lines, positioned labels, etc.
gridRowGapVariableNoDS spacing variable path for GRID row gap.
paddingTopVariableNoDS variable path for top padding.
paddingLeftVariableNoDS variable path for left padding.
confirmedNoComponentNoSet true only after DS/library search confirms no component exists for this role.
cornerRadiusVariableNoDS variable path for corner radius.
layoutSizingVerticalNoVertical sizing mode.
paddingRightVariableNoDS variable path for right padding.
counterAxisAlignItemsNoCounter axis alignment.
gridColumnGapVariableNoDS spacing variable path for GRID column gap.
paddingBottomVariableNoDS variable path for bottom padding.
primaryAxisAlignItemsNoPrimary axis alignment.
layoutSizingHorizontalNoHorizontal sizing mode.
primitiveOverrideReasonNoRequired with confirmedNoComponent for component-like primitives. Explain why this frame must be custom.

TDQS

A4.8/5.0
Behavior5/5

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

The description details behavioral traits: binds to DS variables, gates component-like names with confirmedNoComponent and primitiveOverrideReason, mentions GRID mode and its error behavior on unsupported Figma versions. Annotations are minimal, so description carries burden and does so effectively.

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?

The description is fairly dense but front-loads the main purpose. It lists key points without excessive verbosity. Could be slightly trimmed but overall efficient.

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

Completeness4/5

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

Given the tool's complexity (45 parameters, no output schema), the description covers high-level usage, constraints, and ties to other tools. Missing details about return value are acceptable without an output schema. Provides adequate context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds significant value by highlighting key parameters (parentId, direction, layoutSizing, variable bindings, GRID mode), explaining naming conventions, and clarifying the gating mechanism. Goes well beyond 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?

The description clearly states the tool creates an auto-layout container frame as a fallback when no DS component exists. It distinguishes from siblings by emphasizing it is a layout primitive and mentions checking mimic_map_components first.

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 to use this tool when no DS component exists, and to check mimic_map_components first. Also implies not to use when a component is available, and references phase 2+ for additional context.

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

figma_create_svgA

Creates a node from an SVG string in Figma. Useful for icons and custom graphics. Returns unboundChildren — a list of child nodes that need DS variable bindings. You MUST apply figma_update_node (op: "fill") to every unbound vector and figma_update_node (op: "text_style" then op: "fill") to every unbound text. Leaving unbound children breaks DS compliance and light/dark mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNode name.
parentIdYesParent node ID.
svgStringYesSVG markup string.
fillVariableNoDS variable path for fill override (applied to ALL child vectors uniformly).
strokeVariableNoDS variable path for stroke override.
layoutSizingVerticalNoVertical sizing mode.
layoutSizingHorizontalNoHorizontal sizing mode. Use FILL for charts inside auto-layout containers so they stretch to the container width.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations are minimal (none set to true), but the description adds crucial behavioral details: the return includes unboundChildren requiring immediate follow-up, and failure to process them breaks DS compliance and light/dark mode. This goes beyond annotations and gives clear transparency.

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 concise (four sentences) and well-structured: purpose, use case, return behavior, required follow-up actions. Every sentence adds necessary information without redundancy.

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?

Despite having no output schema, the description explains the output format (unboundChildren list). It covers required parameters, optional params with hints, and post-call steps. The DS compliance context is crucial for correct usage, making the description complete for the tool's complexity.

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 baseline is 3. The description adds minimal extra param meaning beyond the schema, except for layoutSizingHorizontal where it provides a usage hint ('Use FILL for charts inside auto-layout containers'). This slight added value keeps the score at 3.

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?

The description clearly states the tool creates a node from an SVG string in Figma, specifies it is useful for icons and custom graphics, and naturally distinguishes it from sibling tools like figma_create_frame or figma_create_text which handle different input types.

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?

The description provides strong post-call instructions (must apply figma_update_node to unbound children for DS compliance), which guides the agent on proper usage. It does not explicitly contrast with alternatives but implies when this tool is appropriate via the use case mention.

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

figma_create_textA

Creates a standalone text node bound to a DS text style (textStyleId — accepts style name or key) and DS color variable (fillVariable) — both are mandatory when the DS has them. Use for text OUTSIDE components; text inside a component instance uses figma_component_text instead. Strips hardcoded line breaks (container width controls wrapping). Name nodes after their HTML role ("Page Title", "Card: Revenue Label"). Params: parentId + content required. Phase 2+.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSemantic name describing the HTML element role (e.g., "Page Title", "Card: Revenue Label", "Subtitle"). Never use generic names like "Text".
widthNoFixed width for the text node.
contentYesText content.
parentIdYesParent node ID.
fillStyleIdNoDS fill style key for text color (from figma_list_ds (kind: "fill_styles")). Preferred over fillVariable when DS has fill styles but no variables.
textStyleIdNoDS text style — accepts style name (e.g. "Text sm/Semibold") or style key. Names are resolved to keys automatically.
fillVariableNoDS variable path for text color.
fontSizeVariableNoDS variable path for font size (if no text style).
layoutPositioningNoSet to ABSOLUTE to overlay this text inside an auto-layout parent.
lineHeightVariableNoDS variable path for line height.
textAlignHorizontalNoText alignment.
layoutSizingHorizontalNoHorizontal sizing mode.

TDQS

A4.5/5.0
Behavior4/5

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

The description discloses that it strips hardcoded line breaks (container width controls wrapping) and that nodes should be named after HTML roles. Annotations provide no behavioral info (all false), so the description adds these details. No contradictions.

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?

The description is concise (three sentences) and front-loaded with the core purpose. However, it mixes purpose, usage guidelines, and behavior in a single paragraph; a clearer structure could improve readability slightly.

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

Completeness4/5

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

Given the complexity (12 parameters, no output schema), the description provides sufficient context about what the tool does and its constraints. It does not explain return values, but that is acceptable since no output schema exists.

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% with descriptions, but the description adds context beyond the schema, such as mandatory conditions for textStyleId and fillVariable, and the naming convention. This adds value for parameter understanding.

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?

The description clearly states it creates a standalone text node bound to a DS text style and color variable. It specifies the verb 'creates' and the resource 'text node', and distinguishes it from the sibling tool figma_component_text.

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 states when to use this tool ('Use for text OUTSIDE components') and when not to ('text inside a component instance uses figma_component_text instead'). Also notes that textStyleId and fillVariable are mandatory when the DS has them.

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

figma_delete_nodeA
Destructive

Deletes a node from the Figma document. NEVER deletes artboards (top-level frames) — only child nodes within an artboard. To rebuild a screen, create a NEW artboard alongside the existing one. Destructive and irreversible via the API — verify the nodeId with figma_inspect first if unsure.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesNode ID to delete. Must NOT be a top-level artboard.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond annotations, adds that deletion is irreversible and never targets artboards, with verification guidance. No contradiction.

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?

Three focused sentences: action, constraint, guidance. No wasted words; well front-loaded.

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?

Complete for a single-param destructive tool: purpose, constraints, usage guidelines, behavioral traits covered. Output schema absent but irreversibility and verification suffice.

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%; description adds valuable constraint 'Must NOT be a top-level artboard' not present in schema description.

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?

Clearly states 'Deletes a node from the Figma document.' Distinguishes from siblings by explicitly excluding artboards and suggesting alternative.

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?

Provides explicit when-not-to-use (artboards), alternative action (create new artboard), and safety advice (verify with figma_inspect).

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

figma_inspectA
Read-onlyIdempotent

Reads Figma document state — node properties, children, parent, text detail, pages, top-level page nodes, selection, component variants, or a build-manifest section lookup. Read-only, never blocked by phase gates. Use to verify state before/after edits, discover node IDs, or check what a component set supports. Params: target (required: "node"|"children"|"parent"|"text"|"pages"|"page"|"selection"|"variants"|"section") selects the read; nodeId (node/children/parent/text), depth (children, default 1), componentSetKey (variants), sectionName (section — HTML section name from the last build).

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoHow many levels deep to traverse. Only used with target="children". Default 1.
nodeIdNoNode ID to inspect. Required for target: node, children, parent, text.
targetYes"node"=full node props, "children"=child nodes, "parent"=parent node, "text"=text node detail, "pages"=all pages in the file, "page"=top-level nodes on the current page, "selection"=currently selected nodes, "variants"=all variants for a component set, "section"=find a node by its HTML section name from the last build.
sectionNameNoThe HTML section to find (e.g., "header", "metrics row", "table"). Required for target="section".
componentSetKeyNoComponent set key. Required for target="variants".

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true. The description adds the behavioral trait 'never blocked by phase gates,' which provides useful context beyond annotations. It also clarifies that parameters are conditional on the selected target. No contradictions.

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?

The description is dense but well-structured: it states purpose, key traits, usage guidance, then a parameter mapping. All sentences are relevant. It could be slightly more concise by separating the parameter listing, but overall it is efficient for the amount of information.

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

Completeness3/5

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

Despite having 5 parameters and 100% schema coverage, the description does not explain the return format or structure for each target (e.g., what fields are returned for 'node' vs 'children'). With no output schema, the description should clarify what the caller can expect. The tool is complex (9 targets), so some gaps remain.

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 baseline is 3. The description adds value by explicitly mapping each target value to its required parameters (e.g., 'nodeId (node/children/parent/text)', 'componentSetKey (variants)', 'sectionName (section)'). This helps the agent understand parameter dependencies beyond the enum labels.

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?

The description clearly states 'Reads Figma document state' and enumerates nine specific read targets (node, children, parent, etc.). The title annotation 'Inspect Figma document state' reinforces a specific verb+resource. This differentiates from sibling mutation tools like figma_create_frame or figma_update_node.

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?

The description explicitly advises using the tool 'to verify state before/after edits, discover node IDs, or check what a component set supports.' It also notes 'Read-only, never blocked by phase gates,' which clarifies when it is safe to call. It does not explicitly mention when not to use it, but the read-only nature and sibling list imply it is not for modifications.

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

figma_list_dsA
Read-onlyIdempotent

Lists cached DS assets from the local cache — text styles, fill (color) styles, or variables. Use to browse what mimic_discover_ds already cached before binding: find a textStyleId for figma_create_text, a fillStyleId for figma_create_shape, or a variable path for figma_update_node. Params: kind ("text_styles"|"fill_styles"|"variables", required), filter (keyword, fill_styles only), category (text|background|border|foreground|spacing|radius, variables only). Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesWhich cache to list.
filterNoOptional keyword filter on the style name. Only used with kind="fill_styles" (e.g. "Blue", "Gray", "Red").
categoryNoOptional category filter. Only used with kind="variables" (text, background, border, foreground, spacing, radius). Omit for all.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true; the description adds 'Read-only' and clarifies it reads from a local cache. No contradictions, and the description supplements annotations appropriately.

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?

The description is well-structured: main purpose first, then usage guidance, then parameter details. It is slightly verbose but every sentence serves a purpose. Could be tightened, but overall effective.

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

Completeness4/5

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

Given no output schema, the description implicitly explains return values through examples (textStyleId, fillStyleId, variable path). It covers what an agent needs to know for selection and invocation.

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% and descriptions are already present, but the description adds value by explaining the context for each parameter (e.g., filter works only with fill_styles, category only with variables). This helps an agent understand conditional usage.

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?

The description clearly states the tool lists cached DS assets (text styles, fill styles, variables), with a specific verb ('Lists') and resource. It distinguishes from siblings like mimic_discover_ds and the figma_* tools that use these assets.

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?

The description provides explicit context: 'Use to browse what mimic_discover_ds already cached before binding' and gives concrete examples of finding IDs for other tools. It lacks explicit 'when not to use' but the guidance is clear.

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

figma_manage_slotA

Fills or resets a SLOT-type component property on an existing instance (Figma Slots, GA June 2026). action="fill" inserts a DS component instance into the slot (use configurationHints.slotProperties from figma_insert_component to find slotName). action="reset" restores the slot's default content. Params: nodeId (required), slotName (required), action ("fill"|"reset", default "fill"), componentKey (required for action="fill"). Requires Phase 2. Slot fills are recorded for build-report visibility only — never auto-replayed.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNo"fill" inserts a component into the slot (default). "reset" restores default content.
nodeIdYesInstance node ID that owns the slot.
slotNameYesSLOT property name from configurationHints.slotProperties.
componentKeyNoDS component key to insert into the slot. Required for action="fill".

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate non-read-only, non-idempotent, non-destructive. The description adds that Phase 2 is required, and that fills are only for build-report visibility and never auto-replayed. No contradictions with annotations.

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

Conciseness3/5

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

The description is concise but packs multiple pieces of information without clear structural separation. It is efficient but could be more readable with bullet points or clearer grouping.

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

Completeness3/5

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

No output schema is present, but the description does not explain return values or error conditions. For a mutation tool, this is a gap. However, annotations cover some safety aspects, and the description includes important constraints (Phase 2, non-auto-replay).

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 baseline is 3. The description adds value by explaining the action-dependent requirement for componentKey and referencing external tool for slotName. This extra context justifies a 4.

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?

The description clearly states the tool fills or resets a SLOT-type component property on an existing instance, with two specific actions. It references Figma Slots and distinguishes from siblings by mentioning configurationHints.slotProperties from figma_insert_component.

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?

Provides explicit guidance on when to use fill vs reset, including the prerequisite to find slotName via figma_insert_component. Also notes that slot fills are recorded but never auto-replayed. However, it does not explicitly compare to other sibling tools or state when not to use this tool.

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

figma_update_nodeA

Mutates an existing Figma node or the editor's UI focus, dispatched by op. Ops: "text" (set text content), "text_style" (apply DS text style), "fill" (fillStyleId/fillVariable/raw fill), "layout" (sizing, padding, gap, alignment), "visibility" (show/hide), "position" (absolute x/y), "restyle" (artboard/frame fill+radius+stroke+padding+gap in one call), "move" (reparent via parentId+index), "select" (select+scroll into view), "page" (switch page by name/id). All ops except "select"/"page" require Phase 2 (DS discovered) and validate any *Variable path against the cached DS before sending. Use figma_delete_node (separate, destructive tool) to remove a node instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoAbsolute x position. op="position".
yNoAbsolute y position. op="position".
opYesWhich mutation to perform.
fillNoRaw color as hex string ("#3b36f2") or RGB object. op="fill" fallback when no DS styles/variables available.
indexNoInsert index within the new parent. op="move". Omit for end.
widthNoFixed width. op="layout".
heightNoFixed height. op="layout".
nodeIdNoTarget node ID. Required for every op except "page".
pageIdNoPage ID to switch to. op="page". Takes precedence over pageName.
contentNoNew text content. op="text".
visibleNoTrue to show, false to hide. op="visibility".
maxWidthNoMax width constraint. op="layout".
pageNameNoPage name to switch to. op="page".
parentIdNoNew parent node ID. op="move".
fillStyleIdNoDS fill style key (from figma_list_ds). op="fill". Priority: fillStyleId → fillVariable → fill.
gapVariableNoDS variable for item spacing. op="layout" or "restyle".
textStyleIdNoDS text style key. op="text_style".
fillVariableNoDS variable path for fill color. op="fill" or "restyle".
strokeWeightNoStroke weight. op="restyle".
strokeVariableNoDS variable for stroke color. op="restyle".
paddingVariableNoDS variable for uniform padding. op="layout" or "restyle".
paddingTopVariableNoop="layout".
paddingLeftVariableNoop="layout".
cornerRadiusVariableNoDS variable for corner radius. op="restyle".
layoutSizingVerticalNoop="layout".
paddingRightVariableNoop="layout".
counterAxisAlignItemsNoop="layout".
paddingBottomVariableNoop="layout".
primaryAxisAlignItemsNoop="layout".
layoutSizingHorizontalNoop="layout".

TDQS

A4.8/5.0
Behavior5/5

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

The description states the mutation nature (consistent with readOnlyHint=false) and specifies prerequisites like Phase 2 and DS validation for variable paths. It also notes that fill has fallback logic. No annotation contradiction; annotations are supported by the description.

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?

The description is well-structured: main purpose first, then ops in parentheses, then conditions via semicolons. It's moderately long but justified by the tool's complexity (30 params, 10 ops). No redundancy; each sentence adds value.

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?

Given the high complexity of the tool, the description is remarkably complete. It covers all operations, prerequisites, fallbacks, and even mentions the sibling tool for deletion. No output schema is present, so return values are not expected. The description leaves no critical gaps.

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?

All 30 parameters are already documented in the input schema (100% coverage), so the description's added value is primarily in grouping params by op and explaining their contextual use. This extra organization is helpful but not essential given the schema's quality.

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?

The description clearly states it mutates a Figma node or editor focus via an 'op' parameter. It enumerates all 10 operations with brief explanations, distinguishing this tool from sibling 'figma_delete_node' which is for removal. The verb 'mutates' and resource 'Figma node or UI focus' are specific and accurate.

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 guidance is provided: which ops require Phase 2, which do not (select/page), and when to use alternative tool 'figma_delete_node' for removal. It also explains fallback behavior for fill operations. This helps the agent select the correct operation and avoid misuse.

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

figma_validate_ds_complianceA
Read-onlyIdempotent

Recursively checks a node (and its children) against the current DS enforcement profile — flags hardcoded colors/fonts instead of variables/styles, missing text style bindings, and other DS violations. Use during Phase 3/4 QA, especially at the 20-op build checkpoint, before generating the report. Params: nodeId (required, typically the artboard root).

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe Figma node ID to validate.

Output Schema

ParametersJSON Schema
NameRequiredDescription
summaryNo
violationsNoPer-node compliance violations found.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint and idempotentHint. The description adds valuable behavioral detail: the recursion, the types of violations checked (hardcoded colors/fonts, missing text style bindings), and that it runs against the current DS enforcement profile. No contradiction with annotations.

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?

Two concise sentences: first states purpose and scope, second gives usage timing and parameter hint. No wasted words.

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 compliance validation tool with an output schema (present but not shown), the description covers purpose, usage context, and parameter. It is complete enough for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with nodeId description. The description adds context: 'nodeId (required, typically the artboard root),' which aids correct parameter usage.

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?

The description clearly states it recursively checks a node and children against DS enforcement profile, flagging specific violations (hardcoded colors/fonts, missing text style bindings). It distinguishes itself from siblings like figma_inspect or figma_list_ds by focusing on compliance validation.

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?

Provides clear guidance on when to use: 'during Phase 3/4 QA, especially at the 20-op build checkpoint, before generating the report.' However, it does not explicitly state when not to use or mention alternative tools.

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

figma_variable_modesA
Idempotent

Sets the variable mode (e.g. light/dark) on a node — required on every new artboard, or DS variables render as black. By default sets the mode on ALL variable collections at once (pass modeIndex only). Pass collectionName to target a single collection instead. Params: nodeId (required, typically the artboard), modeIndex (required, 0=default/light, 1=dark), collectionName (optional). Requires Phase 2.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesNode ID (typically the artboard).
modeIndexYesMode index. 0 = default/light, 1 = dark (if available).
collectionNameNoOptional — variable collection name. Omit to set the mode on ALL collections at once (recommended).

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses that the tool modifies the node (consistent with readOnlyHint=false) and explains the mode-setting behavior for multiple collections. Annotations already provide idempotentHint=true and destructiveHint=false, which are not contradicted. The description adds context about the necessity and scope of changes.

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 very concise: three sentences followed by a param list. Every sentence adds essential information: purpose, necessity, default behavior, and parameter details. No redundant phrasing.

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

Completeness4/5

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

For a simple setter with no output schema, the description adequately covers the operation, necessity, and parameter logic. It could mention return value or confirmation, but the context is sufficient for an agent to use correctly.

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?

With 100% schema coverage, the description adds value by clarifying typical usage for nodeId ('typically the artboard'), explicit values for modeIndex (0=light, 1=dark), and the effect of omitting collectionName. This exceeds the schema descriptions.

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?

The description clearly states the verb 'Sets' and the resource 'variable mode on a node', with a specific use case ('required on every new artboard'). This distinguishes it from sibling tools like figma_update_node or figma_create_frame.

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?

The description explains when to use ('required on every new artboard') and what happens if not used ('DS variables render as black'). It also covers the default behavior (all collections) and how to target a single collection. It does not explicitly list when not to use or alternatives, but the context is clear.

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

mimic_ai_knowledge_readA
Read-onlyIdempotent

Loads the knowledge store: learned component recipes, layout/pattern data, DS gaps, user-defined rules, and meta stats (build counts, replay savings). Call at the start of a session to see what Mimic has already learned about this DS. Params: format ("json" default — structured data; "design_md" — renders the current DS + recipes as a DESIGN.md-style markdown string for documentation/handoff).

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNo"json" (default) returns structured store contents. "design_md" returns a rendered DESIGN.md markdown string instead.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint. Description adds detail on exactly what the knowledge store contains and how the format parameter affects output ('structured data' vs 'DESIGN.md markdown string'). No contradictions with annotations.

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?

Two sentences front-loading the main purpose, followed by parameter detail. No unnecessary words; every sentence is informative.

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?

Given no output schema, the description fully explains return contents (named categories) and the alternative format outcome. Tool is simple (1 optional param), so description is complete.

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. Description adds value by explaining the purpose of each enum value: 'json' returns structured data, 'design_md' returns a markdown string for documentation/handoff. This goes beyond the schema description.

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?

The description clearly states the tool loads the knowledge store and enumerates its contents (component recipes, layout data, DS gaps, rules, meta stats). It distinguishes from sibling tools like mimic_ai_knowledge_write and provides a usage recommendation ('Call at the start of a session').

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?

Explicitly advises when to call ('at the start of a session') and why (to see what has been learned). Does not list exclusions or alternatives, but the sibling context (e.g., write tool) implies when not to use it.

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

mimic_ai_knowledge_writeA
Idempotent

Saves a component recipe, layout pattern, DS gap, or user-defined design rule to the persistent knowledge store — the mechanism that lets Mimic learn across builds. Use "rule" when the user corrects build behavior in a generalizable way (e.g. "cards always have a header + content frame"); other types are usually written automatically by the build pipeline. Params: type ("component"|"pattern"|"gap"|"rule", required), id (unique key, required), data (entry payload, required).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUnique identifier for the entry.
dataYesThe entry data to store.
typeYesType of knowledge entry to save. Use "rule" for user-defined design rules that should be followed on every build (e.g., color semantics, card structure, component usage patterns).

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already indicate idempotentHint=true and destructiveHint=false. The description adds that the tool lets Mimic learn across builds, but does not disclose potential failures, permissions, or side effects beyond what annotations cover. With annotations providing the safety profile, the description adds moderate context.

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 concise with two sentences and a brief params summary. It front-loads the purpose and usage guidance without redundancy. Every sentence adds value.

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?

Given there is no output schema, the description is complete. It explains the tool's purpose, usage guidelines, and parameter details. Annotations provide idempotence and non-destructive hints, making the description sufficient for an agent to invoke the tool correctly.

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% with descriptions for all parameters. The description adds extra meaning for the 'type' parameter by providing use cases and examples (e.g., 'rule' for design rules), which goes beyond the schema enum list. The 'id' and 'data' parameters are clear from schema but not further elaborated.

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?

The description clearly states that the tool saves knowledge entries (component recipe, layout pattern, DS gap, or design rule) to a persistent store. It uses a specific verb (saves) and resource (knowledge store), and distinguishes itself from the sibling mimic_ai_knowledge_read tool.

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?

The description provides explicit guidance on when to use the 'rule' type (user correcting build behavior in a generalizable way) and notes that other types are usually written automatically. It does not explicitly state when not to use the tool, but the guidance is clear enough.

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

mimic_build_chartA

Bulk chart builder — creates an entire chart in ONE call: container, visualization (native rectangles or stroke-free SVG), axis labels, grid lines, and legend, all bound to DS variables and text styles. Use for ANY HTML chart instead of hand-building; reduces 30-50 tool calls to 1. chartType: bar, line, donut, radar. Key params: parentId, chartType, title, data, dimensions, colors (neutral DS data palette — never Brand/Success/Warning/Error). Use mimic_compute_chart for geometry-only. Phase 2+.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesChart data points. Bar: [{label, value}]. Donut: [{label, value}]. Line: [{label, value}] or [{x, y}]. Radar: [{label, value}] or [{label, values: [v1, v2]}] for multi-series.
titleYesChart card title text.
colorsNoDS color variable paths for data elements. Falls back to DS cache palette or default.
parentIdYesParent node ID to insert the chart into.
chartTypeYesThe type of chart to build.
gridColorNoDS variable path for grid lines. Falls back to DS cache border/secondary match.
dimensionsYesChart dimensions. Bar: {chartHeight, chartWidth?}. Donut: {outerRadius, innerRadius}. Line: {plotWidth, plotHeight}. Radar: {radius}. Optional for bar/line: yPrefix, ySuffix.
labelColorNoDS variable path for axis label text color. Falls back to DS cache text/tertiary match.
labelStyleNoDS text style name for axis labels. Falls back to smallest text style in DS cache.
titleColorNoDS variable path for title text color. Falls back to DS cache text/primary match.
titleStyleNoDS text style name for chart title. Falls back to DS cache sm/Semibold match.
seriesNamesNoLegend labels for multi-series charts (e.g. ["Current", "Target"]). For donut charts, legend is auto-generated from data labels.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations provide readOnlyHint=false, idempotentHint=false, destructiveHint=false. Description clarifies it creates new nodes, but doesn't specify if it overwrites or what happens on conflict. It also adds useful restrictions like color palette: 'never Brand/Success/Warning/Error'. No contradictions.

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?

Description is front-loaded with purpose and benefits. It is fairly concise, though includes a slightly cryptic 'Phase 2+' at the end. Overall efficient.

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

Completeness3/5

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

Given no output schema, description does not mention what the tool returns (e.g., node ID). The 'Phase 2+' note is confusing. For a complex tool with 12 parameters, it mostly covers inputs but lacks return behavior.

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 baseline 3. Description adds value by specifying data shapes per chart type (e.g., bar: [{label, value}]) and color restrictions beyond schema. Justifies a 4.

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?

The description clearly states it builds an entire chart in one call, enumerating components (container, visualization, labels, grid, legend) and chart types (bar, line, donut, radar). It distinguishes itself from hand-building and from the sibling tool mimic_compute_chart.

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 usage guidance: 'Use for ANY HTML chart instead of hand-building; reduces 30-50 tool calls to 1.' Also tells when to use an alternative: 'Use mimic_compute_chart for geometry-only.'

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

mimic_build_tableA

Bulk table builder — creates an entire data table in ONE call: column frames, DS Table header cell + Table cell components, variants (cellVariants for per-value badge colors), text, and consistent row height. Use for ANY HTML data table instead of cell-by-cell insertion; reduces 200+ tool calls to 1. Requires table cell components in the DS (returns creation guidance if missing). Key params: parentId, columns (header/style/cellVariants), rows ("text|supporting" syntax), cellHeight. Phase 2+.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsYesRow data as arrays of strings. Each inner array has one value per column. Use "|" to separate text and supporting text (e.g. "Sarah Chen|sarah@company.com"). Array length must match columns length.
columnsYesColumn definitions. Each column becomes a vertical frame with a header cell + data cells.
parentIdYesParent node ID to insert the table body into.
cellHeightNoFixed height for ALL data cells in pixels. Ensures row alignment across columns. Common values: 44, 56, 64, 72. If omitted, cells use HUG (may cause misalignment).
dataCellKeyNoComponent key for Table cell. If omitted, auto-resolved from DS cache/knowledge store.
headerCellKeyNoComponent key for Table header cell. If omitted, auto-resolved from DS cache/knowledge store.
headerVariantNoVariant overrides for all header cells (e.g. {"Checkbox": "False"}). Applied to every header.
firstColumnPaddingLeftNoDS spacing variable path for extra left padding on header cells and data cells of the FIRST column. Use when the table is inside a card to create visual inset (e.g., 24px/spacing-3xl). Applied via paddingLeftVariable on cells.
lastColumnPaddingRightNoDS spacing variable path for extra right padding on header cells and data cells of the LAST column. Use when the table is inside a card to create visual inset (e.g., 24px/spacing-3xl). Applied via paddingRightVariable on cells.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only set readOnlyHint=false, so the description carries the burden of behavioral disclosure. It explains the bulk creation nature and mentions a prerequisite check. It could further detail side effects (e.g., whether existing nodes are modified), but the provided context is solid and does not contradict annotations.

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?

The description is a single paragraph but front-loads the main idea and key benefits. It is appropriately sized given the complexity, though structured bullet points could improve scanability. Every sentence adds value, with no wasted words.

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

Completeness4/5

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

Considering the tool's complexity (9 parameters, nested objects, no output schema), the description covers the purpose, key parameters, and a prerequisite. It mentions returning creation guidance if DS components are missing. It lacks a description of the return value, but given the complexity, the description is quite complete overall.

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% with detailed descriptions for all 9 parameters. The description adds value by explaining key usage patterns (e.g., 'text|supporting' syntax for rows, cellHeight for alignment) and providing examples (cellVariants for badge colors). This goes beyond the schema, justifying a 4.

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?

The description clearly states it is a 'Bulk table builder' that creates an entire data table in one call, listing specific components (column frames, DS Table header cell, Table cell, variants, text, row height). It explicitly distinguishes from cell-by-cell insertion, making the purpose unambiguous and distinct from sibling tools.

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?

The description provides explicit when-to-use guidance ('Use for ANY HTML data table instead of cell-by-cell insertion') and highlights a key prerequisite ('Requires table cell components in the DS'). It also notes the benefit of reducing tool calls from 200+ to 1, giving clear context for selection.

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

mimic_discover_dsA

Complete DS discovery in two steps. Step 1: call with fileKey — discovers variables, text styles, components via plugin API, caches everything, stays at Phase 1. Step 2: call again with communitySearchResults (library names from Figma MCP search_design_system) — verifies no community libraries were missed, then advances to Phase 2 (build-ready). Build tools are BLOCKED until Step 2 completes. If a community library's variables are not discoverable via the plugin API (communityVariablesRequired response), fetch them via Figma MCP search_design_system and pass as externalVariables.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileKeyYesFigma file key to discover DS from.
libraryKeyNoLibrary key to use when multiple DS libraries are available. Returned from a previous call that detected multiple libraries.
skipRestApiNoSkip REST API component discovery (e.g. for community libraries where the file key is unavailable). Discovery proceeds with plugin-only data; use Figma MCP search_design_system + mimic_map_components to find components.
libraryFileKeyNoLibrary file key (alphanumeric string from the Figma URL of the library file). Prompted once per library, cached permanently.
externalVariablesNoVariables fetched via Figma MCP search_design_system for community libraries whose variables are not discoverable via the plugin API. Pass after receiving a communityVariablesRequired response.
identityDriftChoiceNoAnswer to a library-identity-drift prompt (name-keyed community library where most previously-known components vanished). "same" keeps learning under the existing history; "different" starts a fresh bucket for this library.
communitySearchResultsNoUnique library names found via Figma MCP search_design_system (query "color", includeVariables: true). Required after initial discovery to verify no community libraries were missed. Pass only non-null libraryName values.
communitySearchVariableKeysNoMap of libraryName → one sample variable key from search results. Used to validate which libraries are actually enabled in the file. Extract one key per library from the color search results.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
phaseNo
_stopBuildNoTrue when the build must not proceed until the returned instructions are followed.
phaseLabelNo
_userPromptNoPresent this to the user verbatim when a decision is required.
enforcementNo
completenessWarningsNo
communityLibraryCheckRequiredNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations provide minimal info, but the description adds extensive behavioral context: two-step process, caching, verification, blocking, community library handling, phases, and response types (communityVariablesRequired). No contradictions with annotations.

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

Conciseness3/5

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

The description is a single dense paragraph that could benefit from structuring (e.g., steps, bullet points). It front-loads the purpose but is longer than necessary. Adequate but not optimal.

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

Completeness4/5

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

Given the tool's complexity (8 parameters, nested objects, two-step process, output schema exists), the description is fairly complete. It explains phases, blocking, community handling, and caching. The output schema covers return values, so missing details are acceptable.

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). The description adds value by explaining parameter usage context (e.g., communitySearchResults required after initial discovery, externalVariables when communityVariablesRequired). This slightly exceeds baseline.

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?

The description clearly states 'Complete DS discovery in two steps' and explains the entire process, including phases and blocking. It distinguishes from sibling tools like mimic_map_components and build tools by specifying this discovers the design system and blocks build tools until completion.

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 instructions on when to call (step 1 with fileKey, step 2 with communitySearchResults). Provides conditional guidance (e.g., for communityVariablesRequired, fetch via Figma MCP and pass as externalVariables). Also clarifies that build tools are blocked until step 2 completes.

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

mimic_map_componentsA

Maps HTML element types (button, input, badge, table, tab, avatar, dropdown, textarea, header, footer, sidebar, ...) to DS component keys for the current build. Call once after mimic_discover_ds with all section-level + control element types. With FIGMA_TOKEN configured, one call is enough — all library components are pre-cached and missing types are confirmed gaps. Without a token, call again with librarySearchResults (from Figma MCP search_design_system) to close the loop. Workflow position: Phase 1-2, right after DS discovery, before figma_insert_component.

ParametersJSON Schema
NameRequiredDescriptionDefault
elementTypesYesList of HTML element types to map (e.g. ["button", "input", "badge", "table", "tab", "avatar", "dropdown", "textarea"]).
librarySearchResultsNoComponent search results from Figma MCP search_design_system. Pass ALL results from your searches (any library — they will be filtered). This completes the search loop: matched components get cached, unmatched types get confirmed as "no component exists".

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
mappedNo
missingNo
notFoundNo
componentsNo
searchCompleteNo
selectedLibraryNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only provide readOnlyHint=false and idempotentHint=false. The description adds significant behavioral context: caching mechanism, gap confirmation, and the search loop completion behavior. No contradiction with annotations.

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 around 100 words, front-loads the core purpose, and is divided into clear sentences. Every sentence adds value, and there is no redundancy or unnecessary information.

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

Completeness4/5

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

Given the tool's complexity (2 params, output schema exists), the description covers purpose, workflow position, caching behavior, and conditional usage. It does not cover error handling, but with the existing output schema, the description is sufficiently complete for an AI agent.

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 baseline is 3. The description adds valuable semantic guidance for both parameters: for elementTypes it specifies 'all section-level + control element types', and for librarySearchResults it explains the search loop and filtering behavior, going beyond the schema's type descriptions.

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?

The description clearly states the tool maps HTML element types to DS component keys, providing specific examples (button, input, etc.) and distinguishes itself from sibling tools like mimic_discover_ds by specifying its workflow position.

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?

The description gives explicit guidance on when to call (after mimic_discover_ds, before figma_insert_component) and how to use it differently depending on FIGMA_TOKEN presence. It does not list alternatives or when not to use, but the conditional instructions are very clear.

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

mimic_statusA
Read-onlyIdempotent

START EVERY SESSION HERE. Returns Figma plugin connection status, the current build phase (0=idle through 5=report), enforcement profile, cached DS counts, knowledge store summary (learned components/patterns/gaps/rules), and a contextual hint telling you exactly what to call next. Also clears build-interrupt state after a plugin reconnect and warns if a completed build is missing its mandatory report. No params — call with no arguments.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintYesWhat to call next.
phaseYes0=idle, 1=discovery, 2=inventory, 3=build, 4=qa, 5=report.
dsCacheNo
cacheHitsNo
knowledgeNo
phaseLabelNo
toolCallCountNo
pluginConnectedYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations indicate readOnlyHint=true and idempotentHint=true. The description adds behavioral context beyond annotations: it clears build-interrupt state after a plugin reconnect and warns if a completed build is missing its mandatory report. These side effects are disclosed and consistent with annotations.

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?

The description is dense but well-structured, starting with the imperative instruction and listing all return fields and side effects. Every sentence adds value. Slightly verbose but justified by the complexity of the status tool.

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?

Given the tool returns a complex status and a hint for next steps, and that an output schema exists (context signals indicate true), the description covers purpose, usage, side effects, and parameter constraints completely. No gaps remain for agent invocation.

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?

The tool has zero parameters (schema coverage 100%). The description explicitly states 'No params — call with no arguments,' adding clarity beyond the empty schema. Baseline is 4 for no-parameter tools, and this description fully compensates.

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?

The description states the tool returns Figma plugin connection status, build phase, enforcement profile, cached DS counts, knowledge store summary, and a contextual hint for next call. It distinguishes itself from siblings by explicitly instructing to start every session here, making purpose and scope clear.

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?

The description explicitly says 'START EVERY SESSION HERE,' providing clear when-to-use guidance. It also explains that the tool returns a hint telling the agent what to call next, guiding sequential behavior. No exclusions needed given its role as the first tool.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 55 tool updatesv3.0.0
    • Removedfigma_batch
    • Removedfigma_change_page
    • Addedfigma_component_text
    • Removedfigma_create_chart
    • Removedfigma_create_ellipse
    • Changedfigma_create_frame61 fields changed
      • addedInput schema / properties / clipsContent / description
        Added value: +"Clip content to frame bounds."
      • addedInput schema / properties / confirmedNoComponent
        Added value: +{
        +  "description": "Set true only after DS/library search confirms no component exists for this role.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / cornerRadius / description
        Previous value: -"Corner radius. DS variable path (e.g., \"radius-xl\") preferred. Raw px allowed in permissive mode only."New value: +"Raw corner radius in pixels. Use cornerRadiusVariable when DS has radius variables."
      • changedInput schema / properties / cornerRadius / type
        Previous value: -[
        -  "number",
        -  "string"
        -]New value: +"number"
      • changedInput schema / properties / cornerRadiusVariable / description
        Previous value: -"DS radius variable path (e.g., \"Radius/radius-xl\"). Bound via setBoundVariable. Preferred over raw cornerRadius number."New value: +"DS variable path for corner radius."
      • addedInput schema / properties / counterAxisAlignItems / description
        Added value: +"Counter axis alignment."
      • removedInput schema / properties / counterAxisSizingMode
        Removed value: -{
        -  "description": "AUTO = hug contents along counter axis.",
        -  "enum": [
        -    "FIXED",
        -    "AUTO"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / properties / direction / description
        Previous value: -"Auto-layout direction. NONE = no auto-layout."New value: +"Auto-layout direction. Prefer HORIZONTAL or VERTICAL — NONE breaks portability. Use layoutPositioning ABSOLUTE for overlay children instead."
      • addedInput schema / properties / fill
        Added value: +{
        +  "description": "Raw hex color for background fill (e.g. \"#ffffff\"). Fallback when no DS styles/variables.",
        +  "type": "string"
        +}
      • removedInput schema / properties / fillHex
        Removed value: -{
        -  "description": "Fallback hex color if fillVariable is not available.",
        -  "type": "string"
        -}
      • removedInput schema / properties / fillNone
        Removed value: -{
        -  "description": "Set true for no fill (transparent).",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / fillStyleId
        Added value: +{
        +  "description": "DS fill style key for background (from figma_list_ds (kind: \"fill_styles\")). Preferred over fillVariable when DS has fill styles but no variables.",
        +  "type": "string"
        +}
      • changedInput schema / properties / fillVariable / description
        Previous value: -"Design token variable path for background fill, e.g. \"Colors/Background/bg-primary\"."New value: +"DS variable path for background fill."
      • changedInput schema / properties / gap / description
        Previous value: -"Gap between children. DS variable path (e.g., \"spacing-3xl\") preferred. Raw px number allowed in permissive mode only."New value: +"Raw item spacing in pixels. Use gapVariable when DS has spacing variables."
      • changedInput schema / properties / gap / type
        Previous value: -[
        -  "number",
        -  "string"
        -]New value: +"number"
      • changedInput schema / properties / gapVariable / description
        Previous value: -"DS spacing variable path for gap (e.g., \"Spacing/spacing-3xl\"). Bound via setBoundVariable. Preferred over raw gap number."New value: +"DS variable path for item spacing."
      • addedInput schema / properties / gridColumnCount
        Added value: +{
        +  "description": "Number of grid columns. Only used when layoutMode is GRID.",
        +  "type": "number"
        +}
      • addedInput schema / properties / gridColumnGap
        Added value: +{
        +  "description": "Raw column gap in pixels. Only used when layoutMode is GRID.",
        +  "type": "number"
        +}
      • addedInput schema / properties / gridColumnGapVariable
        Added value: +{
        +  "description": "DS spacing variable path for GRID column gap.",
        +  "type": "string"
        +}
      • addedInput schema / properties / gridColumnSpan
        Added value: +{
        +  "description": "When this frame is a child of a GRID-layoutMode parent, how many columns it should span.",
        +  "type": "number"
        +}
      • addedInput schema / properties / gridRowCount
        Added value: +{
        +  "description": "Number of grid rows. Only used when layoutMode is GRID.",
        +  "type": "number"
        +}
      • addedInput schema / properties / gridRowGap
        Added value: +{
        +  "description": "Raw row gap in pixels. Only used when layoutMode is GRID.",
        +  "type": "number"
        +}
      • addedInput schema / properties / gridRowGapVariable
        Added value: +{
        +  "description": "DS spacing variable path for GRID row gap.",
        +  "type": "string"
        +}
      • addedInput schema / properties / gridRowSpan
        Added value: +{
        +  "description": "When this frame is a child of a GRID-layoutMode parent, how many rows it should span.",
        +  "type": "number"
        +}
      • addedInput schema / properties / height / description
        Added value: +"Fixed height in pixels."
      • removedInput schema / properties / layoutAlign
        Removed value: -{
        -  "enum": [
        -    "MIN",
        -    "CENTER",
        -    "MAX",
        -    "STRETCH",
        -    "INHERIT"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / layoutGrow
        Removed value: -{
        -  "description": "1 = fill remaining space in parent.",
        -  "type": "number"
        -}
      • addedInput schema / properties / layoutMode
        Added value: +{
        +  "description": "Set to GRID to use CSS-grid-style layout (Grid automation, May 2026) instead of auto-layout. Requires gridRowCount/gridColumnCount. Errors clearly on Figma versions that do not support GRID layoutMode — fall back to direction HORIZONTAL/VERTICAL in that case.",
        +  "enum": [
        +    "GRID"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / layoutPositioning
        Added value: +{
        +  "description": "Set to ABSOLUTE to position this frame as an overlay inside an auto-layout parent (out of flow but still contained). Use for grid lines, positioned labels, etc.",
        +  "enum": [
        +    "AUTO",
        +    "ABSOLUTE"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / layoutSizingHorizontal
        Added value: +{
        +  "description": "Horizontal sizing mode.",
        +  "enum": [
        +    "FIXED",
        +    "HUG",
        +    "FILL"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / layoutSizingVertical
        Added value: +{
        +  "description": "Vertical sizing mode.",
        +  "enum": [
        +    "FIXED",
        +    "HUG",
        +    "FILL"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / maxWidth
        Added value: +{
        +  "description": "Max width constraint.",
        +  "type": "number"
        +}
      • changedInput schema / properties / name / description
        Previous value: -"Layer name"New value: +"Semantic name describing the HTML role (e.g., \"Header Section\", \"Metrics Row\", \"Card: Revenue\"). Never use generic names like \"Frame\"."
      • changedInput schema / properties / padding / description
        Previous value: -"Uniform padding. DS variable path preferred. Raw px allowed in permissive mode only."New value: +"Raw uniform padding in pixels. Use paddingVariable when DS has spacing variables."
      • changedInput schema / properties / padding / type
        Previous value: -[
        -  "number",
        -  "string"
        -]New value: +"number"
      • addedInput schema / properties / paddingBottom / description
        Added value: +"Raw bottom padding in pixels."
      • changedInput schema / properties / paddingBottom / type
        Previous value: -[
        -  "number",
        -  "string"
        -]New value: +"number"
      • addedInput schema / properties / paddingBottomVariable
        Added value: +{
        +  "description": "DS variable path for bottom padding.",
        +  "type": "string"
        +}
      • addedInput schema / properties / paddingLeft / description
        Added value: +"Raw left padding in pixels."
      • changedInput schema / properties / paddingLeft / type
        Previous value: -[
        -  "number",
        -  "string"
        -]New value: +"number"
      • addedInput schema / properties / paddingLeftVariable
        Added value: +{
        +  "description": "DS variable path for left padding.",
        +  "type": "string"
        +}
      • addedInput schema / properties / paddingRight / description
        Added value: +"Raw right padding in pixels."
      • changedInput schema / properties / paddingRight / type
        Previous value: -[
        -  "number",
        -  "string"
        -]New value: +"number"
      • addedInput schema / properties / paddingRightVariable
        Added value: +{
        +  "description": "DS variable path for right padding.",
        +  "type": "string"
        +}
      • addedInput schema / properties / paddingTop / description
        Added value: +"Raw top padding in pixels."
      • changedInput schema / properties / paddingTop / type
        Previous value: -[
        -  "number",
        -  "string"
        -]New value: +"number"
      • addedInput schema / properties / paddingTopVariable
        Added value: +{
        +  "description": "DS variable path for top padding.",
        +  "type": "string"
        +}
      • changedInput schema / properties / paddingVariable / description
        Previous value: -"DS spacing variable path for uniform padding. Bound to all 4 sides via setBoundVariable."New value: +"DS variable path for uniform padding."
      • addedInput schema / properties / parentId
        Added value: +{
        +  "description": "Parent node ID. Omit for page-level.",
        +  "type": "string"
        +}
      • removedInput schema / properties / parentNodeId
        Removed value: -{
        -  "description": "Append to this parent. Omit to place on current page.",
        -  "type": "string"
        -}
      • addedInput schema / properties / primaryAxisAlignItems / description
        Added value: +"Primary axis alignment."
      • removedInput schema / properties / primaryAxisSizingMode
        Removed value: -{
        -  "description": "AUTO = hug contents along primary axis. Defaults to FIXED when width+height are set.",
        -  "enum": [
        -    "FIXED",
        -    "AUTO"
        -  ],
        -  "type": "string"
        -}
      • addedInput schema / properties / primitiveOverrideReason
        Added value: +{
        +  "description": "Required with confirmedNoComponent for component-like primitives. Explain why this frame must be custom.",
        +  "type": "string"
        +}
      • addedInput schema / properties / stroke
        Added value: +{
        +  "description": "Raw hex color for stroke (e.g. \"#e4e6ee\"). Fallback when no DS stroke variables.",
        +  "type": "string"
        +}
      • removedInput schema / properties / strokeHex
        Removed value: -{
        -  "description": "Fallback hex for border color.",
        -  "type": "string"
        -}
      • changedInput schema / properties / strokeVariable / description
        Previous value: -"Variable path for border color."New value: +"DS variable path for stroke color."
      • addedInput schema / properties / strokeWeight
        Added value: +{
        +  "description": "Stroke weight in pixels.",
        +  "type": "number"
        +}
      • removedInput schema / properties / strokeWidth
        Removed value: -{
        -  "description": "Border width in px.",
        -  "type": "number"
        -}
      • addedInput schema / properties / width / description
        Added value: +"Fixed width in pixels."
      • addedInput schema / properties / x / description
        Added value: +"X position in pixels. Required for page-level artboards. Use rightmost existing artboard x + width + 80."
      • addedInput schema / properties / y / description
        Added value: +"Y position in pixels. Defaults to 0 for artboards."
    • Removedfigma_create_rectangle
    • Addedfigma_create_svg
    • Changedfigma_create_text24 fields changed
      • addedInput schema / properties / content
        Added value: +{
        +  "description": "Text content.",
        +  "type": "string"
        +}
      • removedInput schema / properties / fillHex
        Removed value: -{
        -  "description": "Fallback hex color.",
        -  "type": "string"
        -}
      • addedInput schema / properties / fillStyleId
        Added value: +{
        +  "description": "DS fill style key for text color (from figma_list_ds (kind: \"fill_styles\")). Preferred over fillVariable when DS has fill styles but no variables.",
        +  "type": "string"
        +}
      • changedInput schema / properties / fillVariable / description
        Previous value: -"Color token path, e.g. \"Colors/Text/text-primary\"."New value: +"DS variable path for text color."
      • removedInput schema / properties / fontSize
        Removed value: -{
        -  "description": "Fallback — prefer textStyleId.",
        -  "type": "number"
        -}
      • addedInput schema / properties / fontSizeVariable
        Added value: +{
        +  "description": "DS variable path for font size (if no text style).",
        +  "type": "string"
        +}
      • removedInput schema / properties / fontWeight
        Removed value: -{
        -  "description": "Fallback — prefer textStyleId.",
        -  "enum": [
        -    400,
        -    500,
        -    600,
        -    700
        -  ],
        -  "type": "number"
        -}
      • removedInput schema / properties / layoutAlign
        Removed value: -{
        -  "enum": [
        -    "MIN",
        -    "CENTER",
        -    "MAX",
        -    "STRETCH",
        -    "INHERIT"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / layoutGrow
        Removed value: -{
        -  "type": "number"
        -}
      • addedInput schema / properties / layoutPositioning
        Added value: +{
        +  "description": "Set to ABSOLUTE to overlay this text inside an auto-layout parent.",
        +  "enum": [
        +    "AUTO",
        +    "ABSOLUTE"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / layoutSizingHorizontal
        Added value: +{
        +  "description": "Horizontal sizing mode.",
        +  "enum": [
        +    "FIXED",
        +    "HUG",
        +    "FILL"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / lineHeight
        Removed value: -{
        -  "description": "Line height in px. Fallback — prefer textStyleId.",
        -  "type": "number"
        -}
      • addedInput schema / properties / lineHeightVariable
        Added value: +{
        +  "description": "DS variable path for line height.",
        +  "type": "string"
        +}
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Semantic name describing the HTML element role (e.g., \"Page Title\", \"Card: Revenue Label\", \"Subtitle\"). Never use generic names like \"Text\".",
        +  "type": "string"
        +}
      • addedInput schema / properties / parentId
        Added value: +{
        +  "description": "Parent node ID.",
        +  "type": "string"
        +}
      • removedInput schema / properties / parentNodeId
        Removed value: -{
        -  "type": "string"
        -}
      • removedInput schema / properties / text
        Removed value: -{
        -  "description": "Text content.",
        -  "type": "string"
        -}
      • addedInput schema / properties / textAlignHorizontal / description
        Added value: +"Text alignment."
      • changedInput schema / properties / textAlignHorizontal / enum
        Previous value: -[
        -  "LEFT",
        -  "CENTER",
        -  "RIGHT"
        -]New value: +[
        +  "LEFT",
        +  "CENTER",
        +  "RIGHT",
        +  "JUSTIFIED"
        +]
      • changedInput schema / properties / textStyleId / description
        Previous value: -"DS text style ID (e.g. \"S:abc123,7649:603\"). Use figma_list_text_styles to discover IDs."New value: +"DS text style — accepts style name (e.g. \"Text sm/Semibold\") or style key. Names are resolved to keys automatically."
      • changedInput schema / properties / width / description
        Previous value: -"Fixed width — text wraps at this width."New value: +"Fixed width for the text node."
      • removedInput schema / properties / x
        Removed value: -{
        -  "type": "number"
        -}
      • removedInput schema / properties / y
        Removed value: -{
        -  "type": "number"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "text"
        -]New value: +[
        +  "parentId",
        +  "content"
        +]
    • Changedfigma_delete_node1 field changed
      • addedInput schema / properties / nodeId / description
        Added value: +"Node ID to delete. Must NOT be a top-level artboard."
    • Removedfigma_discover_library_styles
    • Removedfigma_discover_library_variables
    • Removedfigma_get_component_variants
    • Removedfigma_get_node_children
    • Removedfigma_get_node_parent
    • Removedfigma_get_node_props
    • Removedfigma_get_page_nodes
    • Removedfigma_get_pages
    • Removedfigma_get_selection
    • Removedfigma_get_text_info
    • Removedfigma_insert_component
    • Addedfigma_inspect
    • Addedfigma_list_ds
    • Removedfigma_list_text_styles
    • Addedfigma_manage_slot
    • Removedfigma_move_node
    • Removedfigma_preload_styles
    • Removedfigma_preload_variables
    • Removedfigma_read_variable_values
    • Removedfigma_replace_component
    • Removedfigma_restyle_artboard
    • Removedfigma_select_node
    • Removedfigma_set_component_text
    • Removedfigma_set_layout_sizing
    • Removedfigma_set_node_fill
    • Removedfigma_set_session_defaults
    • Removedfigma_set_text
    • Removedfigma_set_variant
    • Removedfigma_set_visibility
    • Removedfigma_swap_main_component
    • Removedfigma_tag_raw_exception
    • Addedfigma_update_node
    • Changedfigma_validate_ds_compliance2 fields changed
      • changedInput schema / properties / nodeId / description
        Previous value: -"Root node ID to validate (typically the artboard)."New value: +"The Figma node ID to validate."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "summary": {
        +      "properties": {
        +        "compliant": {
        +          "type": "number"
        +        },
        +        "totalNodes": {
        +          "type": "number"
        +        },
        +        "violations": {
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "violations": {
        +      "description": "Per-node compliance violations found.",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedfigma_variable_modes
    • Changedmimic_ai_knowledge_read3 fields changed
      • addedInput schema / properties / format
        Added value: +{
        +  "description": "\"json\" (default) returns structured store contents. \"design_md\" returns a rendered DESIGN.md markdown string instead.",
        +  "enum": [
        +    "json",
        +    "design_md"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / pattern_key
        Removed value: -{
        -  "description": "Optional. Return only the entry matching this pattern key (e.g. \"metric/kpi\"). Omit to return all entries.",
        -  "type": "string"
        -}
      • addedInput schema / required
        Added value: +[]
    • Changedmimic_ai_knowledge_write7 fields changed
      • addedInput schema / properties / data
        Added value: +{
        +  "description": "The entry data to store.",
        +  "type": "object"
        +}
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Unique identifier for the entry.",
        +  "type": "string"
        +}
      • removedInput schema / properties / reset_gap_seen_counts
        Removed value: -{
        -  "description": "Set true when the user signals their design system was updated. Resets seen_count to 0 on ALL gap-type rules, causing Mimic AI to re-run DS search for those patterns on the next run and discover any newly added components.",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / rule_updates
        Removed value: -{
        -  "description": "Array of explicit DS rule updates: gaps (no component exists), substitutions (use this instead), or conventions (DS usage rules).",
        -  "items": {
        -    "properties": {
        -      "dismissed": {
        -        "description": "Set true to permanently suppress this gap from DS recommendations. Use when the user acknowledges the gap and decides not to add the component.",
        -        "type": "boolean"
        -      },
        -      "increment_seen": {
        -        "description": "Set true to increment seen_count by 1. Use for gap/substitution rules — not for conventions.",
        -        "type": "boolean"
        -      },
        -      "notes": {
        -        "description": "Optional context about this rule.",
        -        "type": "string"
        -      },
        -      "reason": {
        -        "description": "Why this rule exists.",
        -        "type": "string"
        -      },
        -      "reset_seen_count": {
        -        "description": "Set true to reset seen_count to 0. Use when a correction is made (paired with increment_correction on the pattern update) or when demoting a stale rule.",
        -        "type": "boolean"
        -      },
        -      "rule_key": {
        -        "description": "Required. Pattern key this rule applies to (e.g. \"label/chip\"). Must match the Pattern Key Taxonomy.",
        -        "type": "string"
        -      },
        -      "state": {
        -        "description": "Set \"resolved\" when a previously missing DS component now exists. Removes the rule from future recommendations and re-enables DS search.",
        -        "enum": [
        -          "active",
        -          "resolved"
        -        ],
        -        "type": "string"
        -      },
        -      "substitution_key": {
        -        "description": "Component key to use as fallback when pattern has no direct DS match.",
        -        "type": "string"
        -      },
        -      "substitution_name": {
        -        "description": "Human-readable name of the substitution component.",
        -        "type": "string"
        -      },
        -      "type": {
        -        "description": "gap = no DS component; substitution = use substitution_key instead; convention = DS usage rule.",
        -        "enum": [
        -          "gap",
        -          "substitution",
        -          "convention"
        -        ],
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "rule_key"
        -    ],
        -    "type": "object"
        -  },
        -  "type": "array"
        -}
      • addedInput schema / properties / type
        Added value: +{
        +  "description": "Type of knowledge entry to save. Use \"rule\" for user-defined design rules that should be followed on every build (e.g., color semantics, card structure, component usage patterns).",
        +  "enum": [
        +    "component",
        +    "pattern",
        +    "gap",
        +    "rule"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / updates
        Removed value: -{
        -  "description": "Array of pattern entry updates to apply.",
        -  "items": {
        -    "properties": {
        -      "component_key": {
        -        "description": "Figma component key hash for the mapped DS component.",
        -        "type": "string"
        -      },
        -      "component_name": {
        -        "description": "Human-readable component name.",
        -        "type": "string"
        -      },
        -      "dismissed_conflicts": {
        -        "description": "Component keys to suppress in future DS evolution conflict scans.",
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "increment_correction": {
        -        "description": "Set true when the user corrected this mapping. Increments correction_count and demotes VERIFIED→CANDIDATE. Also write a rule_update with reset_seen_count=true for any associated rule.",
        -        "type": "boolean"
        -      },
        -      "increment_use": {
        -        "description": "Set true to increment use_count by 1 for an existing entry.",
        -        "type": "boolean"
        -      },
        -      "library_key": {
        -        "description": "Library key from Figma search. Tracks which DS library this component belongs to.",
        -        "type": "string"
        -      },
        -      "library_name": {
        -        "description": "Human-readable library name (e.g., \"My Team Library\").",
        -        "type": "string"
        -      },
        -      "notes": {
        -        "description": "Optional context note.",
        -        "type": "string"
        -      },
        -      "pattern_key": {
        -        "description": "Required. Canonical taxonomy key (e.g. \"metric/kpi\", \"label/chip\"). Must match the Pattern Key Taxonomy.",
        -        "type": "string"
        -      },
        -      "state": {
        -        "description": "Explicit state override. Omit to let promotion logic handle CANDIDATE→VERIFIED automatically.",
        -        "enum": [
        -          "CANDIDATE",
        -          "VERIFIED",
        -          "REJECTED",
        -          "EXPIRED"
        -        ],
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "pattern_key"
        -    ],
        -    "type": "object"
        -  },
        -  "type": "array"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "updates"
        -]New value: +[
        +  "type",
        +  "id",
        +  "data"
        +]
    • Addedmimic_build_chart
    • Addedmimic_build_table
    • Changedmimic_discover_ds9 fields changed
      • addedInput schema / properties / communitySearchResults
        Added value: +{
        +  "description": "Unique library names found via Figma MCP search_design_system (query \"color\", includeVariables: true). Required after initial discovery to verify no community libraries were missed. Pass only non-null libraryName values.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / communitySearchVariableKeys
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "description": "Map of libraryName → one sample variable key from search results. Used to validate which libraries are actually enabled in the file. Extract one key per library from the color search results.",
        +  "type": "object"
        +}
      • addedInput schema / properties / externalVariables
        Added value: +{
        +  "description": "Variables fetched via Figma MCP search_design_system for community libraries whose variables are not discoverable via the plugin API. Pass after receiving a communityVariablesRequired response.",
        +  "items": {
        +    "properties": {
        +      "collection": {
        +        "description": "Collection name (e.g. \"palette\", \"spacing\").",
        +        "type": "string"
        +      },
        +      "key": {
        +        "description": "Variable key from Figma MCP search results.",
        +        "type": "string"
        +      },
        +      "libraryName": {
        +        "description": "Library name the variable belongs to.",
        +        "type": "string"
        +      },
        +      "name": {
        +        "description": "Variable name/path (e.g. \"colors/content/content1\").",
        +        "type": "string"
        +      },
        +      "resolvedType": {
        +        "description": "Variable type: COLOR, FLOAT, STRING, BOOLEAN.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / fileKey / description
        Previous value: -"Figma file key for the DS library file."New value: +"Figma file key to discover DS from."
      • addedInput schema / properties / identityDriftChoice
        Added value: +{
        +  "description": "Answer to a library-identity-drift prompt (name-keyed community library where most previously-known components vanished). \"same\" keeps learning under the existing history; \"different\" starts a fresh bucket for this library.",
        +  "enum": [
        +    "same",
        +    "different"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / libraryFileKey
        Added value: +{
        +  "description": "Library file key (alphanumeric string from the Figma URL of the library file). Prompted once per library, cached permanently.",
        +  "type": "string"
        +}
      • addedInput schema / properties / libraryKey
        Added value: +{
        +  "description": "Library key to use when multiple DS libraries are available. Returned from a previous call that detected multiple libraries.",
        +  "type": "string"
        +}
      • addedInput schema / properties / skipRestApi
        Added value: +{
        +  "description": "Skip REST API component discovery (e.g. for community libraries where the file key is unavailable). Discovery proceeds with plugin-only data; use Figma MCP search_design_system + mimic_map_components to find components.",
        +  "type": "boolean"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "_stopBuild": {
        +      "description": "True when the build must not proceed until the returned instructions are followed.",
        +      "type": "boolean"
        +    },
        +    "_userPrompt": {
        +      "description": "Present this to the user verbatim when a decision is required.",
        +      "type": "string"
        +    },
        +    "communityLibraryCheckRequired": {
        +      "type": "boolean"
        +    },
        +    "completenessWarnings": {
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "enforcement": {
        +      "type": "object"
        +    },
        +    "hint": {
        +      "type": "string"
        +    },
        +    "phase": {
        +      "type": "number"
        +    },
        +    "phaseLabel": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Removedmimic_generate_build_report
    • Removedmimic_generate_design_md
    • Addedmimic_map_components
    • Removedmimic_pipeline_resolve
    • Removedmimic_render_url
    • Changedmimic_status2 fields changed
      • addedInput schema / required
        Added value: +[]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "cacheHits": {
        +      "type": "number"
        +    },
        +    "dsCache": {
        +      "properties": {
        +        "components": {
        +          "type": "number"
        +        },
        +        "failedKeys": {
        +          "type": "number"
        +        },
        +        "textStyles": {
        +          "type": "number"
        +        },
        +        "variables": {
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "hint": {
        +      "description": "What to call next.",
        +      "type": "string"
        +    },
        +    "knowledge": {
        +      "properties": {
        +        "buildCount": {
        +          "type": "number"
        +        },
        +        "components": {
        +          "type": "number"
        +        },
        +        "gaps": {
        +          "type": "number"
        +        },
        +        "patterns": {
        +          "type": "number"
        +        },
        +        "rules": {
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "phase": {
        +      "description": "0=idle, 1=discovery, 2=inventory, 3=build, 4=qa, 5=report.",
        +      "type": "number"
        +    },
        +    "phaseLabel": {
        +      "type": "string"
        +    },
        +    "pluginConnected": {
        +      "type": "boolean"
        +    },
        +    "toolCallCount": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "pluginConnected",
        +    "phase",
        +    "hint"
        +  ],
        +  "type": "object"
        +}
  2. 45 tool updatesv1.4.0
    • First observedfigma_batch
    • First observedfigma_change_page
    • First observedfigma_create_chart
    • First observedfigma_create_ellipse
    • First observedfigma_create_frame
    • First observedfigma_create_rectangle
    • First observedfigma_create_text
    • First observedfigma_delete_node
    • First observedfigma_discover_library_styles
    • First observedfigma_discover_library_variables
    • First observedfigma_get_component_variants
    • First observedfigma_get_node_children
    • First observedfigma_get_node_parent
    • First observedfigma_get_node_props
    • First observedfigma_get_page_nodes
    • First observedfigma_get_pages
    • First observedfigma_get_selection
    • First observedfigma_get_text_info
    • First observedfigma_insert_component
    • First observedfigma_list_text_styles
    • First observedfigma_move_node
    • First observedfigma_preload_styles
    • First observedfigma_preload_variables
    • First observedfigma_read_variable_values
    • First observedfigma_replace_component
    • First observedfigma_restyle_artboard
    • First observedfigma_select_node
    • First observedfigma_set_component_text
    • First observedfigma_set_layout_sizing
    • First observedfigma_set_node_fill
    • First observedfigma_set_session_defaults
    • First observedfigma_set_text
    • First observedfigma_set_variant
    • First observedfigma_set_visibility
    • First observedfigma_swap_main_component
    • First observedfigma_tag_raw_exception
    • First observedfigma_validate_ds_compliance
    • First observedmimic_ai_knowledge_read
    • First observedmimic_ai_knowledge_write
    • First observedmimic_discover_ds
    • First observedmimic_generate_build_report
    • First observedmimic_generate_design_md
    • First observedmimic_pipeline_resolve
    • First observedmimic_render_url
    • First observedmimic_status

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose, from reading state to creating and modifying various Figma elements. The descriptions are detailed and prevent ambiguity even among similar operations like creating text vs. overriding component text.

Naming Consistency5/5

Tool names follow a consistent verb_noun pattern with snake_case, using 'figma_' prefix for Figma operations and 'mimic_' for server-specific actions. This makes it easy to predict and select the right tool.

Tool Count5/5

With 18 tools, the set covers a broad domain (Figma DS integration, building, knowledge management) without being excessive. Each tool serves a specific function, and the count feels justified by the server's scope.

Completeness3/5

The tool set covers discovery, creation, update, deletion, and validation, but a critical gap exists: the described workflow references 'figma_insert_component' which is not included. This missing tool breaks the expected CRUD lifecycle for components, a fundamental operation for this server's purpose.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    An MCP server integration that enables Cursor AI to communicate with Figma, allowing users to read designs and modify them programmatically through natural language commands.
    19
    894
    6,987
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables interaction with Figma files through intelligent API access, providing navigation, asset extraction, and design token retrieval with 95% token-optimized compact tree output format.
    15
    1
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Converts Figma designs to React/Vue code using existing Design System components, ensuring consistency by enforcing component library usage instead of custom CSS or Tailwind.
    17
    1
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Provides access to Appian's Aurora design system documentation via GitHub, enabling LLMs to query components, layouts, and patterns. It supports both public and internal repositories with features for keyword searching and detailed component guidance.
    7
    11
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/miapre/mimic-ai'

If you have feedback or need assistance with the MCP directory API, please join our Discord server