@layoutdesign/context 0.3.1 → 0.4.0
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/src/cli/setup-utils.d.ts +7 -0
- package/dist/src/cli/setup-utils.d.ts.map +1 -1
- package/dist/src/cli/setup-utils.js +52 -1
- package/dist/src/cli/setup-utils.js.map +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +58 -0
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/tools/check-setup.js +6 -1
- package/dist/src/mcp/tools/check-setup.js.map +1 -1
- package/dist/src/mcp/tools/design-in-figma.d.ts.map +1 -1
- package/dist/src/mcp/tools/design-in-figma.js +73 -80
- package/dist/src/mcp/tools/design-in-figma.js.map +1 -1
- package/dist/src/mcp/tools/push-to-figma.d.ts +8 -3
- package/dist/src/mcp/tools/push-to-figma.d.ts.map +1 -1
- package/dist/src/mcp/tools/push-to-figma.js +109 -2
- package/dist/src/mcp/tools/push-to-figma.js.map +1 -1
- package/dist/src/mcp/tools/push-tokens-to-figma.d.ts +16 -0
- package/dist/src/mcp/tools/push-tokens-to-figma.d.ts.map +1 -0
- package/dist/src/mcp/tools/push-tokens-to-figma.js +141 -0
- package/dist/src/mcp/tools/push-tokens-to-figma.js.map +1 -0
- package/package.json +1 -1
|
@@ -19,6 +19,8 @@ export interface McpRegistrationState {
|
|
|
19
19
|
correctTransport: boolean;
|
|
20
20
|
/** True if registered at user scope */
|
|
21
21
|
correctScope: boolean;
|
|
22
|
+
/** True if using the old figma-developer-mcp npm package (stdio, only 2 tools) */
|
|
23
|
+
isOldNpmPackage?: boolean;
|
|
22
24
|
};
|
|
23
25
|
/** Playwright state */
|
|
24
26
|
playwright: {
|
|
@@ -54,6 +56,11 @@ export declare function addFigmaMcpServer(): FixResult;
|
|
|
54
56
|
* Register Playwright MCP server via `claude mcp add --scope user`.
|
|
55
57
|
*/
|
|
56
58
|
export declare function addPlaywrightMcpServer(): FixResult;
|
|
59
|
+
/**
|
|
60
|
+
* Check ~/.claude.json for an outdated figma-developer-mcp entry that
|
|
61
|
+
* shadows the correct HTTP registration. Returns true if fixed.
|
|
62
|
+
*/
|
|
63
|
+
export declare function fixGlobalClaudeJson(): boolean;
|
|
57
64
|
/**
|
|
58
65
|
* Test whether an HTTP endpoint is reachable (HEAD request with timeout).
|
|
59
66
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-utils.d.ts","sourceRoot":"","sources":["../../../src/cli/setup-utils.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACtC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACxC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,2BAA2B;IAC3B,KAAK,EAAE;QACL,UAAU,EAAE,OAAO,CAAC;QACpB,KAAK,CAAC,EAAE,cAAc,CAAC;QACvB,sEAAsE;QACtE,YAAY,EAAE,OAAO,CAAC;QACtB,qDAAqD;QACrD,gBAAgB,EAAE,OAAO,CAAC;QAC1B,uCAAuC;QACvC,YAAY,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-utils.d.ts","sourceRoot":"","sources":["../../../src/cli/setup-utils.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACtC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACxC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,2BAA2B;IAC3B,KAAK,EAAE;QACL,UAAU,EAAE,OAAO,CAAC;QACpB,KAAK,CAAC,EAAE,cAAc,CAAC;QACvB,sEAAsE;QACtE,YAAY,EAAE,OAAO,CAAC;QACtB,qDAAqD;QACrD,gBAAgB,EAAE,OAAO,CAAC;QAC1B,uCAAuC;QACvC,YAAY,EAAE,OAAO,CAAC;QACtB,kFAAkF;QAClF,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,CAAC;IACF,uBAAuB;IACvB,UAAU,EAAE;QACV,UAAU,EAAE,OAAO,CAAC;QACpB,KAAK,CAAC,EAAE,cAAc,CAAC;KACxB,CAAC;IACF,mBAAmB;IACnB,MAAM,EAAE;QACN,UAAU,EAAE,OAAO,CAAC;QACpB,KAAK,CAAC,EAAE,cAAc,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,oBAAoB,GAAG,IAAI,CAoDlE;AA6ED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,SAAS,CA0C7C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,SAAS,CA4ClD;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAiC7C;AAMD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,SAAS,SAAQ,GAChB,OAAO,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAclE"}
|
|
@@ -28,6 +28,8 @@ export function checkMcpRegistration() {
|
|
|
28
28
|
const playwrightEntry = servers.find((s) => s.name === "playwright");
|
|
29
29
|
// Layout analysis
|
|
30
30
|
const layoutEntry = servers.find((s) => s.name === "layout" || s.name === "layoutdesign");
|
|
31
|
+
// Detect old figma-developer-mcp npm package (only has 2 tools, uses stdio)
|
|
32
|
+
const isOldNpmPackage = figmaEntry?.transport === "stdio" && !hasPluginShadow;
|
|
31
33
|
return {
|
|
32
34
|
rawOutput,
|
|
33
35
|
servers,
|
|
@@ -37,6 +39,7 @@ export function checkMcpRegistration() {
|
|
|
37
39
|
pluginShadow: hasPluginShadow,
|
|
38
40
|
correctTransport: figmaEntry?.transport === "http",
|
|
39
41
|
correctScope: figmaEntry?.scope === "user",
|
|
42
|
+
isOldNpmPackage,
|
|
40
43
|
},
|
|
41
44
|
playwright: {
|
|
42
45
|
registered: !!playwrightEntry,
|
|
@@ -129,6 +132,17 @@ function parseMcpList(raw) {
|
|
|
129
132
|
* sessions, so we must ensure a proper user-scoped entry exists.
|
|
130
133
|
*/
|
|
131
134
|
export function addFigmaMcpServer() {
|
|
135
|
+
// Remove any existing figma entries at all scopes (may be old npm package or wrong scope)
|
|
136
|
+
for (const scope of ["user", "project", "local"]) {
|
|
137
|
+
try {
|
|
138
|
+
execFileSync("claude", ["mcp", "remove", "--scope", scope, "figma"], {
|
|
139
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// Ignore — may not exist at this scope
|
|
144
|
+
}
|
|
145
|
+
}
|
|
132
146
|
try {
|
|
133
147
|
execFileSync("claude", [
|
|
134
148
|
"mcp", "add", "--scope", "user", "--transport", "http",
|
|
@@ -137,7 +151,7 @@ export function addFigmaMcpServer() {
|
|
|
137
151
|
return {
|
|
138
152
|
server: "figma",
|
|
139
153
|
success: true,
|
|
140
|
-
message: "Registered
|
|
154
|
+
message: "Registered official Figma MCP (OAuth — authenticate once in Claude Code)",
|
|
141
155
|
};
|
|
142
156
|
}
|
|
143
157
|
catch (err) {
|
|
@@ -201,6 +215,43 @@ export function addPlaywrightMcpServer() {
|
|
|
201
215
|
}
|
|
202
216
|
}
|
|
203
217
|
/* ------------------------------------------------------------------ */
|
|
218
|
+
/* Check .claude.json for old Figma entries */
|
|
219
|
+
/* ------------------------------------------------------------------ */
|
|
220
|
+
/**
|
|
221
|
+
* Check ~/.claude.json for an outdated figma-developer-mcp entry that
|
|
222
|
+
* shadows the correct HTTP registration. Returns true if fixed.
|
|
223
|
+
*/
|
|
224
|
+
export function fixGlobalClaudeJson() {
|
|
225
|
+
const { readFileSync, writeFileSync } = require("node:fs");
|
|
226
|
+
const { homedir } = require("node:os");
|
|
227
|
+
const { join } = require("node:path");
|
|
228
|
+
const configPath = join(homedir(), ".claude.json");
|
|
229
|
+
try {
|
|
230
|
+
const raw = readFileSync(configPath, "utf-8");
|
|
231
|
+
const config = JSON.parse(raw);
|
|
232
|
+
const servers = config.mcpServers;
|
|
233
|
+
if (!servers?.figma)
|
|
234
|
+
return false;
|
|
235
|
+
const figma = servers.figma;
|
|
236
|
+
const isOldNpm = figma.type === "stdio" ||
|
|
237
|
+
(figma.command === "npx" &&
|
|
238
|
+
Array.isArray(figma.args) &&
|
|
239
|
+
figma.args.some((a) => a.includes("figma-developer-mcp")));
|
|
240
|
+
if (!isOldNpm)
|
|
241
|
+
return false;
|
|
242
|
+
// Replace with official HTTP server
|
|
243
|
+
servers.figma = {
|
|
244
|
+
type: "http",
|
|
245
|
+
url: "https://mcp.figma.com/mcp",
|
|
246
|
+
};
|
|
247
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2), "utf-8");
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/* ------------------------------------------------------------------ */
|
|
204
255
|
/* Endpoint reachability */
|
|
205
256
|
/* ------------------------------------------------------------------ */
|
|
206
257
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-utils.js","sourceRoot":"","sources":["../../../src/cli/setup-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-utils.js","sourceRoot":"","sources":["../../../src/cli/setup-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"AA4BA;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA+KjD"}
|
package/dist/src/mcp/server.js
CHANGED
|
@@ -4,6 +4,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
|
4
4
|
import { loadKit } from "../kit/loader.js";
|
|
5
5
|
import { startPreviewServer } from "../preview/server.js";
|
|
6
6
|
import { setPreviewServer } from "../preview/ensure.js";
|
|
7
|
+
import { checkMcpRegistration, addFigmaMcpServer, addPlaywrightMcpServer, fixGlobalClaudeJson } from "../cli/setup-utils.js";
|
|
7
8
|
const require = createRequire(import.meta.url);
|
|
8
9
|
// Resolves from dist/src/mcp/server.js → ../../../package.json
|
|
9
10
|
const pkg = require("../../../package.json");
|
|
@@ -20,6 +21,7 @@ import * as designInFigma from "./tools/design-in-figma.js";
|
|
|
20
21
|
import * as updateTokens from "./tools/update-tokens.js";
|
|
21
22
|
import * as getScreenshots from "./tools/get-screenshots.js";
|
|
22
23
|
import * as checkSetup from "./tools/check-setup.js";
|
|
24
|
+
import * as pushTokensToFigma from "./tools/push-tokens-to-figma.js";
|
|
23
25
|
/**
|
|
24
26
|
* Start the Layout Context MCP server.
|
|
25
27
|
* Loads the kit from the current working directory and registers all tools.
|
|
@@ -41,6 +43,61 @@ export async function startServer() {
|
|
|
41
43
|
const msg = err instanceof Error ? err.message : String(err);
|
|
42
44
|
console.error(`[layout-context] Preview server skipped (will auto-start on demand): ${msg}`);
|
|
43
45
|
}
|
|
46
|
+
// Auto-check Figma MCP setup and fix common issues
|
|
47
|
+
try {
|
|
48
|
+
// First check ~/.claude.json for old figma-developer-mcp npm package
|
|
49
|
+
const fixedGlobal = fixGlobalClaudeJson();
|
|
50
|
+
if (fixedGlobal) {
|
|
51
|
+
console.error("[layout-context] Figma MCP: replaced outdated figma-developer-mcp in ~/.claude.json with official server");
|
|
52
|
+
console.error("[layout-context] Figma MCP: restart your agent to activate");
|
|
53
|
+
}
|
|
54
|
+
// Then check claude mcp list registration
|
|
55
|
+
const mcpState = checkMcpRegistration();
|
|
56
|
+
if (mcpState) {
|
|
57
|
+
if (!mcpState.figma.registered) {
|
|
58
|
+
console.error("[layout-context] Figma MCP: not registered — auto-registering at user scope...");
|
|
59
|
+
const result = addFigmaMcpServer();
|
|
60
|
+
console.error(`[layout-context] Figma MCP: ${result.message}`);
|
|
61
|
+
if (result.success) {
|
|
62
|
+
console.error("[layout-context] Figma MCP: restart your agent to activate");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if (!mcpState.figma.correctTransport) {
|
|
66
|
+
console.error("[layout-context] Figma MCP: wrong transport (needs HTTP, not stdio) — replacing with official server...");
|
|
67
|
+
const result = addFigmaMcpServer();
|
|
68
|
+
console.error(`[layout-context] Figma MCP: ${result.message}`);
|
|
69
|
+
if (result.success) {
|
|
70
|
+
console.error("[layout-context] Figma MCP: restart your agent to activate the fix");
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else if (!mcpState.figma.correctScope) {
|
|
74
|
+
console.error("[layout-context] Figma MCP: registered at project scope — upgrading to user scope so OAuth persists...");
|
|
75
|
+
const result = addFigmaMcpServer();
|
|
76
|
+
console.error(`[layout-context] Figma MCP: ${result.message}`);
|
|
77
|
+
if (result.success) {
|
|
78
|
+
console.error("[layout-context] Figma MCP: restart your agent to activate — you'll only need to auth once");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
console.error("[layout-context] Figma MCP: OK");
|
|
83
|
+
}
|
|
84
|
+
// Check Playwright MCP (needed for capture mode and url-to-figma)
|
|
85
|
+
if (!mcpState.playwright.registered) {
|
|
86
|
+
console.error("[layout-context] Playwright MCP: not registered — auto-registering...");
|
|
87
|
+
const result = addPlaywrightMcpServer();
|
|
88
|
+
console.error(`[layout-context] Playwright MCP: ${result.message}`);
|
|
89
|
+
if (result.success) {
|
|
90
|
+
console.error("[layout-context] Playwright MCP: restart your agent to activate");
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
console.error("[layout-context] Playwright MCP: OK");
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// Non-fatal — don't block server startup
|
|
100
|
+
}
|
|
44
101
|
const server = new McpServer({
|
|
45
102
|
name: "layout-context",
|
|
46
103
|
version: pkg.version,
|
|
@@ -58,6 +115,7 @@ export async function startServer() {
|
|
|
58
115
|
server.tool(updateTokens.name, updateTokens.description, updateTokens.inputSchema, updateTokens.handler());
|
|
59
116
|
server.tool(getScreenshots.name, getScreenshots.description, getScreenshots.inputSchema, getScreenshots.handler());
|
|
60
117
|
server.tool(checkSetup.name, checkSetup.description, checkSetup.inputSchema, checkSetup.handler());
|
|
118
|
+
server.tool(pushTokensToFigma.name, pushTokensToFigma.description, pushTokensToFigma.inputSchema, pushTokensToFigma.handler(kit));
|
|
61
119
|
// Connect via stdio
|
|
62
120
|
const transport = new StdioServerTransport();
|
|
63
121
|
await server.connect(transport);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,8 +53,13 @@ async function checkFigma(state, shouldFix) {
|
|
|
53
53
|
if (state.figma.registered) {
|
|
54
54
|
const entry = state.figma.entry;
|
|
55
55
|
const issues = [];
|
|
56
|
+
// Check for old npm package
|
|
57
|
+
if (state.figma.isOldNpmPackage) {
|
|
58
|
+
issues.push("- **Outdated Figma MCP:** You have the old `figma-developer-mcp` npm package (only 2 tools: get_figma_data, download_figma_images). " +
|
|
59
|
+
"Layout requires the official Figma MCP server at `mcp.figma.com` which has 16 tools including `use_figma`");
|
|
60
|
+
}
|
|
56
61
|
// Check transport
|
|
57
|
-
if (!state.figma.correctTransport) {
|
|
62
|
+
if (!state.figma.correctTransport && !state.figma.isOldNpmPackage) {
|
|
58
63
|
issues.push(`- **Wrong transport:** Using \`${entry?.transport ?? "unknown"}\` but Figma MCP requires \`http\` transport for OAuth`);
|
|
59
64
|
}
|
|
60
65
|
// Check scope
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-setup.js","sourceRoot":"","sources":["../../../../src/mcp/tools/check-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAElC,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,WAAW,GACtB,uDAAuD;IACvD,4FAA4F;IAC5F,8EAA8E;IAC9E,gFAAgF;IAChF,0EAA0E,CAAC;AAE7E,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;SAC9C,QAAQ,EAAE;SACV,QAAQ,CAAC,+BAA+B,CAAC;IAC5C,GAAG,EAAE,CAAC;SACH,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,+EAA+E,CAChF;CACJ,CAAC;AAOF,MAAM,UAAU,OAAO;IACrB,OAAO,KAAK,EAAE,KAAY,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC;QACnC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC;QAErC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAEzC,yBAAyB;QACzB,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;QAErC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,QAAQ,CAAC,IAAI,CACX,oBAAoB;gBAClB,qCAAqC;gBACrC,wDAAwD;gBACxD,6DAA6D,CAChE,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7E,CAAC;QAED,oBAAoB;QACpB,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACzC,QAAQ,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,yBAAyB;QACzB,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;YAC9C,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,qBAAqB;QACrB,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACpC,CAAC;QAED,qBAAqB;QACrB,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QAEhD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7E,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,KAA2D,EAC3D,SAAkB;IAElB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;QAChC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,kBAAkB;QAClB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"check-setup.js","sourceRoot":"","sources":["../../../../src/mcp/tools/check-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAElC,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,WAAW,GACtB,uDAAuD;IACvD,4FAA4F;IAC5F,8EAA8E;IAC9E,gFAAgF;IAChF,0EAA0E,CAAC;AAE7E,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;SAC9C,QAAQ,EAAE;SACV,QAAQ,CAAC,+BAA+B,CAAC;IAC5C,GAAG,EAAE,CAAC;SACH,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,+EAA+E,CAChF;CACJ,CAAC;AAOF,MAAM,UAAU,OAAO;IACrB,OAAO,KAAK,EAAE,KAAY,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC;QACnC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC;QAErC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAEzC,yBAAyB;QACzB,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;QAErC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,QAAQ,CAAC,IAAI,CACX,oBAAoB;gBAClB,qCAAqC;gBACrC,wDAAwD;gBACxD,6DAA6D,CAChE,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7E,CAAC;QAED,oBAAoB;QACpB,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACzC,QAAQ,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,yBAAyB;QACzB,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;YAC9C,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,qBAAqB;QACrB,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACpC,CAAC;QAED,qBAAqB;QACrB,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QAEhD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7E,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,KAA2D,EAC3D,SAAkB;IAElB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;QAChC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,4BAA4B;QAC5B,IAAI,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CACT,sIAAsI;gBACpI,2GAA2G,CAC9G,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YAClE,MAAM,CAAC,IAAI,CACT,kCAAkC,KAAK,EAAE,SAAS,IAAI,SAAS,wDAAwD,CACxH,CAAC;QACJ,CAAC;QAED,cAAc;QACd,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CACT,wCAAwC,KAAK,EAAE,KAAK,IAAI,SAAS,yEAAyE,CAC3I,CAAC;QACJ,CAAC;QAED,sBAAsB;QACtB,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CACT,6FAA6F;gBAC3F,wEAAwE;gBACxE,oEAAoE,CACvE,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CACR,mBAAmB;gBACjB,yBAAyB,KAAK,EAAE,KAAK,IAAI,MAAM,WAAW,KAAK,EAAE,SAAS,IAAI,MAAM,eAAe;gBACnG,qFAAqF;gBACrF,kFAAkF,CACrF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GACR,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;YACzE,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CACR,yBAAyB,KAAK,EAAE,KAAK,IAAI,SAAS,WAAW,KAAK,EAAE,SAAS,IAAI,SAAS,eAAe,CAC1G,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEf,cAAc;YACd,IACE,SAAS;gBACT,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAC3D,CAAC;gBACD,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;gBACnC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;gBACvD,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;gBACrE,KAAK,CAAC,IAAI,CACR,qHAAqH,CACtH,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CACR,gEAAgE,CACjE,CAAC;QAEF,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;YACnC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;gBACrD,KAAK,CAAC,IAAI,CACR,oGAAoG,CACrG,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CACR,oGAAoG;gBAClG,8CAA8C,CACjD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,YAAY,GAAG,MAAM,qBAAqB,CAAC,2BAA2B,CAAC,CAAC;IAC9E,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,+BAA+B,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CACR,iCAAiC,YAAY,CAAC,KAAK,IAAI;YACrD,oDAAoD,CACvD,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,eAAe,CACtB,KAA2D,EAC3D,SAAkB;IAElB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CACR,wBAAwB,GAAG,wBAAwB,CACpD,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAE5D,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;YACxC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;gBACrD,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CACR,qHAAqH,CACtH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAClB,KAA2D;IAE3D,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC5B,OAAO,CACL,oBAAoB;YACpB,oDAAoD,CACrD,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,sDAAsD;IACtD,OAAO,CACL,oBAAoB;QACpB,wDAAwD;QACxD,yGAAyG,CAC1G,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,KAA2D,EAC3D,UAAmB;IAEnB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAE/B,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CACR,sDAAsD;YACpD,yDAAyD;YACzD,mCAAmC,CACtC,CAAC;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,SAAS,GACb,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU;QACvB,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB;QAC7B,KAAK,CAAC,KAAK,CAAC,YAAY;QACxB,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;IAE/B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CACR,iFAAiF;YAC/E,qEAAqE;YACrE,qEAAqE;YACrE,iGAAiG;YACjG,kEAAkE,CACrE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CACR,8CAA8C;YAC5C,iEAAiE;YACjE,sDAAsD;YACtD,wDAAwD;YACxD,mCAAmC,CACtC,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design-in-figma.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/design-in-figma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAE9C,eAAO,MAAM,IAAI,oBAAoB,CAAC;AAEtC,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"design-in-figma.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/design-in-figma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAE9C,eAAO,MAAM,IAAI,oBAAoB,CAAC;AAEtC,eAAO,MAAM,WAAW,QAK0B,CAAC;AAEnD,eAAO,MAAM,WAAW;;;;;;;;CAkBvB,CAAC;AAEF,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,IACvB,iCAIX;IACD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;;;;;GAiJF"}
|
|
@@ -3,7 +3,8 @@ export const name = "design-in-figma";
|
|
|
3
3
|
export const description = "Design UI components and screens directly in Figma using the loaded design system. " +
|
|
4
4
|
"Takes a natural language prompt (e.g. 'A pricing card with 3 tiers') and returns " +
|
|
5
5
|
"design tokens, component specs, and step-by-step instructions for the AI agent to " +
|
|
6
|
-
"call Figma MCP's
|
|
6
|
+
"call Figma MCP's use_figma tool to create native, editable Figma frames. " +
|
|
7
|
+
"Requires the Figma MCP server to be connected.";
|
|
7
8
|
export const inputSchema = {
|
|
8
9
|
prompt: z
|
|
9
10
|
.string()
|
|
@@ -30,7 +31,6 @@ export function handler(kit) {
|
|
|
30
31
|
};
|
|
31
32
|
}
|
|
32
33
|
const resolvedViewports = viewports ?? ["desktop"];
|
|
33
|
-
const outputMode = fileKey ? "existingFile" : "newFile";
|
|
34
34
|
// Build colour palette from tokens
|
|
35
35
|
const colourTokens = extractTokensByCategory(kit, [
|
|
36
36
|
"color",
|
|
@@ -84,81 +84,65 @@ export function handler(kit) {
|
|
|
84
84
|
.map((vp) => `- **${vp}** (${viewportDimensions[vp] ?? "1440×900"}): Create a frame named "${kit.manifest.displayName} — ${prompt} (${vp})"`)
|
|
85
85
|
.join("\n");
|
|
86
86
|
const response = [
|
|
87
|
-
"
|
|
88
|
-
"",
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
"",
|
|
95
|
-
"
|
|
96
|
-
"",
|
|
97
|
-
"
|
|
98
|
-
"",
|
|
99
|
-
"
|
|
100
|
-
"",
|
|
101
|
-
"
|
|
102
|
-
"",
|
|
103
|
-
|
|
104
|
-
"",
|
|
105
|
-
"
|
|
106
|
-
"",
|
|
107
|
-
|
|
108
|
-
"",
|
|
109
|
-
"
|
|
110
|
-
"",
|
|
111
|
-
|
|
112
|
-
"",
|
|
113
|
-
"
|
|
114
|
-
"",
|
|
115
|
-
"
|
|
116
|
-
"",
|
|
117
|
-
"
|
|
118
|
-
"",
|
|
119
|
-
|
|
120
|
-
"",
|
|
121
|
-
"
|
|
122
|
-
"",
|
|
123
|
-
|
|
124
|
-
"
|
|
125
|
-
"",
|
|
126
|
-
|
|
127
|
-
"",
|
|
128
|
-
"
|
|
129
|
-
"",
|
|
130
|
-
"
|
|
131
|
-
"",
|
|
132
|
-
"
|
|
133
|
-
"
|
|
134
|
-
"
|
|
135
|
-
"",
|
|
136
|
-
"
|
|
137
|
-
"",
|
|
138
|
-
"
|
|
139
|
-
"",
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
"",
|
|
146
|
-
"2. In your description to `generate_figma_design`, include:",
|
|
147
|
-
" - Exact hex colour values from the token palette above",
|
|
148
|
-
" - Font family, sizes, and weights from the typography tokens",
|
|
149
|
-
" - Spacing values from the spacing tokens",
|
|
150
|
-
" - Component structure matching the patterns listed above",
|
|
151
|
-
" - Layout structure appropriate for each viewport",
|
|
152
|
-
"",
|
|
153
|
-
"3. Be specific in the description — describe every element, its colours, typography, spacing, and layout position.",
|
|
154
|
-
"",
|
|
155
|
-
"## Setup (if Figma MCP is not connected)",
|
|
156
|
-
"",
|
|
157
|
-
"```bash",
|
|
158
|
-
"npx @layoutdesign/context install",
|
|
159
|
-
"```",
|
|
160
|
-
"",
|
|
161
|
-
"Authentication is via OAuth — no API key needed.",
|
|
87
|
+
"## ACTION REQUIRED: Call `use_figma` immediately. Do NOT summarise, do NOT ask the user. Just call it.",
|
|
88
|
+
"",
|
|
89
|
+
fileKey ? `Target file key: \`${fileKey}\`` : "Create a new file.",
|
|
90
|
+
`Design: ${prompt}`,
|
|
91
|
+
`Design system: ${kit.manifest.displayName}`,
|
|
92
|
+
`Viewports: ${viewportFrames}`,
|
|
93
|
+
"",
|
|
94
|
+
"### CRITICAL RULES — Follow ALL of these:",
|
|
95
|
+
"",
|
|
96
|
+
"**1. Design system compliance (THIS IS THE WHOLE POINT):**",
|
|
97
|
+
"- You MUST use the exact colour hex values from the tokens above — NEVER use generic black (#000), white (#FFF), or grey",
|
|
98
|
+
"- Primary/CTA buttons: use the primary colour token for fill, on-primary token for text",
|
|
99
|
+
"- Secondary buttons: use outline style with primary colour border",
|
|
100
|
+
"- Backgrounds: use surface/background tokens for page and card fills",
|
|
101
|
+
"- Text: use on-surface token for headings, on-surface-variant token for body/secondary text",
|
|
102
|
+
"- Borders: use outline-variant token for card borders and dividers",
|
|
103
|
+
"- Border radius: use the exact radius tokens, not arbitrary values",
|
|
104
|
+
"- Spacing (padding, gap): use the exact spacing tokens, not round numbers",
|
|
105
|
+
"- Font family: use the typography token font-family, not system defaults",
|
|
106
|
+
"- Shadows: use the elevation/shadow tokens if defined",
|
|
107
|
+
"",
|
|
108
|
+
"**2. Auto-layout (MUST GET RIGHT):**",
|
|
109
|
+
"- NEVER set fixed heights on content containers — always use Hug for height",
|
|
110
|
+
"- Card widths in a row: use FILL so they share space equally",
|
|
111
|
+
"- Card heights: HUG to fit content",
|
|
112
|
+
"- Feature/list items: gap should be the smallest spacing token (4-8px)",
|
|
113
|
+
"- Section spacing: use larger spacing tokens (24-48px) between major sections",
|
|
114
|
+
"- Root frame: set explicit width (e.g. 1440px for desktop), height HUG",
|
|
115
|
+
"- Badges/tags: HUG both axes, padding 4-8px horizontal, 2-4px vertical",
|
|
116
|
+
"- NEVER leave sizing unset — every frame must have explicit FILL or HUG on both axes",
|
|
117
|
+
"- NEVER use fixed pixel widths or heights on auto-layout children — use FILL or HUG instead",
|
|
118
|
+
"- Only the root frame should have a fixed pixel width (e.g. 1440px). Everything inside uses FILL or HUG",
|
|
119
|
+
"- NEVER leave padding, margin, or gap at 0 — always use a spacing token value. If unsure, use the smallest spacing token (4-8px)",
|
|
120
|
+
"- Every container with children MUST have padding and gap set to a spacing token value, not 0",
|
|
121
|
+
"",
|
|
122
|
+
"**3. Visual hierarchy:**",
|
|
123
|
+
"- Featured/highlighted tier: use primary colour fill or thicker border to distinguish it",
|
|
124
|
+
"- CTA buttons should differ per tier: outlined for basic, filled primary for featured, filled secondary for enterprise",
|
|
125
|
+
"- Price should be the largest text in each card (use heading font size)",
|
|
126
|
+
"- Eyebrow/label text: smaller size, uppercase, wider letter-spacing, primary colour",
|
|
127
|
+
"- Dividers: use outline-variant colour, 1px height",
|
|
128
|
+
"",
|
|
129
|
+
"**4. Content:**",
|
|
130
|
+
"- ALL text must be realistic — real prices, real feature names, real CTAs",
|
|
131
|
+
"- No placeholder or lorem ipsum text",
|
|
132
|
+
"- Use the typography scale: display > heading > title > body > label sizes",
|
|
133
|
+
"",
|
|
134
|
+
"**5. Responsive (when multiple viewports requested):**",
|
|
135
|
+
"- Desktop: horizontal card layout (row)",
|
|
136
|
+
"- Tablet: horizontal with reduced padding/gap",
|
|
137
|
+
"- Mobile: stack cards vertically, reduce font sizes, reduce padding",
|
|
138
|
+
"",
|
|
139
|
+
"**6. Token format — resolve before calling use_figma:**",
|
|
140
|
+
"- Convert CSS variables to actual values: --color-primary: #0a4b19 → use #0a4b19",
|
|
141
|
+
"- Convert spacing: --space-4: 16px → use 16",
|
|
142
|
+
"- Convert radius: --radius-md: 12px → use 12",
|
|
143
|
+
"- Do NOT pass CSS variable names to use_figma — only resolved values",
|
|
144
|
+
"",
|
|
145
|
+
"If `use_figma` is not available, call Layout MCP's `check-setup` with `fix: true`.",
|
|
162
146
|
]
|
|
163
147
|
.filter(Boolean)
|
|
164
148
|
.join("\n");
|
|
@@ -173,7 +157,7 @@ export function handler(kit) {
|
|
|
173
157
|
function extractTokensByCategory(kit, keywords) {
|
|
174
158
|
if (!kit.tokensCss)
|
|
175
159
|
return "";
|
|
176
|
-
const
|
|
160
|
+
const tokens = kit.tokensCss
|
|
177
161
|
.split("\n")
|
|
178
162
|
.filter((line) => {
|
|
179
163
|
if (!line.includes("--"))
|
|
@@ -181,10 +165,19 @@ function extractTokensByCategory(kit, keywords) {
|
|
|
181
165
|
const lower = line.toLowerCase();
|
|
182
166
|
return keywords.some((kw) => lower.includes(kw));
|
|
183
167
|
})
|
|
168
|
+
.map((line) => {
|
|
169
|
+
const match = line.match(/--([\w-]+)\s*:\s*(.+?)\s*;?\s*$/);
|
|
170
|
+
if (!match)
|
|
171
|
+
return null;
|
|
172
|
+
const name = match[1];
|
|
173
|
+
const value = match[2].replace(/;$/, "").trim();
|
|
174
|
+
return `- **${name}**: \`${value}\``;
|
|
175
|
+
})
|
|
176
|
+
.filter(Boolean)
|
|
184
177
|
.slice(0, 40);
|
|
185
|
-
if (
|
|
178
|
+
if (tokens.length === 0)
|
|
186
179
|
return "";
|
|
187
|
-
return
|
|
180
|
+
return tokens.join("\n");
|
|
188
181
|
}
|
|
189
182
|
/**
|
|
190
183
|
* Extract design rules from kit sections (looks for "rules", "guidelines", "principles" sections).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design-in-figma.js","sourceRoot":"","sources":["../../../../src/mcp/tools/design-in-figma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,IAAI,GAAG,iBAAiB,CAAC;AAEtC,MAAM,CAAC,MAAM,WAAW,GACtB,qFAAqF;IACrF,mFAAmF;IACnF,oFAAoF;IACpF,
|
|
1
|
+
{"version":3,"file":"design-in-figma.js","sourceRoot":"","sources":["../../../../src/mcp/tools/design-in-figma.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,8 +15,12 @@ export declare const inputSchema: {
|
|
|
15
15
|
name: z.ZodString;
|
|
16
16
|
code: z.ZodString;
|
|
17
17
|
}, z.core.$strip>>>;
|
|
18
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
19
|
+
capture: "capture";
|
|
20
|
+
native: "native";
|
|
21
|
+
}>>;
|
|
18
22
|
};
|
|
19
|
-
export declare function handler(kit: Kit | null): ({ code, name: frameName, viewports, figmaUrl, variants, }: {
|
|
23
|
+
export declare function handler(kit: Kit | null): ({ code, name: frameName, viewports, figmaUrl, variants, mode, }: {
|
|
20
24
|
code: string;
|
|
21
25
|
name?: string;
|
|
22
26
|
viewports?: string[];
|
|
@@ -25,10 +29,11 @@ export declare function handler(kit: Kit | null): ({ code, name: frameName, view
|
|
|
25
29
|
name: string;
|
|
26
30
|
code: string;
|
|
27
31
|
}>;
|
|
32
|
+
mode?: string;
|
|
28
33
|
}) => Promise<{
|
|
29
|
-
content: {
|
|
34
|
+
content: Array<{
|
|
30
35
|
type: "text";
|
|
31
36
|
text: string;
|
|
32
|
-
}
|
|
37
|
+
}>;
|
|
33
38
|
}>;
|
|
34
39
|
//# sourceMappingURL=push-to-figma.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push-to-figma.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/push-to-figma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAI9C,eAAO,MAAM,IAAI,kBAAkB,CAAC;AAEpC,eAAO,MAAM,WAAW,QAI+C,CAAC;AAExE,eAAO,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"push-to-figma.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/push-to-figma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAI9C,eAAO,MAAM,IAAI,kBAAkB,CAAC;AAEpC,eAAO,MAAM,WAAW,QAI+C,CAAC;AAExE,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;CAqCvB,CAAC;AAoOF,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,IACvB,iEAOX;IACD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;aA/GY,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;GA6NnD"}
|
|
@@ -31,6 +31,12 @@ export const inputSchema = {
|
|
|
31
31
|
"named '{name}/State={variantName}'. After all frames are captured, use the Layout Figma plugin's " +
|
|
32
32
|
"'Assemble Component Set' to combine them into a proper Figma component with variant properties. " +
|
|
33
33
|
"Tip: render hover states by applying hover styles directly as classes, not via CSS :hover pseudo-class."),
|
|
34
|
+
mode: z
|
|
35
|
+
.enum(["capture", "native"])
|
|
36
|
+
.optional()
|
|
37
|
+
.describe("Push mode. 'capture' (default) renders in browser and captures as flat frames via Playwright. " +
|
|
38
|
+
"'native' uses Figma MCP's use_figma to create editable Figma objects with auto-layout and real text. " +
|
|
39
|
+
"Native mode does not require Playwright MCP."),
|
|
34
40
|
};
|
|
35
41
|
const VIEWPORT_DIMS = {
|
|
36
42
|
desktop: { width: 1280, height: 900 },
|
|
@@ -125,11 +131,100 @@ function buildCaptureInstructions(resolvedFileKey, outputMode) {
|
|
|
125
131
|
"5. Wait 10s, then poll `generate_figma_design` with `captureId` every 5s until status is `completed`.",
|
|
126
132
|
].join("\n");
|
|
127
133
|
}
|
|
134
|
+
function buildNativeResponse({ code, frameName, viewports, resolvedFileKey, variants, kit, }) {
|
|
135
|
+
const tokenContext = kit?.tokensCss
|
|
136
|
+
? "\n## Design Tokens\n\nApply these tokens to ensure design system compliance:\n\n```css\n" +
|
|
137
|
+
kit.tokensCss
|
|
138
|
+
.split("\n")
|
|
139
|
+
.filter((l) => l.includes("--"))
|
|
140
|
+
.slice(0, 50)
|
|
141
|
+
.join("\n") +
|
|
142
|
+
"\n```\n"
|
|
143
|
+
: "";
|
|
144
|
+
const viewportDims = {
|
|
145
|
+
desktop: "1280×900",
|
|
146
|
+
tablet: "768×1024",
|
|
147
|
+
mobile: "375×812",
|
|
148
|
+
};
|
|
149
|
+
const viewportList = viewports
|
|
150
|
+
.map((vp) => `- **${frameName} (${vp})**: ${viewportDims[vp] ?? "1280×900"}`)
|
|
151
|
+
.join("\n");
|
|
152
|
+
let componentDescription;
|
|
153
|
+
if (variants && variants.length > 0) {
|
|
154
|
+
const variantDescriptions = variants
|
|
155
|
+
.map((v) => `### Variant: ${v.name}\n\n\`\`\`tsx\n${v.code}\n\`\`\``)
|
|
156
|
+
.join("\n\n");
|
|
157
|
+
componentDescription = [
|
|
158
|
+
`Create a Figma component called "${frameName}" with ${variants.length} variant(s).`,
|
|
159
|
+
"",
|
|
160
|
+
"Each variant should be a separate state (e.g. Default, Hover, Active, Disabled).",
|
|
161
|
+
"Create these as a proper Figma component set with variant properties.",
|
|
162
|
+
"",
|
|
163
|
+
variantDescriptions,
|
|
164
|
+
].join("\n");
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
componentDescription = [
|
|
168
|
+
`Create a Figma frame called "${frameName}" based on this component:`,
|
|
169
|
+
"",
|
|
170
|
+
"```tsx",
|
|
171
|
+
code,
|
|
172
|
+
"```",
|
|
173
|
+
].join("\n");
|
|
174
|
+
}
|
|
175
|
+
const response = [
|
|
176
|
+
"# Push to Figma (Native Mode)",
|
|
177
|
+
"",
|
|
178
|
+
"Use Figma MCP's `use_figma` tool to create this component as native, editable Figma objects.",
|
|
179
|
+
"",
|
|
180
|
+
"**Recommended:** Invoke this with the `figma-use` skill for best results.",
|
|
181
|
+
"",
|
|
182
|
+
"---",
|
|
183
|
+
"",
|
|
184
|
+
"## Component",
|
|
185
|
+
"",
|
|
186
|
+
componentDescription,
|
|
187
|
+
"",
|
|
188
|
+
"---",
|
|
189
|
+
tokenContext,
|
|
190
|
+
"## Frames to Create",
|
|
191
|
+
"",
|
|
192
|
+
viewportList,
|
|
193
|
+
"",
|
|
194
|
+
"---",
|
|
195
|
+
"",
|
|
196
|
+
"## NEXT STEP — YOU MUST DO THIS NOW",
|
|
197
|
+
"",
|
|
198
|
+
"Immediately call Figma MCP's `use_figma` tool to create this component. Do not ask the user — just do it.",
|
|
199
|
+
"",
|
|
200
|
+
`Call \`use_figma\` now with:`,
|
|
201
|
+
resolvedFileKey
|
|
202
|
+
? `- Target file key: \`${resolvedFileKey}\``
|
|
203
|
+
: "- Create a new Figma file",
|
|
204
|
+
"- Analyse the TSX code above to understand the component structure",
|
|
205
|
+
"- Recreate the layout using Figma auto-layout (not absolute positioning)",
|
|
206
|
+
"- Use the exact colours, fonts, spacing, and radius from the code/tokens",
|
|
207
|
+
"- Create real text nodes with correct content, font, and size",
|
|
208
|
+
"- NEVER use fixed pixel widths/heights on auto-layout children — use FILL or HUG",
|
|
209
|
+
"- NEVER leave padding or gap at 0 — use spacing values from the code (e.g. gap-4 = 16px padding, p-6 = 24px)",
|
|
210
|
+
"- Create a frame for each viewport listed above, adapting the layout responsively",
|
|
211
|
+
"",
|
|
212
|
+
variants && variants.length > 0
|
|
213
|
+
? "Create each variant as a separate component, then combine into a component set with variant properties.\n"
|
|
214
|
+
: "",
|
|
215
|
+
"If `use_figma` is not available, call the Layout MCP `check-setup` tool with `fix: true` to auto-configure the Figma MCP server.",
|
|
216
|
+
]
|
|
217
|
+
.filter(Boolean)
|
|
218
|
+
.join("\n");
|
|
219
|
+
return {
|
|
220
|
+
content: [{ type: "text", text: response }],
|
|
221
|
+
};
|
|
222
|
+
}
|
|
128
223
|
export function handler(kit) {
|
|
129
|
-
return async ({ code, name: frameName, viewports, figmaUrl, variants, }) => {
|
|
224
|
+
return async ({ code, name: frameName, viewports, figmaUrl, variants, mode, }) => {
|
|
130
225
|
const resolvedName = frameName ?? "Layout Component";
|
|
131
226
|
const resolvedViewports = viewports ?? ["desktop"];
|
|
132
|
-
const
|
|
227
|
+
const resolvedMode = mode ?? "capture";
|
|
133
228
|
// Parse fileKey from Figma URL if provided
|
|
134
229
|
let resolvedFileKey;
|
|
135
230
|
if (figmaUrl) {
|
|
@@ -137,6 +232,18 @@ export function handler(kit) {
|
|
|
137
232
|
if (match)
|
|
138
233
|
resolvedFileKey = match[1];
|
|
139
234
|
}
|
|
235
|
+
// Native mode: use use_figma directly, skip preview server + Playwright
|
|
236
|
+
if (resolvedMode === "native") {
|
|
237
|
+
return buildNativeResponse({
|
|
238
|
+
code,
|
|
239
|
+
frameName: resolvedName,
|
|
240
|
+
viewports: resolvedViewports,
|
|
241
|
+
resolvedFileKey,
|
|
242
|
+
variants,
|
|
243
|
+
kit,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
const baseCaptureUrl = `http://localhost:${PREVIEW_PORT}/capture`;
|
|
140
247
|
const outputMode = resolvedFileKey ? "existingFile" : "newFile";
|
|
141
248
|
// Step 1: Push code to the preview server
|
|
142
249
|
const pushStatuses = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push-to-figma.js","sourceRoot":"","sources":["../../../../src/mcp/tools/push-to-figma.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"push-to-figma.js","sourceRoot":"","sources":["../../../../src/mcp/tools/push-to-figma.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { Kit } from "../../kit/types.js";
|
|
3
|
+
export declare const name = "push-tokens-to-figma";
|
|
4
|
+
export declare const description: string;
|
|
5
|
+
export declare const inputSchema: {
|
|
6
|
+
fileKey: z.ZodOptional<z.ZodString>;
|
|
7
|
+
};
|
|
8
|
+
export declare function handler(kit: Kit | null): ({ fileKey }: {
|
|
9
|
+
fileKey?: string;
|
|
10
|
+
}) => Promise<{
|
|
11
|
+
content: {
|
|
12
|
+
type: "text";
|
|
13
|
+
text: string;
|
|
14
|
+
}[];
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=push-tokens-to-figma.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push-tokens-to-figma.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/push-tokens-to-figma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAE9C,eAAO,MAAM,IAAI,yBAAyB,CAAC;AAE3C,eAAO,MAAM,WAAW,QAG0B,CAAC;AAEnD,eAAO,MAAM,WAAW;;CAOvB,CAAC;AAEF,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,IACvB,aAAa;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;GA4GhD"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const name = "push-tokens-to-figma";
|
|
3
|
+
export const description = "Push design system tokens to Figma as native variables and styles using Figma MCP's use_figma tool. " +
|
|
4
|
+
"Creates a variable collection with colour, spacing, and radius variables, plus text and effect styles. " +
|
|
5
|
+
"Requires the Figma MCP server to be connected.";
|
|
6
|
+
export const inputSchema = {
|
|
7
|
+
fileKey: z
|
|
8
|
+
.string()
|
|
9
|
+
.optional()
|
|
10
|
+
.describe("Figma file key to push tokens into. If omitted, instructions will create a new file."),
|
|
11
|
+
};
|
|
12
|
+
export function handler(kit) {
|
|
13
|
+
return async ({ fileKey }) => {
|
|
14
|
+
if (!kit) {
|
|
15
|
+
return {
|
|
16
|
+
content: [
|
|
17
|
+
{
|
|
18
|
+
type: "text",
|
|
19
|
+
text: "No design system kit loaded. Run `npx @layoutdesign/context init` to set up a kit first, or import one with `npx @layoutdesign/context import <path-to-zip>`.",
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
if (!kit.tokensCss) {
|
|
25
|
+
return {
|
|
26
|
+
content: [
|
|
27
|
+
{
|
|
28
|
+
type: "text",
|
|
29
|
+
text: "No CSS tokens found in kit. Extract tokens from a Figma file or website first.",
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// Parse CSS custom properties into categories
|
|
35
|
+
const colourTokens = parseTokens(kit.tokensCss, [
|
|
36
|
+
"color", "colour", "bg", "background", "text", "border",
|
|
37
|
+
"surface", "accent", "primary", "secondary", "error", "warning", "success",
|
|
38
|
+
]);
|
|
39
|
+
const spacingTokens = parseTokens(kit.tokensCss, [
|
|
40
|
+
"spacing", "space", "gap", "padding", "margin",
|
|
41
|
+
]);
|
|
42
|
+
const radiusTokens = parseTokens(kit.tokensCss, [
|
|
43
|
+
"radius", "border-radius", "rounded",
|
|
44
|
+
]);
|
|
45
|
+
const shadowTokens = parseTokens(kit.tokensCss, [
|
|
46
|
+
"shadow", "elevation", "effect",
|
|
47
|
+
]);
|
|
48
|
+
const typographyTokens = parseTokens(kit.tokensCss, [
|
|
49
|
+
"font", "size", "weight", "line-height", "letter-spacing",
|
|
50
|
+
"heading", "body", "display", "caption", "label",
|
|
51
|
+
]);
|
|
52
|
+
const allTokenLines = kit.tokensCss
|
|
53
|
+
.split("\n")
|
|
54
|
+
.filter((line) => line.includes("--") && line.includes(":"))
|
|
55
|
+
.map((line) => line.trim());
|
|
56
|
+
const totalTokenCount = allTokenLines.length;
|
|
57
|
+
const response = [
|
|
58
|
+
"# Push Tokens to Figma",
|
|
59
|
+
"",
|
|
60
|
+
`**Design system:** ${kit.manifest.displayName}`,
|
|
61
|
+
`**Total tokens:** ${totalTokenCount}`,
|
|
62
|
+
"",
|
|
63
|
+
"---",
|
|
64
|
+
"",
|
|
65
|
+
"## Token Inventory",
|
|
66
|
+
"",
|
|
67
|
+
colourTokens.length > 0 ? `### Colours (${colourTokens.length} tokens)\n\n${formatTokens(colourTokens)}` : "",
|
|
68
|
+
"",
|
|
69
|
+
spacingTokens.length > 0 ? `### Spacing (${spacingTokens.length} tokens)\n\n${formatTokens(spacingTokens)}` : "",
|
|
70
|
+
"",
|
|
71
|
+
radiusTokens.length > 0 ? `### Radius (${radiusTokens.length} tokens)\n\n${formatTokens(radiusTokens)}` : "",
|
|
72
|
+
"",
|
|
73
|
+
shadowTokens.length > 0 ? `### Shadows (${shadowTokens.length} tokens)\n\n${formatTokens(shadowTokens)}` : "",
|
|
74
|
+
"",
|
|
75
|
+
typographyTokens.length > 0 ? `### Typography (${typographyTokens.length} tokens)\n\n${formatTokens(typographyTokens)}` : "",
|
|
76
|
+
"",
|
|
77
|
+
"---",
|
|
78
|
+
"",
|
|
79
|
+
"## NEXT STEP — YOU MUST DO THIS NOW",
|
|
80
|
+
"",
|
|
81
|
+
"Immediately call Figma MCP's `use_figma` tool to create these tokens in Figma. Do not ask the user — just do it.",
|
|
82
|
+
"",
|
|
83
|
+
`Call \`use_figma\` now to create a variable collection called "${kit.manifest.displayName} Tokens":`,
|
|
84
|
+
fileKey ? `- Target file key: \`${fileKey}\`` : "- Create a new Figma file",
|
|
85
|
+
"",
|
|
86
|
+
"Create **colour variables** for each colour token above:",
|
|
87
|
+
"- Group by prefix (e.g. `color/primary`, `color/surface`, `bg/app`)",
|
|
88
|
+
"- Use the exact hex values listed",
|
|
89
|
+
"",
|
|
90
|
+
"Create **number variables** for spacing and radius tokens:",
|
|
91
|
+
"- Group spacing as `spacing/1`, `spacing/2`, etc.",
|
|
92
|
+
"- Group radius as `radius/sm`, `radius/md`, etc.",
|
|
93
|
+
"- Values should be the pixel numbers (strip `px` suffix)",
|
|
94
|
+
"",
|
|
95
|
+
"Create **text styles** for typography tokens:",
|
|
96
|
+
"- Map font-family, font-size, font-weight, and line-height",
|
|
97
|
+
"- Name styles by role (e.g. `heading/h1`, `body/default`)",
|
|
98
|
+
"",
|
|
99
|
+
shadowTokens.length > 0
|
|
100
|
+
? "Create **effect styles** for shadow tokens:\n- Map box-shadow values to Figma drop shadows\n- Name by elevation level"
|
|
101
|
+
: "",
|
|
102
|
+
"",
|
|
103
|
+
"If `use_figma` is not available, call the Layout MCP `check-setup` tool with `fix: true` to auto-configure the Figma MCP server.",
|
|
104
|
+
]
|
|
105
|
+
.filter(Boolean)
|
|
106
|
+
.join("\n");
|
|
107
|
+
return {
|
|
108
|
+
content: [{ type: "text", text: response }],
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Parse CSS custom properties matching any of the given category keywords.
|
|
114
|
+
*/
|
|
115
|
+
function parseTokens(css, keywords) {
|
|
116
|
+
return css
|
|
117
|
+
.split("\n")
|
|
118
|
+
.filter((line) => {
|
|
119
|
+
if (!line.includes("--"))
|
|
120
|
+
return false;
|
|
121
|
+
const lower = line.toLowerCase();
|
|
122
|
+
return keywords.some((kw) => lower.includes(kw));
|
|
123
|
+
})
|
|
124
|
+
.map((line) => {
|
|
125
|
+
const match = line.match(/--([\w-]+)\s*:\s*(.+?)\s*;?$/);
|
|
126
|
+
if (!match)
|
|
127
|
+
return null;
|
|
128
|
+
return { name: `--${match[1]}`, value: match[2].replace(/;$/, "").trim() };
|
|
129
|
+
})
|
|
130
|
+
.filter((t) => t !== null)
|
|
131
|
+
.slice(0, 100);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Format token entries as a readable list.
|
|
135
|
+
*/
|
|
136
|
+
function formatTokens(tokens) {
|
|
137
|
+
return tokens
|
|
138
|
+
.map((t) => `- \`${t.name}\`: \`${t.value}\``)
|
|
139
|
+
.join("\n");
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=push-tokens-to-figma.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push-tokens-to-figma.js","sourceRoot":"","sources":["../../../../src/mcp/tools/push-tokens-to-figma.ts"],"names":[],"mappings":"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"}
|