@sxl-studio/bridge 1.2.0 → 1.3.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 +122 -48
- package/dist/audit.d.ts +21 -0
- package/dist/audit.js +24 -0
- package/dist/audit.js.map +1 -0
- package/dist/auth.d.ts +18 -0
- package/dist/auth.js +39 -0
- package/dist/auth.js.map +1 -0
- package/dist/http-api.d.ts +13 -0
- package/dist/http-api.js +101 -5
- package/dist/http-api.js.map +1 -1
- package/dist/idempotency.d.ts +13 -0
- package/dist/idempotency.js +47 -0
- package/dist/idempotency.js.map +1 -0
- package/dist/mcp-factory.d.ts +1 -1
- package/dist/mcp-factory.js +19 -3
- package/dist/mcp-factory.js.map +1 -1
- package/dist/mcp-server.d.ts +1 -1
- package/dist/mcp-server.js +1 -1
- package/dist/mcp-server.js.map +1 -1
- package/dist/sxl-mcp-instructions.d.ts +1 -1
- package/dist/sxl-mcp-instructions.js +123 -23
- package/dist/sxl-mcp-instructions.js.map +1 -1
- package/dist/tools/catalogue-bootstrap.d.ts +9 -0
- package/dist/tools/catalogue-bootstrap.js +168 -0
- package/dist/tools/catalogue-bootstrap.js.map +1 -0
- package/dist/tools/composition.d.ts +1 -1
- package/dist/tools/composition.js +30 -2
- package/dist/tools/composition.js.map +1 -1
- package/dist/tools/data.d.ts +1 -1
- package/dist/tools/diagnostics.d.ts +1 -1
- package/dist/tools/diagnostics.js +5 -1
- package/dist/tools/diagnostics.js.map +1 -1
- package/dist/tools/figma-nodes.d.ts +1 -1
- package/dist/tools/figma-rc-extended.d.ts +1 -1
- package/dist/tools/figma-url.d.ts +20 -0
- package/dist/tools/figma-url.js +52 -0
- package/dist/tools/figma-url.js.map +1 -0
- package/dist/tools/git.d.ts +1 -1
- package/dist/tools/meta.d.ts +10 -0
- package/dist/tools/meta.js +36 -0
- package/dist/tools/meta.js.map +1 -0
- package/dist/tools/orchestration.d.ts +11 -0
- package/dist/tools/orchestration.js +112 -0
- package/dist/tools/orchestration.js.map +1 -0
- package/dist/tools/registry.d.ts +22 -0
- package/dist/tools/registry.js +26 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/resources.d.ts +17 -0
- package/dist/tools/resources.js +92 -0
- package/dist/tools/resources.js.map +1 -0
- package/dist/tools/shared.d.ts +20 -0
- package/dist/tools/shared.js +61 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/tools/styles.d.ts +8 -0
- package/dist/tools/styles.js +55 -0
- package/dist/tools/styles.js.map +1 -0
- package/dist/tools/tokens.d.ts +2 -2
- package/dist/tools/tokens.js +65 -34
- package/dist/tools/tokens.js.map +1 -1
- package/dist/tools/variables.d.ts +11 -0
- package/dist/tools/variables.js +55 -0
- package/dist/tools/variables.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,MAAM,UAAU,EAAE,CAAC,OAAgB;IACjC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KAC7E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,OAAiC;IACpE,MAAM,IAAI,GAAG;QACX,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,OAAO,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc;QAC9E,OAAO;QACP,SAAS,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK;QAC1C,OAAO,EAAE,OAAO,IAAI,IAAI;KACzB,CAAC;IACF,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QACzE,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,6FAA6F;AAC7F,SAAS,gBAAgB,CAAC,GAAuB;IAC/C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5E,OAAO,MAAiC,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAmB,EACnB,WAAmB,EACnB,UAAmC,EAAE;IAErC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,gDAAgD;IAChD,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,IAAI,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,GAAG,CACR,MAAM,CAAC,KAAK,IAAI,YAAY,WAAW,aAAa,MAAM,CAAC,MAAM,GAAG,EACpE;QACE,IAAI,EACF,MAAM,CAAC,MAAM,KAAK,SAAS;YACzB,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW;gBAC7B,CAAC,CAAC,kBAAkB;gBACpB,CAAC,CAAC,cAAc;QACtB,SAAS,EAAE,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;KACxE,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tools for Figma local Styles CRUD + assignment.
|
|
3
|
+
*
|
|
4
|
+
* All commands here mutate the Figma document and require Design mode.
|
|
5
|
+
*/
|
|
6
|
+
import type { McpServer } from "../../node_modules/@modelcontextprotocol/sdk/dist/cjs/server/mcp.js";
|
|
7
|
+
import type { CommandQueue } from "../command-queue.js";
|
|
8
|
+
export declare function registerStyleTools(server: McpServer, queue: CommandQueue): void;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tools for Figma local Styles CRUD + assignment.
|
|
3
|
+
*
|
|
4
|
+
* All commands here mutate the Figma document and require Design mode.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { callPluginCommand } from "./shared.js";
|
|
8
|
+
export function registerStyleTools(server, queue) {
|
|
9
|
+
server.tool("create_paint_style", "Create a local PaintStyle with the given name and paints. Solid paints accept either { type: 'SOLID', color: '#rrggbb', opacity? } or raw Figma Paint objects.", {
|
|
10
|
+
name: z.string().describe("Style name"),
|
|
11
|
+
paints: z.array(z.record(z.unknown())).optional().describe("Array of Paint objects (see Figma Plugin API). Defaults to a black solid paint."),
|
|
12
|
+
description: z.string().optional().describe("Optional description"),
|
|
13
|
+
}, async ({ name, paints, description }) => {
|
|
14
|
+
const payload = { name };
|
|
15
|
+
if (paints !== undefined)
|
|
16
|
+
payload.paints = paints;
|
|
17
|
+
if (description !== undefined)
|
|
18
|
+
payload.description = description;
|
|
19
|
+
return callPluginCommand(queue, "create_paint_style", payload);
|
|
20
|
+
});
|
|
21
|
+
server.tool("create_text_style", "Create a local TextStyle. fontName.family + fontName.style must be loaded in Figma (plugin loads the font).", {
|
|
22
|
+
name: z.string().describe("Style name"),
|
|
23
|
+
fontName: z
|
|
24
|
+
.object({ family: z.string(), style: z.string() })
|
|
25
|
+
.describe("Figma FontName"),
|
|
26
|
+
fontSize: z.number().optional(),
|
|
27
|
+
lineHeight: z.record(z.unknown()).optional().describe("Figma LineHeight"),
|
|
28
|
+
letterSpacing: z.record(z.unknown()).optional().describe("Figma LetterSpacing"),
|
|
29
|
+
textDecoration: z.string().optional(),
|
|
30
|
+
textCase: z.string().optional(),
|
|
31
|
+
description: z.string().optional(),
|
|
32
|
+
}, async (args) => callPluginCommand(queue, "create_text_style", args));
|
|
33
|
+
server.tool("create_effect_style", "Create a local EffectStyle with the given effects (Figma Effect objects).", {
|
|
34
|
+
name: z.string().describe("Style name"),
|
|
35
|
+
effects: z.array(z.record(z.unknown())).describe("Array of Figma Effect objects"),
|
|
36
|
+
description: z.string().optional(),
|
|
37
|
+
}, async (args) => callPluginCommand(queue, "create_effect_style", args));
|
|
38
|
+
server.tool("set_text_style", "Assign a TextStyle to a node (sets textStyleId).", {
|
|
39
|
+
nodeId: z.string().describe("Figma node id"),
|
|
40
|
+
styleId: z.string().describe("TextStyle id"),
|
|
41
|
+
}, async ({ nodeId, styleId }) => callPluginCommand(queue, "set_text_style", { nodeId, styleId }));
|
|
42
|
+
server.tool("set_effect_style", "Assign an EffectStyle to a node (sets effectStyleId).", {
|
|
43
|
+
nodeId: z.string().describe("Figma node id"),
|
|
44
|
+
styleId: z.string().describe("EffectStyle id"),
|
|
45
|
+
}, async ({ nodeId, styleId }) => callPluginCommand(queue, "set_effect_style", { nodeId, styleId }));
|
|
46
|
+
server.tool("set_stroke_style", "Assign a PaintStyle to a node's stroke (sets strokeStyleId).", {
|
|
47
|
+
nodeId: z.string().describe("Figma node id"),
|
|
48
|
+
styleId: z.string().describe("PaintStyle id"),
|
|
49
|
+
}, async ({ nodeId, styleId }) => callPluginCommand(queue, "set_stroke_style", { nodeId, styleId }));
|
|
50
|
+
server.tool("set_fill_style", "Assign a PaintStyle to a node's fill (sets fillStyleId).", {
|
|
51
|
+
nodeId: z.string().describe("Figma node id"),
|
|
52
|
+
styleId: z.string().describe("PaintStyle id"),
|
|
53
|
+
}, async ({ nodeId, styleId }) => callPluginCommand(queue, "set_fill_style", { nodeId, styleId }));
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/tools/styles.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/tokens.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* MCP tools for Vars / Tokens operations.
|
|
2
|
+
* MCP tools for Vars / Tokens operations (full workspace CRUD).
|
|
3
3
|
*/
|
|
4
|
-
import type { McpServer } from "
|
|
4
|
+
import type { McpServer } from "../../node_modules/@modelcontextprotocol/sdk/dist/cjs/server/mcp.js";
|
|
5
5
|
import type { CommandQueue } from "../command-queue.js";
|
|
6
6
|
export declare function registerTokenTools(server: McpServer, queue: CommandQueue): void;
|
package/dist/tools/tokens.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* MCP tools for Vars / Tokens operations.
|
|
2
|
+
* MCP tools for Vars / Tokens operations (full workspace CRUD).
|
|
3
3
|
*/
|
|
4
4
|
import { z } from "zod";
|
|
5
|
+
import { callPluginCommand } from "./shared.js";
|
|
5
6
|
export function registerTokenTools(server, queue) {
|
|
6
7
|
server.tool("export_variables", "Export design token variables and styles to Figma. By default exports ALL collections with codeSyntax and scopes enabled. Use 'collection' to filter by name.", {
|
|
7
8
|
collection: z.string().optional().describe("Export only this collection (by name). Omit to export all."),
|
|
@@ -18,49 +19,79 @@ export function registerTokenTools(server, queue) {
|
|
|
18
19
|
settings.forceUpdateAll = forceUpdateAll;
|
|
19
20
|
if (deleteOrphans !== undefined)
|
|
20
21
|
settings.deleteOrphans = deleteOrphans;
|
|
21
|
-
|
|
22
|
-
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
23
|
-
});
|
|
24
|
-
server.tool("reset_diff", "Reset all Diff-IDs across all token files. Forces re-export of all variables on next export.", {}, async () => {
|
|
25
|
-
const result = await queue.execute("reset_diff");
|
|
26
|
-
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
27
|
-
});
|
|
28
|
-
server.tool("reset_diff_collection", "Reset Diff-IDs for a specific collection.", { collectionName: z.string().describe("Name of the collection to reset") }, async ({ collectionName }) => {
|
|
29
|
-
const result = await queue.execute("reset_diff_collection", { collectionName });
|
|
30
|
-
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
22
|
+
return callPluginCommand(queue, "export_variables", { settings });
|
|
31
23
|
});
|
|
24
|
+
server.tool("reset_diff", "Reset all Diff-IDs across all token files. Forces re-export of all variables on next export.", {}, async () => callPluginCommand(queue, "reset_diff"));
|
|
25
|
+
server.tool("reset_diff_collection", "Reset Diff-IDs for a specific collection.", { collectionName: z.string().describe("Name of the collection to reset") }, async ({ collectionName }) => callPluginCommand(queue, "reset_diff_collection", { collectionName }));
|
|
32
26
|
server.tool("reset_diff_file", "Reset Diff-IDs for a specific token file.", {
|
|
33
27
|
fileId: z.string().describe("Token file ID"),
|
|
34
28
|
fileName: z.string().describe("Token file name"),
|
|
35
|
-
}, async ({ fileId, fileName }) => {
|
|
36
|
-
|
|
37
|
-
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
38
|
-
});
|
|
39
|
-
server.tool("reapply_token_bindings", "Re-apply token bindings to nodes. Scope can be 'selection', 'page', or 'document'.", { scope: z.string().describe("Scope: selection, page, or document") }, async ({ scope }) => {
|
|
40
|
-
const result = await queue.execute("reapply_token_bindings", { scope });
|
|
41
|
-
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
42
|
-
});
|
|
29
|
+
}, async ({ fileId, fileName }) => callPluginCommand(queue, "reset_diff_file", { fileId, fileName }));
|
|
30
|
+
server.tool("reapply_token_bindings", "Re-apply token bindings to nodes. Scope can be 'selection', 'page', or 'document'.", { scope: z.string().describe("Scope: selection, page, or document") }, async ({ scope }) => callPluginCommand(queue, "reapply_token_bindings", { scope }));
|
|
43
31
|
server.tool("cross_file_sync_fetch", "Fetch remote variables from a published Figma file for cross-file sync.", {
|
|
44
32
|
fileKey: z.string().describe("Figma file key"),
|
|
45
33
|
accessToken: z.string().describe("Figma access token"),
|
|
46
|
-
}, async ({ fileKey, accessToken }) => {
|
|
47
|
-
|
|
48
|
-
|
|
34
|
+
}, async ({ fileKey, accessToken }) => callPluginCommand(queue, "cross_file_sync_fetch", { fileKey, accessToken }));
|
|
35
|
+
server.tool("cross_file_sync_apply", "Apply cross-file sync entries to local variables.", { entries: z.array(z.unknown()).describe("Sync entries to apply") }, async ({ entries }) => callPluginCommand(queue, "cross_file_sync_apply", { entries }));
|
|
36
|
+
// ─── Token file workspace CRUD ───
|
|
37
|
+
server.tool("list_token_files", "List token files in the plugin workspace. Returns id, name, folder, gitPath, tokenCount, tokenTypes, updatedAt for each file. Use this as the first step before reading or editing token files.", {}, async () => callPluginCommand(queue, "list_token_files"));
|
|
38
|
+
server.tool("get_token_file_content", "Read raw JSON text of a token file from the plugin workspace (by internal fileId from list_token_files).", { fileId: z.string().describe("Token file id (tf_...) from the plugin") }, async ({ fileId }) => callPluginCommand(queue, "get_token_file_content", { fileId }));
|
|
39
|
+
server.tool("save_token_file", "Write token file JSON content into the plugin workspace (upsert). Provide fileId to update an existing file, or name+folder to create/update by identity. Marks the file dirty for Git.", {
|
|
40
|
+
fileId: z.string().optional().describe("Token file id (tf_...). Omit to create a new file by name/folder."),
|
|
41
|
+
name: z.string().optional().describe("File name (e.g. \"colors.json\"). Required when creating."),
|
|
42
|
+
folder: z.string().nullable().optional().describe("Folder path relative to workspace (e.g. \"tokens\"). Use null or omit for the root."),
|
|
43
|
+
content: z.string().describe("Full file body (valid JSON string)"),
|
|
44
|
+
}, async ({ fileId, name, folder, content }) => {
|
|
45
|
+
const payload = { content };
|
|
46
|
+
if (fileId)
|
|
47
|
+
payload.fileId = fileId;
|
|
48
|
+
if (name)
|
|
49
|
+
payload.name = name;
|
|
50
|
+
if (folder !== undefined)
|
|
51
|
+
payload.folder = folder;
|
|
52
|
+
return callPluginCommand(queue, "save_token_file", payload);
|
|
49
53
|
});
|
|
50
|
-
server.tool("
|
|
51
|
-
|
|
52
|
-
|
|
54
|
+
server.tool("create_token_file", "Create a new token JSON file in the plugin workspace. Returns the new fileId. Use overwrite=true to replace an existing file with the same name+folder.", {
|
|
55
|
+
name: z.string().describe("File name (e.g. \"colors.json\" or \"button.comp.json\")"),
|
|
56
|
+
folder: z.string().nullable().optional().describe("Folder path (e.g. \"tokens\"). Null/omit for root."),
|
|
57
|
+
content: z.string().optional().describe("Initial JSON body. Defaults to '{}'."),
|
|
58
|
+
overwrite: z.boolean().optional().describe("Replace existing file with the same name+folder (default: false)"),
|
|
59
|
+
}, async ({ name, folder, content, overwrite }) => {
|
|
60
|
+
const payload = { name };
|
|
61
|
+
if (folder !== undefined)
|
|
62
|
+
payload.folder = folder;
|
|
63
|
+
if (content !== undefined)
|
|
64
|
+
payload.content = content;
|
|
65
|
+
if (overwrite !== undefined)
|
|
66
|
+
payload.overwrite = overwrite;
|
|
67
|
+
return callPluginCommand(queue, "create_token_file", payload);
|
|
53
68
|
});
|
|
54
|
-
server.tool("
|
|
55
|
-
|
|
56
|
-
|
|
69
|
+
server.tool("delete_token_file", "Delete a token file from the plugin workspace. If the file is tracked by Git, its gitPath is queued for deletion on next push.", { fileId: z.string().describe("Token file id (tf_...)") }, async ({ fileId }) => callPluginCommand(queue, "delete_token_file", { fileId }));
|
|
70
|
+
server.tool("move_token_file", "Move / rename a token file in the plugin workspace. Pass any combination of newName and newFolder.", {
|
|
71
|
+
fileId: z.string().describe("Token file id (tf_...)"),
|
|
72
|
+
newName: z.string().optional().describe("New file name (keep existing if omitted)"),
|
|
73
|
+
newFolder: z.string().nullable().optional().describe("New folder (null for root; keep existing if omitted)"),
|
|
74
|
+
}, async ({ fileId, newName, newFolder }) => {
|
|
75
|
+
const payload = { fileId };
|
|
76
|
+
if (newName !== undefined)
|
|
77
|
+
payload.newName = newName;
|
|
78
|
+
if (newFolder !== undefined)
|
|
79
|
+
payload.newFolder = newFolder;
|
|
80
|
+
return callPluginCommand(queue, "move_token_file", payload);
|
|
57
81
|
});
|
|
58
|
-
server.tool("
|
|
59
|
-
fileId: z.string().describe("Token file id"),
|
|
60
|
-
|
|
61
|
-
}, async ({ fileId,
|
|
62
|
-
|
|
63
|
-
|
|
82
|
+
server.tool("rename_token_file", "Alias for move_token_file that only changes the file name.", {
|
|
83
|
+
fileId: z.string().describe("Token file id (tf_...)"),
|
|
84
|
+
newName: z.string().describe("New file name"),
|
|
85
|
+
}, async ({ fileId, newName }) => callPluginCommand(queue, "rename_token_file", { fileId, newName }));
|
|
86
|
+
server.tool("get_tokens_config", "Read the plugin tokens workspace configuration (config.json content). Inspect collection definitions, folder enablement and reference chains.", {}, async () => callPluginCommand(queue, "get_tokens_config"));
|
|
87
|
+
server.tool("save_tokens_config", "Overwrite the plugin config.json. Use this to define/modify collections, mode references, and file enablement. Content MUST be valid JSON and follow the SXL config schema (see docs).", { content: z.string().describe("Full config.json body as a JSON string") }, async ({ content }) => callPluginCommand(queue, "save_tokens_config", { content }));
|
|
88
|
+
server.tool("get_applied_tokens", "Read the applied token bindings (stored in plugin data on the node) for a specific Figma node. Returns list of bindings (nodeId, tokenPath, property) and the composition binding if the node is part of a composition. Omit nodeId to use current selection.", {
|
|
89
|
+
nodeId: z.string().optional().describe("Figma node id. Omit to use current selection."),
|
|
90
|
+
}, async ({ nodeId }) => {
|
|
91
|
+
const payload = {};
|
|
92
|
+
if (nodeId)
|
|
93
|
+
payload.nodeId = nodeId;
|
|
94
|
+
return callPluginCommand(queue, "get_applied_tokens", payload);
|
|
64
95
|
});
|
|
65
96
|
}
|
|
66
97
|
//# sourceMappingURL=tokens.js.map
|
package/dist/tools/tokens.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/tools/tokens.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/tools/tokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tools for Figma Variables CRUD.
|
|
3
|
+
*
|
|
4
|
+
* Full lifecycle: rename/delete variables and collections, add/remove/rename
|
|
5
|
+
* modes, set per-mode values, scopes and codeSyntax. All tools here mutate
|
|
6
|
+
* the Figma document and therefore require Design mode (plugin returns a
|
|
7
|
+
* typed EDITOR_MODE_READONLY error in Dev Mode).
|
|
8
|
+
*/
|
|
9
|
+
import type { McpServer } from "../../node_modules/@modelcontextprotocol/sdk/dist/cjs/server/mcp.js";
|
|
10
|
+
import type { CommandQueue } from "../command-queue.js";
|
|
11
|
+
export declare function registerVariableTools(server: McpServer, queue: CommandQueue): void;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tools for Figma Variables CRUD.
|
|
3
|
+
*
|
|
4
|
+
* Full lifecycle: rename/delete variables and collections, add/remove/rename
|
|
5
|
+
* modes, set per-mode values, scopes and codeSyntax. All tools here mutate
|
|
6
|
+
* the Figma document and therefore require Design mode (plugin returns a
|
|
7
|
+
* typed EDITOR_MODE_READONLY error in Dev Mode).
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import { callPluginCommand } from "./shared.js";
|
|
11
|
+
const CODE_SYNTAX_PLATFORMS = ["WEB", "iOS", "ANDROID"];
|
|
12
|
+
export function registerVariableTools(server, queue) {
|
|
13
|
+
server.tool("rename_variable", "Rename a Figma local variable.", {
|
|
14
|
+
variableId: z.string().describe("Variable id (VariableID:...)"),
|
|
15
|
+
name: z.string().describe("New variable name"),
|
|
16
|
+
}, async ({ variableId, name }) => callPluginCommand(queue, "rename_variable", { variableId, name }));
|
|
17
|
+
server.tool("delete_variable", "Delete a Figma local variable.", { variableId: z.string().describe("Variable id") }, async ({ variableId }) => callPluginCommand(queue, "delete_variable", { variableId }));
|
|
18
|
+
server.tool("rename_variable_collection", "Rename a Figma local variable collection.", {
|
|
19
|
+
collectionId: z.string().describe("Collection id (VariableCollectionId:...)"),
|
|
20
|
+
name: z.string().describe("New collection name"),
|
|
21
|
+
}, async ({ collectionId, name }) => callPluginCommand(queue, "rename_variable_collection", { collectionId, name }));
|
|
22
|
+
server.tool("delete_variable_collection", "Delete a Figma local variable collection (and all variables inside it).", { collectionId: z.string().describe("Collection id") }, async ({ collectionId }) => callPluginCommand(queue, "delete_variable_collection", { collectionId }));
|
|
23
|
+
server.tool("add_variable_mode", "Add a new mode to a variable collection.", {
|
|
24
|
+
collectionId: z.string().describe("Collection id"),
|
|
25
|
+
modeName: z.string().describe("Mode display name"),
|
|
26
|
+
}, async ({ collectionId, modeName }) => callPluginCommand(queue, "add_variable_mode", { collectionId, modeName }));
|
|
27
|
+
server.tool("remove_variable_mode", "Remove a mode from a variable collection.", {
|
|
28
|
+
collectionId: z.string().describe("Collection id"),
|
|
29
|
+
modeId: z.string().describe("Mode id to remove"),
|
|
30
|
+
}, async ({ collectionId, modeId }) => callPluginCommand(queue, "remove_variable_mode", { collectionId, modeId }));
|
|
31
|
+
server.tool("rename_variable_mode", "Rename a mode inside a variable collection.", {
|
|
32
|
+
collectionId: z.string().describe("Collection id"),
|
|
33
|
+
modeId: z.string().describe("Mode id"),
|
|
34
|
+
name: z.string().describe("New mode name"),
|
|
35
|
+
}, async ({ collectionId, modeId, name }) => callPluginCommand(queue, "rename_variable_mode", { collectionId, modeId, name }));
|
|
36
|
+
server.tool("set_variable_mode_value", "Set a variable's value for a specific mode. For COLOR variables, value can be a hex string (e.g. '#ff0000' or '#ff0000ff') or an RGBA object. For other types, forward a native value (number / string / boolean / VariableAlias).", {
|
|
37
|
+
variableId: z.string().describe("Variable id"),
|
|
38
|
+
modeId: z.string().describe("Mode id"),
|
|
39
|
+
value: z.unknown().describe("Value to set (type depends on variable.resolvedType)"),
|
|
40
|
+
}, async ({ variableId, modeId, value }) => callPluginCommand(queue, "set_variable_mode_value", { variableId, modeId, value }));
|
|
41
|
+
server.tool("set_variable_scopes", "Set the Variable.scopes array. Pass an array of scope names accepted by Figma (e.g. ['ALL_SCOPES'], ['CORNER_RADIUS','STROKE_FLOAT']).", {
|
|
42
|
+
variableId: z.string().describe("Variable id"),
|
|
43
|
+
scopes: z.array(z.string()).describe("Array of VariableScope values"),
|
|
44
|
+
}, async ({ variableId, scopes }) => callPluginCommand(queue, "set_variable_scopes", { variableId, scopes }));
|
|
45
|
+
server.tool("set_variable_code_syntax", "Set (or remove) codeSyntax for a specific platform on a variable.", {
|
|
46
|
+
variableId: z.string().describe("Variable id"),
|
|
47
|
+
platform: z.enum(CODE_SYNTAX_PLATFORMS).describe("Platform: WEB | iOS | ANDROID"),
|
|
48
|
+
value: z.string().nullable().optional().describe("New codeSyntax value. Pass null/empty to remove."),
|
|
49
|
+
}, async ({ variableId, platform, value }) => callPluginCommand(queue, "set_variable_code_syntax", {
|
|
50
|
+
variableId,
|
|
51
|
+
platform,
|
|
52
|
+
value: value ?? null,
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=variables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variables.js","sourceRoot":"","sources":["../../src/tools/variables.ts"],"names":[],"mappings":"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"}
|