Mimic AI
Mimic AI is a design system copilot MCP server that converts HTML or natural language descriptions into Figma screens using your actual design system components, tokens, and styles — learning and improving with every build.
HTML → Figma Building
Resolve HTML inputs (URLs, local files, raw HTML) and render client-side JS pages in a headless browser
Create Figma frames, text, rectangles, ellipses, and data-driven charts using DS tokens and variables
Insert real library component instances (buttons, cards, navbars, etc.) from your design system
Execute batch operations for repetitive structures (tables, grids, lists) in a single round trip
Design System Integration
Discover and extract components, styles, and variables from Figma library files; preload into cache for fast builds
Read resolved variable values; list text styles and component variants
Set session-level DS enforcement (strict or permissive compliance mode)
Component & Node Editing
Set text, variant, and boolean properties on component instances
Swap/replace components, apply DS color variables for fills/strokes, control visibility and layout
Move, reorder, or delete nodes; restyle entire artboards (color remapping, font, radius, spacing)
Inspection & QA
Read node properties, children, parent info, and text styles
Validate DS compliance post-build — flags raw fills, unstyled text, and fixed sizing
Tag user-approved raw value exceptions to bypass compliance checks
Navigate pages and manage selections programmatically
Learning & Knowledge Management
Persist pattern → component mappings; auto-promote patterns from CANDIDATE to VERIFIED after confirmed uses
Record DS gaps, substitutions, and corrections; surface recommendations when gaps recur
Detect DS evolution conflicts and suggest additions
Reporting & Documentation
Generate build reports (markdown or HTML) with compliance stats, gap recommendations, and learned patterns
Generate a
DESIGN.mdfile with machine-readable tokens and usage guidelines compatible with AI coding agents and generative UI toolsCheck overall Mimic status, bridge connection, plugin status, and learning progress
Translates HTML into Figma designs using published components and design tokens, builds UI from descriptions directly in Figma files, and intelligently manages Figma API read limits through caching and learning patterns.
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.
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 installThen 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 > CanvasIntelligence 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 toolsfigma_component_textAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | Component instance node ID. | |
| overrides | Yes | Array of text overrides to apply. Each item needs textNodeName or textNodeId, plus content. |
TDQS
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.
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.
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.
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.
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.
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+.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | X position in pixels. Required for page-level artboards. Use rightmost existing artboard x + width + 80. | |
| y | No | Y position in pixels. Defaults to 0 for artboards. | |
| gap | No | Raw item spacing in pixels. Use gapVariable when DS has spacing variables. | |
| fill | No | Raw hex color for background fill (e.g. "#ffffff"). Fallback when no DS styles/variables. | |
| name | Yes | Semantic name describing the HTML role (e.g., "Header Section", "Metrics Row", "Card: Revenue"). Never use generic names like "Frame". | |
| width | No | Fixed width in pixels. | |
| height | No | Fixed height in pixels. | |
| stroke | No | Raw hex color for stroke (e.g. "#e4e6ee"). Fallback when no DS stroke variables. | |
| padding | No | Raw uniform padding in pixels. Use paddingVariable when DS has spacing variables. | |
| maxWidth | No | Max width constraint. | |
| parentId | No | Parent node ID. Omit for page-level. | |
| direction | No | Auto-layout direction. Prefer HORIZONTAL or VERTICAL — NONE breaks portability. Use layoutPositioning ABSOLUTE for overlay children instead. | |
| gridRowGap | No | Raw row gap in pixels. Only used when layoutMode is GRID. | |
| layoutMode | No | 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. | |
| paddingTop | No | Raw top padding in pixels. | |
| fillStyleId | No | DS fill style key for background (from figma_list_ds (kind: "fill_styles")). Preferred over fillVariable when DS has fill styles but no variables. | |
| gapVariable | No | DS variable path for item spacing. | |
| gridRowSpan | No | When this frame is a child of a GRID-layoutMode parent, how many rows it should span. | |
| paddingLeft | No | Raw left padding in pixels. | |
| clipsContent | No | Clip content to frame bounds. | |
| cornerRadius | No | Raw corner radius in pixels. Use cornerRadiusVariable when DS has radius variables. | |
| fillVariable | No | DS variable path for background fill. | |
| gridRowCount | No | Number of grid rows. Only used when layoutMode is GRID. | |
| paddingRight | No | Raw right padding in pixels. | |
| strokeWeight | No | Stroke weight in pixels. | |
| gridColumnGap | No | Raw column gap in pixels. Only used when layoutMode is GRID. | |
| paddingBottom | No | Raw bottom padding in pixels. | |
| gridColumnSpan | No | When this frame is a child of a GRID-layoutMode parent, how many columns it should span. | |
| strokeVariable | No | DS variable path for stroke color. | |
| gridColumnCount | No | Number of grid columns. Only used when layoutMode is GRID. | |
| paddingVariable | No | DS variable path for uniform padding. | |
| layoutPositioning | No | 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. | |
| gridRowGapVariable | No | DS spacing variable path for GRID row gap. | |
| paddingTopVariable | No | DS variable path for top padding. | |
| paddingLeftVariable | No | DS variable path for left padding. | |
| confirmedNoComponent | No | Set true only after DS/library search confirms no component exists for this role. | |
| cornerRadiusVariable | No | DS variable path for corner radius. | |
| layoutSizingVertical | No | Vertical sizing mode. | |
| paddingRightVariable | No | DS variable path for right padding. | |
| counterAxisAlignItems | No | Counter axis alignment. | |
| gridColumnGapVariable | No | DS spacing variable path for GRID column gap. | |
| paddingBottomVariable | No | DS variable path for bottom padding. | |
| primaryAxisAlignItems | No | Primary axis alignment. | |
| layoutSizingHorizontal | No | Horizontal sizing mode. | |
| primitiveOverrideReason | No | Required with confirmedNoComponent for component-like primitives. Explain why this frame must be custom. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Node name. | |
| parentId | Yes | Parent node ID. | |
| svgString | Yes | SVG markup string. | |
| fillVariable | No | DS variable path for fill override (applied to ALL child vectors uniformly). | |
| strokeVariable | No | DS variable path for stroke override. | |
| layoutSizingVertical | No | Vertical sizing mode. | |
| layoutSizingHorizontal | No | Horizontal sizing mode. Use FILL for charts inside auto-layout containers so they stretch to the container width. |
TDQS
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.
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.
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.
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.
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.
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+.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Semantic name describing the HTML element role (e.g., "Page Title", "Card: Revenue Label", "Subtitle"). Never use generic names like "Text". | |
| width | No | Fixed width for the text node. | |
| content | Yes | Text content. | |
| parentId | Yes | Parent node ID. | |
| fillStyleId | No | 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. | |
| textStyleId | No | DS text style — accepts style name (e.g. "Text sm/Semibold") or style key. Names are resolved to keys automatically. | |
| fillVariable | No | DS variable path for text color. | |
| fontSizeVariable | No | DS variable path for font size (if no text style). | |
| layoutPositioning | No | Set to ABSOLUTE to overlay this text inside an auto-layout parent. | |
| lineHeightVariable | No | DS variable path for line height. | |
| textAlignHorizontal | No | Text alignment. | |
| layoutSizingHorizontal | No | Horizontal sizing mode. |
TDQS
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.
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.
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.
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.
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.
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_nodeADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | Node ID to delete. Must NOT be a top-level artboard. |
TDQS
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.
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.
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.
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.
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.
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_inspectARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | How many levels deep to traverse. Only used with target="children". Default 1. | |
| nodeId | No | Node ID to inspect. Required for target: node, children, parent, text. | |
| target | Yes | "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. | |
| sectionName | No | The HTML section to find (e.g., "header", "metrics row", "table"). Required for target="section". | |
| componentSetKey | No | Component set key. Required for target="variants". |
TDQS
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.
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.
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.
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.
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.
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_dsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Which cache to list. | |
| filter | No | Optional keyword filter on the style name. Only used with kind="fill_styles" (e.g. "Blue", "Gray", "Red"). | |
| category | No | Optional category filter. Only used with kind="variables" (text, background, border, foreground, spacing, radius). Omit for all. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | "fill" inserts a component into the slot (default). "reset" restores default content. | |
| nodeId | Yes | Instance node ID that owns the slot. | |
| slotName | Yes | SLOT property name from configurationHints.slotProperties. | |
| componentKey | No | DS component key to insert into the slot. Required for action="fill". |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Absolute x position. op="position". | |
| y | No | Absolute y position. op="position". | |
| op | Yes | Which mutation to perform. | |
| fill | No | Raw color as hex string ("#3b36f2") or RGB object. op="fill" fallback when no DS styles/variables available. | |
| index | No | Insert index within the new parent. op="move". Omit for end. | |
| width | No | Fixed width. op="layout". | |
| height | No | Fixed height. op="layout". | |
| nodeId | No | Target node ID. Required for every op except "page". | |
| pageId | No | Page ID to switch to. op="page". Takes precedence over pageName. | |
| content | No | New text content. op="text". | |
| visible | No | True to show, false to hide. op="visibility". | |
| maxWidth | No | Max width constraint. op="layout". | |
| pageName | No | Page name to switch to. op="page". | |
| parentId | No | New parent node ID. op="move". | |
| fillStyleId | No | DS fill style key (from figma_list_ds). op="fill". Priority: fillStyleId → fillVariable → fill. | |
| gapVariable | No | DS variable for item spacing. op="layout" or "restyle". | |
| textStyleId | No | DS text style key. op="text_style". | |
| fillVariable | No | DS variable path for fill color. op="fill" or "restyle". | |
| strokeWeight | No | Stroke weight. op="restyle". | |
| strokeVariable | No | DS variable for stroke color. op="restyle". | |
| paddingVariable | No | DS variable for uniform padding. op="layout" or "restyle". | |
| paddingTopVariable | No | op="layout". | |
| paddingLeftVariable | No | op="layout". | |
| cornerRadiusVariable | No | DS variable for corner radius. op="restyle". | |
| layoutSizingVertical | No | op="layout". | |
| paddingRightVariable | No | op="layout". | |
| counterAxisAlignItems | No | op="layout". | |
| paddingBottomVariable | No | op="layout". | |
| primaryAxisAlignItems | No | op="layout". | |
| layoutSizingHorizontal | No | op="layout". |
TDQS
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.
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.
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.
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.
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.
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_complianceARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | The Figma node ID to validate. |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | No | |
| violations | No | Per-node compliance violations found. |
TDQS
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.
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.
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.
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.
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.
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_modesAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | Node ID (typically the artboard). | |
| modeIndex | Yes | Mode index. 0 = default/light, 1 = dark (if available). | |
| collectionName | No | Optional — variable collection name. Omit to set the mode on ALL collections at once (recommended). |
TDQS
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.
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.
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.
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.
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.
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_readARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | "json" (default) returns structured store contents. "design_md" returns a rendered DESIGN.md markdown string instead. |
TDQS
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.
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.
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.
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.
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.
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_writeAIdempotent
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).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Unique identifier for the entry. | |
| data | Yes | The entry data to store. | |
| type | Yes | 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). |
TDQS
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.
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.
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.
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.
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.
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+.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Chart 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. | |
| title | Yes | Chart card title text. | |
| colors | No | DS color variable paths for data elements. Falls back to DS cache palette or default. | |
| parentId | Yes | Parent node ID to insert the chart into. | |
| chartType | Yes | The type of chart to build. | |
| gridColor | No | DS variable path for grid lines. Falls back to DS cache border/secondary match. | |
| dimensions | Yes | Chart dimensions. Bar: {chartHeight, chartWidth?}. Donut: {outerRadius, innerRadius}. Line: {plotWidth, plotHeight}. Radar: {radius}. Optional for bar/line: yPrefix, ySuffix. | |
| labelColor | No | DS variable path for axis label text color. Falls back to DS cache text/tertiary match. | |
| labelStyle | No | DS text style name for axis labels. Falls back to smallest text style in DS cache. | |
| titleColor | No | DS variable path for title text color. Falls back to DS cache text/primary match. | |
| titleStyle | No | DS text style name for chart title. Falls back to DS cache sm/Semibold match. | |
| seriesNames | No | Legend labels for multi-series charts (e.g. ["Current", "Target"]). For donut charts, legend is auto-generated from data labels. |
TDQS
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.
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.
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.
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.
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.
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+.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | Yes | Row 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. | |
| columns | Yes | Column definitions. Each column becomes a vertical frame with a header cell + data cells. | |
| parentId | Yes | Parent node ID to insert the table body into. | |
| cellHeight | No | Fixed 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). | |
| dataCellKey | No | Component key for Table cell. If omitted, auto-resolved from DS cache/knowledge store. | |
| headerCellKey | No | Component key for Table header cell. If omitted, auto-resolved from DS cache/knowledge store. | |
| headerVariant | No | Variant overrides for all header cells (e.g. {"Checkbox": "False"}). Applied to every header. | |
| firstColumnPaddingLeft | No | DS 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. | |
| lastColumnPaddingRight | No | DS 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fileKey | Yes | Figma file key to discover DS from. | |
| libraryKey | No | Library key to use when multiple DS libraries are available. Returned from a previous call that detected multiple libraries. | |
| skipRestApi | No | 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. | |
| libraryFileKey | No | Library file key (alphanumeric string from the Figma URL of the library file). Prompted once per library, cached permanently. | |
| externalVariables | No | 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. | |
| identityDriftChoice | No | 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. | |
| communitySearchResults | No | 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. | |
| communitySearchVariableKeys | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | |
| phase | No | |
| _stopBuild | No | True when the build must not proceed until the returned instructions are followed. |
| phaseLabel | No | |
| _userPrompt | No | Present this to the user verbatim when a decision is required. |
| enforcement | No | |
| completenessWarnings | No | |
| communityLibraryCheckRequired | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| elementTypes | Yes | List of HTML element types to map (e.g. ["button", "input", "badge", "table", "tab", "avatar", "dropdown", "textarea"]). | |
| librarySearchResults | No | Component 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
| Name | Required | Description |
|---|---|---|
| hint | No | |
| mapped | No | |
| missing | No | |
| notFound | No | |
| components | No | |
| searchComplete | No | |
| selectedLibrary | No |
TDQS
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.
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.
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.
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.
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.
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_statusARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | Yes | What to call next. |
| phase | Yes | 0=idle, 1=discovery, 2=inventory, 3=build, 4=qa, 5=report. |
| dsCache | No | |
| cacheHits | No | |
| knowledge | No | |
| phaseLabel | No | |
| toolCallCount | No | |
| pluginConnected | Yes |
TDQS
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.
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.
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.
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.
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.
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.
55 tool updates
v3.0.0- Removed
figma_batch - Removed
figma_change_page - Added
figma_component_text - Removed
figma_create_chart - Removed
figma_create_ellipse - Changed
figma_create_frame61 fields changed- added
Input schema / properties / clipsContent / descriptionAdded value: +"Clip content to frame bounds." - added
Input schema / properties / confirmedNoComponentAdded value: +{ + "description": "Set true only after DS/library search confirms no component exists for this role.", + "type": "boolean" +} - changed
Input schema / properties / cornerRadius / descriptionPrevious 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." - changed
Input schema / properties / cornerRadius / typePrevious value: -[ - "number", - "string" -]New value: +"number" - changed
Input schema / properties / cornerRadiusVariable / descriptionPrevious 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." - added
Input schema / properties / counterAxisAlignItems / descriptionAdded value: +"Counter axis alignment." - removed
Input schema / properties / counterAxisSizingModeRemoved value: -{ - "description": "AUTO = hug contents along counter axis.", - "enum": [ - "FIXED", - "AUTO" - ], - "type": "string" -} - changed
Input schema / properties / direction / descriptionPrevious 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." - added
Input schema / properties / fillAdded value: +{ + "description": "Raw hex color for background fill (e.g. \"#ffffff\"). Fallback when no DS styles/variables.", + "type": "string" +} - removed
Input schema / properties / fillHexRemoved value: -{ - "description": "Fallback hex color if fillVariable is not available.", - "type": "string" -} - removed
Input schema / properties / fillNoneRemoved value: -{ - "description": "Set true for no fill (transparent).", - "type": "boolean" -} - added
Input schema / properties / fillStyleIdAdded 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" +} - changed
Input schema / properties / fillVariable / descriptionPrevious value: -"Design token variable path for background fill, e.g. \"Colors/Background/bg-primary\"."New value: +"DS variable path for background fill." - changed
Input schema / properties / gap / descriptionPrevious 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." - changed
Input schema / properties / gap / typePrevious value: -[ - "number", - "string" -]New value: +"number" - changed
Input schema / properties / gapVariable / descriptionPrevious 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." - added
Input schema / properties / gridColumnCountAdded value: +{ + "description": "Number of grid columns. Only used when layoutMode is GRID.", + "type": "number" +} - added
Input schema / properties / gridColumnGapAdded value: +{ + "description": "Raw column gap in pixels. Only used when layoutMode is GRID.", + "type": "number" +} - added
Input schema / properties / gridColumnGapVariableAdded value: +{ + "description": "DS spacing variable path for GRID column gap.", + "type": "string" +} - added
Input schema / properties / gridColumnSpanAdded value: +{ + "description": "When this frame is a child of a GRID-layoutMode parent, how many columns it should span.", + "type": "number" +} - added
Input schema / properties / gridRowCountAdded value: +{ + "description": "Number of grid rows. Only used when layoutMode is GRID.", + "type": "number" +} - added
Input schema / properties / gridRowGapAdded value: +{ + "description": "Raw row gap in pixels. Only used when layoutMode is GRID.", + "type": "number" +} - added
Input schema / properties / gridRowGapVariableAdded value: +{ + "description": "DS spacing variable path for GRID row gap.", + "type": "string" +} - added
Input schema / properties / gridRowSpanAdded value: +{ + "description": "When this frame is a child of a GRID-layoutMode parent, how many rows it should span.", + "type": "number" +} - added
Input schema / properties / height / descriptionAdded value: +"Fixed height in pixels." - removed
Input schema / properties / layoutAlignRemoved value: -{ - "enum": [ - "MIN", - "CENTER", - "MAX", - "STRETCH", - "INHERIT" - ], - "type": "string" -} - removed
Input schema / properties / layoutGrowRemoved value: -{ - "description": "1 = fill remaining space in parent.", - "type": "number" -} - added
Input schema / properties / layoutModeAdded 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" +} - added
Input schema / properties / layoutPositioningAdded 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" +} - added
Input schema / properties / layoutSizingHorizontalAdded value: +{ + "description": "Horizontal sizing mode.", + "enum": [ + "FIXED", + "HUG", + "FILL" + ], + "type": "string" +} - added
Input schema / properties / layoutSizingVerticalAdded value: +{ + "description": "Vertical sizing mode.", + "enum": [ + "FIXED", + "HUG", + "FILL" + ], + "type": "string" +} - added
Input schema / properties / maxWidthAdded value: +{ + "description": "Max width constraint.", + "type": "number" +} - changed
Input schema / properties / name / descriptionPrevious 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\"." - changed
Input schema / properties / padding / descriptionPrevious 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." - changed
Input schema / properties / padding / typePrevious value: -[ - "number", - "string" -]New value: +"number" - added
Input schema / properties / paddingBottom / descriptionAdded value: +"Raw bottom padding in pixels." - changed
Input schema / properties / paddingBottom / typePrevious value: -[ - "number", - "string" -]New value: +"number" - added
Input schema / properties / paddingBottomVariableAdded value: +{ + "description": "DS variable path for bottom padding.", + "type": "string" +} - added
Input schema / properties / paddingLeft / descriptionAdded value: +"Raw left padding in pixels." - changed
Input schema / properties / paddingLeft / typePrevious value: -[ - "number", - "string" -]New value: +"number" - added
Input schema / properties / paddingLeftVariableAdded value: +{ + "description": "DS variable path for left padding.", + "type": "string" +} - added
Input schema / properties / paddingRight / descriptionAdded value: +"Raw right padding in pixels." - changed
Input schema / properties / paddingRight / typePrevious value: -[ - "number", - "string" -]New value: +"number" - added
Input schema / properties / paddingRightVariableAdded value: +{ + "description": "DS variable path for right padding.", + "type": "string" +} - added
Input schema / properties / paddingTop / descriptionAdded value: +"Raw top padding in pixels." - changed
Input schema / properties / paddingTop / typePrevious value: -[ - "number", - "string" -]New value: +"number" - added
Input schema / properties / paddingTopVariableAdded value: +{ + "description": "DS variable path for top padding.", + "type": "string" +} - changed
Input schema / properties / paddingVariable / descriptionPrevious value: -"DS spacing variable path for uniform padding. Bound to all 4 sides via setBoundVariable."New value: +"DS variable path for uniform padding." - added
Input schema / properties / parentIdAdded value: +{ + "description": "Parent node ID. Omit for page-level.", + "type": "string" +} - removed
Input schema / properties / parentNodeIdRemoved value: -{ - "description": "Append to this parent. Omit to place on current page.", - "type": "string" -} - added
Input schema / properties / primaryAxisAlignItems / descriptionAdded value: +"Primary axis alignment." - removed
Input schema / properties / primaryAxisSizingModeRemoved value: -{ - "description": "AUTO = hug contents along primary axis. Defaults to FIXED when width+height are set.", - "enum": [ - "FIXED", - "AUTO" - ], - "type": "string" -} - added
Input schema / properties / primitiveOverrideReasonAdded value: +{ + "description": "Required with confirmedNoComponent for component-like primitives. Explain why this frame must be custom.", + "type": "string" +} - added
Input schema / properties / strokeAdded value: +{ + "description": "Raw hex color for stroke (e.g. \"#e4e6ee\"). Fallback when no DS stroke variables.", + "type": "string" +} - removed
Input schema / properties / strokeHexRemoved value: -{ - "description": "Fallback hex for border color.", - "type": "string" -} - changed
Input schema / properties / strokeVariable / descriptionPrevious value: -"Variable path for border color."New value: +"DS variable path for stroke color." - added
Input schema / properties / strokeWeightAdded value: +{ + "description": "Stroke weight in pixels.", + "type": "number" +} - removed
Input schema / properties / strokeWidthRemoved value: -{ - "description": "Border width in px.", - "type": "number" -} - added
Input schema / properties / width / descriptionAdded value: +"Fixed width in pixels." - added
Input schema / properties / x / descriptionAdded value: +"X position in pixels. Required for page-level artboards. Use rightmost existing artboard x + width + 80." - added
Input schema / properties / y / descriptionAdded value: +"Y position in pixels. Defaults to 0 for artboards."
- Removed
figma_create_rectangle - Added
figma_create_svg - Changed
figma_create_text24 fields changed- added
Input schema / properties / contentAdded value: +{ + "description": "Text content.", + "type": "string" +} - removed
Input schema / properties / fillHexRemoved value: -{ - "description": "Fallback hex color.", - "type": "string" -} - added
Input schema / properties / fillStyleIdAdded 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" +} - changed
Input schema / properties / fillVariable / descriptionPrevious value: -"Color token path, e.g. \"Colors/Text/text-primary\"."New value: +"DS variable path for text color." - removed
Input schema / properties / fontSizeRemoved value: -{ - "description": "Fallback — prefer textStyleId.", - "type": "number" -} - added
Input schema / properties / fontSizeVariableAdded value: +{ + "description": "DS variable path for font size (if no text style).", + "type": "string" +} - removed
Input schema / properties / fontWeightRemoved value: -{ - "description": "Fallback — prefer textStyleId.", - "enum": [ - 400, - 500, - 600, - 700 - ], - "type": "number" -} - removed
Input schema / properties / layoutAlignRemoved value: -{ - "enum": [ - "MIN", - "CENTER", - "MAX", - "STRETCH", - "INHERIT" - ], - "type": "string" -} - removed
Input schema / properties / layoutGrowRemoved value: -{ - "type": "number" -} - added
Input schema / properties / layoutPositioningAdded value: +{ + "description": "Set to ABSOLUTE to overlay this text inside an auto-layout parent.", + "enum": [ + "AUTO", + "ABSOLUTE" + ], + "type": "string" +} - added
Input schema / properties / layoutSizingHorizontalAdded value: +{ + "description": "Horizontal sizing mode.", + "enum": [ + "FIXED", + "HUG", + "FILL" + ], + "type": "string" +} - removed
Input schema / properties / lineHeightRemoved value: -{ - "description": "Line height in px. Fallback — prefer textStyleId.", - "type": "number" -} - added
Input schema / properties / lineHeightVariableAdded value: +{ + "description": "DS variable path for line height.", + "type": "string" +} - added
Input schema / properties / nameAdded 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" +} - added
Input schema / properties / parentIdAdded value: +{ + "description": "Parent node ID.", + "type": "string" +} - removed
Input schema / properties / parentNodeIdRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / textRemoved value: -{ - "description": "Text content.", - "type": "string" -} - added
Input schema / properties / textAlignHorizontal / descriptionAdded value: +"Text alignment." - changed
Input schema / properties / textAlignHorizontal / enumPrevious value: -[ - "LEFT", - "CENTER", - "RIGHT" -]New value: +[ + "LEFT", + "CENTER", + "RIGHT", + "JUSTIFIED" +] - changed
Input schema / properties / textStyleId / descriptionPrevious 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." - changed
Input schema / properties / width / descriptionPrevious value: -"Fixed width — text wraps at this width."New value: +"Fixed width for the text node." - removed
Input schema / properties / xRemoved value: -{ - "type": "number" -} - removed
Input schema / properties / yRemoved value: -{ - "type": "number" -} - changed
Input schema / requiredPrevious value: -[ - "text" -]New value: +[ + "parentId", + "content" +]
- Changed
figma_delete_node1 field changed- added
Input schema / properties / nodeId / descriptionAdded value: +"Node ID to delete. Must NOT be a top-level artboard."
- Removed
figma_discover_library_styles - Removed
figma_discover_library_variables - Removed
figma_get_component_variants - Removed
figma_get_node_children - Removed
figma_get_node_parent - Removed
figma_get_node_props - Removed
figma_get_page_nodes - Removed
figma_get_pages - Removed
figma_get_selection - Removed
figma_get_text_info - Removed
figma_insert_component - Added
figma_inspect - Added
figma_list_ds - Removed
figma_list_text_styles - Added
figma_manage_slot - Removed
figma_move_node - Removed
figma_preload_styles - Removed
figma_preload_variables - Removed
figma_read_variable_values - Removed
figma_replace_component - Removed
figma_restyle_artboard - Removed
figma_select_node - Removed
figma_set_component_text - Removed
figma_set_layout_sizing - Removed
figma_set_node_fill - Removed
figma_set_session_defaults - Removed
figma_set_text - Removed
figma_set_variant - Removed
figma_set_visibility - Removed
figma_swap_main_component - Removed
figma_tag_raw_exception - Added
figma_update_node - Changed
figma_validate_ds_compliance2 fields changed- changed
Input schema / properties / nodeId / descriptionPrevious value: -"Root node ID to validate (typically the artboard)."New value: +"The Figma node ID to validate." - changed
Output 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" +}
- Added
figma_variable_modes - Changed
mimic_ai_knowledge_read3 fields changed- added
Input schema / properties / formatAdded value: +{ + "description": "\"json\" (default) returns structured store contents. \"design_md\" returns a rendered DESIGN.md markdown string instead.", + "enum": [ + "json", + "design_md" + ], + "type": "string" +} - removed
Input schema / properties / pattern_keyRemoved value: -{ - "description": "Optional. Return only the entry matching this pattern key (e.g. \"metric/kpi\"). Omit to return all entries.", - "type": "string" -} - added
Input schema / requiredAdded value: +[]
- Changed
mimic_ai_knowledge_write7 fields changed- added
Input schema / properties / dataAdded value: +{ + "description": "The entry data to store.", + "type": "object" +} - added
Input schema / properties / idAdded value: +{ + "description": "Unique identifier for the entry.", + "type": "string" +} - removed
Input schema / properties / reset_gap_seen_countsRemoved 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" -} - removed
Input schema / properties / rule_updatesRemoved 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" -} - added
Input schema / properties / typeAdded 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" +} - removed
Input schema / properties / updatesRemoved 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" -} - changed
Input schema / requiredPrevious value: -[ - "updates" -]New value: +[ + "type", + "id", + "data" +]
- Added
mimic_build_chart - Added
mimic_build_table - Changed
mimic_discover_ds9 fields changed- added
Input schema / properties / communitySearchResultsAdded 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" +} - added
Input schema / properties / communitySearchVariableKeysAdded 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" +} - added
Input schema / properties / externalVariablesAdded 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" +} - changed
Input schema / properties / fileKey / descriptionPrevious value: -"Figma file key for the DS library file."New value: +"Figma file key to discover DS from." - added
Input schema / properties / identityDriftChoiceAdded 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" +} - added
Input schema / properties / libraryFileKeyAdded value: +{ + "description": "Library file key (alphanumeric string from the Figma URL of the library file). Prompted once per library, cached permanently.", + "type": "string" +} - added
Input schema / properties / libraryKeyAdded value: +{ + "description": "Library key to use when multiple DS libraries are available. Returned from a previous call that detected multiple libraries.", + "type": "string" +} - added
Input schema / properties / skipRestApiAdded 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" +} - changed
Output 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" +}
- Removed
mimic_generate_build_report - Removed
mimic_generate_design_md - Added
mimic_map_components - Removed
mimic_pipeline_resolve - Removed
mimic_render_url - Changed
mimic_status2 fields changed- added
Input schema / requiredAdded value: +[] - changed
Output 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" +}
45 tool updates
v1.4.0- First observed
figma_batch - First observed
figma_change_page - First observed
figma_create_chart - First observed
figma_create_ellipse - First observed
figma_create_frame - First observed
figma_create_rectangle - First observed
figma_create_text - First observed
figma_delete_node - First observed
figma_discover_library_styles - First observed
figma_discover_library_variables - First observed
figma_get_component_variants - First observed
figma_get_node_children - First observed
figma_get_node_parent - First observed
figma_get_node_props - First observed
figma_get_page_nodes - First observed
figma_get_pages - First observed
figma_get_selection - First observed
figma_get_text_info - First observed
figma_insert_component - First observed
figma_list_text_styles - First observed
figma_move_node - First observed
figma_preload_styles - First observed
figma_preload_variables - First observed
figma_read_variable_values - First observed
figma_replace_component - First observed
figma_restyle_artboard - First observed
figma_select_node - First observed
figma_set_component_text - First observed
figma_set_layout_sizing - First observed
figma_set_node_fill - First observed
figma_set_session_defaults - First observed
figma_set_text - First observed
figma_set_variant - First observed
figma_set_visibility - First observed
figma_swap_main_component - First observed
figma_tag_raw_exception - First observed
figma_validate_ds_compliance - First observed
mimic_ai_knowledge_read - First observed
mimic_ai_knowledge_write - First observed
mimic_discover_ds - First observed
mimic_generate_build_report - First observed
mimic_generate_design_md - First observed
mimic_pipeline_resolve - First observed
mimic_render_url - First observed
mimic_status
TDQS
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.
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.
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.
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
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
Build and manage your design system with AI: tokens, themes, components, icons, Figma and code.
Live React design-system APIs, patterns, and code validation so AI agents build real UI, not slop.
Serves your design system and coding standards to coding agents, so they stop guessing.
UI design from prompts, screenshots, and URLs for AI coding agents and theme tokens.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server integration that enables Cursor AI to communicate with Figma, allowing users to read designs and modify them programmatically through natural language commands.198946,987MIT
- FlicenseAqualityDmaintenanceEnables interaction with Figma files through intelligent API access, providing navigation, asset extraction, and design token retrieval with 95% token-optimized compact tree output format.151-
- AlicenseNot gradedqualityDmaintenanceConverts Figma designs to React/Vue code using existing Design System components, ensuring consistency by enforcing component library usage instead of custom CSS or Tailwind.171MIT
- FlicenseAqualityCmaintenanceProvides 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.711-
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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