@gethopp/figma-mcp-bridge 0.0.11 → 0.0.13

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/dist/tools.js CHANGED
@@ -1,43 +1,179 @@
1
- import { mkdir, writeFile } from "node:fs/promises";
1
+ import { lookup } from "node:dns/promises";
2
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
3
+ import { isIP } from "node:net";
2
4
  import path from "node:path";
3
- import { toolInputSchemas } from "./schema.js";
4
- export function registerTools(server, node) {
5
- server.tool("get_document", "Get the current Figma page document tree", async () => {
6
- return renderResponse(() => node.send("get_document"));
5
+ import { createFrameInput, createImageInput, createShapeShape, createTextShape, createShapeInput, createTextInput, setNodePropertiesInput, setGradientFillInput, setSolidFillInput, setEffectsInput, setStrokePropertiesInput, setAutoLayoutInput, setSelectionInput, scrollAndZoomIntoViewInput, groupNodesInput, ungroupNodeInput, setTextPropertiesShape, setTextPropertiesInput, toolInputSchemas, } from "./schema.js";
6
+ import { Follower } from "./follower.js";
7
+ const MAX_IMAGE_BYTES = 32 * 1024 * 1024;
8
+ const IMAGE_FETCH_TIMEOUT_MS = 15_000;
9
+ const MAX_IMAGE_REDIRECTS = 5;
10
+ export function registerTools(server, node, port) {
11
+ server.tool("list_files", "List all currently connected Figma files. Returns fileKey and fileName for each. Use the fileKey to target a specific file in other tools.", async () => {
12
+ try {
13
+ let files = node.listConnectedFiles();
14
+ if (files === undefined) {
15
+ // Follower: fetch via RPC from leader
16
+ const follower = new Follower(`http://localhost:${port}`);
17
+ files = await follower.listConnectedFiles();
18
+ }
19
+ return {
20
+ content: [{ type: "text", text: JSON.stringify(files) }],
21
+ };
22
+ }
23
+ catch (err) {
24
+ return {
25
+ content: [
26
+ {
27
+ type: "text",
28
+ text: err instanceof Error ? err.message : String(err),
29
+ },
30
+ ],
31
+ isError: true,
32
+ };
33
+ }
7
34
  });
8
- server.tool("get_selection", "Get the currently selected nodes in Figma", async () => {
9
- return renderResponse(() => node.send("get_selection"));
35
+ server.tool("get_document", "Get the current Figma page document tree. When multiple files are connected, specify fileKey.", toolInputSchemas.get_document.shape, async ({ fileKey }) => {
36
+ return renderResponse(() => node.send("get_document", undefined, fileKey));
10
37
  });
11
- server.tool("get_node", "Get a specific Figma node by ID. Must use colon format, e.g. '4029:12345', never use hyphens.", toolInputSchemas.get_node.shape, async ({ nodeId }) => {
12
- return renderResponse(() => node.send("get_node", [nodeId]));
38
+ server.tool("get_selection", "Get the currently selected nodes in Figma. When multiple files are connected, specify fileKey.", toolInputSchemas.get_selection.shape, async ({ fileKey }) => {
39
+ return renderResponse(() => node.send("get_selection", undefined, fileKey));
13
40
  });
14
- server.tool("get_styles", "Get all local styles in the document", async () => {
15
- return renderResponse(() => node.send("get_styles"));
41
+ server.tool("get_node", "Get a specific Figma node by ID. Accepts top-level IDs like '4029:12345' and instance-child IDs like 'I12740:17806;12740:17793'. Never use hyphens. When multiple files are connected, specify fileKey.", toolInputSchemas.get_node.shape, async ({ nodeId, fileKey }) => {
42
+ return renderResponse(() => node.send("get_node", [nodeId], fileKey));
16
43
  });
17
- server.tool("get_metadata", "Get metadata about the current Figma document including file name, pages, and current page info", async () => {
18
- return renderResponse(() => node.send("get_metadata"));
44
+ server.tool("get_styles", "Get all local styles in the document. When multiple files are connected, specify fileKey.", toolInputSchemas.get_styles.shape, async ({ fileKey }) => {
45
+ return renderResponse(() => node.send("get_styles", undefined, fileKey));
19
46
  });
20
- server.tool("get_design_context", "Get the design context for the current selection or page. Returns a summarized tree structure optimized for understanding the current design context.", toolInputSchemas.get_design_context.shape, async ({ depth }) => {
47
+ server.tool("get_metadata", "Get metadata about the current Figma document including file name, pages, and current page info. When multiple files are connected, specify fileKey.", toolInputSchemas.get_metadata.shape, async ({ fileKey }) => {
48
+ return renderResponse(() => node.send("get_metadata", undefined, fileKey));
49
+ });
50
+ server.tool("get_design_context", "Get the design context for the current selection or page. Returns a summarized tree structure optimized for understanding the current design context. When multiple files are connected, specify fileKey.", toolInputSchemas.get_design_context.shape, async ({ depth, fileKey }) => {
21
51
  const params = {};
22
52
  if (depth !== undefined && depth > 0) {
23
53
  params.depth = depth;
24
54
  }
25
- return renderResponse(() => node.sendWithParams("get_design_context", undefined, params));
55
+ return renderResponse(() => node.sendWithParams("get_design_context", undefined, params, fileKey));
26
56
  });
27
- server.tool("get_variable_defs", "Get all local variable definitions including variable collections, modes, and variable values. Variables are Figma's system for design tokens (colors, numbers, strings, booleans).", async () => {
28
- return renderResponse(() => node.send("get_variable_defs"));
57
+ server.tool("get_variable_defs", "Get all local variable definitions including variable collections, modes, and variable values. Variables are Figma's system for design tokens (colors, numbers, strings, booleans). When multiple files are connected, specify fileKey.", toolInputSchemas.get_variable_defs.shape, async ({ fileKey }) => {
58
+ return renderResponse(() => node.send("get_variable_defs", undefined, fileKey));
29
59
  });
30
- server.tool("get_screenshot", "Export a screenshot of the selected nodes or specific nodes by ID. Returns base64-encoded image data.", toolInputSchemas.get_screenshot.shape, async ({ nodeIds, format, scale }) => {
60
+ server.tool("get_screenshot", "Export a screenshot of the selected nodes or specific nodes by ID. Returns base64-encoded image data. When multiple files are connected, specify fileKey.", toolInputSchemas.get_screenshot.shape, async ({ nodeIds, format, scale, fileKey }) => {
31
61
  const params = {};
32
62
  if (format)
33
63
  params.format = format;
34
64
  if (scale !== undefined && scale > 0)
35
65
  params.scale = scale;
36
- return renderResponse(() => node.sendWithParams("get_screenshot", nodeIds, params));
66
+ return renderResponse(() => node.sendWithParams("get_screenshot", nodeIds, params, fileKey));
67
+ });
68
+ server.tool("set_node_visibility", "Show or hide specific Figma nodes. Returns previous visibility for each node so you can restore them after. Useful for isolating a single layer before exporting: hide all siblings, export the frame, then restore visibility.", toolInputSchemas.set_node_visibility.shape, async ({ items, fileKey }) => {
69
+ return renderResponse(() => node.sendWithParams("set_node_visibility", undefined, { items }, fileKey));
70
+ });
71
+ server.tool("set_text_content", "Update the contents of a single text node. The plugin loads the node's fonts before applying the new text. When multiple files are connected, specify fileKey.", toolInputSchemas.set_text_content.shape, async ({ nodeId, text, fileKey }) => {
72
+ return renderResponse(() => node.sendWithParams("set_text_content", [nodeId], { text }, fileKey));
73
+ });
74
+ server.tool("set_text_properties", "Patch common text properties such as font family/style, size, alignment, auto-resize, line height, letter spacing, fill color, and bounds. When multiple files are connected, specify fileKey.", setTextPropertiesShape.shape, async (args) => {
75
+ const parsed = parseToolInput(setTextPropertiesInput, args);
76
+ if (!parsed.success)
77
+ return parsed.error;
78
+ const { nodeId, fileKey, ...properties } = parsed.data;
79
+ return renderResponse(() => node.sendWithParams("set_text_properties", [nodeId], properties, fileKey));
80
+ });
81
+ server.tool("set_node_properties", "Patch common node properties such as name, position, size, visibility, opacity, and corner radius. Only supported properties for the target node type may be changed. Use set_solid_fill or set_gradient_fill to change paints. When multiple files are connected, specify fileKey.", setNodePropertiesInput.shape, async (args) => {
82
+ const parsed = parseToolInput(toolInputSchemas.set_node_properties, args);
83
+ if (!parsed.success)
84
+ return parsed.error;
85
+ const { nodeId, fileKey, ...properties } = parsed.data;
86
+ return renderResponse(() => node.sendWithParams("set_node_properties", [nodeId], properties, fileKey));
87
+ });
88
+ server.tool("set_solid_fill", "Replace a node's fill (or stroke) with a single solid paint. Provide a hex color and optional paint opacity. Use set_gradient_fill for gradient paints.", setSolidFillInput.shape, async ({ nodeId, fileKey, ...params }) => {
89
+ return renderResponse(() => node.sendWithParams("set_solid_fill", [nodeId], params, fileKey));
90
+ });
91
+ server.tool("set_gradient_fill", "Replace a node's fill (or stroke) with a gradient paint. Provide ordered stops (position 0..1, hex color, optional alpha) and an optional 2x3 gradientTransform matching Figma's gradientTransform format. Useful for setting linear/radial/angular/diamond gradients programmatically.", setGradientFillInput.shape, async ({ nodeId, fileKey, ...params }) => {
92
+ return renderResponse(() => node.sendWithParams("set_gradient_fill", [nodeId], params, fileKey));
93
+ });
94
+ server.tool("set_effects", "Replace a node's effects list (drop/inner shadows, layer/background blurs). Pass an empty array to clear all effects. Each entry mirrors the shape returned by get_node's `effects` field.", setEffectsInput.shape, async ({ nodeId, fileKey, ...params }) => {
95
+ return renderResponse(() => node.sendWithParams("set_effects", [nodeId], params, fileKey));
96
+ });
97
+ server.tool("set_stroke_properties", "Patch stroke geometry properties: weight, align, dash pattern, cap, join. Use set_solid_fill/set_gradient_fill with target='stroke' to set the paint itself.", setStrokePropertiesInput.shape, async (args) => {
98
+ const parsed = parseToolInput(toolInputSchemas.set_stroke_properties, args);
99
+ if (!parsed.success)
100
+ return parsed.error;
101
+ const { nodeId, fileKey, ...params } = parsed.data;
102
+ return renderResponse(() => node.sendWithParams("set_stroke_properties", [nodeId], params, fileKey));
103
+ });
104
+ server.tool("set_auto_layout", "Configure auto-layout on a frame: direction, gap, padding, alignment, sizing modes, wrap. Set layoutMode='NONE' to disable auto-layout on the frame.", setAutoLayoutInput.shape, async (args) => {
105
+ const parsed = parseToolInput(toolInputSchemas.set_auto_layout, args);
106
+ if (!parsed.success)
107
+ return parsed.error;
108
+ const { nodeId, fileKey, ...params } = parsed.data;
109
+ return renderResponse(() => node.sendWithParams("set_auto_layout", [nodeId], params, fileKey));
110
+ });
111
+ server.tool("create_frame", "Create a new frame, optionally inside a specified parent. You can set name, size, position, and a solid fill. When multiple files are connected, specify fileKey.", createFrameInput.shape, async (args) => {
112
+ const parsed = parseToolInput(toolInputSchemas.create_frame, args);
113
+ if (!parsed.success)
114
+ return parsed.error;
115
+ const { fileKey, ...params } = parsed.data;
116
+ return renderResponse(() => node.sendWithParams("create_frame", undefined, params, fileKey));
117
+ });
118
+ server.tool("create_text", "Create a new text node, optionally inside a specified parent. You can set its content, font, size, alignment, color, position, and bounds. When multiple files are connected, specify fileKey.", createTextShape.shape, async (args) => {
119
+ const parsed = parseToolInput(createTextInput, args);
120
+ if (!parsed.success)
121
+ return parsed.error;
122
+ const { fileKey, ...params } = parsed.data;
123
+ return renderResponse(() => node.sendWithParams("create_text", undefined, params, fileKey));
124
+ });
125
+ server.tool("create_shape", "Create a rectangle, ellipse, or line, optionally inside a specified parent. You can set its size, position, rotation, fill, and stroke. When multiple files are connected, specify fileKey.", createShapeShape.shape, async (args) => {
126
+ const parsed = parseToolInput(createShapeInput, args);
127
+ if (!parsed.success)
128
+ return parsed.error;
129
+ const { fileKey, ...params } = parsed.data;
130
+ return renderResponse(() => node.sendWithParams("create_shape", undefined, params, fileKey));
131
+ });
132
+ server.tool("create_image", "Create an image-backed rectangle from a local file path, remote URL, or data URI. You can set its parent, position, size, corner radius, and fit mode. When multiple files are connected, specify fileKey.", createImageInput.shape, async ({ source, fileKey, ...params }) => {
133
+ try {
134
+ const imageBase64 = await loadImageSourceAsBase64(source, process.cwd());
135
+ return await renderResponse(() => node.sendWithParams("create_image", undefined, { ...params, imageBase64 }, fileKey));
136
+ }
137
+ catch (err) {
138
+ return {
139
+ content: [
140
+ {
141
+ type: "text",
142
+ text: err instanceof Error ? err.message : String(err),
143
+ },
144
+ ],
145
+ isError: true,
146
+ };
147
+ }
148
+ });
149
+ server.tool("duplicate_nodes", "Duplicate one or more nodes in place. The duplicates remain under the same parent as the originals. When multiple files are connected, specify fileKey.", toolInputSchemas.duplicate_nodes.shape, async ({ nodeIds, fileKey }) => {
150
+ return renderResponse(() => node.sendWithParams("duplicate_nodes", nodeIds, undefined, fileKey));
151
+ });
152
+ server.tool("reparent_nodes", "Move one or more nodes into a different parent container. When multiple files are connected, specify fileKey.", toolInputSchemas.reparent_nodes.shape, async ({ nodeIds, parentId, fileKey }) => {
153
+ return renderResponse(() => node.sendWithParams("reparent_nodes", nodeIds, { parentId }, fileKey));
154
+ });
155
+ server.tool("group_nodes", "Wrap a list of nodes in a new group. Nodes must share a common parent (or supply parentId explicitly). Returns the new group's node ID.", groupNodesInput.shape, async ({ nodeIds, fileKey, ...params }) => {
156
+ return renderResponse(() => node.sendWithParams("group_nodes", nodeIds, params, fileKey));
37
157
  });
38
- server.tool("save_screenshots", "Export screenshots for multiple nodes and save them directly to the local filesystem. Returns metadata only (no base64).", toolInputSchemas.save_screenshots.shape, async ({ items, format, scale }) => {
158
+ server.tool("ungroup_node", "Ungroup a group or frame — its children move up to its parent and the wrapper is removed. Returns the IDs of the orphaned children in their new parent.", ungroupNodeInput.shape, async ({ nodeId, fileKey }) => {
159
+ return renderResponse(() => node.sendWithParams("ungroup_node", [nodeId], undefined, fileKey));
160
+ });
161
+ server.tool("set_selection", "Set the current page selection to a list of node IDs. Pass an empty array to clear the selection. Works in both design editor and Dev Mode.", setSelectionInput.shape, async ({ nodeIds, fileKey }) => {
162
+ return renderResponse(() => node.sendWithParams("set_selection", nodeIds, undefined, fileKey));
163
+ });
164
+ server.tool("scroll_and_zoom_into_view", "Scroll and zoom the Figma viewport so the given nodes are framed in view. Works in both design editor and Dev Mode.", scrollAndZoomIntoViewInput.shape, async ({ nodeIds, fileKey }) => {
165
+ return renderResponse(() => node.sendWithParams("scroll_and_zoom_into_view", nodeIds, undefined, fileKey));
166
+ });
167
+ server.tool("delete_nodes", "Delete one or more nodes. This is destructive and requires confirm: true. Page and document nodes cannot be deleted through this tool. When multiple files are connected, specify fileKey.", toolInputSchemas.delete_nodes.shape, async ({ nodeIds, confirm, fileKey }) => {
168
+ return renderResponse(() => node.sendWithParams("delete_nodes", nodeIds, { confirm }, fileKey));
169
+ });
170
+ server.tool("save_screenshots", "Export screenshots for multiple nodes and save them directly to the local filesystem. Returns metadata only (no base64). When multiple files are connected, specify fileKey.", toolInputSchemas.save_screenshots.shape, async ({ items, format, scale, fileKey }) => {
39
171
  try {
40
- const result = await executeSaveScreenshots(node, items, format, scale);
172
+ // Create a sender bound to the specific fileKey
173
+ const sender = {
174
+ sendWithParams: (requestType, nodeIds, params) => node.sendWithParams(requestType, nodeIds, params, fileKey),
175
+ };
176
+ const result = await executeSaveScreenshots(sender, items, format, scale);
41
177
  return {
42
178
  content: [{ type: "text", text: JSON.stringify(result) }],
43
179
  };
@@ -96,6 +232,19 @@ async function renderResponse(fn) {
96
232
  };
97
233
  }
98
234
  }
235
+ function parseToolInput(schema, args) {
236
+ const result = schema.safeParse(args);
237
+ if (result.success) {
238
+ return { success: true, data: result.data };
239
+ }
240
+ return {
241
+ success: false,
242
+ error: {
243
+ content: [{ type: "text", text: result.error.issues[0].message }],
244
+ isError: true,
245
+ },
246
+ };
247
+ }
99
248
  function resolveAndValidateOutputPath(outputPath, workspaceRoot) {
100
249
  const resolvedRoot = path.resolve(workspaceRoot);
101
250
  const resolvedPath = path.resolve(resolvedRoot, outputPath);
@@ -106,6 +255,147 @@ function resolveAndValidateOutputPath(outputPath, workspaceRoot) {
106
255
  }
107
256
  return resolvedPath;
108
257
  }
258
+ async function loadImageSourceAsBase64(source, workspaceRoot) {
259
+ if (/^https?:\/\//i.test(source)) {
260
+ const bytes = await fetchImageBytes(source);
261
+ return bytes.toString("base64");
262
+ }
263
+ const dataUrlMatch = source.match(/^data:.*?;base64,(.+)$/);
264
+ if (dataUrlMatch) {
265
+ return dataUrlMatch[1];
266
+ }
267
+ const resolvedRoot = path.resolve(workspaceRoot);
268
+ const resolvedPath = path.resolve(resolvedRoot, source);
269
+ const relativePath = path.relative(resolvedRoot, resolvedPath);
270
+ const escapesRoot = relativePath.startsWith("..") || path.isAbsolute(relativePath);
271
+ if (escapesRoot) {
272
+ throw new Error(`image source must be inside the MCP server working directory: ${resolvedRoot}`);
273
+ }
274
+ const bytes = await readFile(resolvedPath);
275
+ if (bytes.length > MAX_IMAGE_BYTES) {
276
+ throw new Error(`Image exceeds ${MAX_IMAGE_BYTES} bytes`);
277
+ }
278
+ return bytes.toString("base64");
279
+ }
280
+ async function fetchImageBytes(source) {
281
+ let url = new URL(source);
282
+ let redirects = 0;
283
+ while (true) {
284
+ await assertSafeHttpUrl(url);
285
+ const controller = new AbortController();
286
+ const timeout = setTimeout(() => controller.abort(), IMAGE_FETCH_TIMEOUT_MS);
287
+ let resp;
288
+ try {
289
+ resp = await fetch(url, {
290
+ signal: controller.signal,
291
+ redirect: "manual",
292
+ });
293
+ }
294
+ catch (err) {
295
+ if (err instanceof Error && err.name === "AbortError") {
296
+ throw new Error(`Timed out fetching image after ${IMAGE_FETCH_TIMEOUT_MS}ms`);
297
+ }
298
+ throw err;
299
+ }
300
+ finally {
301
+ clearTimeout(timeout);
302
+ }
303
+ if (resp.status >= 300 && resp.status < 400) {
304
+ const location = resp.headers.get("location");
305
+ if (!location) {
306
+ throw new Error(`Image redirect missing Location header: ${resp.status}`);
307
+ }
308
+ redirects += 1;
309
+ if (redirects > MAX_IMAGE_REDIRECTS) {
310
+ throw new Error(`Image fetch exceeded ${MAX_IMAGE_REDIRECTS} redirects`);
311
+ }
312
+ url = new URL(location, url);
313
+ continue;
314
+ }
315
+ if (!resp.ok) {
316
+ throw new Error(`Failed to fetch image: ${resp.status} ${resp.statusText}`);
317
+ }
318
+ const contentLength = resp.headers.get("content-length");
319
+ if (contentLength !== null) {
320
+ const size = Number(contentLength);
321
+ if (!Number.isFinite(size) || size < 0) {
322
+ throw new Error("Invalid image Content-Length header");
323
+ }
324
+ if (size > MAX_IMAGE_BYTES) {
325
+ throw new Error(`Image exceeds ${MAX_IMAGE_BYTES} bytes`);
326
+ }
327
+ }
328
+ return readBoundedResponse(resp, MAX_IMAGE_BYTES);
329
+ }
330
+ }
331
+ async function assertSafeHttpUrl(url) {
332
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
333
+ throw new Error("Image URL must use http or https");
334
+ }
335
+ if (!url.hostname) {
336
+ throw new Error("Image URL must include a hostname");
337
+ }
338
+ const hostname = normalizeHostname(url.hostname);
339
+ const literalIp = isIP(hostname);
340
+ if (literalIp !== 0) {
341
+ if (isBlockedIp(hostname)) {
342
+ throw new Error("Image URL resolves to a blocked internal address");
343
+ }
344
+ return;
345
+ }
346
+ const addresses = await lookup(hostname, { all: true, verbatim: true });
347
+ if (addresses.length === 0) {
348
+ throw new Error("Image URL hostname did not resolve");
349
+ }
350
+ if (addresses.some((address) => isBlockedIp(address.address))) {
351
+ throw new Error("Image URL resolves to a blocked internal address");
352
+ }
353
+ }
354
+ function isBlockedIp(address) {
355
+ if (isIP(address) === 4) {
356
+ const [a, b] = address.split(".").map(Number);
357
+ return (a === 0 ||
358
+ a === 10 ||
359
+ a === 127 ||
360
+ (a === 100 && b >= 64 && b <= 127) ||
361
+ (a === 169 && b === 254) ||
362
+ (a === 172 && b >= 16 && b <= 31) ||
363
+ (a === 192 && b === 168) ||
364
+ a >= 224);
365
+ }
366
+ const normalized = address.toLowerCase();
367
+ if (normalized.startsWith("::ffff:")) {
368
+ return isBlockedIp(normalized.slice("::ffff:".length));
369
+ }
370
+ return (normalized === "::" ||
371
+ normalized === "::1" ||
372
+ normalized.startsWith("fc") ||
373
+ normalized.startsWith("fd") ||
374
+ /^fe[89ab]:/.test(normalized) ||
375
+ normalized.startsWith("ff"));
376
+ }
377
+ function normalizeHostname(hostname) {
378
+ if (hostname.startsWith("[") && hostname.endsWith("]")) {
379
+ return hostname.slice(1, -1);
380
+ }
381
+ return hostname;
382
+ }
383
+ async function readBoundedResponse(resp, maxBytes) {
384
+ if (!resp.body) {
385
+ return Buffer.alloc(0);
386
+ }
387
+ const chunks = [];
388
+ let total = 0;
389
+ for await (const chunk of resp.body) {
390
+ const bytes = Buffer.from(chunk);
391
+ total += bytes.length;
392
+ if (total > maxBytes) {
393
+ throw new Error(`Image exceeds ${maxBytes} bytes`);
394
+ }
395
+ chunks.push(bytes);
396
+ }
397
+ return Buffer.concat(chunks, total);
398
+ }
109
399
  function inferFormatFromPath(outputPath) {
110
400
  const ext = path.extname(outputPath).toLowerCase();
111
401
  switch (ext) {
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -14,11 +14,16 @@ export interface RPCRequest {
14
14
  tool: string;
15
15
  nodeIds?: string[];
16
16
  params?: Record<string, unknown>;
17
+ fileKey?: string;
17
18
  }
18
19
  export interface RPCResponse {
19
20
  data?: unknown;
20
21
  error?: string;
21
22
  }
23
+ export interface ConnectedFile {
24
+ fileKey: string;
25
+ fileName: string;
26
+ }
22
27
  export declare enum Role {
23
28
  Unknown = 0,
24
29
  Leader = 1,
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAyBA,MAAM,CAAN,IAAY,IAIX;AAJD,WAAY,IAAI;IACd,qCAAW,CAAA;IACX,mCAAU,CAAA;IACV,uCAAY,CAAA;AACd,CAAC,EAJW,IAAI,KAAJ,IAAI,QAIf"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA+BA,MAAM,CAAN,IAAY,IAIX;AAJD,WAAY,IAAI;IACd,qCAAW,CAAA;IACX,mCAAU,CAAA;IACV,uCAAY,CAAA;AACd,CAAC,EAJW,IAAI,KAAJ,IAAI,QAIf"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gethopp/figma-mcp-bridge",
3
- "version": "0.0.11",
3
+ "version": "0.0.13",
4
4
  "description": "MCP server that bridges Figma plugin data to AI tools without hitting API rate limits",
5
5
  "type": "module",
6
6
  "bin": {