figma-custom-mcp
figma-custom-mcp
Plumb의 세 가지 특정 확인된 기능 격차를 해결하는 소규모 MCP + Figma 플러그인입니다. Plumb을 수정, 포크 또는 대체하지 않으며, Figma에서 Plumb과 함께 사용하도록 설계되었습니다.
해당 격차와 이에 대한 전체 소스 수준 증거는 PLUMB_GAP_ANALYSIS.md (Plumb v0.13.2의 소스 기반 감사)에 문서화되어 있습니다. 이 프로젝트는 해당 감사의 P0 항목만을 정확히 구현합니다:
P0-1 — 절대/겹침 위치 지정. Plumb의 DSL 컴파일러는 모든 컨테이너를 자동 레이아웃으로 강제하며 Figma의
layoutPositioning="ABSOLUTE"를 설정하지 않으므로, 겹치는 구성(이미지 위의 배지, 사진 위의 텍스트 등)을 구조적으로 구축할 수 없습니다. 이 프로젝트의 컴파일러는 기본적으로 자유 (x/y) 위치 지정을 사용하며, 자동 레이아웃 영역 내에서absolute: true자식을 지원합니다.P0-2 — 로컬/사용자 정의 이미지 가져오기. Plumb의
image.src는 항상 6개의 고정 스톡 사진 제공업체에 대한 웹 검색 쿼리로 컴파일되며, 사용자 자신의 파일은 Plumb으로 구축된 디자인에 절대 들어갈 수 없습니다. 이 프로젝트는file:/data:URI를 직접 읽으며, 타입화된 오류와 제로 플레이스홀더 대체를 제공합니다.P0-3 — 엄격한 스키마 검증. Plumb의 Zod 스키마는 알 수 없거나 오타가 있는 필드를 자동으로 제거합니다. 여기의 모든 스키마는
.strict()입니다.
감사 항목별 전체 추적 가능성은 docs/P0-CAPABILITY-MATRIX.md를, 나머지 문서 세트는 docs/를 참조하세요.
상태
P0 완료 — 전체 승인 기준 체크리스트, 실제 라이브 Figma 테스트 결과, 그리고 이 프로젝트가 구축한 실제 구성(실제 겹치는 Figma 노드, 실제 로컬 이미지, 실제 회전/그라데이션/효과 — 평면화된 이미지 아님)의 스크린샷은 P0-FINAL-REPORT.md를 참조하세요.
Related MCP server: figmingo-mcp
빠른 시작
npm install
npm run build
npm test그런 다음 docs/QUICKSTART.md를 참조하여 Figma 플러그인을 페어링하고 라이브 종단 간 테스트를 실행하세요.
문서
라이선스
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.
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
Scored across 7 tools
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
Related MCP Connectors
The Figma MCP server brings Figma design context directly into your AI workflow.
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.
MCP Spec Compliance MCP — audits any MCP server.json against the official Model Context Protocol
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables interaction with the Figma API through MCP tools for managing files, projects, and comments, plus a real-time observability dashboard.74 npm2ISC
- 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.1532 npmMIT
- 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.10181 npmMIT
- AlicenseNot gradedqualityBmaintenanceLocal-first MCP bridge for live Figma documents, enabling design inspection, editing, asset export, component authoring, and variable management through a plugin and WebSocket server without consuming Figma REST API requests.1MIT