figma-custom-mcp
This server provides MCP tools for building, reading, patching, deleting, reordering, and screenshotting Figma designs with strict validation and support for absolute positioning, local images, and dry-run validation.
figma_status: Check bridge/pairing status between the custom MCP and Figma plugin.
figma_design: Build or sync a full design document into Figma, including absolute/overlapping positioning and local/custom image assets; rejects unknown fields and supports
dryRunfor validation without touching Figma.figma_node: Read back a node's full structure — position, size, fills, strokes, effects, text, layout, and children — by node ID or for the whole current page, with optional depth control.
figma_patch_node: Patch specific properties on an existing node (position, size, rotation, opacity, visibility) without rebuilding the subtree.
figma_delete_node: Delete an existing node by ID.
figma_reorder_node: Change a node's z-order among siblings using a 0-based index or
front/back.figma_screenshot: Export a node as PNG or SVG at a configurable scale (0–4).
Provides tools for building Figma designs with absolute positioning, local image import, and strict schema validation, addressing capability gaps in existing Figma integrations.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@figma-custom-mcpCreate a design with overlapping elements using absolute positioning and import a local image"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
figma-custom-mcp
A small MCP + Figma plugin that patches three specific, confirmed capability gaps in Plumb — it does not modify, fork, or replace Plumb, and is designed to be paired in Figma alongside it.
The gaps, and the full source-level evidence for them, are documented in
PLUMB_GAP_ANALYSIS.md (a from-source audit of Plumb v0.13.2). This project
implements the P0 and P1 items from that audit:
P0 — foundation
P0-1 — Absolute / overlapping positioning. Plumb's DSL compiler forces every container into auto-layout and never sets Figma's
layoutPositioning="ABSOLUTE", so overlapping compositions (badge over image, text over photo, etc.) are structurally impossible to build. This project's compiler defaults to free (x/y) positioning and supportsabsolute: truechildren inside auto-layout regions.P0-2 — Local/custom image import. Plumb's
image.srcis always compiled into a web-search query against six fixed stock-photo providers; a user's own file can never enter a Plumb-built design. This project readsfile:/data:URIs directly, with typed errors and zero placeholder substitution.P0-3 — Strict schema validation. Plumb's Zod schemas silently strip unknown/misspelled fields. Every schema here is
.strict().
P1 — advanced construction primitives (all absent from Plumb entirely)
Boolean operations (union/subtract/intersect/exclude) — real
BOOLEAN_OPERATIONnodes, either authored fresh in afigma_designtree or combined from existing nodes viafigma_boolean.True grouping — real
GROUPnodes viafigma_group, withfigma_ungroupreconstructing Figma's missing native ungroup.Components, component sets, and variants — real
COMPONENT/COMPONENT_SETstructures with genuinevariantProperties, via a"component"node type +figma_create_component_set.Constraints — real
node.constraints, both for newly-authored and existing nodes.Paint styles — real, idempotent-by-name
PaintStylecreation and application.
P2 — component/instance/variable/style/text-range depth, plus structural tooling (see
docs/P2-AUDIT.md for the full 20-group audit this phase worked from)
Component properties & instance overrides — real definitions on
COMPONENT/COMPONENT_SET, real instance property values/per-sublayer overrides/main-component swaps, plusfigma_create_instanceto actually produce an instance to operate on.Variables — real collections/modes/variables/values and all 4 distinct binding paths (node-scalar, paint color, effect field, layout-grid field), each through its own real Figma helper API.
Text/effect/grid styles and per-range text styling — mixed/rich text (bold word inside a paragraph, etc.) was a real, previously-undocumented gap in this project's own P0/P1 work.
Direct layoutGrids, auto-layout sizing (fill/hug/fixed), sections, multi-subpath vectors, persisted export settings, wrap alignment/z-index reversal, native
locked/expandedmetadata, 2 more gradient types (angular/diamond),maskType, cross-parent node moves with transform correction.figma_batch(validated, fail-fast, honestly-non-transactional orchestration) andfigma_diff(structural comparison against a real Figma read-back) — plus a selectiveincluderead-back filter.operationKey-based idempotency forfigma_group/figma_create_component_set, in a plugin-data namespace kept structurally separate fromfigma_design's own sync-mode reconciliation key (a real bug found and fixed during live testing — seedocs/P2-IMPLEMENTATION.md).
P3 — the design quality loop: inspect → measure → compare → correct → verify → iterate (see
docs/P3-ARCHITECTURE.md)
Richer inspection — page-space
absoluteBoundingBox, hierarchy (parentId/index), full typography (font family/style/size/case/decoration/line-height/letter-spacing), andvisible(real gap: patchable since P0, never read back until P3) added tofigma_node.figma_measure(new) — deterministic gap/overlap/containment/center-delta/alignment, computed from real page-space geometry. Reports numbers only; never judges whether a result is "correct."figma_diff(extended) /figma_verify(new) — explicit, overridable numeric tolerance and a deterministic 4-level severity (CRITICAL/MAJOR/MINOR/INFO) added to comparison;figma_verifyis a lighter flat-expectations mode for when a full compiledDesignDocisn't on hand.figma_patch_node(extended) — fill, stroke, radius, effects, blendMode, locked, auto-layout properties, and whole-node text, all reusing the tree-DSL's own real schemas — each field genuinely optional and untouched-if-omitted, so a narrow correction never disturbs anything it didn't mention.The LLM stays the design intelligence throughout — P3 provides mechanical inspection/measurement/ comparison/correction primitives, never a hidden autonomous "make it better" planner.
See docs/P0-CAPABILITY-MATRIX.md,
docs/P1-CAPABILITY-MATRIX.md, and
docs/P2-CAPABILITY-MATRIX.md for the full audit-item-by-item
traceability, and docs/ for the rest of the documentation set.
Status
P0 COMPLETE, P1 COMPLETE, P2 COMPLETE, P3 COMPLETE — see P0-FINAL-REPORT.md,
P1-FINAL-REPORT.md, docs/P2-FINAL-REPORT.md, and
docs/P3-FINAL-REPORT.md for the full acceptance-criteria checklists and
real live-Figma test results. tests/p1-live-screenshot.png, tests/p2-live-screenshot.png, and
tests/p3-live-screenshot.png are real, live compositions this project built (and, for P3, deliberately
broke and then corrected) and screenshotted against the actual paired Figma plugin — not flattened
images, not mocks. P2's live test exercises all 20 audited capability groups plus a sync-mode idempotency
rerun; P3's live test (tests/p3-live.mjs) runs the full inspect → measure → diff/verify → correct →
verify → idempotency-rerun → failure-recovery loop end to end. Both surfaced real runtime bugs along the
way — each found, fixed, and re-verified live, documented in docs/P2-IMPLEMENTATION.md and
docs/P3-IMPLEMENTATION.md rather than glossed over.
Related MCP server: figmma
Quickstart
npm install
npm run build
npm testThen see docs/QUICKSTART.md to pair the Figma plugin and run the live end-to-end
test.
Documentation
docs/P0-CAPABILITY-MATRIX.md/docs/P1-CAPABILITY-MATRIX.md/docs/P2-CAPABILITY-MATRIX.mddocs/P0-TOOLS.md(all 26 tools, P0 + P1 + P2 + P3) /docs/P3-TOOLS.md(P3's when-to-use guidance)docs/P0-DESIGN-SCHEMA.md(includes P1 additions)docs/P0-TEST-PLAN.md/docs/P1-TEST-REPORT.md/docs/P2-TEST-REPORT.md/docs/P3-TEST-PLAN.mddocs/P0-IMPLEMENTATION.md/docs/P1-IMPLEMENTATION.md/docs/P2-IMPLEMENTATION.md/docs/P3-IMPLEMENTATION.mddocs/P2-AUDIT.md(the 20-group audit P2 was built from) /docs/P2-FINAL-REPORT.md
License
MIT
Available Tools
7 toolsfigma_delete_nodeC
Delete an existing node by id.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It only states deletion but does not disclose side effects (e.g., cascade to children, irreversibility, permission requirements, rate limits). This is insufficient for an agent to understand the tool's behavior.
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 brief (5 words) but lacks structure. It front-loads the verb, which is good, but is too minimal to be considered well-structured. A bit more detail without added length would improve it.
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 simple tool (1 param, no output schema, no annotations, siblings exist), the description is incomplete. It does not explain return values, error conditions, or any constraints. The agent would need external documentation to use this tool safely.
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 description coverage is 0% and the description adds no meaning beyond 'by id'. The sole parameter 'nodeId' is not explained (e.g., format, source, or example). The agent cannot infer where to obtain the ID or how to use it correctly.
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 action (delete) and resource (existing node by id), which distinguishes it from siblings like figma_patch_node (update) and figma_reorder_node (reorder). However, it lacks specificity about what type of node is being deleted or the scope of the operation.
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?
No guidance on when to use this tool vs alternatives. It does not mention prerequisites (e.g., node must exist) or when to avoid deletion. With siblings like figma_patch_node and figma_reorder_node, explicit usage context is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_designA
Build or sync a design into Figma from a strict JSON design document (see P0-DESIGN-SCHEMA.md). Supports genuine overlapping/absolute-positioned nodes and local image assets — the two capabilities Plumb cannot provide (see PLUMB_GAP_ANALYSIS.md §5, §15). Unknown/misspelled fields are rejected, not silently ignored. Pass dryRun:true to validate + compile without touching Figma.
| Name | Required | Description | Default |
|---|---|---|---|
| doc | No | A DesignDoc — see P0-DESIGN-SCHEMA.md | |
| dryRun | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full disclosure burden. It reveals rejection of unknown/misspelled fields (no silent failures) and the dryRun:true option for validation without mutation. It implies design creation/sync is a write operation. Missing: no mention of authentication, idempotency, response behavior, or whether it overwrites existing designs. Still, the dry-run detail and strict validation policy provide good 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?
Three sentences with no filler. The first sentence states primary purpose, the second adds key differentiators, and the third covers validation/rejection behavior. Information is front-loaded and every sentence serves a distinct role.
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 omits return value/response format. It also doesn't explain whether the tool syncs to an existing design or always creates new, nor does it mention async behavior. However, the external documentation references and dry-run option provide enough completeness for a design creation tool with 2 parameters.
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 50% (doc has vague description, dryRun has none). The description adds meaning: dryRun's behavior ('validate + compile without touching Figma') and doc's constraints ('strict JSON', 'overlapping/absolute-positioned nodes', 'local image assets'). It compensates for the schema's gaps but still relies on external documentation for full understanding of the doc structure.
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 (Build or sync), resource (design into Figma), and input format (strict JSON design document). It distinguishes itself from sibling tools by specifying unique capabilities (overlapping nodes, local assets) not offered by others, and references external documentation for schema details.
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 context for use (creating/syncing designs from JSON) and highlights key differentiators (overlapping nodes, local assets) vs. a non-sibling tool (Plumb). However, it does not explicitly state when NOT to use it among the listed sibling tools (e.g., 'use figma_delete_node instead for node deletion'). The reference to external gap analysis aids decision-making but lacks direct sibling comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_nodeA
Read back a node's full structure (position, size, fills, strokes, effects, text, layout, children) for verification. Pass nodeId, or omit for the whole current page.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| nodeId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It correctly identifies the operation as a read (non-destructive). However, it does not disclose that the depth parameter controls hierarchical traversal, nor does it mention potential performance implications or that the depth parameter limits the output. This is a notable gap for a parameter that can limit the result size.
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, no wasted words. The first sentence defines the purpose and scope, the second provides usage instructions. It is front-loaded and 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?
For a read tool with two parameters and no output schema, the description covers the main use case (verification) and targeting (nodeId). However, it omits the depth parameter's role, which is critical for controlling the amount of data returned. The lack of output schema means the description should perhaps hint at the structure, but it lists the included properties, which is sufficient.
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 description coverage is 0%, so the description must compensate. It explains nodeId ('Pass nodeId, or omit for the whole current page'), but the depth parameter (integer min 1 max 20) is not mentioned at all. The description adds value for one parameter but leaves the other unexplained, making it partially helpful.
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 'read back' and the resource 'node's full structure', listing specific properties (position, size, fills, etc.). It distinguishes itself from sibling tools like figma_delete_node or figma_patch_node by being a read-only verification 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 explains when to use (for verification) and how to use it ('Pass nodeId, or omit for the whole current page'). It implies this is the read tool among siblings, but does not explicitly state when not to use or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_patch_nodeA
Patch a subset of properties on an EXISTING node (position, size, rotation, opacity, fill, stroke, radius, effects, blendMode, clip, visible) without touching siblings or re-stating the whole subtree.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| width | No | ||
| height | No | ||
| nodeId | Yes | ||
| opacity | No | ||
| visible | No | ||
| rotation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions 'without touching siblings or re-stating the whole subtree' as a behavioral trait, but it does not disclose authorization needs, failure modes, rate limits, or the response format. For a mutation tool with zero annotations, this is a moderate disclosure.
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, front-loaded sentence that efficiently conveys the action, resource, and key behavioral traits. However, the inaccuracy regarding listed properties (some not in schema) detracts from its value, though conciseness itself is acceptable.
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 has 8 parameters, 0% schema coverage, no output schema, and no annotations, the description is incomplete. It fails to describe the return value, error handling, or constraints like node existence. The misleading property list further reduces completeness. The sibling tools provide some context, but the description alone leaves significant 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?
The schema has 0% description coverage, leaving the description to compensate. However, the description lists properties like 'fill, stroke, radius, effects, blendMode, clip' that are not present in the schema (which has additionalProperties: false). This is misleading and adds confusion rather than clarity. It does not explain the meaning of the schema-defined parameters beyond their names.
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 action 'Patch' and the resource 'EXISTING node', listing specific properties that can be modified. It distinguishes itself from sibling tools like figma_delete_node, figma_reorder_node, etc., by emphasizing it does not affect siblings or require re-stating the whole subtree.
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 implies when to use this tool: for updating specific properties of an existing node without touching siblings or re-stating the subtree. It does not explicitly state when not to use it or list alternatives, but the context of sibling tools and the property list provides sufficient guidance for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_reorder_nodeA
Change an existing node's z-order among its siblings without a full re-build. to is a 0-based child index, or "front"/"back".
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | ||
| nodeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden of behavioral disclosure. It reveals that the tool mutates node order and explains the index values. However, it omits side effects (e.g., children behavior), error handling (out-of-bounds index), permissions, and success confirmation. It adds some value but not enough for full 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 two sentences and immediately states the action and the key parameter. Every sentence is essential; there is no redundancy or filler. It is highly efficient and 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?
Given the tool's simplicity (2 params, no output schema), the description covers the core operation but leaves gaps: return value not mentioned (e.g., success confirmation, error structure), persistence implications not addressed, and the meaning of 'among its siblings' could be clearer. Adequate but not fully 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?
With 0% schema description coverage, the description must compensate. It explains the `to` parameter well ('0-based child index, or "front"/"back"'), adding meaning beyond the schema type constraints. However, `nodeId` is left entirely uncommented, assuming domain knowledge. Partially compensates for coverage gap.
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's purpose: 'Change an existing node's z-order among its siblings without a full re-build.' The verb 'change' and resource 'z-order' are specific. It implicitly distinguishes from siblings like figma_delete_node (deletion) and figma_screenshot (capture), leaving no ambiguity.
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 phrase 'without a full re-build' hints at an efficiency advantage, implying an alternative that does require a rebuild. However, no explicit guidance is given on when to choose this tool over siblings, nor are exclusion criteria or prerequisites provided. Usage context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_screenshotA
Export a node as PNG or SVG at a configurable scale (unlike Plumb's bulk-export path, scale is not hardcoded — see gap analysis §25).
| Name | Required | Description | Default |
|---|---|---|---|
| scale | No | ||
| format | No | ||
| nodeId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that scale is configurable (not hardcoded) and references a gap analysis, which adds context about behavior depth. However, it does not clarify if the export is synchronous, what happens on failure, or any rate limits. A score of 3 is appropriate as it adds some value beyond the schema but leaves notable gaps for a tool with zero 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, focused sentence that front-loads the core action and key differentiator (configurable scale). Every word earns its place, and the parenthetical reference to a gap analysis provides additional context without bloating. No waste.
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 tool with 3 parameters, 0 required, no output schema, and no annotations, the description is relatively lean. It covers the essential export purpose and a key differentiator, but does not explain what the output looks like (e.g., does it return a URL or raw data?), nor does it address the `nodeId` parameter or any prerequisites. Given the absence of output schema and annotations, there is room for more completeness.
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 description coverage is 0%, so the description must compensate fully. It mentions scale and format (scale is configurable, format implied by 'PNG or SVG'), but does not explain the meaning or constraints of `nodeId`, nor does it clarify that `scale` has a maximum of 4 (as per schema) or that `format` has an enum. The description adds minimal semantic value beyond what the schema already defines via type/enum, and for a 0% coverage tool this is insufficient.
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 a specific verb ('Export') and resource ('a node'), and explicitly mentions the output formats (PNG, SVG) and the configurable scale. It effectively distinguishes from a sibling tool by referencing 'Plumb's bulk-export path', clarifying that this tool offers dynamic scaling unlike that 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?
The description provides clear context on when to use this tool (to export a node with adjustable scale) and explicitly contrasts it with another tool (Plumb's bulk-export path) to guide selection. It does not, however, specify when not to use it or list any prerequisites (e.g., required design access).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
figma_statusB
Bridge/pairing status for the custom Figma MCP (separate from, and compatible with, Plumb — different port, different plugin).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It does not disclose whether the tool is read-only, what format the status returns, whether it requires authentication, or any side effects. The description only names the resource without detailing behavior.
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 short sentence that immediately conveys the core resource. However, it includes a parenthetical about Plumb that could be moved to usage context, slightly reducing conciseness. Overall, it is front-loaded and 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 and no annotations, the description is the sole provider of functional details. It fails to explain what the status output looks like (e.g., a boolean, string, or object) or how to interpret it. For a simple no-argument tool, more completeness is expected to avoid ambiguity.
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, so the input schema provides full coverage. According to guidelines, the baseline is 4. The description does not add parameter information (as none exist), but it does give context about the operation's nature.
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 it returns 'Bridge/pairing status' for a custom Figma MCP, which indicates the tool's purpose. It distinguishes itself from a related tool (Plumb) but does not explicitly differentiate from sibling tools like figma_node or figma_design, though their functions are intuitively different.
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 no guidance on when to use this tool versus alternatives. The mention of Plumb offers some context but does not help an agent decide between figma_status and its siblings, nor does it specify prerequisites or use cases.
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.
7 tool updates
v0.1.0- First observed
figma_delete_node - First observed
figma_design - First observed
figma_node - First observed
figma_patch_node - First observed
figma_reorder_node - First observed
figma_screenshot - First observed
figma_status
TDQS
Each tool targets a distinct action (delete, reorder, export, status, design/create, read, patch). The only potential overlap is between figma_design and figma_patch_node, but design is for initial creation/sync while patch is for targeted updates, so the boundary is clear.
All tools use the prefix 'figma_' followed by a descriptive verb_noun pattern (e.g. figma_delete_node, figma_reorder_node). The only minor inconsistency is the verb choice: 'screenshot' is less typical than 'export', and 'status' is a noun rather than an action, but overall the pattern is clear and predictable.
7 tools is well-scoped for a Figma design tool MCP server. Each tool covers a core operation (CRUD, reorder, export, status) without being too many to navigate or too few to be useful.
The server covers essential operations: create (via figma_design), read (figma_node), update (figma_patch_node, figma_reorder_node), delete (figma_delete_node), and export (figma_screenshot). A minor gap is the lack of a dedicated tool for listing node children or searching nodes, but the read tool with nodeId omission provides a reasonable workaround.
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
The Figma MCP server brings Figma design context directly into your AI workflow.
Render, verify, describe, and safely edit Mermaid diagrams through MCP.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Build and publish Overskill apps from Cursor, Claude, ChatGPT, or any MCP client.
Related MCP Servers
- AlicenseBqualityBmaintenanceLocal MCP server connecting AI clients to the Figma desktop app for inspecting and editing Figma documents via the Plugin API.163761MIT
- AlicenseAqualityCmaintenanceEnables interaction with the Figma API through MCP tools for managing files, projects, and comments, plus a real-time observability dashboard.7132ISC
- AlicenseAqualityBmaintenanceLocal-first Figma MCP server providing unlimited read access via Personal Access Token, HTML replica generation with parity verification, and write-to-canvas through a companion plugin bridge.1536MIT
- AlicenseAqualityBmaintenanceEnables MCP clients to read design structure, take screenshots, create nodes, and edit UI directly on Figma canvas via a bridge between MCP and Figma Desktop.10388MIT
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/Rachit0-glitch/FIGMA-CUSTOM-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server