figma-console-mcp 1.38.0 β 1.38.2
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 +4 -2
- package/dist/cloudflare/core/design-code-tools.js +6 -2
- package/dist/cloudflare/core/history/component-history.js +22 -5
- package/dist/cloudflare/core/history/history-formatter.js +4 -1
- package/dist/cloudflare/core/library-tools.js +56 -7
- package/dist/cloudflare/core/port-discovery.js +101 -20
- package/dist/cloudflare/core/tokens-tools.js +1 -1
- package/dist/cloudflare/index.js +3 -3
- package/dist/core/library-tools.d.ts.map +1 -1
- package/dist/core/library-tools.js +56 -7
- package/dist/core/library-tools.js.map +1 -1
- package/dist/core/port-discovery.d.ts.map +1 -1
- package/dist/core/port-discovery.js +101 -20
- package/dist/core/port-discovery.js.map +1 -1
- package/dist/core/tokens-tools.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
> **Your design system as an API.** Model Context Protocol server that bridges design and developmentβgiving AI assistants complete access to Figma for **extraction**, **creation**, **debugging**, and **bidirectional token sync**.
|
|
10
10
|
|
|
11
|
-
>
|
|
11
|
+
> **π Connection Stability Fix (v1.38.2):** If your MCP client kept showing **"Server disconnected"**, this release fixes it. The server's own orphan reaper was terminating *healthy* servers: its `/health` liveness probe requested `127.0.0.1` while the server binds `localhost`, which resolves to the **IPv6 loopback** on dual-stack macOS β so the probe returned "nothing responding" for every healthy instance and inverted every kill-safety gate into a rubber stamp. Also fixes non-atomic port-file writes, deletion of files on a transient read error, and an orphan path that killed without probing. Affected all MCP clients equally (server-side, unrelated to the Desktop Bridge plugin). **Fully restart your MCP clients after upgrading** β a server still running an older build keeps the broken probe and will terminate healthy siblings. Server-only β **no plugin re-import needed**. [See what's new β](CHANGELOG.md#1382---2026-07-29)
|
|
12
12
|
|
|
13
13
|
## What is this?
|
|
14
14
|
|
|
@@ -823,9 +823,11 @@ The architecture supports adding new apps with minimal boilerplate β each app
|
|
|
823
823
|
|
|
824
824
|
## π€οΈ Roadmap
|
|
825
825
|
|
|
826
|
-
**Current Status:** v1.38.
|
|
826
|
+
**Current Status:** v1.38.2 (Stable) - Production-ready. Latest: a connection-stability fix β the server's own orphan reaper was terminating healthy MCP servers because its liveness probe used an IPv4 literal while the server binds the IPv6 loopback, which turned every kill-safety gate into a rubber stamp; this was the cause of recurring "Server disconnected" errors across all MCP clients. Alongside v1.38.1's fix for the shared-library variable tools, which had silently reported zero collections since v1.29.0 and reported failed imports as successes. On top of v1.38.0's ongoing component changelogs in generated docs β `figma_generate_component_doc` takes an opt-in `history` parameter that pulls per-component **design history** from Figma version history (each version diffed and scoped to that component, so renames, added properties, and token bindings show up as rows) alongside **code history** from `git log` on the component's source files, rendered as a `## History` section with design, code, and release-note tables. Prefers labeled versions, falls back to auto-saves when a file has none, and is off by default so existing calls are unchanged (server-only, no plugin re-import). On top of v1.37.x's design-system health audit for every client β `figma_audit_design_system_report` runs the dashboard's deterministic six-category scoring engine and returns the report as data with per-finding remediation, live-first fileKey-verified data (source disclosed), chunked per-category drill-down, and a 5-minute cache (server-only, no plugin re-import). On top of v1.36.0's target lock for multi-file parallel work β β `figma_navigate` takes a `lock: true` flag that pins the active file so an AI agent can work in one file while you work in another without commands routing to the wrong file. On top of v1.35.0's Figma Slots write support β create, inspect, populate, and reset Slots (GA at Config 2026) via 5 new tools (`figma_create_slot`, `figma_get_slots`, `figma_append_to_slot`, `figma_reset_slot`, `figma_add_slot_property`), live-validated against the GA Plugin API and based on community PR #77. On top of v1.34.0's Bidirectional Token Sync v2 + DTCG 2025.10 β `figma_import_tokens` applies the complete diff plan (creates missing collections/variables, applies renames, writes real `VARIABLE_ALIAS` references, and deletes only under explicit `replace`), `figma_export_tokens` speaks the DTCG 2025.10 dialect on request (legacy default byte-identical), variable scopes/codeSyntax round-trip via `$extensions`, `figma_setup_design_tokens` accepts alias values via DTCG brace references, and `figma_create_component_set` builds a full variant set from an axes matrix in one call. On top of the v1.33.x line: version-handshake fix (re-import banner only fires when plugin files actually changed), security dependency sweep, and the v1.33.0 connection UX overhaul (honest status pill derived from live connection state, `/health` auto-discovery with self-healing reconnect) + a 33-fix full-codebase audit (lossless DTCG multi-mode round-trips, cross-collection alias resolution, branch-URL correctness across REST tools, cache-poisoning and CSWSH fixes, bridge-first screenshots). Built on WCAG-accurate accessibility auditing (line height below 1.5Γ is no longer mis-flagged as a failure; readability hints decoupled from conformance checks and scoped to multi-line text; code-side WCAG 1.4.12 check), a self-healing Desktop Bridge connection (zombie-process reaper + auto-reconnect watchdog β fixes the recurring "not connected until restart" bug), native variable binding on fills/strokes + typography control in the write tools, shared-library inspection (key-based component resolution + library variable read/import without Enterprise plan), 10-format token export pipeline (DTCG, CSS, Tailwind v4, Tailwind v3, SCSS, TS module, JSON flat/nested, Style Dictionary v3, Tokens Studio), bidirectional Figmaβcode token sync, version history & time-series awareness, FigJam + Slides support, Cloud Write Relay, Design System Kit, WebSocket-only connectivity, smart multi-file tracking, **113 tools** (Local) / **101 tools** (Cloud) / **9 tools** (Remote read-only), Comments API, cross-MCP identity disambiguation, and MCP Apps.
|
|
827
827
|
|
|
828
828
|
**Recent Releases:**
|
|
829
|
+
- [x] **v1.38.2** - Connection stability: the orphan reaper was terminating healthy MCP servers, the cause of recurring "Server disconnected" errors across every MCP client (reproduced in both Claude Code and Claude Desktop; unrelated to the Desktop Bridge plugin). The reaper probes a sibling's `/health` before deciding it is dead, but requested `127.0.0.1` while the WebSocket server binds `localhost` β resolved to the IPv6 loopback on dual-stack macOS, with nothing on IPv4 β so the probe reported "nothing responding" for healthy servers and every kill-safety gate built on it became a rubber stamp, including the one written to spare siblings after the machine sleeps. Three supporting defects: port files written non-atomically (a reader landing mid-rewrite got a parse error that both cleanup paths treated as "corrupt, delete it", stranding a healthy server), an orphan path that terminated fileless port-holders without probing at all, and a heartbeat that gave up permanently once its own file went missing. Fixes: probe `localhost`, atomic temp+rename writes, never delete on a parse failure, health-probe before the orphan kill in both paths, and self-healing re-advertisement guarded by in-process port ownership. **Fully restart MCP clients after upgrading** β older running builds keep the broken probe and still terminate healthy siblings. Server-only, no plugin re-import. 1422 tests (7 new regressions, each verified to fail pre-fix).
|
|
830
|
+
- [x] **v1.38.1** - Shared-library variable tools fixed. `figma_get_library_variables` returned `totalCollections: 0` for every file, on every plan, since it shipped in v1.29.0, and `figma_import_library_variable` reported failed imports as successes with `id: undefined`. Both read the Desktop Bridge's `{ success, result }` envelope as if it were the injected script's bare return value, so `Array.isArray()` was always false, the `__error` guard was dead code, and `.id` was always undefined. The failure presented as a *success* with a plausible hint attached ("subscribe a library via the Assets panel"), which is why it survived two months unreported. Both tools now unwrap through a shared helper that also maps a bridge-level `success: false` onto the error path, so a plugin timeout surfaces as a real error instead of being swallowed as "0 collections"; an import yielding no `id` is now an explicit error. All 26 `executeCodeViaUI` call sites audited β only these two were affected. Test mocks had encoded a wire contract that does not exist, which is why CI stayed green; they now reproduce the real envelope, plus six regression tests verified to fail against the pre-fix source. Reported by Isabella Minzly. Server-only β no plugin re-import needed.
|
|
829
831
|
- [x] **v1.38.0** - Ongoing component changelogs in generated docs. `figma_generate_component_doc` gained an opt-in `history` parameter that produces a real changelog instead of only echoing hand-written `codeInfo.changelog` rows: `history.figma` walks Figma version history and diffs each consecutive pair scoped to the component (reusing the same engine as `figma_diff_versions`, so a rename, a newly added component property, or a token binding each become a row), while `history.git` runs `git log` over the component's source files auto-derived from `codeInfo.filePath` / `sourceFiles[]`. Labeled versions are preferred but auto-saves are used automatically when a file has none β verified against a mature system with 72 auto-saves and 0 labeled versions, where a labeled-only walk yields nothing. Detailed-mode bindings group by property (binding one token across a 24-variant set otherwise produced 44 near-identical bullets in a single table cell). Both sources default off, so existing callers get byte-identical output. No new tools; server-only, no plugin re-import.
|
|
830
832
|
- [x] **v1.37.0** - Design-system health audit for every MCP client. New `figma_audit_design_system_report` runs the Design System Dashboard's deterministic scoring engine (naming, token architecture, component metadata, accessibility, consistency, coverage) and returns the scored report as data β no MCP Apps support or `ENABLE_MCP_APPS` needed (the previous registration gated everything, making the audit unreachable outside Claude Desktop). Component data is now live-first: a fileKey-verified per-page bridge crawl (30s/page, failures isolated per page) with REST published-library fallback, and the chosen source is disclosed in the report (`bridge-live` / `rest-published` / `none`) so stale-publish scores can't masquerade as live ones. Output is token-safe by design: bounded summary, per-category chunked drill-down, clamped full JSON, 5-minute raw-data cache. Every finding carries a remediation verdict β auto-fixable by this MCP's write tools, fixable after a design decision, or manual β with the exact tools named. Scoring accuracy pass: variant components no longer poison PascalCase/casing checks, Title Case accepted, component-set names count toward core-component coverage, `color/content/*` recognized in contrast pairing, state synonyms (`active`β`pressed` etc.), and `.`/`_`-prefixed internals excluded. Server-only β no plugin re-import needed.
|
|
831
833
|
- [x] **v1.36.0** - Target lock for multi-file parallel work. `figma_navigate` gains a `lock: true` flag that pins the active file β new connections, reconnects, and the user's own selection/page changes in other files no longer move the command target, so an agent can safely write to one file while the user works in another. Auto-releases when the pinned file disconnects or navigates away; `figma_list_open_files` reports a `targetLocked` flag for pre-write guards. Server-only β no plugin re-import needed.
|
|
@@ -1476,11 +1476,13 @@ latestDesignVersion) {
|
|
|
1476
1476
|
if (latestDesignVersion) {
|
|
1477
1477
|
// Quote the label β it's user-authored and may contain YAML-significant
|
|
1478
1478
|
// characters (a colon in "v2: buttons" would otherwise break parsing).
|
|
1479
|
+
// Unlabeled auto-saves fall back to the date rather than the raw 19-digit
|
|
1480
|
+
// version ID, which carries no meaning for a docs reader.
|
|
1481
|
+
const date = latestDesignVersion.created_at?.split("T")[0];
|
|
1479
1482
|
const label = latestDesignVersion.label
|
|
1480
1483
|
? `"${latestDesignVersion.label.replace(/"/g, '\\"')}"`
|
|
1481
|
-
: latestDesignVersion.version_id;
|
|
1484
|
+
: date || latestDesignVersion.version_id;
|
|
1482
1485
|
lines.push(`figmaVersion: ${label}`);
|
|
1483
|
-
const date = latestDesignVersion.created_at?.split("T")[0];
|
|
1484
1486
|
if (date)
|
|
1485
1487
|
lines.push(`figmaVersionDate: ${date}`);
|
|
1486
1488
|
}
|
|
@@ -2919,6 +2921,8 @@ export function registerDesignCodeTools(server, getFigmaAPI, getCurrentUrl, vari
|
|
|
2919
2921
|
entries: designHistory.entries.length,
|
|
2920
2922
|
versionsScanned: designHistory._meta.versions_scanned,
|
|
2921
2923
|
apiCalls: designHistory._meta.api_calls,
|
|
2924
|
+
usedAutosaveFallback: designHistory._meta.used_autosave_fallback === true,
|
|
2925
|
+
latestVersionId: latestDesignVersion?.version_id ?? null,
|
|
2922
2926
|
notes: designHistory.notes,
|
|
2923
2927
|
}
|
|
2924
2928
|
: null,
|
|
@@ -73,20 +73,37 @@ export async function buildDesignHistory(api, fileKey, nodeIds, options = {}) {
|
|
|
73
73
|
return result;
|
|
74
74
|
}
|
|
75
75
|
// N rows needs N+1 snapshots: each row is a diff between adjacent versions.
|
|
76
|
-
|
|
76
|
+
let listed = await listVersions(api, fileKey, {
|
|
77
77
|
limit: versionsWanted + 1,
|
|
78
78
|
includeAutosaves,
|
|
79
79
|
});
|
|
80
80
|
result._meta.api_calls += listed.apiCalls;
|
|
81
|
-
result._meta.versions_scanned = listed.versions.length;
|
|
82
81
|
if (listed.error) {
|
|
82
|
+
result._meta.versions_scanned = listed.versions.length;
|
|
83
83
|
result.notes.push(listed.error);
|
|
84
84
|
return result;
|
|
85
85
|
}
|
|
86
|
+
// Labeled versions are better changelog material when a team curates them,
|
|
87
|
+
// but plenty of real design-system files have none at all (verified: a mature
|
|
88
|
+
// file with 72 auto-saves and 0 labeled versions). Rather than silently
|
|
89
|
+
// emitting nothing there, fall back to auto-saves and say so. Autosave noise
|
|
90
|
+
// is largely absorbed downstream anyway β a version only becomes a row if it
|
|
91
|
+
// actually changed the scoped component.
|
|
92
|
+
if (!includeAutosaves && listed.versions.length < 2) {
|
|
93
|
+
const fallback = await listVersions(api, fileKey, {
|
|
94
|
+
limit: versionsWanted + 1,
|
|
95
|
+
includeAutosaves: true,
|
|
96
|
+
});
|
|
97
|
+
result._meta.api_calls += fallback.apiCalls;
|
|
98
|
+
if (!fallback.error && fallback.versions.length >= 2) {
|
|
99
|
+
listed = fallback;
|
|
100
|
+
result._meta.used_autosave_fallback = true;
|
|
101
|
+
result.notes.push("This file has no labeled versions, so history was built from Figma auto-saves. Name versions in Figma (right-click a version β Add label) for a more curated changelog.");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
result._meta.versions_scanned = listed.versions.length;
|
|
86
105
|
if (listed.versions.length < 2) {
|
|
87
|
-
result.notes.push(
|
|
88
|
-
? "Not enough version history to build a changelog (need at least 2 saved versions)."
|
|
89
|
-
: "Not enough labeled version history to build a changelog (need at least 2 named versions). Figma auto-saves are excluded by default β pass includeAutosaves to use them.");
|
|
106
|
+
result.notes.push("Not enough version history to build a changelog (need at least 2 saved versions).");
|
|
90
107
|
return result;
|
|
91
108
|
}
|
|
92
109
|
// listVersions returns newest-first. Row i describes what changed when
|
|
@@ -42,7 +42,10 @@ function appendDesignHistory(lines, design) {
|
|
|
42
42
|
lines.push("| Version | Date | Author | Changes |");
|
|
43
43
|
lines.push("|---------|------|--------|---------|");
|
|
44
44
|
for (const e of design.entries) {
|
|
45
|
-
|
|
45
|
+
// Auto-saves have no label and a 19-digit numeric ID that means nothing
|
|
46
|
+
// to a reader β the Date column already identifies the row. The raw ID
|
|
47
|
+
// stays available programmatically via historySummary / the entry object.
|
|
48
|
+
const version = e.label ? escapeCell(e.label) : "_(auto-save)_";
|
|
46
49
|
const date = formatDate(e.created_at);
|
|
47
50
|
const author = e.author ? escapeCell(e.author) : "β";
|
|
48
51
|
const changes = e.changes.length > 0
|
|
@@ -317,6 +317,33 @@ export function registerLibraryTools(server, getFigmaAPI) {
|
|
|
317
317
|
function safeKey(value) {
|
|
318
318
|
return JSON.stringify(value);
|
|
319
319
|
}
|
|
320
|
+
/**
|
|
321
|
+
* Unwrap the Desktop Bridge envelope around an executeCodeViaUI() result.
|
|
322
|
+
*
|
|
323
|
+
* The bridge resolves to `{ success, result }` (built by handleResult() in
|
|
324
|
+
* figma-desktop-bridge/ui.html) β NEVER the bare value the injected script
|
|
325
|
+
* returned. Reading the envelope as if it were the script's own return value
|
|
326
|
+
* silently yields the wrong type: `Array.isArray(envelope)` is always false,
|
|
327
|
+
* and a `{ __error }` sentinel lands at `.result.__error`, not `.__error`.
|
|
328
|
+
* That turns a hard failure into a confident-looking empty success, which is
|
|
329
|
+
* worse than a crash β see the regression tests in tests/library-tools.test.ts.
|
|
330
|
+
*
|
|
331
|
+
* Returns the script's value, or `{ __error }` when the bridge itself reported
|
|
332
|
+
* failure so callers can route both failure modes through one guard. The
|
|
333
|
+
* `?? raw` fallback keeps this tolerant of a bare value, matching the
|
|
334
|
+
* defensive `execResult.result ?? execResult` precedent in tokens-tools.ts.
|
|
335
|
+
*/
|
|
336
|
+
function unwrapBridgeResult(raw) {
|
|
337
|
+
if (raw && typeof raw === "object" && raw.success === false) {
|
|
338
|
+
return {
|
|
339
|
+
__error: raw.error || "Desktop Bridge reported a failure with no error message.",
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
if (raw && typeof raw === "object" && "result" in raw) {
|
|
343
|
+
return raw.result ?? raw;
|
|
344
|
+
}
|
|
345
|
+
return raw;
|
|
346
|
+
}
|
|
320
347
|
export function registerLibraryVariableTools(server, getDesktopConnector) {
|
|
321
348
|
// --------------------------------------------------------------------
|
|
322
349
|
// figma_get_library_variables β list available variables from
|
|
@@ -393,15 +420,16 @@ export function registerLibraryVariableTools(server, getDesktopConnector) {
|
|
|
393
420
|
return out;
|
|
394
421
|
`;
|
|
395
422
|
const raw = await connector.executeCodeViaUI(script, 30000);
|
|
423
|
+
const payload = unwrapBridgeResult(raw);
|
|
396
424
|
// Detect the wrapped-error sentinel
|
|
397
|
-
if (
|
|
425
|
+
if (payload && typeof payload === "object" && payload.__error) {
|
|
398
426
|
return {
|
|
399
427
|
content: [
|
|
400
428
|
{
|
|
401
429
|
type: "text",
|
|
402
430
|
text: JSON.stringify({
|
|
403
431
|
_mcp: "figma-console-mcp",
|
|
404
|
-
error:
|
|
432
|
+
error: payload.__error,
|
|
405
433
|
hint: "Plugin sandbox could not access the team library API. Ensure Figma Desktop is recent and the Desktop Bridge is connected.",
|
|
406
434
|
}),
|
|
407
435
|
},
|
|
@@ -409,7 +437,7 @@ export function registerLibraryVariableTools(server, getDesktopConnector) {
|
|
|
409
437
|
isError: true,
|
|
410
438
|
};
|
|
411
439
|
}
|
|
412
|
-
let collections = Array.isArray(
|
|
440
|
+
let collections = Array.isArray(payload) ? payload : [];
|
|
413
441
|
// Apply server-side filters (cheaper to filter here than in plugin)
|
|
414
442
|
if (libraryName) {
|
|
415
443
|
const needle = libraryName.toLowerCase();
|
|
@@ -520,8 +548,9 @@ After import, the variable becomes locally addressable by its returned 'id' and
|
|
|
520
548
|
}
|
|
521
549
|
`;
|
|
522
550
|
const raw = await connector.executeCodeViaUI(script, 20000);
|
|
523
|
-
|
|
524
|
-
|
|
551
|
+
const imported = unwrapBridgeResult(raw);
|
|
552
|
+
if (imported && typeof imported === "object" && imported.__error) {
|
|
553
|
+
const errMsg = imported.__error;
|
|
525
554
|
let hint = "Verify the variableKey was returned by figma_get_library_variables and that the source library is subscribed by the current file.";
|
|
526
555
|
if (/not subscribed|not enabled|access/i.test(errMsg)) {
|
|
527
556
|
hint =
|
|
@@ -542,15 +571,35 @@ After import, the variable becomes locally addressable by its returned 'id' and
|
|
|
542
571
|
isError: true,
|
|
543
572
|
};
|
|
544
573
|
}
|
|
574
|
+
// An import with no id is a failure however it got here β never
|
|
575
|
+
// report it as a success with `id: undefined`, which is
|
|
576
|
+
// indistinguishable from a real import to a scripted caller.
|
|
577
|
+
if (!imported || typeof imported !== "object" || !imported.id) {
|
|
578
|
+
return {
|
|
579
|
+
content: [
|
|
580
|
+
{
|
|
581
|
+
type: "text",
|
|
582
|
+
text: JSON.stringify({
|
|
583
|
+
_mcp: "figma-console-mcp",
|
|
584
|
+
error: "Import returned no variable id β the variable was not imported.",
|
|
585
|
+
hint: "Verify the variableKey came from figma_get_library_variables and that the source library is subscribed by the current file.",
|
|
586
|
+
variableKey,
|
|
587
|
+
received: imported,
|
|
588
|
+
}),
|
|
589
|
+
},
|
|
590
|
+
],
|
|
591
|
+
isError: true,
|
|
592
|
+
};
|
|
593
|
+
}
|
|
545
594
|
return {
|
|
546
595
|
content: [
|
|
547
596
|
{
|
|
548
597
|
type: "text",
|
|
549
598
|
text: JSON.stringify({
|
|
550
599
|
_mcp: "figma-console-mcp",
|
|
551
|
-
imported
|
|
600
|
+
imported,
|
|
552
601
|
usage: {
|
|
553
|
-
bind: `Use the imported variable's id ('${
|
|
602
|
+
bind: `Use the imported variable's id ('${imported.id}') with figma_set_fills, figma_update_variable, or any other variable-binding tool to reference this token from nodes in the current file.`,
|
|
554
603
|
note: "Variables imported from a library remain linked to their source β updates published from the library will propagate here automatically.",
|
|
555
604
|
},
|
|
556
605
|
}),
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
* Plugin scans ports 9223-9232 β connects to first responding server
|
|
30
30
|
* External tools read port files for discovery
|
|
31
31
|
*/
|
|
32
|
-
import { writeFileSync, readFileSync, unlinkSync, existsSync, readdirSync } from 'fs';
|
|
32
|
+
import { writeFileSync, readFileSync, unlinkSync, existsSync, readdirSync, renameSync } from 'fs';
|
|
33
33
|
import { join } from 'path';
|
|
34
34
|
import { tmpdir, devNull } from 'os';
|
|
35
35
|
import { execFile, execFileSync } from 'child_process';
|
|
@@ -101,13 +101,41 @@ export function advertisePort(port, host = 'localhost') {
|
|
|
101
101
|
};
|
|
102
102
|
const filePath = getPortFilePath(port);
|
|
103
103
|
try {
|
|
104
|
-
|
|
104
|
+
writePortFileAtomic(filePath, data);
|
|
105
|
+
advertisedPorts.add(port);
|
|
105
106
|
logger.info({ port, filePath }, 'Port advertised');
|
|
106
107
|
}
|
|
107
108
|
catch (error) {
|
|
108
109
|
logger.warn({ port, filePath, error }, 'Failed to write port advertisement file');
|
|
109
110
|
}
|
|
110
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Write a port file atomically: full write to a PID-unique temp file, then
|
|
114
|
+
* `renameSync` onto the target. `rename(2)` is atomic on POSIX, so a reader
|
|
115
|
+
* only ever sees the complete old file or the complete new one.
|
|
116
|
+
*
|
|
117
|
+
* A plain `writeFileSync` truncates first, leaving a window where readers see
|
|
118
|
+
* an empty or partial file. That window is re-opened every 30s per instance
|
|
119
|
+
* by the heartbeat, while every sibling scans all ten files β and a reader
|
|
120
|
+
* that hits it gets a JSON parse error, which the cleanup paths used to treat
|
|
121
|
+
* as "corrupt, delete it" and the orphan reaper treats as "no port file =
|
|
122
|
+
* orphan, kill it". A transient read blip must never be able to strand or
|
|
123
|
+
* kill a healthy server.
|
|
124
|
+
*/
|
|
125
|
+
function writePortFileAtomic(filePath, data) {
|
|
126
|
+
const tmpPath = `${filePath}.${process.pid}.tmp`;
|
|
127
|
+
try {
|
|
128
|
+
writeFileSync(tmpPath, JSON.stringify(data, null, 2));
|
|
129
|
+
renameSync(tmpPath, filePath);
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
try {
|
|
133
|
+
unlinkSync(tmpPath);
|
|
134
|
+
}
|
|
135
|
+
catch { /* best-effort */ }
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
111
139
|
/**
|
|
112
140
|
* Refresh the lastSeen timestamp in a port advertisement file.
|
|
113
141
|
* Called periodically as a heartbeat to prove this server is still active.
|
|
@@ -116,26 +144,47 @@ export function advertisePort(port, host = 'localhost') {
|
|
|
116
144
|
export function refreshPortAdvertisement(port) {
|
|
117
145
|
const filePath = getPortFilePath(port);
|
|
118
146
|
try {
|
|
119
|
-
if (!existsSync(filePath))
|
|
147
|
+
if (!existsSync(filePath)) {
|
|
148
|
+
// Our file is gone but we are still running and still hold the port.
|
|
149
|
+
// Returning here (the old behaviour) left the process permanently
|
|
150
|
+
// unadvertised β and an unadvertised process holding a port is exactly
|
|
151
|
+
// what the orphan reaper terminates. Re-advertise instead so the state
|
|
152
|
+
// is self-healing rather than terminal. Guarded by ownsPort so we never
|
|
153
|
+
// resurrect a file for a port that has since been taken by someone else.
|
|
154
|
+
if (ownsPort(port))
|
|
155
|
+
advertisePort(port);
|
|
120
156
|
return;
|
|
157
|
+
}
|
|
121
158
|
const raw = readFileSync(filePath, 'utf-8');
|
|
122
159
|
const data = JSON.parse(raw);
|
|
123
160
|
// Only refresh our own port file
|
|
124
161
|
if (data.pid !== process.pid)
|
|
125
162
|
return;
|
|
126
163
|
data.lastSeen = new Date().toISOString();
|
|
127
|
-
|
|
164
|
+
writePortFileAtomic(filePath, data);
|
|
128
165
|
}
|
|
129
166
|
catch {
|
|
130
167
|
// Best-effort β heartbeat failures are non-fatal
|
|
131
168
|
}
|
|
132
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* Whether THIS process is the one that advertised `port` in this run.
|
|
172
|
+
* Tracked in-process rather than re-derived from the filesystem, because the
|
|
173
|
+
* filesystem is precisely the state we may be repairing.
|
|
174
|
+
*/
|
|
175
|
+
const advertisedPorts = new Set();
|
|
176
|
+
function ownsPort(port) {
|
|
177
|
+
return advertisedPorts.has(port);
|
|
178
|
+
}
|
|
133
179
|
/**
|
|
134
180
|
* Remove the port advertisement file for this instance.
|
|
135
181
|
* Call on clean shutdown.
|
|
136
182
|
*/
|
|
137
183
|
export function unadvertisePort(port) {
|
|
138
184
|
const filePath = getPortFilePath(port);
|
|
185
|
+
// Drop ownership first so a heartbeat racing this shutdown can't re-advertise
|
|
186
|
+
// the file we are deliberately removing.
|
|
187
|
+
advertisedPorts.delete(port);
|
|
139
188
|
try {
|
|
140
189
|
if (existsSync(filePath)) {
|
|
141
190
|
unlinkSync(filePath);
|
|
@@ -208,9 +257,20 @@ function isValidProbePort(port) {
|
|
|
208
257
|
/** curl arguments for the /health liveness probe against a sibling's port.
|
|
209
258
|
* `devNull` (not a literal /dev/null) β Windows ships curl.exe, and a bad
|
|
210
259
|
* output path there makes curl exit non-zero, which reads as "nothing
|
|
211
|
-
* responding" and would let the reaper kill a healthy sibling.
|
|
260
|
+
* responding" and would let the reaper kill a healthy sibling.
|
|
261
|
+
*
|
|
262
|
+
* The host MUST be `localhost`, not `127.0.0.1`. The WebSocket server binds
|
|
263
|
+
* `options.host || 'localhost'`, and on a dual-stack macOS box Node resolves
|
|
264
|
+
* that to the IPv6 loopback β `lsof` shows `[::1]:9223`, with nothing
|
|
265
|
+
* listening on IPv4. Probing `127.0.0.1` therefore returned connection-refused
|
|
266
|
+
* for every *healthy* server, which `probeServerHealth` maps to `false` =
|
|
267
|
+
* "confirmed dead". That inverted every kill-safety gate below: the probe that
|
|
268
|
+
* exists to spare live-but-stale siblings was instead rubber-stamping their
|
|
269
|
+
* termination. Verified live: on a working server, `127.0.0.1` gave curl exit
|
|
270
|
+
* 7 while `localhost` gave exit 0. `localhost` lets curl try every resolved
|
|
271
|
+
* address (both families), so it works regardless of which stack Node picked. */
|
|
212
272
|
function healthProbeArgs(port) {
|
|
213
|
-
return ['-s', '-o', devNull, '-m', '1', `http://
|
|
273
|
+
return ['-s', '-o', devNull, '-m', '1', `http://localhost:${port}/health`];
|
|
214
274
|
}
|
|
215
275
|
/**
|
|
216
276
|
* Liveness probe against a sibling server's HTTP `/health` endpoint (the
|
|
@@ -507,12 +567,14 @@ export function cleanupStalePortFiles() {
|
|
|
507
567
|
}
|
|
508
568
|
}
|
|
509
569
|
catch {
|
|
510
|
-
//
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
570
|
+
// Unreadable/unparseable β do NOT delete. A partial read of a file
|
|
571
|
+
// mid-rewrite is indistinguishable from genuine corruption, and
|
|
572
|
+
// deleting it strands a healthy server: it becomes a port-holder
|
|
573
|
+
// with no port file, which the orphan reaper terminates on sight.
|
|
574
|
+
// Writes are atomic now (writePortFileAtomic), so this should be
|
|
575
|
+
// unreachable in practice; leaving the file alone means the worst
|
|
576
|
+
// case is a stale file that the dead-PID branch reclaims later.
|
|
577
|
+
logger.debug({ filePath }, 'Unreadable port file β leaving in place');
|
|
516
578
|
}
|
|
517
579
|
}
|
|
518
580
|
}
|
|
@@ -574,12 +636,14 @@ export async function cleanupStalePortFilesAsync() {
|
|
|
574
636
|
}
|
|
575
637
|
}
|
|
576
638
|
catch {
|
|
577
|
-
//
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
639
|
+
// Unreadable/unparseable β do NOT delete. A partial read of a file
|
|
640
|
+
// mid-rewrite is indistinguishable from genuine corruption, and
|
|
641
|
+
// deleting it strands a healthy server: it becomes a port-holder
|
|
642
|
+
// with no port file, which the orphan reaper terminates on sight.
|
|
643
|
+
// Writes are atomic now (writePortFileAtomic), so this should be
|
|
644
|
+
// unreachable in practice; leaving the file alone means the worst
|
|
645
|
+
// case is a stale file that the dead-PID branch reclaims later.
|
|
646
|
+
logger.debug({ filePath }, 'Unreadable port file β leaving in place');
|
|
583
647
|
}
|
|
584
648
|
}
|
|
585
649
|
}
|
|
@@ -642,7 +706,14 @@ export function cleanupOrphanedProcesses(preferredPort = DEFAULT_WS_PORT, option
|
|
|
642
706
|
if (minAgeMs > 0 && ageMs !== null && ageMs < minAgeMs) {
|
|
643
707
|
continue;
|
|
644
708
|
}
|
|
645
|
-
|
|
709
|
+
// See the async path: a missing port file is not proof of death.
|
|
710
|
+
// Only a definitive probe failure authorises termination.
|
|
711
|
+
const health = probeServerHealth(port);
|
|
712
|
+
if (health !== false) {
|
|
713
|
+
logger.debug({ port, pid, probe: health === true ? 'responding' : 'inconclusive' }, 'Port-holder without a port file is still serving /health β skipping kill');
|
|
714
|
+
continue;
|
|
715
|
+
}
|
|
716
|
+
logger.info({ port, pid, command: cmdline.substring(0, 120) }, 'Terminating orphaned MCP server (no port file, holding port, health probe failed)');
|
|
646
717
|
// terminateProcess escalates SIGTERM -> SIGKILL. Only count it as
|
|
647
718
|
// cleaned when the process is confirmed gone, so the log reflects
|
|
648
719
|
// reality (the old code counted attempts and reported success even
|
|
@@ -758,7 +829,17 @@ export async function cleanupOrphanedProcessesAsync(preferredPort = DEFAULT_WS_P
|
|
|
758
829
|
if (minAgeMs > 0 && ageMs !== null && ageMs < minAgeMs) {
|
|
759
830
|
continue;
|
|
760
831
|
}
|
|
761
|
-
|
|
832
|
+
// A missing port file is not proof of death β it can also mean a
|
|
833
|
+
// transient read failure, or a file removed out from under a healthy
|
|
834
|
+
// server. Ask the server itself before killing it. Same verdict
|
|
835
|
+
// semantics as the stale-file path: only a definitive `false`
|
|
836
|
+
// (probe ran, nothing answered) authorises termination.
|
|
837
|
+
const health = await probeServerHealthAsync(port);
|
|
838
|
+
if (health !== false) {
|
|
839
|
+
logger.debug({ port, pid, probe: health === true ? 'responding' : 'inconclusive' }, 'Port-holder without a port file is still serving /health β re-advertising is its job, not ours; skipping kill');
|
|
840
|
+
continue;
|
|
841
|
+
}
|
|
842
|
+
logger.info({ port, pid, command: cmdline.substring(0, 120) }, 'Terminating orphaned MCP server (no port file, holding port, health probe failed)');
|
|
762
843
|
// Only count confirmed kills, matching the sync path.
|
|
763
844
|
if (await terminateProcessAsync(pid)) {
|
|
764
845
|
cleaned++;
|
|
@@ -35,7 +35,7 @@ const logger = createChildLogger({ component: "tokens-tools" });
|
|
|
35
35
|
* on every exported token document. Kept in sync with package.json by
|
|
36
36
|
* scripts/release.sh β see step 3 of the release flow.
|
|
37
37
|
*/
|
|
38
|
-
const MCP_VERSION = "1.
|
|
38
|
+
const MCP_VERSION = "1.38.2";
|
|
39
39
|
const EXPORT_TOOL_DESCRIPTION = `Export Figma variables to design token files in your codebase. Bidirectional with figma_import_tokens β together they replace Style Dictionary and Tokens Studio's export pipeline for the popular styling methods.
|
|
40
40
|
|
|
41
41
|
FULLY-IMPLEMENTED OUTPUT FORMATS:
|
package/dist/cloudflare/index.js
CHANGED
|
@@ -75,7 +75,7 @@ export class FigmaConsoleMCPv3 extends McpAgent {
|
|
|
75
75
|
this.server = (() => {
|
|
76
76
|
const s = new McpServer({
|
|
77
77
|
name: "Figma Console MCP",
|
|
78
|
-
version: "1.
|
|
78
|
+
version: "1.38.2",
|
|
79
79
|
});
|
|
80
80
|
// Identity wrap β every tool's response and thrown error gets stamped
|
|
81
81
|
// with our MCP name so cross-MCP attribution is unambiguous.
|
|
@@ -1085,7 +1085,7 @@ export default {
|
|
|
1085
1085
|
});
|
|
1086
1086
|
const statelessServer = new McpServer({
|
|
1087
1087
|
name: "Figma Console MCP",
|
|
1088
|
-
version: "1.
|
|
1088
|
+
version: "1.38.2",
|
|
1089
1089
|
});
|
|
1090
1090
|
wrapServerForIdentity(statelessServer);
|
|
1091
1091
|
// ================================================================
|
|
@@ -1723,7 +1723,7 @@ export default {
|
|
|
1723
1723
|
return new Response(JSON.stringify({
|
|
1724
1724
|
status: "healthy",
|
|
1725
1725
|
service: "Figma Console MCP",
|
|
1726
|
-
version: "1.
|
|
1726
|
+
version: "1.38.2",
|
|
1727
1727
|
endpoints: {
|
|
1728
1728
|
mcp: ["/sse", "/mcp"],
|
|
1729
1729
|
oauth_mcp_spec: ["/.well-known/oauth-authorization-server", "/authorize", "/token", "/oauth/register"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library-tools.d.ts","sourceRoot":"","sources":["../../src/core/library-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AA4G5D,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,GAClC,IAAI,CA4RN;
|
|
1
|
+
{"version":3,"file":"library-tools.d.ts","sourceRoot":"","sources":["../../src/core/library-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AA4G5D,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,GAClC,IAAI,CA4RN;AAsDD,wBAAgB,4BAA4B,CAC3C,MAAM,EAAE,SAAS,EACjB,mBAAmB,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,GACjD,IAAI,CA0UN"}
|
|
@@ -317,6 +317,33 @@ export function registerLibraryTools(server, getFigmaAPI) {
|
|
|
317
317
|
function safeKey(value) {
|
|
318
318
|
return JSON.stringify(value);
|
|
319
319
|
}
|
|
320
|
+
/**
|
|
321
|
+
* Unwrap the Desktop Bridge envelope around an executeCodeViaUI() result.
|
|
322
|
+
*
|
|
323
|
+
* The bridge resolves to `{ success, result }` (built by handleResult() in
|
|
324
|
+
* figma-desktop-bridge/ui.html) β NEVER the bare value the injected script
|
|
325
|
+
* returned. Reading the envelope as if it were the script's own return value
|
|
326
|
+
* silently yields the wrong type: `Array.isArray(envelope)` is always false,
|
|
327
|
+
* and a `{ __error }` sentinel lands at `.result.__error`, not `.__error`.
|
|
328
|
+
* That turns a hard failure into a confident-looking empty success, which is
|
|
329
|
+
* worse than a crash β see the regression tests in tests/library-tools.test.ts.
|
|
330
|
+
*
|
|
331
|
+
* Returns the script's value, or `{ __error }` when the bridge itself reported
|
|
332
|
+
* failure so callers can route both failure modes through one guard. The
|
|
333
|
+
* `?? raw` fallback keeps this tolerant of a bare value, matching the
|
|
334
|
+
* defensive `execResult.result ?? execResult` precedent in tokens-tools.ts.
|
|
335
|
+
*/
|
|
336
|
+
function unwrapBridgeResult(raw) {
|
|
337
|
+
if (raw && typeof raw === "object" && raw.success === false) {
|
|
338
|
+
return {
|
|
339
|
+
__error: raw.error || "Desktop Bridge reported a failure with no error message.",
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
if (raw && typeof raw === "object" && "result" in raw) {
|
|
343
|
+
return raw.result ?? raw;
|
|
344
|
+
}
|
|
345
|
+
return raw;
|
|
346
|
+
}
|
|
320
347
|
export function registerLibraryVariableTools(server, getDesktopConnector) {
|
|
321
348
|
// --------------------------------------------------------------------
|
|
322
349
|
// figma_get_library_variables β list available variables from
|
|
@@ -393,15 +420,16 @@ export function registerLibraryVariableTools(server, getDesktopConnector) {
|
|
|
393
420
|
return out;
|
|
394
421
|
`;
|
|
395
422
|
const raw = await connector.executeCodeViaUI(script, 30000);
|
|
423
|
+
const payload = unwrapBridgeResult(raw);
|
|
396
424
|
// Detect the wrapped-error sentinel
|
|
397
|
-
if (
|
|
425
|
+
if (payload && typeof payload === "object" && payload.__error) {
|
|
398
426
|
return {
|
|
399
427
|
content: [
|
|
400
428
|
{
|
|
401
429
|
type: "text",
|
|
402
430
|
text: JSON.stringify({
|
|
403
431
|
_mcp: "figma-console-mcp",
|
|
404
|
-
error:
|
|
432
|
+
error: payload.__error,
|
|
405
433
|
hint: "Plugin sandbox could not access the team library API. Ensure Figma Desktop is recent and the Desktop Bridge is connected.",
|
|
406
434
|
}),
|
|
407
435
|
},
|
|
@@ -409,7 +437,7 @@ export function registerLibraryVariableTools(server, getDesktopConnector) {
|
|
|
409
437
|
isError: true,
|
|
410
438
|
};
|
|
411
439
|
}
|
|
412
|
-
let collections = Array.isArray(
|
|
440
|
+
let collections = Array.isArray(payload) ? payload : [];
|
|
413
441
|
// Apply server-side filters (cheaper to filter here than in plugin)
|
|
414
442
|
if (libraryName) {
|
|
415
443
|
const needle = libraryName.toLowerCase();
|
|
@@ -520,8 +548,9 @@ After import, the variable becomes locally addressable by its returned 'id' and
|
|
|
520
548
|
}
|
|
521
549
|
`;
|
|
522
550
|
const raw = await connector.executeCodeViaUI(script, 20000);
|
|
523
|
-
|
|
524
|
-
|
|
551
|
+
const imported = unwrapBridgeResult(raw);
|
|
552
|
+
if (imported && typeof imported === "object" && imported.__error) {
|
|
553
|
+
const errMsg = imported.__error;
|
|
525
554
|
let hint = "Verify the variableKey was returned by figma_get_library_variables and that the source library is subscribed by the current file.";
|
|
526
555
|
if (/not subscribed|not enabled|access/i.test(errMsg)) {
|
|
527
556
|
hint =
|
|
@@ -542,15 +571,35 @@ After import, the variable becomes locally addressable by its returned 'id' and
|
|
|
542
571
|
isError: true,
|
|
543
572
|
};
|
|
544
573
|
}
|
|
574
|
+
// An import with no id is a failure however it got here β never
|
|
575
|
+
// report it as a success with `id: undefined`, which is
|
|
576
|
+
// indistinguishable from a real import to a scripted caller.
|
|
577
|
+
if (!imported || typeof imported !== "object" || !imported.id) {
|
|
578
|
+
return {
|
|
579
|
+
content: [
|
|
580
|
+
{
|
|
581
|
+
type: "text",
|
|
582
|
+
text: JSON.stringify({
|
|
583
|
+
_mcp: "figma-console-mcp",
|
|
584
|
+
error: "Import returned no variable id β the variable was not imported.",
|
|
585
|
+
hint: "Verify the variableKey came from figma_get_library_variables and that the source library is subscribed by the current file.",
|
|
586
|
+
variableKey,
|
|
587
|
+
received: imported,
|
|
588
|
+
}),
|
|
589
|
+
},
|
|
590
|
+
],
|
|
591
|
+
isError: true,
|
|
592
|
+
};
|
|
593
|
+
}
|
|
545
594
|
return {
|
|
546
595
|
content: [
|
|
547
596
|
{
|
|
548
597
|
type: "text",
|
|
549
598
|
text: JSON.stringify({
|
|
550
599
|
_mcp: "figma-console-mcp",
|
|
551
|
-
imported
|
|
600
|
+
imported,
|
|
552
601
|
usage: {
|
|
553
|
-
bind: `Use the imported variable's id ('${
|
|
602
|
+
bind: `Use the imported variable's id ('${imported.id}') with figma_set_fills, figma_update_variable, or any other variable-binding tool to reference this token from nodes in the current file.`,
|
|
554
603
|
note: "Variables imported from a library remain linked to their source β updates published from the library will propagate here automatically.",
|
|
555
604
|
},
|
|
556
605
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library-tools.js","sourceRoot":"","sources":["../../src/core/library-tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"library-tools.js","sourceRoot":"","sources":["../../src/core/library-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"port-discovery.d.ts","sourceRoot":"","sources":["../../src/core/port-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAaH,uCAAuC;AACvC,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC,mEAAmE;AACnE,eAAO,MAAM,eAAe,KAAK,CAAC;AAQlC,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,QAAqB,CAAC;AAEvD,yFAAyF;AACzF,eAAO,MAAM,kBAAkB,QAAgB,CAAC;AAEhD,mEAAmE;AACnE,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAAY,CAAC;AAE3C,uDAAuD;AACvD,eAAO,MAAM,gBAAgB,QAAgB,CAAC;AAE9C,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,QAAgB,CAAC;AAEjD,wDAAwD;AACxD,eAAO,MAAM,qBAAqB,QAAY,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,aAAa,GAAE,MAAwB,GAAG,MAAM,EAAE,CAM9E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAoB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"port-discovery.d.ts","sourceRoot":"","sources":["../../src/core/port-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAaH,uCAAuC;AACvC,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC,mEAAmE;AACnE,eAAO,MAAM,eAAe,KAAK,CAAC;AAQlC,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,QAAqB,CAAC;AAEvD,yFAAyF;AACzF,eAAO,MAAM,kBAAkB,QAAgB,CAAC;AAEhD,mEAAmE;AACnE,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAAY,CAAC;AAE3C,uDAAuD;AACvD,eAAO,MAAM,gBAAgB,QAAgB,CAAC;AAE9C,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,QAAgB,CAAC;AAEjD,wDAAwD;AACxD,eAAO,MAAM,qBAAqB,QAAY,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,aAAa,GAAE,MAAwB,GAAG,MAAM,EAAE,CAM9E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAoB,GAAG,IAAI,CAkB5E;AA0BD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAsB3D;AAaD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAalD;AAcD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAY3D;AAED;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,QAA4B,CAAC;AAwOtE;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAoB9D;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,aAAa,GAAE,MAAwB,GAAG,YAAY,EAAE,CAW/F;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CA+D9C;AAED;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC,CA+DlE;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,GAAE,MAAwB,EACvC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAClC,MAAM,CA4FR;AAiDD;;;;;;;;GAQG;AACH,wBAAsB,6BAA6B,CACjD,aAAa,GAAE,MAAwB,EACvC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAClC,OAAO,CAAC,MAAM,CAAC,CA0EjB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,GAAE,MAAwB,GAAG,OAAO,CA0EpF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAStD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,GAAE,MAAwB,GAAG,MAAM,IAAI,CAgCvF"}
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
* Plugin scans ports 9223-9232 β connects to first responding server
|
|
30
30
|
* External tools read port files for discovery
|
|
31
31
|
*/
|
|
32
|
-
import { writeFileSync, readFileSync, unlinkSync, existsSync, readdirSync } from 'fs';
|
|
32
|
+
import { writeFileSync, readFileSync, unlinkSync, existsSync, readdirSync, renameSync } from 'fs';
|
|
33
33
|
import { join } from 'path';
|
|
34
34
|
import { tmpdir, devNull } from 'os';
|
|
35
35
|
import { execFile, execFileSync } from 'child_process';
|
|
@@ -101,13 +101,41 @@ export function advertisePort(port, host = 'localhost') {
|
|
|
101
101
|
};
|
|
102
102
|
const filePath = getPortFilePath(port);
|
|
103
103
|
try {
|
|
104
|
-
|
|
104
|
+
writePortFileAtomic(filePath, data);
|
|
105
|
+
advertisedPorts.add(port);
|
|
105
106
|
logger.info({ port, filePath }, 'Port advertised');
|
|
106
107
|
}
|
|
107
108
|
catch (error) {
|
|
108
109
|
logger.warn({ port, filePath, error }, 'Failed to write port advertisement file');
|
|
109
110
|
}
|
|
110
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Write a port file atomically: full write to a PID-unique temp file, then
|
|
114
|
+
* `renameSync` onto the target. `rename(2)` is atomic on POSIX, so a reader
|
|
115
|
+
* only ever sees the complete old file or the complete new one.
|
|
116
|
+
*
|
|
117
|
+
* A plain `writeFileSync` truncates first, leaving a window where readers see
|
|
118
|
+
* an empty or partial file. That window is re-opened every 30s per instance
|
|
119
|
+
* by the heartbeat, while every sibling scans all ten files β and a reader
|
|
120
|
+
* that hits it gets a JSON parse error, which the cleanup paths used to treat
|
|
121
|
+
* as "corrupt, delete it" and the orphan reaper treats as "no port file =
|
|
122
|
+
* orphan, kill it". A transient read blip must never be able to strand or
|
|
123
|
+
* kill a healthy server.
|
|
124
|
+
*/
|
|
125
|
+
function writePortFileAtomic(filePath, data) {
|
|
126
|
+
const tmpPath = `${filePath}.${process.pid}.tmp`;
|
|
127
|
+
try {
|
|
128
|
+
writeFileSync(tmpPath, JSON.stringify(data, null, 2));
|
|
129
|
+
renameSync(tmpPath, filePath);
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
try {
|
|
133
|
+
unlinkSync(tmpPath);
|
|
134
|
+
}
|
|
135
|
+
catch { /* best-effort */ }
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
111
139
|
/**
|
|
112
140
|
* Refresh the lastSeen timestamp in a port advertisement file.
|
|
113
141
|
* Called periodically as a heartbeat to prove this server is still active.
|
|
@@ -116,26 +144,47 @@ export function advertisePort(port, host = 'localhost') {
|
|
|
116
144
|
export function refreshPortAdvertisement(port) {
|
|
117
145
|
const filePath = getPortFilePath(port);
|
|
118
146
|
try {
|
|
119
|
-
if (!existsSync(filePath))
|
|
147
|
+
if (!existsSync(filePath)) {
|
|
148
|
+
// Our file is gone but we are still running and still hold the port.
|
|
149
|
+
// Returning here (the old behaviour) left the process permanently
|
|
150
|
+
// unadvertised β and an unadvertised process holding a port is exactly
|
|
151
|
+
// what the orphan reaper terminates. Re-advertise instead so the state
|
|
152
|
+
// is self-healing rather than terminal. Guarded by ownsPort so we never
|
|
153
|
+
// resurrect a file for a port that has since been taken by someone else.
|
|
154
|
+
if (ownsPort(port))
|
|
155
|
+
advertisePort(port);
|
|
120
156
|
return;
|
|
157
|
+
}
|
|
121
158
|
const raw = readFileSync(filePath, 'utf-8');
|
|
122
159
|
const data = JSON.parse(raw);
|
|
123
160
|
// Only refresh our own port file
|
|
124
161
|
if (data.pid !== process.pid)
|
|
125
162
|
return;
|
|
126
163
|
data.lastSeen = new Date().toISOString();
|
|
127
|
-
|
|
164
|
+
writePortFileAtomic(filePath, data);
|
|
128
165
|
}
|
|
129
166
|
catch {
|
|
130
167
|
// Best-effort β heartbeat failures are non-fatal
|
|
131
168
|
}
|
|
132
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* Whether THIS process is the one that advertised `port` in this run.
|
|
172
|
+
* Tracked in-process rather than re-derived from the filesystem, because the
|
|
173
|
+
* filesystem is precisely the state we may be repairing.
|
|
174
|
+
*/
|
|
175
|
+
const advertisedPorts = new Set();
|
|
176
|
+
function ownsPort(port) {
|
|
177
|
+
return advertisedPorts.has(port);
|
|
178
|
+
}
|
|
133
179
|
/**
|
|
134
180
|
* Remove the port advertisement file for this instance.
|
|
135
181
|
* Call on clean shutdown.
|
|
136
182
|
*/
|
|
137
183
|
export function unadvertisePort(port) {
|
|
138
184
|
const filePath = getPortFilePath(port);
|
|
185
|
+
// Drop ownership first so a heartbeat racing this shutdown can't re-advertise
|
|
186
|
+
// the file we are deliberately removing.
|
|
187
|
+
advertisedPorts.delete(port);
|
|
139
188
|
try {
|
|
140
189
|
if (existsSync(filePath)) {
|
|
141
190
|
unlinkSync(filePath);
|
|
@@ -208,9 +257,20 @@ function isValidProbePort(port) {
|
|
|
208
257
|
/** curl arguments for the /health liveness probe against a sibling's port.
|
|
209
258
|
* `devNull` (not a literal /dev/null) β Windows ships curl.exe, and a bad
|
|
210
259
|
* output path there makes curl exit non-zero, which reads as "nothing
|
|
211
|
-
* responding" and would let the reaper kill a healthy sibling.
|
|
260
|
+
* responding" and would let the reaper kill a healthy sibling.
|
|
261
|
+
*
|
|
262
|
+
* The host MUST be `localhost`, not `127.0.0.1`. The WebSocket server binds
|
|
263
|
+
* `options.host || 'localhost'`, and on a dual-stack macOS box Node resolves
|
|
264
|
+
* that to the IPv6 loopback β `lsof` shows `[::1]:9223`, with nothing
|
|
265
|
+
* listening on IPv4. Probing `127.0.0.1` therefore returned connection-refused
|
|
266
|
+
* for every *healthy* server, which `probeServerHealth` maps to `false` =
|
|
267
|
+
* "confirmed dead". That inverted every kill-safety gate below: the probe that
|
|
268
|
+
* exists to spare live-but-stale siblings was instead rubber-stamping their
|
|
269
|
+
* termination. Verified live: on a working server, `127.0.0.1` gave curl exit
|
|
270
|
+
* 7 while `localhost` gave exit 0. `localhost` lets curl try every resolved
|
|
271
|
+
* address (both families), so it works regardless of which stack Node picked. */
|
|
212
272
|
function healthProbeArgs(port) {
|
|
213
|
-
return ['-s', '-o', devNull, '-m', '1', `http://
|
|
273
|
+
return ['-s', '-o', devNull, '-m', '1', `http://localhost:${port}/health`];
|
|
214
274
|
}
|
|
215
275
|
/**
|
|
216
276
|
* Liveness probe against a sibling server's HTTP `/health` endpoint (the
|
|
@@ -507,12 +567,14 @@ export function cleanupStalePortFiles() {
|
|
|
507
567
|
}
|
|
508
568
|
}
|
|
509
569
|
catch {
|
|
510
|
-
//
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
570
|
+
// Unreadable/unparseable β do NOT delete. A partial read of a file
|
|
571
|
+
// mid-rewrite is indistinguishable from genuine corruption, and
|
|
572
|
+
// deleting it strands a healthy server: it becomes a port-holder
|
|
573
|
+
// with no port file, which the orphan reaper terminates on sight.
|
|
574
|
+
// Writes are atomic now (writePortFileAtomic), so this should be
|
|
575
|
+
// unreachable in practice; leaving the file alone means the worst
|
|
576
|
+
// case is a stale file that the dead-PID branch reclaims later.
|
|
577
|
+
logger.debug({ filePath }, 'Unreadable port file β leaving in place');
|
|
516
578
|
}
|
|
517
579
|
}
|
|
518
580
|
}
|
|
@@ -574,12 +636,14 @@ export async function cleanupStalePortFilesAsync() {
|
|
|
574
636
|
}
|
|
575
637
|
}
|
|
576
638
|
catch {
|
|
577
|
-
//
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
639
|
+
// Unreadable/unparseable β do NOT delete. A partial read of a file
|
|
640
|
+
// mid-rewrite is indistinguishable from genuine corruption, and
|
|
641
|
+
// deleting it strands a healthy server: it becomes a port-holder
|
|
642
|
+
// with no port file, which the orphan reaper terminates on sight.
|
|
643
|
+
// Writes are atomic now (writePortFileAtomic), so this should be
|
|
644
|
+
// unreachable in practice; leaving the file alone means the worst
|
|
645
|
+
// case is a stale file that the dead-PID branch reclaims later.
|
|
646
|
+
logger.debug({ filePath }, 'Unreadable port file β leaving in place');
|
|
583
647
|
}
|
|
584
648
|
}
|
|
585
649
|
}
|
|
@@ -642,7 +706,14 @@ export function cleanupOrphanedProcesses(preferredPort = DEFAULT_WS_PORT, option
|
|
|
642
706
|
if (minAgeMs > 0 && ageMs !== null && ageMs < minAgeMs) {
|
|
643
707
|
continue;
|
|
644
708
|
}
|
|
645
|
-
|
|
709
|
+
// See the async path: a missing port file is not proof of death.
|
|
710
|
+
// Only a definitive probe failure authorises termination.
|
|
711
|
+
const health = probeServerHealth(port);
|
|
712
|
+
if (health !== false) {
|
|
713
|
+
logger.debug({ port, pid, probe: health === true ? 'responding' : 'inconclusive' }, 'Port-holder without a port file is still serving /health β skipping kill');
|
|
714
|
+
continue;
|
|
715
|
+
}
|
|
716
|
+
logger.info({ port, pid, command: cmdline.substring(0, 120) }, 'Terminating orphaned MCP server (no port file, holding port, health probe failed)');
|
|
646
717
|
// terminateProcess escalates SIGTERM -> SIGKILL. Only count it as
|
|
647
718
|
// cleaned when the process is confirmed gone, so the log reflects
|
|
648
719
|
// reality (the old code counted attempts and reported success even
|
|
@@ -758,7 +829,17 @@ export async function cleanupOrphanedProcessesAsync(preferredPort = DEFAULT_WS_P
|
|
|
758
829
|
if (minAgeMs > 0 && ageMs !== null && ageMs < minAgeMs) {
|
|
759
830
|
continue;
|
|
760
831
|
}
|
|
761
|
-
|
|
832
|
+
// A missing port file is not proof of death β it can also mean a
|
|
833
|
+
// transient read failure, or a file removed out from under a healthy
|
|
834
|
+
// server. Ask the server itself before killing it. Same verdict
|
|
835
|
+
// semantics as the stale-file path: only a definitive `false`
|
|
836
|
+
// (probe ran, nothing answered) authorises termination.
|
|
837
|
+
const health = await probeServerHealthAsync(port);
|
|
838
|
+
if (health !== false) {
|
|
839
|
+
logger.debug({ port, pid, probe: health === true ? 'responding' : 'inconclusive' }, 'Port-holder without a port file is still serving /health β re-advertising is its job, not ours; skipping kill');
|
|
840
|
+
continue;
|
|
841
|
+
}
|
|
842
|
+
logger.info({ port, pid, command: cmdline.substring(0, 120) }, 'Terminating orphaned MCP server (no port file, holding port, health probe failed)');
|
|
762
843
|
// Only count confirmed kills, matching the sync path.
|
|
763
844
|
if (await terminateProcessAsync(pid)) {
|
|
764
845
|
cleaned++;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"port-discovery.js","sourceRoot":"","sources":["../../src/core/port-discovery.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"port-discovery.js","sourceRoot":"","sources":["../../src/core/port-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,7 @@ const logger = createChildLogger({ component: "tokens-tools" });
|
|
|
35
35
|
* on every exported token document. Kept in sync with package.json by
|
|
36
36
|
* scripts/release.sh β see step 3 of the release flow.
|
|
37
37
|
*/
|
|
38
|
-
const MCP_VERSION = "1.38.
|
|
38
|
+
const MCP_VERSION = "1.38.2";
|
|
39
39
|
const EXPORT_TOOL_DESCRIPTION = `Export Figma variables to design token files in your codebase. Bidirectional with figma_import_tokens β together they replace Style Dictionary and Tokens Studio's export pipeline for the popular styling methods.
|
|
40
40
|
|
|
41
41
|
FULLY-IMPLEMENTED OUTPUT FORMATS:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "figma-console-mcp",
|
|
3
|
-
"version": "1.38.
|
|
3
|
+
"version": "1.38.2",
|
|
4
4
|
"description": "The most comprehensive MCP server for Figma β design tokens, variables, components, write tools, version history diff, accessibility audits, FigJam, Slides, and more. Local (WebSocket Desktop Bridge plugin) and Cloudflare Workers (paired + remote) modes.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/local.js",
|