figma-console-mcp 1.19.2 → 1.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -51,9 +51,9 @@ Figma Console MCP connects AI assistants (like Claude) to Figma, enabling:
51
51
  | Real-time monitoring (console, selection) | ✅ | ❌ | ❌ |
52
52
  | Desktop Bridge plugin | ✅ | ✅ | ❌ |
53
53
  | Requires Node.js | Yes | **No** | No |
54
- | **Total tools available** | **90+** | **43** | **22** |
54
+ | **Total tools available** | **92+** | **43** | **22** |
55
55
 
56
- > **Bottom line:** Remote SSE is **read-only** with ~38% of the tools. **Cloud Mode** unlocks write access from web AI clients without Node.js. NPX/Local Git gives the full 90+ tools with real-time monitoring.
56
+ > **Bottom line:** Remote SSE is **read-only** with ~38% of the tools. **Cloud Mode** unlocks write access from web AI clients without Node.js. NPX/Local Git gives the full 92+ tools with real-time monitoring.
57
57
 
58
58
  ---
59
59
 
@@ -61,7 +61,7 @@ Figma Console MCP connects AI assistants (like Claude) to Figma, enabling:
61
61
 
62
62
  **Best for:** Designers who want full AI-assisted design capabilities.
63
63
 
64
- **What you get:** All 90+ tools including design creation, variable management, and component instantiation.
64
+ **What you get:** All 92+ tools including design creation, variable management, and component instantiation.
65
65
 
66
66
  #### Prerequisites
67
67
 
@@ -156,7 +156,7 @@ Create a simple frame with a blue background
156
156
 
157
157
  **Best for:** Developers who want to modify source code or contribute to the project.
158
158
 
159
- **What you get:** Same 90+ tools as NPX, plus full source code access.
159
+ **What you get:** Same 92+ tools as NPX, plus full source code access.
160
160
 
161
161
  #### Quick Setup
162
162
 
@@ -245,7 +245,7 @@ Ready for design creation? Follow the [NPX Setup](#-npx-setup-recommended) guide
245
245
 
246
246
  **Best for:** Using Claude.ai, v0, Replit, or Lovable to create and modify Figma designs — no Node.js required.
247
247
 
248
- **What you get:** 79 tools including full write access — design creation, variable management, component instantiation, and all REST API tools. Only real-time monitoring (console logs, selection tracking, document changes) requires Local Mode.
248
+ **What you get:** 82 tools including full write access — design creation, variable management, component instantiation, and all REST API tools. Only real-time monitoring (console logs, selection tracking, document changes) requires Local Mode.
249
249
 
250
250
  #### Prerequisites
251
251
 
@@ -302,7 +302,7 @@ AI Client → Cloud MCP Server → Durable Object Relay → Desktop Bridge Plugi
302
302
  | Feature | NPX (Recommended) | Cloud Mode | Local Git | Remote SSE |
303
303
  |---------|-------------------|------------|-----------|------------|
304
304
  | **Setup time** | ~10 minutes | ~5 minutes | ~15 minutes | ~2 minutes |
305
- | **Total tools** | **90+** | **43** | **90+** | **22** (read-only) |
305
+ | **Total tools** | **92+** | **43** | **92+** | **22** (read-only) |
306
306
  | **Design creation** | ✅ | ✅ | ✅ | ❌ |
307
307
  | **Variable management** | ✅ | ✅ | ✅ | ❌ |
308
308
  | **Component instantiation** | ✅ | ✅ | ✅ | ❌ |
@@ -317,7 +317,7 @@ AI Client → Cloud MCP Server → Durable Object Relay → Desktop Bridge Plugi
317
317
  | **Automatic updates** | ✅ (`@latest`) | ✅ | Manual (`git pull`) | ✅ |
318
318
  | **Source code access** | ❌ | ❌ | ✅ | ❌ |
319
319
 
320
- > **Key insight:** Remote SSE is read-only. Cloud Mode adds write access for web AI clients without Node.js. NPX/Local Git give the full 90+ tools.
320
+ > **Key insight:** Remote SSE is read-only. Cloud Mode adds write access for web AI clients without Node.js. NPX/Local Git give the full 92+ tools.
321
321
 
322
322
  **📖 [Complete Feature Comparison](docs/mode-comparison.md)**
323
323
 
@@ -453,8 +453,10 @@ When you first use design system tools:
453
453
  - `figma_reorder_slides` - Reorder slides via new 2D grid layout
454
454
  - `figma_set_slide_transition` - Set transition effects (22 styles, 8 curves)
455
455
  - `figma_skip_slide` - Toggle whether a slide is skipped in presentation mode
456
- - `figma_add_text_to_slide` - Add text to a specific slide
456
+ - `figma_add_text_to_slide` - Add text to a slide with custom fonts, colors, alignment, and wrapping
457
457
  - `figma_add_shape_to_slide` - Add rectangle or ellipse shapes with color
458
+ - `figma_set_slide_background` - Set a slide's background color (creates or updates)
459
+ - `figma_get_text_styles` - Get all local text styles with IDs, fonts, and sizes
458
460
  - `figma_set_slides_view_mode` - Toggle grid vs. single-slide view
459
461
  - `figma_focus_slide` - Navigate to a specific slide
460
462
 
@@ -649,7 +651,7 @@ The **Figma Desktop Bridge** plugin is the recommended way to connect Figma to t
649
651
  - The MCP server communicates via **WebSocket** through the Desktop Bridge plugin
650
652
  - The server tries port 9223 first, then automatically falls back through ports 9224–9232 if needed
651
653
  - The plugin scans all ports in the range and connects to every active server it finds
652
- - All 90+ tools work through the WebSocket transport
654
+ - All 92+ tools work through the WebSocket transport
653
655
 
654
656
  **Multiple files:** The WebSocket server supports multiple simultaneous plugin connections — one per open Figma file. Each connection is tracked by file key with independent state (selection, document changes, console logs).
655
657
 
@@ -786,7 +788,7 @@ The architecture supports adding new apps with minimal boilerplate — each app
786
788
 
787
789
  ## 🛤️ Roadmap
788
790
 
789
- **Current Status:** v1.17.0 (Stable) - Production-ready with FigJam + Slides support, Cloud Write Relay, Design System Kit, WebSocket-only connectivity, smart multi-file tracking, 90+ tools, Comments API, and MCP Apps
791
+ **Current Status:** v1.17.0 (Stable) - Production-ready with FigJam + Slides support, Cloud Write Relay, Design System Kit, WebSocket-only connectivity, smart multi-file tracking, 92+ tools, Comments API, and MCP Apps
790
792
 
791
793
  **Recent Releases:**
792
794
  - [x] **v1.17.0** - Figma Slides Support: 15 new tools for managing presentations — slides, transitions, content, reordering, and navigation. Inspired by Toni Haidamous (PR #11).
@@ -336,6 +336,12 @@ export class CloudWebSocketConnector {
336
336
  async addShapeToSlide(params) {
337
337
  return this.sendCommand('ADD_SHAPE_TO_SLIDE', params, 5000);
338
338
  }
339
+ async setSlideBackground(params) {
340
+ return this.sendCommand('SET_SLIDE_BACKGROUND', params, 5000);
341
+ }
342
+ async getTextStyles() {
343
+ return this.sendCommand('GET_TEXT_STYLES', {}, 5000);
344
+ }
339
345
  // ============================================================================
340
346
  // Cache management (no-op for cloud relay)
341
347
  // ============================================================================
@@ -72,8 +72,11 @@ export function withTimeout(promise, ms, label) {
72
72
  const timeoutId = setTimeout(() => {
73
73
  reject(new Error(`${label} timed out after ${ms}ms`));
74
74
  }, ms);
75
- // Ensure timeout is cleared if promise resolves first
76
- promise.finally(() => clearTimeout(timeoutId));
75
+ // Ensure timeout is cleared if promise resolves/rejects first.
76
+ // The .catch() prevents an unhandled rejection when the original
77
+ // promise rejects — .finally() returns a new promise that inherits
78
+ // the rejection, and without .catch() it becomes unhandled.
79
+ promise.finally(() => clearTimeout(timeoutId)).catch(() => { });
77
80
  });
78
81
  return Promise.race([promise, timeoutPromise]);
79
82
  }
@@ -1288,5 +1288,7 @@ export class FigmaDesktopConnector {
1288
1288
  async skipSlide() { throw new Error('Slides operations require WebSocket transport'); }
1289
1289
  async addTextToSlide() { throw new Error('Slides operations require WebSocket transport'); }
1290
1290
  async addShapeToSlide() { throw new Error('Slides operations require WebSocket transport'); }
1291
+ async setSlideBackground() { throw new Error('Slides operations require WebSocket transport'); }
1292
+ async getTextStyles() { throw new Error('Text styles require WebSocket transport'); }
1291
1293
  }
1292
1294
  FigmaDesktopConnector.DEBUG = process.env.DEBUG === '1' || process.env.DEBUG === 'true';
@@ -1544,7 +1544,11 @@ export function registerFigmaAPITools(server, getFigmaAPI, getCurrentUrl, getCon
1544
1544
  await connector.initialize();
1545
1545
  }
1546
1546
  logger.info({ transport: connector.getTransportType?.() || 'unknown' }, "Desktop connector ready");
1547
- const desktopResult = await connector.getVariablesFromPluginUI(fileKey);
1547
+ // When refreshCache is requested, bypass the plugin UI's stale snapshot
1548
+ // and fetch live data directly from the Figma Plugin API
1549
+ const desktopResult = refreshCache
1550
+ ? await connector.getVariables(fileKey)
1551
+ : await connector.getVariablesFromPluginUI(fileKey);
1548
1552
  if (desktopResult.success && desktopResult.variables) {
1549
1553
  logger.info({
1550
1554
  variableCount: desktopResult.variables.length,
@@ -1714,7 +1718,7 @@ export function registerFigmaAPITools(server, getFigmaAPI, getCurrentUrl, getCon
1714
1718
  format: format || 'full',
1715
1719
  timestamp: dataForCache.timestamp,
1716
1720
  data: responseData,
1717
- cached: true,
1721
+ cached: false,
1718
1722
  }),
1719
1723
  },
1720
1724
  ],
@@ -3122,7 +3126,7 @@ export function registerFigmaAPITools(server, getFigmaAPI, getCurrentUrl, getCon
3122
3126
  // Tool 15: Capture Screenshot via Plugin (Desktop Bridge)
3123
3127
  // This uses exportAsync() which reads the current plugin runtime state, not the cloud state
3124
3128
  // Solves race condition where REST API screenshots show stale data after changes
3125
- server.tool("figma_capture_screenshot", "Capture a screenshot of a node using the plugin's exportAsync API. IMPORTANT: This tool captures the CURRENT state from the plugin runtime (not cloud state like REST API), making it reliable for validating changes immediately after making them. Use this instead of figma_get_component_image when you need to verify that changes were applied correctly. Requires Desktop Bridge connection (Figma Desktop with plugin running).", {
3129
+ server.tool("figma_capture_screenshot", "Capture a screenshot of a node using the plugin's exportAsync API. IMPORTANT: This tool captures the CURRENT state from the plugin runtime (not cloud state like REST API), making it reliable for validating changes immediately after making them. Use this instead of figma_get_component_image when you need to verify that changes were applied correctly. Defaults are AI-optimized: PNG at 1x with automatic downscaling so the longest side stays within the 1568px AI vision processing ceiling. PNG is the default because design tool content (flat colors, text, UI components) compresses significantly better as PNG. Use JPG for photographic or gradient-heavy content. Requires Desktop Bridge connection (Figma Desktop with plugin running).", {
3126
3130
  nodeId: z
3127
3131
  .string()
3128
3132
  .optional()
@@ -3131,14 +3135,14 @@ export function registerFigmaAPITools(server, getFigmaAPI, getCurrentUrl, getCon
3131
3135
  .enum(["PNG", "JPG", "SVG"])
3132
3136
  .optional()
3133
3137
  .default("PNG")
3134
- .describe("Image format (default: PNG)"),
3138
+ .describe("Image format (default: PNG). Use JPG for photographic or gradient-heavy content."),
3135
3139
  scale: z
3136
3140
  .number()
3137
3141
  .min(0.5)
3138
3142
  .max(4)
3139
3143
  .optional()
3140
- .default(2)
3141
- .describe("Scale factor (default: 2 for 2x resolution)"),
3144
+ .default(1)
3145
+ .describe("Scale factor (default: 1). The plugin automatically caps the effective scale so the exported image does not exceed 1568px on its longest side (the AI vision processing ceiling)."),
3142
3146
  }, async ({ nodeId, format, scale }) => {
3143
3147
  try {
3144
3148
  logger.info({ nodeId, format, scale }, "Capturing screenshot via Desktop Bridge");
@@ -3206,6 +3210,7 @@ export function registerFigmaAPITools(server, getFigmaAPI, getCurrentUrl, getCon
3206
3210
  metadata: {
3207
3211
  source: "plugin_export_async",
3208
3212
  note: "Screenshot captured successfully. The image is included below for visual analysis. This shows the CURRENT plugin runtime state (guaranteed to reflect recent changes).",
3213
+ formatAdvice: result.image.formatAdvice || undefined,
3209
3214
  },
3210
3215
  }),
3211
3216
  },
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Resolve the package root directory.
3
+ *
4
+ * Uses import.meta.url (ESM) to compute an absolute path to the package root,
5
+ * independent of process.cwd(). This file is ESM-only; in CJS test contexts
6
+ * (Jest/ts-jest), it is replaced via moduleNameMapper — see jest.config.cjs.
7
+ */
8
+ import { dirname, join } from 'path';
9
+ import { fileURLToPath } from 'url';
10
+ // dist/core/resolve-package-root.js → ../../ = package root
11
+ export const PACKAGE_ROOT = join(dirname(fileURLToPath(import.meta.url)), '..', '..');
@@ -184,6 +184,31 @@ export function registerSlidesTools(server, getDesktopConnector) {
184
184
  };
185
185
  }
186
186
  });
187
+ server.tool("figma_get_text_styles", `Get all local text styles in the current file. Returns style IDs, names, font info, and sizes. Use these IDs when setting textStyleId on text nodes via figma_execute.`, {}, async () => {
188
+ try {
189
+ const connector = await getDesktopConnector();
190
+ const result = await connector.getTextStyles();
191
+ return {
192
+ content: [
193
+ { type: "text", text: JSON.stringify(result) },
194
+ ],
195
+ };
196
+ }
197
+ catch (error) {
198
+ logger.error({ error }, "figma_get_text_styles failed");
199
+ return {
200
+ content: [
201
+ {
202
+ type: "text",
203
+ text: JSON.stringify({
204
+ error: error instanceof Error ? error.message : String(error),
205
+ }),
206
+ },
207
+ ],
208
+ isError: true,
209
+ };
210
+ }
211
+ });
187
212
  server.tool("figma_get_focused_slide", `Get the slide currently focused in single-slide view.`, {}, async () => {
188
213
  try {
189
214
  const connector = await getDesktopConnector();
@@ -430,7 +455,7 @@ export function registerSlidesTools(server, getDesktopConnector) {
430
455
  };
431
456
  }
432
457
  });
433
- server.tool("figma_add_text_to_slide", `Add a new text element to a specific slide. Uses Inter font by default.`, {
458
+ server.tool("figma_add_text_to_slide", `Add a new text element to a specific slide. Supports custom fonts, colors, alignment, and text formatting.`, {
434
459
  slideId: z
435
460
  .string()
436
461
  .max(50)
@@ -448,7 +473,46 @@ export function registerSlidesTools(server, getDesktopConnector) {
448
473
  .optional()
449
474
  .default(24)
450
475
  .describe("Font size in pixels"),
451
- }, async ({ slideId, text, x, y, fontSize }) => {
476
+ fontFamily: z
477
+ .string()
478
+ .optional()
479
+ .default("Inter")
480
+ .describe("Font family (e.g., 'Manrope', 'IBM Plex Sans')"),
481
+ fontStyle: z
482
+ .string()
483
+ .optional()
484
+ .default("Regular")
485
+ .describe("Font style/weight (e.g., 'Bold', 'SemiBold', 'Medium')"),
486
+ color: z
487
+ .string()
488
+ .regex(/^#[0-9a-fA-F]{6}$/)
489
+ .optional()
490
+ .describe("Text fill color as hex (e.g., '#FFFFFF')"),
491
+ textAlign: z
492
+ .enum(["LEFT", "CENTER", "RIGHT"])
493
+ .optional()
494
+ .describe("Horizontal text alignment"),
495
+ width: z
496
+ .number()
497
+ .min(1)
498
+ .max(MAX_DIMENSION)
499
+ .optional()
500
+ .describe("Text box width for wrapping. When set, enables text wrapping."),
501
+ lineHeight: z
502
+ .number()
503
+ .min(1)
504
+ .max(500)
505
+ .optional()
506
+ .describe("Line height in pixels"),
507
+ letterSpacing: z
508
+ .number()
509
+ .optional()
510
+ .describe("Letter spacing in pixels"),
511
+ textCase: z
512
+ .enum(["ORIGINAL", "UPPER", "LOWER", "TITLE"])
513
+ .optional()
514
+ .describe("Text case transformation"),
515
+ }, async ({ slideId, text, x, y, fontSize, fontFamily, fontStyle, color, textAlign, width, lineHeight, letterSpacing, textCase }) => {
452
516
  try {
453
517
  const connector = await getDesktopConnector();
454
518
  const result = await connector.addTextToSlide({
@@ -457,6 +521,14 @@ export function registerSlidesTools(server, getDesktopConnector) {
457
521
  x,
458
522
  y,
459
523
  fontSize,
524
+ fontFamily,
525
+ fontStyle,
526
+ color,
527
+ textAlign,
528
+ width,
529
+ lineHeight,
530
+ letterSpacing,
531
+ textCase,
460
532
  });
461
533
  return {
462
534
  content: [
@@ -540,6 +612,41 @@ export function registerSlidesTools(server, getDesktopConnector) {
540
612
  };
541
613
  }
542
614
  });
615
+ server.tool("figma_set_slide_background", `Set the background color of a slide. Creates or updates a full-slide background rectangle.`, {
616
+ slideId: z
617
+ .string()
618
+ .max(50)
619
+ .describe("The node ID of the slide"),
620
+ color: z
621
+ .string()
622
+ .regex(/^#[0-9a-fA-F]{6}$/, "Must be a 6-digit hex color like '#181818'")
623
+ .describe("Background color as hex (e.g., '#181818')"),
624
+ }, async ({ slideId, color }) => {
625
+ try {
626
+ const connector = await getDesktopConnector();
627
+ const result = await connector.setSlideBackground({ slideId, color });
628
+ return {
629
+ content: [
630
+ { type: "text", text: JSON.stringify(result) },
631
+ ],
632
+ };
633
+ }
634
+ catch (error) {
635
+ logger.error({ error }, "figma_set_slide_background failed");
636
+ return {
637
+ content: [
638
+ {
639
+ type: "text",
640
+ text: JSON.stringify({
641
+ error: error instanceof Error ? error.message : String(error),
642
+ hint: "This tool only works in Figma Slides files.",
643
+ }),
644
+ },
645
+ ],
646
+ isError: true,
647
+ };
648
+ }
649
+ });
543
650
  // ============================================================================
544
651
  // NAVIGATION TOOLS — Control slide view
545
652
  // ============================================================================
@@ -340,6 +340,12 @@ export class WebSocketConnector {
340
340
  async addShapeToSlide(params) {
341
341
  return this.wsServer.sendCommand('ADD_SHAPE_TO_SLIDE', params, 5000);
342
342
  }
343
+ async setSlideBackground(params) {
344
+ return this.wsServer.sendCommand('SET_SLIDE_BACKGROUND', params, 5000);
345
+ }
346
+ async getTextStyles() {
347
+ return this.wsServer.sendCommand('GET_TEXT_STYLES', {}, 5000);
348
+ }
343
349
  // ============================================================================
344
350
  // Cache management (no-op for WebSocket — no frame cache)
345
351
  // ============================================================================
@@ -18,12 +18,12 @@ import { createServer as createHttpServer } from 'http';
18
18
  import { readFileSync, existsSync } from 'fs';
19
19
  import { join } from 'path';
20
20
  import { createChildLogger } from './logger.js';
21
- // Read version from package.json
22
- // Uses __dirname in CJS/Jest context, falls back to process.cwd() in ESM runtime
21
+ import { PACKAGE_ROOT } from './resolve-package-root.js';
22
+ // Read version from package.json using the resolved package root.
23
+ // PACKAGE_ROOT uses import.meta.url in ESM (production) and __dirname in CJS (Jest).
23
24
  let SERVER_VERSION = '0.0.0';
24
25
  try {
25
- const base = typeof __dirname !== 'undefined' ? join(__dirname, '..', '..') : process.cwd();
26
- SERVER_VERSION = JSON.parse(readFileSync(join(base, 'package.json'), 'utf-8')).version;
26
+ SERVER_VERSION = JSON.parse(readFileSync(join(PACKAGE_ROOT, 'package.json'), 'utf-8')).version;
27
27
  }
28
28
  catch {
29
29
  // Non-critical — version will show as 0.0.0
@@ -34,11 +34,9 @@ catch {
34
34
  */
35
35
  function loadPluginUIContent() {
36
36
  const candidates = [
37
- // ESM runtime: dist/core/ ../../figma-desktop-bridge/
38
- typeof __dirname !== 'undefined'
39
- ? join(__dirname, '..', '..', 'figma-desktop-bridge', 'ui-full.html')
40
- : join(process.cwd(), 'figma-desktop-bridge', 'ui-full.html'),
41
- // Direct from project root
37
+ // Primary: relative to package root (works in both CJS and ESM)
38
+ join(PACKAGE_ROOT, 'figma-desktop-bridge', 'ui-full.html'),
39
+ // Fallback: relative to cwd (development / monorepo setups)
42
40
  join(process.cwd(), 'figma-desktop-bridge', 'ui-full.html'),
43
41
  ];
44
42
  for (const path of candidates) {
@@ -68,7 +68,7 @@ export class FigmaConsoleMCPv3 extends McpAgent {
68
68
  super(...arguments);
69
69
  this.server = new McpServer({
70
70
  name: "Figma Console MCP",
71
- version: "1.19.1",
71
+ version: "1.20.0",
72
72
  });
73
73
  this.browserManager = null;
74
74
  this.consoleMonitor = null;
@@ -1046,7 +1046,7 @@ export default {
1046
1046
  });
1047
1047
  const statelessServer = new McpServer({
1048
1048
  name: "Figma Console MCP",
1049
- version: "1.19.1",
1049
+ version: "1.20.0",
1050
1050
  });
1051
1051
  // ================================================================
1052
1052
  // Cloud Write Relay — Pairing Tool (stateless /mcp path)
@@ -1683,7 +1683,7 @@ export default {
1683
1683
  return new Response(JSON.stringify({
1684
1684
  status: "healthy",
1685
1685
  service: "Figma Console MCP",
1686
- version: "1.19.1",
1686
+ version: "1.20.0",
1687
1687
  endpoints: {
1688
1688
  mcp: ["/sse", "/mcp"],
1689
1689
  oauth_mcp_spec: ["/.well-known/oauth-authorization-server", "/authorize", "/token", "/oauth/register"],
@@ -1729,13 +1729,13 @@ export default {
1729
1729
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
1730
1730
  <title>Figma Console MCP - The Most Comprehensive MCP Server for Figma</title>
1731
1731
  <link rel="icon" type="image/svg+xml" href="https://docs.figma-console-mcp.southleft.com/favicon.svg">
1732
- <meta name="description" content="Turn your Figma design system into a living API. 90+ tools give AI assistants deep access to design tokens, component specs, variables, and programmatic design creation.">
1732
+ <meta name="description" content="Turn your Figma design system into a living API. 91+ tools give AI assistants deep access to design tokens, component specs, variables, and programmatic design creation.">
1733
1733
 
1734
1734
  <!-- Open Graph -->
1735
1735
  <meta property="og:type" content="website">
1736
1736
  <meta property="og:url" content="https://figma-console-mcp.southleft.com">
1737
1737
  <meta property="og:title" content="Figma Console MCP - Turn Your Design System Into a Living API">
1738
- <meta property="og:description" content="The most comprehensive MCP server for Figma. 90+ tools give AI assistants deep access to design tokens, components, variables, and programmatic design creation.">
1738
+ <meta property="og:description" content="The most comprehensive MCP server for Figma. 91+ tools give AI assistants deep access to design tokens, components, variables, and programmatic design creation.">
1739
1739
  <meta property="og:image" content="https://docs.figma-console-mcp.southleft.com/images/og-image.jpg">
1740
1740
  <meta property="og:image:width" content="1200">
1741
1741
  <meta property="og:image:height" content="630">
@@ -1743,7 +1743,7 @@ export default {
1743
1743
  <!-- Twitter -->
1744
1744
  <meta name="twitter:card" content="summary_large_image">
1745
1745
  <meta name="twitter:title" content="Figma Console MCP - Turn Your Design System Into a Living API">
1746
- <meta name="twitter:description" content="The most comprehensive MCP server for Figma. 90+ tools give AI assistants deep access to design tokens, components, variables, and programmatic design creation.">
1746
+ <meta name="twitter:description" content="The most comprehensive MCP server for Figma. 91+ tools give AI assistants deep access to design tokens, components, variables, and programmatic design creation.">
1747
1747
  <meta name="twitter:image" content="https://docs.figma-console-mcp.southleft.com/images/og-image.jpg">
1748
1748
 
1749
1749
  <meta name="theme-color" content="#0D9488">
@@ -2630,7 +2630,7 @@ export default {
2630
2630
  <div class="grid-cell showcase-cell rule-left">
2631
2631
  <div class="showcase-label">What AI Can Access</div>
2632
2632
  <div class="showcase-stat">
2633
- <span class="number">90+</span>
2633
+ <span class="number">91+</span>
2634
2634
  <span class="label">MCP tools for Figma</span>
2635
2635
  </div>
2636
2636
  <div class="capability-list">
@@ -1 +1 @@
1
- {"version":3,"file":"figjam-tools.d.ts","sourceRoot":"","sources":["../../src/core/figjam-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4DzE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,SAAS,EACjB,mBAAmB,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GACrC,IAAI,CA2eN"}
1
+ {"version":3,"file":"figjam-tools.d.ts","sourceRoot":"","sources":["../../src/core/figjam-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4DzE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,SAAS,EACjB,mBAAmB,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GACrC,IAAI,CA+iBN"}
@@ -138,7 +138,9 @@ export function registerFigJamTools(server, getDesktopConnector) {
138
138
  // ============================================================================
139
139
  server.tool("figjam_create_connector", `Connect two nodes with a connector line in FigJam. Use to create flowcharts, diagrams, and relationship maps.
140
140
 
141
- Nodes must exist on the board (stickies, shapes, etc.). Use their node IDs from creation results.`, {
141
+ Nodes must exist on the board (stickies, shapes, etc.). Use their node IDs from creation results.
142
+
143
+ **Magnet positions:** AUTO (default), TOP, BOTTOM, LEFT, RIGHT — controls where the connector attaches to each node.`, {
142
144
  startNodeId: z.string().describe("Node ID of the start element"),
143
145
  endNodeId: z.string().describe("Node ID of the end element"),
144
146
  label: z
@@ -146,13 +148,25 @@ Nodes must exist on the board (stickies, shapes, etc.). Use their node IDs from
146
148
  .max(MAX_TEXT_LENGTH)
147
149
  .optional()
148
150
  .describe("Optional text label on the connector"),
149
- }, async ({ startNodeId, endNodeId, label }) => {
151
+ startMagnet: z
152
+ .enum(["AUTO", "TOP", "BOTTOM", "LEFT", "RIGHT"])
153
+ .optional()
154
+ .default("AUTO")
155
+ .describe("Magnet position on the start node"),
156
+ endMagnet: z
157
+ .enum(["AUTO", "TOP", "BOTTOM", "LEFT", "RIGHT"])
158
+ .optional()
159
+ .default("AUTO")
160
+ .describe("Magnet position on the end node"),
161
+ }, async ({ startNodeId, endNodeId, label, startMagnet, endMagnet }) => {
150
162
  try {
151
163
  const connector = await getDesktopConnector();
152
164
  const result = await connector.createConnector({
153
165
  startNodeId,
154
166
  endNodeId,
155
167
  label,
168
+ startMagnet,
169
+ endMagnet,
156
170
  });
157
171
  return {
158
172
  content: [{ type: "text", text: JSON.stringify(result) }],
@@ -177,7 +191,7 @@ Nodes must exist on the board (stickies, shapes, etc.). Use their node IDs from
177
191
  // ============================================================================
178
192
  // SHAPE WITH TEXT TOOL
179
193
  // ============================================================================
180
- server.tool("figjam_create_shape_with_text", `Create a labeled shape on a FigJam board. Use for flowchart nodes, process diagrams, and visual organization.
194
+ server.tool("figjam_create_shape_with_text", `Create a labeled shape on a FigJam board with optional size, colors, and font control. Use for flowchart nodes, process diagrams, and visual organization.
181
195
 
182
196
  **Shape types:** ROUNDED_RECTANGLE (default), DIAMOND, ELLIPSE, TRIANGLE_UP, TRIANGLE_DOWN, PARALLELOGRAM_RIGHT, PARALLELOGRAM_LEFT, ENG_DATABASE, ENG_QUEUE, ENG_FILE, ENG_FOLDER`, {
183
197
  text: z
@@ -191,7 +205,13 @@ Nodes must exist on the board (stickies, shapes, etc.). Use their node IDs from
191
205
  .describe("Shape type"),
192
206
  x: z.number().optional().describe("X position on canvas"),
193
207
  y: z.number().optional().describe("Y position on canvas"),
194
- }, async ({ text, shapeType, x, y }) => {
208
+ width: z.number().min(1).max(10000).optional().describe("Width in pixels"),
209
+ height: z.number().min(1).max(10000).optional().describe("Height in pixels"),
210
+ fillColor: z.string().regex(/^#[0-9a-fA-F]{6}$/).optional().describe("Fill color as hex (e.g., '#E1F5EE')"),
211
+ strokeColor: z.string().regex(/^#[0-9a-fA-F]{6}$/).optional().describe("Stroke/border color as hex"),
212
+ fontSize: z.number().min(1).max(200).optional().describe("Text font size in pixels"),
213
+ strokeDashPattern: z.string().optional().describe("Dash pattern as comma-separated numbers (e.g., '10,5' for dashed)"),
214
+ }, async ({ text, shapeType, x, y, width, height, fillColor, strokeColor, fontSize, strokeDashPattern }) => {
195
215
  try {
196
216
  const connector = await getDesktopConnector();
197
217
  const result = await connector.createShapeWithText({
@@ -199,6 +219,12 @@ Nodes must exist on the board (stickies, shapes, etc.). Use their node IDs from
199
219
  shapeType,
200
220
  x,
201
221
  y,
222
+ width,
223
+ height,
224
+ fillColor,
225
+ strokeColor,
226
+ fontSize,
227
+ strokeDashPattern,
202
228
  });
203
229
  return {
204
230
  content: [{ type: "text", text: JSON.stringify(result) }],
@@ -221,6 +247,42 @@ Nodes must exist on the board (stickies, shapes, etc.). Use their node IDs from
221
247
  }
222
248
  });
223
249
  // ============================================================================
250
+ // SECTION TOOL
251
+ // ============================================================================
252
+ server.tool("figjam_create_section", `Create a section on a FigJam board. Sections are containers that can hold other elements. Use for grouping related content.\n\n**Note:** After creating a section, place elements inside it by setting their x/y coordinates within the section's bounds, then use figma_execute to call section.appendChild(node) to parent them.`, {
253
+ name: z.string().max(500).optional().describe("Section name/title"),
254
+ x: z.number().optional().describe("X position on canvas"),
255
+ y: z.number().optional().describe("Y position on canvas"),
256
+ width: z.number().min(1).max(20000).optional().default(1000).describe("Section width in pixels"),
257
+ height: z.number().min(1).max(20000).optional().default(800).describe("Section height in pixels"),
258
+ fillColor: z.string().regex(/^#[0-9a-fA-F]{6}$/).optional().describe("Fill color as hex"),
259
+ }, async ({ name, x, y, width, height, fillColor }) => {
260
+ try {
261
+ const connector = await getDesktopConnector();
262
+ const result = await connector.createSection({
263
+ name, x, y, width, height, fillColor,
264
+ });
265
+ return {
266
+ content: [{ type: "text", text: JSON.stringify(result) }],
267
+ };
268
+ }
269
+ catch (error) {
270
+ logger.error({ error }, "figjam_create_section failed");
271
+ return {
272
+ content: [
273
+ {
274
+ type: "text",
275
+ text: JSON.stringify({
276
+ error: error instanceof Error ? error.message : String(error),
277
+ hint: "This tool only works in FigJam files.",
278
+ }),
279
+ },
280
+ ],
281
+ isError: true,
282
+ };
283
+ }
284
+ });
285
+ // ============================================================================
224
286
  // TABLE TOOL
225
287
  // ============================================================================
226
288
  server.tool("figjam_create_table", `Create a table on a FigJam board with optional cell data. Use for structured data display, comparison matrices, and organized information.
@@ -1 +1 @@
1
- {"version":3,"file":"figjam-tools.js","sourceRoot":"","sources":["../../src/core/figjam-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"figjam-tools.js","sourceRoot":"","sources":["../../src/core/figjam-tools.ts"],"names":[],"mappings":"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"}