@obra-studio/figma-console-mcp 1.32.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.
Files changed (354) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +879 -0
  3. package/dist/apps/design-system-dashboard/scoring/accessibility.d.ts +14 -0
  4. package/dist/apps/design-system-dashboard/scoring/accessibility.d.ts.map +1 -0
  5. package/dist/apps/design-system-dashboard/scoring/accessibility.js +278 -0
  6. package/dist/apps/design-system-dashboard/scoring/accessibility.js.map +1 -0
  7. package/dist/apps/design-system-dashboard/scoring/component-metadata.d.ts +29 -0
  8. package/dist/apps/design-system-dashboard/scoring/component-metadata.d.ts.map +1 -0
  9. package/dist/apps/design-system-dashboard/scoring/component-metadata.js +358 -0
  10. package/dist/apps/design-system-dashboard/scoring/component-metadata.js.map +1 -0
  11. package/dist/apps/design-system-dashboard/scoring/consistency.d.ts +14 -0
  12. package/dist/apps/design-system-dashboard/scoring/consistency.d.ts.map +1 -0
  13. package/dist/apps/design-system-dashboard/scoring/consistency.js +342 -0
  14. package/dist/apps/design-system-dashboard/scoring/consistency.js.map +1 -0
  15. package/dist/apps/design-system-dashboard/scoring/coverage.d.ts +14 -0
  16. package/dist/apps/design-system-dashboard/scoring/coverage.d.ts.map +1 -0
  17. package/dist/apps/design-system-dashboard/scoring/coverage.js +231 -0
  18. package/dist/apps/design-system-dashboard/scoring/coverage.js.map +1 -0
  19. package/dist/apps/design-system-dashboard/scoring/engine.d.ts +27 -0
  20. package/dist/apps/design-system-dashboard/scoring/engine.d.ts.map +1 -0
  21. package/dist/apps/design-system-dashboard/scoring/engine.js +93 -0
  22. package/dist/apps/design-system-dashboard/scoring/engine.js.map +1 -0
  23. package/dist/apps/design-system-dashboard/scoring/naming-semantics.d.ts +14 -0
  24. package/dist/apps/design-system-dashboard/scoring/naming-semantics.d.ts.map +1 -0
  25. package/dist/apps/design-system-dashboard/scoring/naming-semantics.js +309 -0
  26. package/dist/apps/design-system-dashboard/scoring/naming-semantics.js.map +1 -0
  27. package/dist/apps/design-system-dashboard/scoring/token-architecture.d.ts +14 -0
  28. package/dist/apps/design-system-dashboard/scoring/token-architecture.d.ts.map +1 -0
  29. package/dist/apps/design-system-dashboard/scoring/token-architecture.js +350 -0
  30. package/dist/apps/design-system-dashboard/scoring/token-architecture.js.map +1 -0
  31. package/dist/apps/design-system-dashboard/scoring/types.d.ts +89 -0
  32. package/dist/apps/design-system-dashboard/scoring/types.d.ts.map +1 -0
  33. package/dist/apps/design-system-dashboard/scoring/types.js +41 -0
  34. package/dist/apps/design-system-dashboard/scoring/types.js.map +1 -0
  35. package/dist/apps/design-system-dashboard/server.d.ts +24 -0
  36. package/dist/apps/design-system-dashboard/server.d.ts.map +1 -0
  37. package/dist/apps/design-system-dashboard/server.js +160 -0
  38. package/dist/apps/design-system-dashboard/server.js.map +1 -0
  39. package/dist/apps/token-browser/server.d.ts +26 -0
  40. package/dist/apps/token-browser/server.d.ts.map +1 -0
  41. package/dist/apps/token-browser/server.js +137 -0
  42. package/dist/apps/token-browser/server.js.map +1 -0
  43. package/dist/browser/base.d.ts +58 -0
  44. package/dist/browser/base.d.ts.map +1 -0
  45. package/dist/browser/base.js +6 -0
  46. package/dist/browser/base.js.map +1 -0
  47. package/dist/browser/local.d.ts +87 -0
  48. package/dist/browser/local.d.ts.map +1 -0
  49. package/dist/browser/local.js +318 -0
  50. package/dist/browser/local.js.map +1 -0
  51. package/dist/core/accessibility-tools.d.ts +21 -0
  52. package/dist/core/accessibility-tools.d.ts.map +1 -0
  53. package/dist/core/accessibility-tools.js +307 -0
  54. package/dist/core/accessibility-tools.js.map +1 -0
  55. package/dist/core/annotation-tools.d.ts +14 -0
  56. package/dist/core/annotation-tools.d.ts.map +1 -0
  57. package/dist/core/annotation-tools.js +231 -0
  58. package/dist/core/annotation-tools.js.map +1 -0
  59. package/dist/core/autodocs-tools.d.ts +7 -0
  60. package/dist/core/autodocs-tools.d.ts.map +1 -0
  61. package/dist/core/autodocs-tools.js +195 -0
  62. package/dist/core/autodocs-tools.js.map +1 -0
  63. package/dist/core/comment-tools.d.ts +11 -0
  64. package/dist/core/comment-tools.d.ts.map +1 -0
  65. package/dist/core/comment-tools.js +293 -0
  66. package/dist/core/comment-tools.js.map +1 -0
  67. package/dist/core/config.d.ts +17 -0
  68. package/dist/core/config.d.ts.map +1 -0
  69. package/dist/core/config.js +154 -0
  70. package/dist/core/config.js.map +1 -0
  71. package/dist/core/console-monitor.d.ts +82 -0
  72. package/dist/core/console-monitor.d.ts.map +1 -0
  73. package/dist/core/console-monitor.js +428 -0
  74. package/dist/core/console-monitor.js.map +1 -0
  75. package/dist/core/deep-component-tools.d.ts +14 -0
  76. package/dist/core/deep-component-tools.d.ts.map +1 -0
  77. package/dist/core/deep-component-tools.js +129 -0
  78. package/dist/core/deep-component-tools.js.map +1 -0
  79. package/dist/core/design-code-tools.d.ts +116 -0
  80. package/dist/core/design-code-tools.d.ts.map +1 -0
  81. package/dist/core/design-code-tools.js +2751 -0
  82. package/dist/core/design-code-tools.js.map +1 -0
  83. package/dist/core/design-system-manifest.d.ts +272 -0
  84. package/dist/core/design-system-manifest.d.ts.map +1 -0
  85. package/dist/core/design-system-manifest.js +261 -0
  86. package/dist/core/design-system-manifest.js.map +1 -0
  87. package/dist/core/design-system-tools.d.ts +67 -0
  88. package/dist/core/design-system-tools.d.ts.map +1 -0
  89. package/dist/core/design-system-tools.js +874 -0
  90. package/dist/core/design-system-tools.js.map +1 -0
  91. package/dist/core/diagnose-tool.d.ts +33 -0
  92. package/dist/core/diagnose-tool.d.ts.map +1 -0
  93. package/dist/core/diagnose-tool.js +97 -0
  94. package/dist/core/diagnose-tool.js.map +1 -0
  95. package/dist/core/diff/changelog-formatter.d.ts +35 -0
  96. package/dist/core/diff/changelog-formatter.d.ts.map +1 -0
  97. package/dist/core/diff/changelog-formatter.js +276 -0
  98. package/dist/core/diff/changelog-formatter.js.map +1 -0
  99. package/dist/core/diff/diff-engine.d.ts +127 -0
  100. package/dist/core/diff/diff-engine.d.ts.map +1 -0
  101. package/dist/core/diff/diff-engine.js +335 -0
  102. package/dist/core/diff/diff-engine.js.map +1 -0
  103. package/dist/core/diff/property-compare.d.ts +19 -0
  104. package/dist/core/diff/property-compare.d.ts.map +1 -0
  105. package/dist/core/diff/property-compare.js +37 -0
  106. package/dist/core/diff/property-compare.js.map +1 -0
  107. package/dist/core/diff/version-cache.d.ts +40 -0
  108. package/dist/core/diff/version-cache.d.ts.map +1 -0
  109. package/dist/core/diff/version-cache.js +75 -0
  110. package/dist/core/diff/version-cache.js.map +1 -0
  111. package/dist/core/enrichment/enrichment-service.d.ts +52 -0
  112. package/dist/core/enrichment/enrichment-service.d.ts.map +1 -0
  113. package/dist/core/enrichment/enrichment-service.js +369 -0
  114. package/dist/core/enrichment/enrichment-service.js.map +1 -0
  115. package/dist/core/enrichment/index.d.ts +8 -0
  116. package/dist/core/enrichment/index.d.ts.map +1 -0
  117. package/dist/core/enrichment/index.js +8 -0
  118. package/dist/core/enrichment/index.js.map +1 -0
  119. package/dist/core/enrichment/relationship-mapper.d.ts +106 -0
  120. package/dist/core/enrichment/relationship-mapper.d.ts.map +1 -0
  121. package/dist/core/enrichment/relationship-mapper.js +352 -0
  122. package/dist/core/enrichment/relationship-mapper.js.map +1 -0
  123. package/dist/core/enrichment/style-resolver.d.ts +80 -0
  124. package/dist/core/enrichment/style-resolver.d.ts.map +1 -0
  125. package/dist/core/enrichment/style-resolver.js +327 -0
  126. package/dist/core/enrichment/style-resolver.js.map +1 -0
  127. package/dist/core/figjam-tools.d.ts +8 -0
  128. package/dist/core/figjam-tools.d.ts.map +1 -0
  129. package/dist/core/figjam-tools.js +548 -0
  130. package/dist/core/figjam-tools.js.map +1 -0
  131. package/dist/core/figma-api.d.ts +245 -0
  132. package/dist/core/figma-api.d.ts.map +1 -0
  133. package/dist/core/figma-api.js +446 -0
  134. package/dist/core/figma-api.js.map +1 -0
  135. package/dist/core/figma-connector.d.ts +180 -0
  136. package/dist/core/figma-connector.d.ts.map +1 -0
  137. package/dist/core/figma-connector.js +8 -0
  138. package/dist/core/figma-connector.js.map +1 -0
  139. package/dist/core/figma-desktop-connector.d.ts +312 -0
  140. package/dist/core/figma-desktop-connector.d.ts.map +1 -0
  141. package/dist/core/figma-desktop-connector.js +1298 -0
  142. package/dist/core/figma-desktop-connector.js.map +1 -0
  143. package/dist/core/figma-reconstruction-spec.d.ts +166 -0
  144. package/dist/core/figma-reconstruction-spec.d.ts.map +1 -0
  145. package/dist/core/figma-reconstruction-spec.js +403 -0
  146. package/dist/core/figma-reconstruction-spec.js.map +1 -0
  147. package/dist/core/figma-style-extractor.d.ts +76 -0
  148. package/dist/core/figma-style-extractor.d.ts.map +1 -0
  149. package/dist/core/figma-style-extractor.js +312 -0
  150. package/dist/core/figma-style-extractor.js.map +1 -0
  151. package/dist/core/figma-tools.d.ts +22 -0
  152. package/dist/core/figma-tools.d.ts.map +1 -0
  153. package/dist/core/figma-tools.js +3187 -0
  154. package/dist/core/figma-tools.js.map +1 -0
  155. package/dist/core/identity.d.ts +41 -0
  156. package/dist/core/identity.d.ts.map +1 -0
  157. package/dist/core/identity.js +97 -0
  158. package/dist/core/identity.js.map +1 -0
  159. package/dist/core/library-tools.d.ts +17 -0
  160. package/dist/core/library-tools.d.ts.map +1 -0
  161. package/dist/core/library-tools.js +581 -0
  162. package/dist/core/library-tools.js.map +1 -0
  163. package/dist/core/logger.d.ts +22 -0
  164. package/dist/core/logger.d.ts.map +1 -0
  165. package/dist/core/logger.js +54 -0
  166. package/dist/core/logger.js.map +1 -0
  167. package/dist/core/port-discovery.d.ts +171 -0
  168. package/dist/core/port-discovery.d.ts.map +1 -0
  169. package/dist/core/port-discovery.js +563 -0
  170. package/dist/core/port-discovery.js.map +1 -0
  171. package/dist/core/resolve-package-root.d.ts +2 -0
  172. package/dist/core/resolve-package-root.d.ts.map +1 -0
  173. package/dist/core/resolve-package-root.js +12 -0
  174. package/dist/core/resolve-package-root.js.map +1 -0
  175. package/dist/core/slides-tools.d.ts +8 -0
  176. package/dist/core/slides-tools.d.ts.map +1 -0
  177. package/dist/core/slides-tools.js +715 -0
  178. package/dist/core/slides-tools.js.map +1 -0
  179. package/dist/core/snippet-injector.d.ts +24 -0
  180. package/dist/core/snippet-injector.d.ts.map +1 -0
  181. package/dist/core/snippet-injector.js +97 -0
  182. package/dist/core/snippet-injector.js.map +1 -0
  183. package/dist/core/tokens/alias-resolver.d.ts +55 -0
  184. package/dist/core/tokens/alias-resolver.d.ts.map +1 -0
  185. package/dist/core/tokens/alias-resolver.js +136 -0
  186. package/dist/core/tokens/alias-resolver.js.map +1 -0
  187. package/dist/core/tokens/config.d.ts +87 -0
  188. package/dist/core/tokens/config.d.ts.map +1 -0
  189. package/dist/core/tokens/config.js +285 -0
  190. package/dist/core/tokens/config.js.map +1 -0
  191. package/dist/core/tokens/figma-converter.d.ts +81 -0
  192. package/dist/core/tokens/figma-converter.d.ts.map +1 -0
  193. package/dist/core/tokens/figma-converter.js +196 -0
  194. package/dist/core/tokens/figma-converter.js.map +1 -0
  195. package/dist/core/tokens/formatters/css-vars.d.ts +24 -0
  196. package/dist/core/tokens/formatters/css-vars.d.ts.map +1 -0
  197. package/dist/core/tokens/formatters/css-vars.js +330 -0
  198. package/dist/core/tokens/formatters/css-vars.js.map +1 -0
  199. package/dist/core/tokens/formatters/dtcg.d.ts +28 -0
  200. package/dist/core/tokens/formatters/dtcg.d.ts.map +1 -0
  201. package/dist/core/tokens/formatters/dtcg.js +301 -0
  202. package/dist/core/tokens/formatters/dtcg.js.map +1 -0
  203. package/dist/core/tokens/formatters/index.d.ts +30 -0
  204. package/dist/core/tokens/formatters/index.d.ts.map +1 -0
  205. package/dist/core/tokens/formatters/index.js +46 -0
  206. package/dist/core/tokens/formatters/index.js.map +1 -0
  207. package/dist/core/tokens/formatters/json.d.ts +37 -0
  208. package/dist/core/tokens/formatters/json.d.ts.map +1 -0
  209. package/dist/core/tokens/formatters/json.js +188 -0
  210. package/dist/core/tokens/formatters/json.js.map +1 -0
  211. package/dist/core/tokens/formatters/less.d.ts +4 -0
  212. package/dist/core/tokens/formatters/less.d.ts.map +1 -0
  213. package/dist/core/tokens/formatters/less.js +5 -0
  214. package/dist/core/tokens/formatters/less.js.map +1 -0
  215. package/dist/core/tokens/formatters/scss.d.ts +26 -0
  216. package/dist/core/tokens/formatters/scss.d.ts.map +1 -0
  217. package/dist/core/tokens/formatters/scss.js +253 -0
  218. package/dist/core/tokens/formatters/scss.js.map +1 -0
  219. package/dist/core/tokens/formatters/stubs.d.ts +9 -0
  220. package/dist/core/tokens/formatters/stubs.d.ts.map +1 -0
  221. package/dist/core/tokens/formatters/stubs.js +14 -0
  222. package/dist/core/tokens/formatters/stubs.js.map +1 -0
  223. package/dist/core/tokens/formatters/style-dictionary-v3.d.ts +45 -0
  224. package/dist/core/tokens/formatters/style-dictionary-v3.d.ts.map +1 -0
  225. package/dist/core/tokens/formatters/style-dictionary-v3.js +208 -0
  226. package/dist/core/tokens/formatters/style-dictionary-v3.js.map +1 -0
  227. package/dist/core/tokens/formatters/tailwind-v3.d.ts +37 -0
  228. package/dist/core/tokens/formatters/tailwind-v3.d.ts.map +1 -0
  229. package/dist/core/tokens/formatters/tailwind-v3.js +238 -0
  230. package/dist/core/tokens/formatters/tailwind-v3.js.map +1 -0
  231. package/dist/core/tokens/formatters/tailwind-v4.d.ts +41 -0
  232. package/dist/core/tokens/formatters/tailwind-v4.d.ts.map +1 -0
  233. package/dist/core/tokens/formatters/tailwind-v4.js +331 -0
  234. package/dist/core/tokens/formatters/tailwind-v4.js.map +1 -0
  235. package/dist/core/tokens/formatters/tokens-studio.d.ts +44 -0
  236. package/dist/core/tokens/formatters/tokens-studio.d.ts.map +1 -0
  237. package/dist/core/tokens/formatters/tokens-studio.js +251 -0
  238. package/dist/core/tokens/formatters/tokens-studio.js.map +1 -0
  239. package/dist/core/tokens/formatters/ts-module.d.ts +35 -0
  240. package/dist/core/tokens/formatters/ts-module.d.ts.map +1 -0
  241. package/dist/core/tokens/formatters/ts-module.js +199 -0
  242. package/dist/core/tokens/formatters/ts-module.js.map +1 -0
  243. package/dist/core/tokens/index.d.ts +17 -0
  244. package/dist/core/tokens/index.d.ts.map +1 -0
  245. package/dist/core/tokens/index.js +16 -0
  246. package/dist/core/tokens/index.js.map +1 -0
  247. package/dist/core/tokens/parsers/css-vars.d.ts +3 -0
  248. package/dist/core/tokens/parsers/css-vars.d.ts.map +1 -0
  249. package/dist/core/tokens/parsers/css-vars.js +5 -0
  250. package/dist/core/tokens/parsers/css-vars.js.map +1 -0
  251. package/dist/core/tokens/parsers/dtcg.d.ts +21 -0
  252. package/dist/core/tokens/parsers/dtcg.d.ts.map +1 -0
  253. package/dist/core/tokens/parsers/dtcg.js +254 -0
  254. package/dist/core/tokens/parsers/dtcg.js.map +1 -0
  255. package/dist/core/tokens/parsers/index.d.ts +37 -0
  256. package/dist/core/tokens/parsers/index.d.ts.map +1 -0
  257. package/dist/core/tokens/parsers/index.js +139 -0
  258. package/dist/core/tokens/parsers/index.js.map +1 -0
  259. package/dist/core/tokens/parsers/json.d.ts +4 -0
  260. package/dist/core/tokens/parsers/json.d.ts.map +1 -0
  261. package/dist/core/tokens/parsers/json.js +8 -0
  262. package/dist/core/tokens/parsers/json.js.map +1 -0
  263. package/dist/core/tokens/parsers/scss.d.ts +3 -0
  264. package/dist/core/tokens/parsers/scss.d.ts.map +1 -0
  265. package/dist/core/tokens/parsers/scss.js +5 -0
  266. package/dist/core/tokens/parsers/scss.js.map +1 -0
  267. package/dist/core/tokens/parsers/stubs.d.ts +15 -0
  268. package/dist/core/tokens/parsers/stubs.d.ts.map +1 -0
  269. package/dist/core/tokens/parsers/stubs.js +21 -0
  270. package/dist/core/tokens/parsers/stubs.js.map +1 -0
  271. package/dist/core/tokens/parsers/style-dictionary-v3.d.ts +3 -0
  272. package/dist/core/tokens/parsers/style-dictionary-v3.d.ts.map +1 -0
  273. package/dist/core/tokens/parsers/style-dictionary-v3.js +5 -0
  274. package/dist/core/tokens/parsers/style-dictionary-v3.js.map +1 -0
  275. package/dist/core/tokens/parsers/tailwind-v3.d.ts +3 -0
  276. package/dist/core/tokens/parsers/tailwind-v3.d.ts.map +1 -0
  277. package/dist/core/tokens/parsers/tailwind-v3.js +5 -0
  278. package/dist/core/tokens/parsers/tailwind-v3.js.map +1 -0
  279. package/dist/core/tokens/parsers/tailwind-v4.d.ts +3 -0
  280. package/dist/core/tokens/parsers/tailwind-v4.d.ts.map +1 -0
  281. package/dist/core/tokens/parsers/tailwind-v4.js +5 -0
  282. package/dist/core/tokens/parsers/tailwind-v4.js.map +1 -0
  283. package/dist/core/tokens/parsers/tokens-studio.d.ts +3 -0
  284. package/dist/core/tokens/parsers/tokens-studio.d.ts.map +1 -0
  285. package/dist/core/tokens/parsers/tokens-studio.js +5 -0
  286. package/dist/core/tokens/parsers/tokens-studio.js.map +1 -0
  287. package/dist/core/tokens/schemas.d.ts +31 -0
  288. package/dist/core/tokens/schemas.d.ts.map +1 -0
  289. package/dist/core/tokens/schemas.js +149 -0
  290. package/dist/core/tokens/schemas.js.map +1 -0
  291. package/dist/core/tokens/transforms/color.d.ts +9 -0
  292. package/dist/core/tokens/transforms/color.d.ts.map +1 -0
  293. package/dist/core/tokens/transforms/color.js +13 -0
  294. package/dist/core/tokens/transforms/color.js.map +1 -0
  295. package/dist/core/tokens/transforms/index.d.ts +36 -0
  296. package/dist/core/tokens/transforms/index.d.ts.map +1 -0
  297. package/dist/core/tokens/transforms/index.js +30 -0
  298. package/dist/core/tokens/transforms/index.js.map +1 -0
  299. package/dist/core/tokens/transforms/size.d.ts +7 -0
  300. package/dist/core/tokens/transforms/size.d.ts.map +1 -0
  301. package/dist/core/tokens/transforms/size.js +8 -0
  302. package/dist/core/tokens/transforms/size.js.map +1 -0
  303. package/dist/core/tokens/types.d.ts +228 -0
  304. package/dist/core/tokens/types.d.ts.map +1 -0
  305. package/dist/core/tokens/types.js +19 -0
  306. package/dist/core/tokens/types.js.map +1 -0
  307. package/dist/core/tokens-tools.d.ts +42 -0
  308. package/dist/core/tokens-tools.d.ts.map +1 -0
  309. package/dist/core/tokens-tools.js +860 -0
  310. package/dist/core/tokens-tools.js.map +1 -0
  311. package/dist/core/types/design-code.d.ts +271 -0
  312. package/dist/core/types/design-code.d.ts.map +1 -0
  313. package/dist/core/types/design-code.js +5 -0
  314. package/dist/core/types/design-code.js.map +1 -0
  315. package/dist/core/types/enriched.d.ts +213 -0
  316. package/dist/core/types/enriched.d.ts.map +1 -0
  317. package/dist/core/types/enriched.js +6 -0
  318. package/dist/core/types/enriched.js.map +1 -0
  319. package/dist/core/types/index.d.ts +104 -0
  320. package/dist/core/types/index.d.ts.map +1 -0
  321. package/dist/core/types/index.js +5 -0
  322. package/dist/core/types/index.js.map +1 -0
  323. package/dist/core/variable-resolver.d.ts +45 -0
  324. package/dist/core/variable-resolver.d.ts.map +1 -0
  325. package/dist/core/variable-resolver.js +86 -0
  326. package/dist/core/variable-resolver.js.map +1 -0
  327. package/dist/core/version-tools.d.ts +59 -0
  328. package/dist/core/version-tools.d.ts.map +1 -0
  329. package/dist/core/version-tools.js +1159 -0
  330. package/dist/core/version-tools.js.map +1 -0
  331. package/dist/core/websocket-connector.d.ts +187 -0
  332. package/dist/core/websocket-connector.d.ts.map +1 -0
  333. package/dist/core/websocket-connector.js +378 -0
  334. package/dist/core/websocket-connector.js.map +1 -0
  335. package/dist/core/websocket-server.js +866 -0
  336. package/dist/core/websocket-server.js.map +1 -0
  337. package/dist/core/write-tools.d.ts +7 -0
  338. package/dist/core/write-tools.d.ts.map +1 -0
  339. package/dist/core/write-tools.js +2172 -0
  340. package/dist/core/write-tools.js.map +1 -0
  341. package/dist/local.d.ts +95 -0
  342. package/dist/local.d.ts.map +1 -0
  343. package/dist/local.js +3036 -0
  344. package/dist/local.js.map +1 -0
  345. package/dist/vendor/obra-autodocs/autodocs-body.generated.d.ts +2 -0
  346. package/dist/vendor/obra-autodocs/autodocs-body.generated.d.ts.map +1 -0
  347. package/dist/vendor/obra-autodocs/autodocs-body.generated.js +6 -0
  348. package/dist/vendor/obra-autodocs/autodocs-body.generated.js.map +1 -0
  349. package/figma-desktop-bridge/README.md +365 -0
  350. package/figma-desktop-bridge/code.js +6504 -0
  351. package/figma-desktop-bridge/icon.png +0 -0
  352. package/figma-desktop-bridge/manifest.json +67 -0
  353. package/figma-desktop-bridge/ui.html +2441 -0
  354. package/package.json +98 -0
package/README.md ADDED
@@ -0,0 +1,879 @@
1
+ # Figma Console MCP Server — Obra Autodocs fork
2
+
3
+ [![MCP](https://img.shields.io/badge/MCP-Compatible-blue)](https://modelcontextprotocol.io/)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+
6
+ > **This is an [Obra Studio](https://obra.studio) fork** of [`figma-console-mcp`](https://github.com/southleft/figma-console-mcp) by [Southleft](https://github.com/southleft) (MIT). It adds **Obra Autodocs** integration — `figma_generate_autodocs` / `figma_remove_autodocs` run the [Obra Autodocs](https://www.figma.com/community/plugin/1603778616137404487) generator from *inside* the Desktop Bridge sandbox, so you can document component-variant sets without switching plugins (which would drop the Bridge connection). Published as `@obra-studio/figma-console-mcp`. All original functionality and credit belong to Southleft.
7
+
8
+ > **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**.
9
+
10
+ > **🆕 The "not connected until restart" bug is fixed (v1.31.0):** The Desktop Bridge dropping its connection — and only recovering when you closed the plugin, restarted your MCP client, or killed ports by hand — was caused by **zombie MCP processes** squatting the WebSocket port range after a bad shutdown. v1.31.0 force-kills them (`SIGTERM` → `SIGKILL`), sweeps the range every 5 minutes, and adds a shutdown backstop so a server can't zombify in the first place. The plugin now reconnects itself (auto-reconnect watchdog + one-click **Reconnect** button) instead of needing a restart. **Update and re-import the plugin once** to get the fix. [See what's new →](CHANGELOG.md#1310---2026-06-05)
11
+
12
+ ## What is this?
13
+
14
+ Figma Console MCP connects AI assistants (like Claude) to Figma, enabling:
15
+
16
+ - **🎨 Design system extraction** - Pull variables, components, and styles
17
+ - **🔁 Bidirectional token sync** - Export Figma variables to DTCG JSON + CSS custom properties; push code-side edits back to Figma. Replaces Style Dictionary and Tokens Studio's export pipeline.
18
+ - **📸 Visual debugging** - Take screenshots for context
19
+ - **✏️ Design creation** - Create UI components, frames, and layouts directly in Figma
20
+ - **🔧 Variable management** - Create, update, rename, and delete design tokens
21
+ - **🕰 Version history & time-series awareness** - List versions, diff snapshots, generate markdown changelogs, trace property/variant introduction via binary-search blame
22
+ - **⚡ Real-time monitoring** - Watch console logs from the Desktop Bridge plugin
23
+ - **📌 FigJam boards** - Create stickies, flowcharts, tables, and code blocks on collaborative boards
24
+ - **🎞️ Slides presentations** - Build and manage Figma Slides decks programmatically
25
+ - **♿ Accessibility scanning** - 14 WCAG design checks with conformance level tagging, component scorecards, axe-core code scanning, design-to-code parity
26
+ - **🛡 Cross-MCP identity** - Every tool response carries `_mcp: "figma-console-mcp"` and errors are prefixed `[figma-console-mcp]` so attribution stays unambiguous in agents running multiple Figma MCPs
27
+ - **☁️ Cloud Write Relay** - Web AI clients (Claude.ai, v0, Replit) can design in Figma via cloud pairing
28
+ - **🔄 Four ways to connect** - Remote SSE, Cloud Mode, NPX, or Local Git
29
+
30
+ ---
31
+
32
+ ## ⚡ Quick Start
33
+
34
+ ### Choose Your Setup
35
+
36
+ **First, decide what you want to do:**
37
+
38
+ | I want to... | Setup Method | Time |
39
+ |--------------|--------------|------|
40
+ | **Create and modify designs with AI** | [NPX Setup](#-npx-setup-recommended) (Recommended) | ~10 min |
41
+ | **Design from the web** (Claude.ai, v0, Replit, Lovable) | [Cloud Mode](#-cloud-mode-web-ai-clients) | ~5 min |
42
+ | **Contribute to the project** | [Local Git Setup](#for-contributors-local-git-mode) | ~15 min |
43
+ | **Just explore my design data** (read-only) | [Remote SSE](#-remote-sse-read-only-exploration) | ~2 min |
44
+
45
+ ### ⚠️ Important: Capability Differences
46
+
47
+ | Capability | NPX / Local Git | Cloud Mode | Remote SSE |
48
+ |------------|-----------------|------------|------------|
49
+ | Read design data | ✅ | ✅ | ✅ |
50
+ | **Create components & frames** | ✅ | ✅ | ❌ |
51
+ | **Edit existing designs** | ✅ | ✅ | ❌ |
52
+ | **Manage design tokens/variables** | ✅ | ✅ | ❌ |
53
+ | **FigJam boards (stickies, flowcharts)** | ✅ | ✅ | ❌ |
54
+ | Real-time monitoring (console, selection) | ✅ | ❌ | ❌ |
55
+ | Desktop Bridge plugin | ✅ | ✅ | ❌ |
56
+ | Requires Node.js | Yes | **No** | No |
57
+ | **Total tools available** | **106** | **95** | **9** |
58
+
59
+ > **Bottom line:** Remote SSE is **read-only** with ~38% of the tools. **Cloud Mode** unlocks write access from web AI clients without Node.js. NPX/Local Git gives the full 106 tools with real-time monitoring.
60
+
61
+ ---
62
+
63
+ ### 🚀 NPX Setup (Recommended)
64
+
65
+ **Best for:** Designers who want full AI-assisted design capabilities.
66
+
67
+ **What you get:** All 106 tools including design creation, variable management, and component instantiation.
68
+
69
+ #### Prerequisites
70
+
71
+ - [ ] **Node.js 18+** — Check with `node --version` ([Download](https://nodejs.org))
72
+ - [ ] **Figma Desktop** installed (not just the web app)
73
+ - [ ] **An MCP client** (Claude Code, Cursor, Windsurf, Claude Desktop, etc.)
74
+
75
+ #### Step 1: Get Your Figma Token
76
+
77
+ 1. Go to [Manage personal access tokens](https://help.figma.com/hc/en-us/articles/8085703771159-Manage-personal-access-tokens) in Figma Help
78
+ 2. Follow the steps to **create a new personal access token**
79
+ 3. Enter description: `Figma Console MCP`
80
+ 4. Set scopes: **File content** (Read), **File versions** (Read), **Variables** (Read), **Comments** (Read and write)
81
+ 5. **Copy the token** — you won't see it again! (starts with `figd_`)
82
+
83
+ #### Step 2: Configure Your MCP Client
84
+
85
+ **Claude Code (CLI):**
86
+ ```bash
87
+ claude mcp add figma-console -s user -e FIGMA_ACCESS_TOKEN=figd_YOUR_TOKEN_HERE -e ENABLE_MCP_APPS=true -- npx -y figma-console-mcp@latest
88
+ ```
89
+
90
+ **Cursor / Windsurf / Claude Desktop:**
91
+
92
+ Add to your MCP config file (see [Where to find your config file](#-where-to-find-your-config-file) below):
93
+
94
+ ```json
95
+ {
96
+ "mcpServers": {
97
+ "figma-console": {
98
+ "command": "npx",
99
+ "args": ["-y", "figma-console-mcp@latest"],
100
+ "env": {
101
+ "FIGMA_ACCESS_TOKEN": "figd_YOUR_TOKEN_HERE",
102
+ "ENABLE_MCP_APPS": "true"
103
+ }
104
+ }
105
+ }
106
+ }
107
+ ```
108
+
109
+ #### 📂 Where to Find Your Config File
110
+
111
+ If you're not sure where to put the JSON configuration above, here's where each app stores its MCP config:
112
+
113
+ | App | macOS | Windows |
114
+ |-----|-------|---------|
115
+ | **Claude Desktop** | `~/Library/Application Support/Claude/claude_desktop_config.json` | `%APPDATA%\Claude\claude_desktop_config.json` |
116
+ | **Claude Code (CLI)** | `~/.claude.json` | `%USERPROFILE%\.claude.json` |
117
+ | **Cursor** | `~/.cursor/mcp.json` | `%USERPROFILE%\.cursor\mcp.json` |
118
+ | **Windsurf** | `~/.codeium/windsurf/mcp_config.json` | `%USERPROFILE%\.codeium\windsurf\mcp_config.json` |
119
+
120
+ > **Tip for designers:** The `~` symbol means your **home folder**. On macOS, that's `/Users/YourName/`. On Windows, it's `C:\Users\YourName\`. You can open these files in any text editor — even TextEdit or Notepad.
121
+ >
122
+ > **Can't find the file?** If it doesn't exist yet, create it. The app will pick it up on its next restart. Make sure the entire file is valid JSON (watch for missing commas or brackets).
123
+ >
124
+ > **Claude Code users:** You can skip manual editing entirely. Just run the `claude mcp add` command above and it handles everything for you.
125
+
126
+ #### Step 3: Connect to Figma Desktop
127
+
128
+ **Desktop Bridge Plugin:**
129
+ 1. Open Figma Desktop normally (no special flags needed) and open a file
130
+ 2. Go to **Plugins → Development → Import plugin from manifest...**
131
+ 3. Select `~/.figma-console-mcp/plugin/manifest.json` (stable path, auto-created by the MCP server)
132
+ 4. Run the plugin in your Figma file — it scans ports 9223–9232 and connects automatically to your running MCP server
133
+
134
+ > **Heads-up on plugin updates.** Figma caches plugin files (`code.js` and `ui.html`) at the application level. The MCP server refreshes the files at `~/.figma-console-mcp/plugin/` on every startup, but Figma keeps using its cached copy until you re-import the manifest.
135
+ >
136
+ > **Re-importing is _required_ only when a release notes entry says so** — typically when the plugin adds a new method the server needs (e.g. v1.22.4, v1.10.0). For most upgrades the new server stays wire-compatible with the previous plugin, and re-importing is **optional**: you'll still get every functional change, just not the cosmetic plugin-side touches (status-pill copy, `pluginVersion` reporting).
137
+ >
138
+ > When you do re-import: Plugins → Manage plugins → re-import `~/.figma-console-mcp/plugin/manifest.json`. The stable path never changes, so it's a one-click step.
139
+
140
+ #### Step 4: Restart Your MCP Client
141
+
142
+ Restart your MCP client to load the new configuration.
143
+
144
+ #### Step 5: Test It!
145
+
146
+ ```
147
+ Check Figma status
148
+ ```
149
+ → Should show connection status with active WebSocket transport
150
+
151
+ ```
152
+ Create a simple frame with a blue background
153
+ ```
154
+ → Should create a frame in Figma (confirms write access!)
155
+
156
+ **📖 [Complete Setup Guide](docs/setup.md)**
157
+
158
+ ---
159
+
160
+ ### For Contributors: Local Git Mode
161
+
162
+ **Best for:** Developers who want to modify source code or contribute to the project.
163
+
164
+ **What you get:** Same 106 tools as NPX, plus full source code access.
165
+
166
+ #### Quick Setup
167
+
168
+ ```bash
169
+ # Clone and build
170
+ git clone https://github.com/southleft/figma-console-mcp.git
171
+ cd figma-console-mcp
172
+ npm install
173
+ npm run build:local
174
+ ```
175
+
176
+ #### Configure Your MCP Client
177
+
178
+ Add to your config file (see [Where to find your config file](#-where-to-find-your-config-file)):
179
+
180
+ ```json
181
+ {
182
+ "mcpServers": {
183
+ "figma-console": {
184
+ "command": "node",
185
+ "args": ["/absolute/path/to/figma-console-mcp/dist/local.js"],
186
+ "env": {
187
+ "FIGMA_ACCESS_TOKEN": "figd_YOUR_TOKEN_HERE",
188
+ "ENABLE_MCP_APPS": "true"
189
+ }
190
+ }
191
+ }
192
+ }
193
+ ```
194
+
195
+ Then follow [NPX Steps 3-5](#step-3-connect-to-figma-desktop) above.
196
+
197
+ **📖 [Complete Setup Guide](docs/setup.md)**
198
+
199
+ ---
200
+
201
+ ### 📡 Remote SSE (Read-Only Exploration)
202
+
203
+ **Best for:** Quickly evaluating the tool or read-only design data extraction.
204
+
205
+ **What you get:** 9 read-only tools — view data, take screenshots, read logs, design-code parity. **Cannot create or modify designs.**
206
+
207
+ #### Claude Desktop (UI Method)
208
+
209
+ 1. Open Claude Desktop → **Settings** → **Connectors**
210
+ 2. Click **"Add Custom Connector"**
211
+ 3. Enter:
212
+ - **Name:** `Figma Console (Read-Only)`
213
+ - **URL:** `https://figma-console-mcp.southleft.com/sse`
214
+ 4. Click **"Add"** — Done! ✅
215
+
216
+ OAuth authentication happens automatically when you first use design system tools.
217
+
218
+ #### Claude Code
219
+
220
+ > **⚠️ Known Issue:** Claude Code's native `--transport sse` has a [bug](https://github.com/anthropics/claude-code/issues/2466). Use `mcp-remote` instead:
221
+
222
+ ```bash
223
+ claude mcp add figma-console -s user -- npx -y mcp-remote@latest https://figma-console-mcp.southleft.com/sse
224
+ ```
225
+
226
+ **💡 Tip:** For full capabilities, use [NPX Setup](#-npx-setup-recommended) instead of Remote SSE.
227
+
228
+ #### Other Clients (Cursor, Windsurf, etc.)
229
+
230
+ ```json
231
+ {
232
+ "mcpServers": {
233
+ "figma-console": {
234
+ "command": "npx",
235
+ "args": ["-y", "mcp-remote", "https://figma-console-mcp.southleft.com/sse"]
236
+ }
237
+ }
238
+ }
239
+ ```
240
+
241
+ #### Upgrading to Full Capabilities
242
+
243
+ Ready for design creation? Follow the [NPX Setup](#-npx-setup-recommended) guide above, or try [Cloud Mode](#-cloud-mode-web-ai-clients) if you don't want to install Node.js.
244
+
245
+ **📖 [Complete Setup Guide](docs/setup.md)**
246
+
247
+ ---
248
+
249
+ ### ☁️ Cloud Mode (Web AI Clients)
250
+
251
+ **Best for:** Using Claude.ai, v0, Replit, or Lovable to create and modify Figma designs — no Node.js required.
252
+
253
+ **What you get:** 95 tools including full write access — design creation, variable management, component instantiation, and all REST API tools. Only real-time monitoring (console logs, selection tracking, document changes) requires Local Mode.
254
+
255
+ #### Prerequisites
256
+
257
+ - [ ] **Figma Personal Access Token** — [Create one here](https://help.figma.com/hc/en-us/articles/8085703771159-Manage-personal-access-tokens) (starts with `figd_`)
258
+ - [ ] **Figma Desktop** with the Desktop Bridge plugin installed (see [Desktop Bridge setup](#step-3-connect-to-figma-desktop))
259
+ - [ ] **A web AI client** that supports MCP (Claude.ai, Lovable, v0, Replit, etc.)
260
+
261
+ #### Step 1: Add the MCP Connector
262
+
263
+ Add this endpoint to your AI platform's MCP settings:
264
+
265
+ **URL:** `https://figma-console-mcp.southleft.com/mcp`
266
+ **Auth:** Your Figma PAT as Bearer token
267
+
268
+ In **Claude.ai**: Settings → Connectors → Add Custom Connector → paste the URL above.
269
+ In **Lovable/v0/Replit**: Look for "Add MCP Server" or "Integrations" in settings → paste the URL and add your token.
270
+
271
+ #### Step 2: Pair the Plugin
272
+
273
+ 1. **Open the Desktop Bridge plugin** in Figma Desktop (Plugins → Development → Figma Desktop Bridge)
274
+ 2. **Tell your AI assistant:**
275
+ ```
276
+ Connect to my Figma plugin
277
+ ```
278
+ 3. **The AI gives you a 6-character pairing code** (expires in 5 minutes)
279
+ 4. **In the plugin:** Toggle "Cloud Mode" → enter the code → click Connect
280
+ 5. **You're paired!** Full write access is now available
281
+
282
+ #### What You Can Do
283
+
284
+ Once paired, use natural language to design:
285
+ ```
286
+ Create a card component with a header image, title, description, and action button
287
+ Set up a color token collection with Light and Dark modes
288
+ Add a "High Contrast" mode to my existing token collection
289
+ ```
290
+
291
+ #### How It Works
292
+
293
+ Your AI client sends write commands through the cloud MCP server, which relays them via WebSocket to the Desktop Bridge plugin running in your Figma Desktop. The plugin executes the commands using the Figma Plugin API and returns results back through the same path.
294
+
295
+ ```
296
+ AI Client → Cloud MCP Server → Durable Object Relay → Desktop Bridge Plugin → Figma
297
+ ```
298
+
299
+ > **Variables on any plan:** Cloud Mode uses the Plugin API (not the Enterprise REST API), so variable management works on Free, Pro, and Organization plans.
300
+
301
+ **📖 [Complete Setup Guide](docs/setup.md)**
302
+
303
+ ---
304
+
305
+ ## 📊 Installation Method Comparison
306
+
307
+ | Feature | NPX (Recommended) | Cloud Mode | Local Git | Remote SSE |
308
+ |---------|-------------------|------------|-----------|------------|
309
+ | **Setup time** | ~10 minutes | ~5 minutes | ~15 minutes | ~2 minutes |
310
+ | **Total tools** | **106** | **95** | **106** | **9** (read-only) |
311
+ | **Design creation** | ✅ | ✅ | ✅ | ❌ |
312
+ | **Variable management** | ✅ | ✅ | ✅ | ❌ |
313
+ | **Component instantiation** | ✅ | ✅ | ✅ | ❌ |
314
+ | **FigJam boards** | ✅ | ✅ | ✅ | ❌ |
315
+ | **Real-time monitoring** | ✅ | ❌ | ✅ | ❌ |
316
+ | **Desktop Bridge plugin** | ✅ | ✅ | ✅ | ❌ |
317
+ | **Variables (no Enterprise)** | ✅ | ✅ | ✅ | ❌ |
318
+ | **Console logs** | ✅ (zero latency) | ❌ | ✅ (zero latency) | ✅ |
319
+ | **Read design data** | ✅ | ✅ | ✅ | ✅ |
320
+ | **Requires Node.js** | Yes | **No** | Yes | No |
321
+ | **Authentication** | PAT (manual) | OAuth (automatic) | PAT (manual) | OAuth (automatic) |
322
+ | **Automatic updates** | ✅ (`@latest`) | ✅ | Manual (`git pull`) | ✅ |
323
+ | **Source code access** | ❌ | ❌ | ✅ | ❌ |
324
+
325
+ > **Key insight:** Remote SSE is read-only. Cloud Mode adds write access for web AI clients without Node.js. NPX/Local Git give the full 106 tools.
326
+
327
+ **📖 [Complete Feature Comparison](docs/mode-comparison.md)**
328
+
329
+ ---
330
+
331
+ ## 🎯 Test Your Connection
332
+
333
+ After setup, try these prompts:
334
+
335
+ **Basic test (all modes):**
336
+ ```
337
+ Navigate to https://www.figma.com and check status
338
+ ```
339
+
340
+ **Design system test (requires auth):**
341
+ ```
342
+ Get design variables from [your Figma file URL]
343
+ ```
344
+
345
+ **Cloud Mode test:**
346
+ ```
347
+ Connect to my Figma plugin
348
+ ```
349
+ → Follow the pairing flow, then try: "Create a simple blue rectangle"
350
+
351
+ **Plugin test (Local Mode only):**
352
+ ```
353
+ Show me the primary font for [your theme name]
354
+ ```
355
+
356
+ ---
357
+
358
+ ## 🔐 Authentication
359
+
360
+ ### Remote Mode - OAuth (Automatic)
361
+
362
+ When you first use design system tools:
363
+ 1. Browser opens automatically to Figma authorization page
364
+ 2. Click "Allow" to authorize (one-time)
365
+ 3. Token stored securely and refreshed automatically
366
+ 4. Works with Free, Pro, and Enterprise Figma plans
367
+
368
+ ### Local Mode - Personal Access Token (Manual)
369
+
370
+ 1. Visit https://help.figma.com/hc/en-us/articles/8085703771159-Manage-personal-access-tokens
371
+ 2. Generate token with scopes: **File content** (Read), **File versions** (Read), **Variables** (Read), **Comments** (Read and write)
372
+ 3. Add to MCP config as `FIGMA_ACCESS_TOKEN` environment variable
373
+
374
+ ---
375
+
376
+ ## 🛠️ Available Tools
377
+
378
+ ### Status & Diagnostics
379
+ - `figma_get_status` - Check WebSocket bridge connection and file context
380
+ - `figma_diagnose` - Designer-readable health check + setup guidance
381
+ - `figma_reconnect` - Force reconnect to the Desktop Bridge plugin
382
+ - `figma_navigate` - Switch the active file target among connected plugins (Local), or navigate the cloud headless browser (Remote/Cloud)
383
+
384
+ ### Console Debugging
385
+ - `figma_get_console_logs` - Retrieve console logs
386
+ - `figma_watch_console` - Real-time log streaming
387
+ - `figma_clear_console` - Clear log buffer
388
+ - `figma_reload_plugin` - Reload current page
389
+
390
+ ### Visual Debugging
391
+ - `figma_take_screenshot` - Capture UI screenshots
392
+
393
+ ### Design System Extraction
394
+ - `figma_get_design_system_kit` - **Full design system in one call** — tokens, components, styles, visual specs
395
+ - `figma_get_variables` - Extract design tokens/variables
396
+ - `figma_get_component` - Get component data (metadata or reconstruction spec)
397
+ - `figma_get_component_for_development` - Component + image
398
+ - `figma_get_component_image` - Just the image
399
+ - `figma_get_styles` - Color, text, effect styles
400
+ - `figma_get_file_data` - Full file structure
401
+ - `figma_get_file_for_plugin` - Optimized file data
402
+
403
+ ### 📚 Shared Library Inspection
404
+ - `figma_get_library_component_by_key` - **Resolve any component key to full properties + variants + visual specs** — without needing the source library file's URL. Works for both COMPONENT_SET and standalone COMPONENT keys. Adaptive compression at >500KB.
405
+ - `figma_get_library_components` - Discover all components in a library file (requires library file URL/key)
406
+ - `figma_get_library_variables` - List every variable from team libraries the current file has subscribed. **Works on every Figma plan** — uses the Plugin API path, not the Enterprise-only REST endpoint. Filter by `libraryName`, `collectionName`, or `resolvedType`.
407
+ - `figma_import_library_variable` - Import a library variable into the current file. Returns a local `id` ready to pass to `figma_set_fills` / `figma_update_variable` / any variable-binding tool.
408
+
409
+ ### ☁️ Cloud Relay
410
+ - `figma_pair_plugin` - Generate a pairing code to connect a Desktop Bridge plugin via the cloud relay
411
+
412
+ ### ✏️ Design Creation (Local Mode + Cloud Mode)
413
+ - `figma_execute` - **Power tool**: Run any Figma Plugin API code to create designs
414
+ - Create frames, shapes, text, components
415
+ - Apply auto-layout, styles, effects
416
+ - Build complete UI mockups programmatically
417
+ - `figma_arrange_component_set` - **Organize variants into professional component sets**
418
+ - Convert multiple component variants into a proper Figma component set
419
+ - Applies native purple dashed border visualization automatically
420
+ - Creates white container frame with title, row labels, and column headers
421
+ - Row labels vertically centered with each grid row
422
+ - Column headers horizontally centered with each column
423
+ - Use natural language like "arrange these variants" or "organize as component set"
424
+ - `figma_set_description` - **Document components with rich descriptions**
425
+ - Add descriptions to components, component sets, and styles
426
+ - Supports markdown formatting for rich documentation
427
+ - Descriptions appear in Dev Mode for developers
428
+
429
+ ### 🔍 Design-Code Parity (All Modes)
430
+ - `figma_check_design_parity` - Compare Figma component specs against code implementation, producing a scored diff report with actionable fix items
431
+ - `figma_generate_component_doc` - Generate platform-agnostic markdown documentation by merging Figma design data with code-side info
432
+
433
+ ### 🔁 Token Sync (Local Mode + Cloud Mode)
434
+ - `figma_export_tokens` - **Export Figma variables to design token files in your codebase.** Canonical DTCG JSON + CSS custom properties out of the box. Diff-aware merge against existing source files (only writes what changed). `tokens.config.json` autodiscovery means zero-arg calls after first setup. Replaces Style Dictionary and Tokens Studio's export pipeline for popular styling methods.
435
+ - `figma_import_tokens` - **Push code-side token edits back to Figma.** Diff against current Figma state, apply only the deltas. Round-trip safe — Figma variable IDs preserved in DTCG `$extensions["figma-console-mcp"]` so renames on either side don't create duplicates. Dry-run default for safety. In Cloud Mode, pass tokens inline via `payload` or `files` (no local filesystem access).
436
+
437
+ ### 🔧 Variable Management (Local Mode + Cloud Mode)
438
+ - `figma_create_variable_collection` - Create new variable collections with modes
439
+ - `figma_create_variable` - Create COLOR, FLOAT, STRING, or BOOLEAN variables
440
+ - `figma_update_variable` - Update variable values in specific modes
441
+ - `figma_rename_variable` - Rename variables while preserving values
442
+ - `figma_delete_variable` - Delete variables
443
+ - `figma_delete_variable_collection` - Delete collections and all their variables
444
+ - `figma_add_mode` - Add modes to collections (e.g., "Dark", "Mobile")
445
+ - `figma_rename_mode` - Rename existing modes
446
+ - `figma_batch_create_variables` - Create up to 100 variables in one call (10-50x faster)
447
+ - `figma_batch_update_variables` - Update up to 100 variable values in one call
448
+ - `figma_setup_design_tokens` - Create complete token system (collection + modes + variables) atomically
449
+
450
+ ### 📌 FigJam Board Tools (Local Mode + Cloud Mode)
451
+ - `figjam_create_sticky` - Create a sticky note with color options
452
+ - `figjam_create_stickies` - Batch create up to 200 stickies
453
+ - `figjam_create_connector` - Connect nodes with labeled connector lines
454
+ - `figjam_create_shape_with_text` - Create flowchart shapes (diamond, ellipse, etc.)
455
+ - `figjam_create_table` - Create tables with cell data
456
+ - `figjam_create_code_block` - Add code snippets with syntax highlighting
457
+ - `figjam_auto_arrange` - Arrange nodes in grid, horizontal, or vertical layouts
458
+ - `figjam_get_board_contents` - Read all content from a FigJam board
459
+ - `figjam_get_connections` - Read the connection graph (flowcharts, relationships)
460
+
461
+ ### 🎞️ Slides Presentation Tools (Local Mode + Cloud Mode)
462
+ - `figma_list_slides` - List all slides with IDs, positions, and skip status
463
+ - `figma_get_slide_content` - Get the full content tree of a slide
464
+ - `figma_get_slide_grid` - Get the 2D grid layout of the presentation
465
+ - `figma_get_slide_transition` - Read transition settings for a slide
466
+ - `figma_get_focused_slide` - Get the currently focused slide
467
+ - `figma_create_slide` - Create a new blank slide
468
+ - `figma_delete_slide` - Delete a slide from the presentation
469
+ - `figma_duplicate_slide` - Clone an existing slide
470
+ - `figma_reorder_slides` - Reorder slides via new 2D grid layout
471
+ - `figma_set_slide_transition` - Set transition effects (22 styles, 8 curves)
472
+ - `figma_skip_slide` - Toggle whether a slide is skipped in presentation mode
473
+ - `figma_add_text_to_slide` - Add text to a slide with custom fonts, colors, alignment, and wrapping
474
+ - `figma_add_shape_to_slide` - Add rectangle or ellipse shapes with color
475
+ - `figma_set_slide_background` - Set a slide's background color (creates or updates)
476
+ - `figma_get_text_styles` - Get all local text styles with IDs, fonts, and sizes
477
+ - `figma_set_slides_view_mode` - Toggle grid vs. single-slide view
478
+ - `figma_focus_slide` - Navigate to a specific slide
479
+
480
+ **📖 [Detailed Tool Documentation](docs/TOOLS.md)**
481
+
482
+ ---
483
+
484
+ ## 📖 Example Prompts
485
+
486
+ ### Cloud Mode (Web AI Clients)
487
+ ```
488
+ Connect to my Figma plugin so we can start designing
489
+ Pair with my Figma file and create a login form with email, password, and submit button
490
+ Set up a brand color token collection with Light and Dark modes
491
+ ```
492
+
493
+ ### Plugin Debugging
494
+ ```
495
+ Navigate to my Figma plugin and show me any console errors
496
+ Watch the console for 30 seconds while I test my plugin
497
+ Get the last 20 console logs
498
+ ```
499
+
500
+ ### Design System Extraction
501
+ ```
502
+ Get all design variables from https://figma.com/design/abc123
503
+ Extract color styles and show me the CSS exports
504
+ Get the Button component with a visual reference image
505
+ Get the Badge component in reconstruction format for programmatic creation
506
+ ```
507
+
508
+ ### Design Creation (Local Mode + Cloud Mode)
509
+ ```
510
+ Create a success notification card with a checkmark icon and message
511
+ Design a button component with hover and disabled states
512
+ Build a navigation bar with logo, menu items, and user avatar
513
+ Create a modal dialog with header, content area, and action buttons
514
+ Arrange these button variants into a component set
515
+ Organize my icon variants as a proper component set with the purple border
516
+ ```
517
+
518
+ ### Variable Management (Local Mode + Cloud Mode)
519
+ ```
520
+ Create a new color collection called "Brand Colors" with Light and Dark modes
521
+ Add a primary color variable with value #3B82F6 for Light and #60A5FA for Dark
522
+ Rename the "Default" mode to "Light Theme"
523
+ Add a "High Contrast" mode to the existing collection
524
+ ```
525
+
526
+ ### Design-Code Parity
527
+ ```
528
+ Compare the Button component in Figma against our React implementation
529
+ Check design parity for the Card component before sign-off
530
+ Generate component documentation for the Dialog from our design system
531
+ ```
532
+
533
+ ### FigJam Boards
534
+ ```
535
+ Create a retrospective board with "Went Well", "To Improve", and "Action Items" columns
536
+ Build a user flow diagram for the checkout process with decision points
537
+ Read this brainstorming board and summarize the key themes
538
+ Generate an affinity map from these meeting notes
539
+ Create a comparison table of our three platform options
540
+ ```
541
+
542
+ ### Slides Presentations
543
+ ```
544
+ List all slides and tell me which ones are skipped
545
+ Add a new slide with the title "Thank You" in 72px text
546
+ Set a DISSOLVE transition on the first slide with 0.5 second duration
547
+ Duplicate slide 5 for an A/B comparison
548
+ Skip slides 8 and 9 — they're not ready for the client presentation
549
+ Reorder my slides so the conclusion comes before Q&A
550
+ ```
551
+
552
+ ### Visual Debugging
553
+ ```
554
+ Take a screenshot of the current Figma canvas
555
+ Navigate to this file and capture what's on screen
556
+ ```
557
+
558
+ **📖 [More Use Cases & Examples](docs/USE_CASES.md)**
559
+
560
+ ---
561
+
562
+ ## 🎨 AI-Assisted Design Creation
563
+
564
+ > **Requires Desktop Bridge:** This feature works with Local Mode (NPX or Local Git) and [Cloud Mode](#-cloud-mode-web-ai-clients). Remote SSE without Cloud Mode pairing is read-only and cannot create or modify designs.
565
+
566
+ One of the most powerful capabilities of this MCP server is the ability to **design complete UI components and pages directly in Figma through natural language conversation** with any MCP-compatible AI assistant like Claude Desktop or Claude Code.
567
+
568
+ ### What's Possible
569
+
570
+ **Create original designs from scratch:**
571
+ ```
572
+ Design a login card with email and password fields, a "Forgot password?" link,
573
+ and a primary Sign In button. Use 32px padding, 16px border radius, and subtle shadow.
574
+ ```
575
+
576
+ **Leverage existing component libraries:**
577
+ ```
578
+ Build a dashboard header using the Avatar component for the user profile,
579
+ Button components for actions, and Badge components for notifications.
580
+ ```
581
+
582
+ **Generate complete page layouts:**
583
+ ```
584
+ Create a settings page with a sidebar navigation, a main content area with form fields,
585
+ and a sticky footer with Save and Cancel buttons.
586
+ ```
587
+
588
+ ### How It Works
589
+
590
+ 1. **You describe what you want** in plain English
591
+ 2. **The AI searches your component library** using `figma_search_components` to find relevant building blocks
592
+ 3. **Components are instantiated** with proper variants and properties via `figma_instantiate_component`
593
+ 4. **Custom elements are created** using the full Figma Plugin API via `figma_execute`
594
+ 5. **Visual validation** automatically captures screenshots and iterates until the design looks right
595
+
596
+ ### Who Benefits
597
+
598
+ | Role | Use Case |
599
+ |------|----------|
600
+ | **Designers** | Rapidly prototype ideas without manual frame-by-frame construction. Explore variations quickly by describing changes. |
601
+ | **Developers** | Generate UI mockups during planning discussions. Create visual specs without switching to design tools. |
602
+ | **Product Managers** | Sketch out feature concepts during ideation. Communicate visual requirements directly to stakeholders. |
603
+ | **Design System Teams** | Test component flexibility by generating compositions. Identify gaps in component coverage. |
604
+ | **Agencies** | Speed up initial concept delivery. Iterate on client feedback in real-time during calls. |
605
+
606
+ ### Example Workflows
607
+
608
+ **Brand New Design:**
609
+ > "Create a notification toast with an icon on the left, title and description text, and a dismiss button. Use our brand colors."
610
+
611
+ The AI creates custom frames, applies your design tokens, and builds the component from scratch.
612
+
613
+ **Component Composition:**
614
+ > "Build a user profile card using the Avatar component (large size), two Button components (Edit Profile and Settings), and a Badge for the user's status."
615
+
616
+ The AI searches your library, finds the exact components, and assembles them with proper spacing and alignment.
617
+
618
+ **Design Iteration:**
619
+ > "The spacing feels too tight. Increase the gap between sections to 24px and make the heading larger."
620
+
621
+ The AI modifies the existing design, takes a screenshot to verify, and continues iterating until you're satisfied.
622
+
623
+ ### Visual Validation
624
+
625
+ The AI automatically follows a validation workflow after creating designs:
626
+
627
+ 1. **Create** → Execute the design code
628
+ 2. **Screenshot** → Capture the result
629
+ 3. **Analyze** → Check alignment, spacing, and visual balance
630
+ 4. **Iterate** → Fix any issues detected
631
+ 5. **Verify** → Final screenshot to confirm
632
+
633
+ This ensures designs aren't just technically correct—they *look* right.
634
+
635
+ ---
636
+
637
+ ## 🎨 Desktop Bridge Plugin (Recommended Connection)
638
+
639
+ The **Figma Desktop Bridge** plugin is the recommended way to connect Figma to the MCP server. It communicates via WebSocket — no special Figma launch flags needed, and it persists across Figma restarts.
640
+
641
+ ### Setup
642
+
643
+ 1. Open Figma Desktop (normal launch — no debug flags needed)
644
+ 2. Go to **Plugins → Development → Import plugin from manifest...**
645
+ 3. Select `figma-desktop-bridge/manifest.json` from the figma-console-mcp directory
646
+ 4. Run the plugin in your Figma file — it auto-connects via WebSocket (scans ports 9223–9232)
647
+ 5. Ask your AI: "Check Figma status" to verify the connection
648
+
649
+ > **One-time import.** Once imported, the plugin stays in your Development plugins list. Just run it whenever you want to use the MCP.
650
+
651
+ **📖 [Desktop Bridge Documentation](figma-desktop-bridge/README.md)**
652
+
653
+ ### Capabilities
654
+
655
+ **Read Operations:**
656
+ - Variables without Enterprise API
657
+ - Reliable component descriptions (bypasses API bugs)
658
+ - Multi-mode support (Light/Dark/Brand variants)
659
+ - Real-time selection tracking and document change monitoring
660
+
661
+ **Write Operations:**
662
+ - **Design Creation** - Create frames, shapes, text, components via `figma_execute`
663
+ - **Variable Management** - Full CRUD operations on variables and collections
664
+ - **Mode Management** - Add and rename modes for multi-theme support
665
+
666
+ ### How the Transport Works
667
+
668
+ - The MCP server communicates via **WebSocket** through the Desktop Bridge plugin
669
+ - The server tries port 9223 first, then automatically falls back through ports 9224–9232 if needed
670
+ - The plugin scans all ports in the range and connects to every active server it finds
671
+ - All 106 tools work through the WebSocket transport
672
+
673
+ **Multiple files:** The WebSocket server supports multiple simultaneous plugin connections — one per open Figma file. Each connection is tracked by file key with independent state (selection, document changes, console logs).
674
+
675
+ **Environment variables:**
676
+ - `FIGMA_WS_PORT` — Override the preferred WebSocket port (default: 9223). The server will fall back through a 10-port range starting from this value if the preferred port is occupied.
677
+ - `FIGMA_WS_HOST` — Override the WebSocket server bind address (default: `localhost`). Set to `0.0.0.0` when running inside Docker so the host machine can reach the MCP server.
678
+
679
+ **Cloud Mode:** The plugin also supports a **Cloud Mode** toggle for pairing with web AI clients (Claude.ai, v0, Replit, Lovable). Toggle "Cloud Mode" in the plugin UI, enter the 6-character pairing code from your AI assistant, and click Connect. See [Cloud Mode](#-cloud-mode-web-ai-clients) for details.
680
+
681
+ **Plugin Limitation:** In Local Mode, works with NPX or Local Git. In Cloud Mode, pairs with the remote MCP endpoint. Remote SSE without Cloud Mode pairing is read-only.
682
+
683
+ ---
684
+
685
+ ## 🔀 Multi-Instance Support (v1.10.0)
686
+
687
+ Figma Console MCP now supports **multiple simultaneous instances** — perfect for designers and developers who work across multiple projects or use Claude Desktop's Chat and Code tabs at the same time.
688
+
689
+ ### The Problem (Before v1.10.0)
690
+
691
+ When two processes tried to start the MCP server (e.g., Claude Desktop's Chat tab and Code tab), the second one would crash with `EADDRINUSE` because both competed for port 9223.
692
+
693
+ ### How It Works Now
694
+
695
+ - The server tries port **9223** first (the default)
696
+ - If that port is already taken, it automatically tries **9224**, then **9225**, and so on up to **9232**
697
+ - The Desktop Bridge plugin in Figma connects to **all** active servers simultaneously
698
+ - Every server instance receives real-time events (selection changes, document changes, console logs)
699
+ - `figma_get_status` shows which port you're on and lists other active instances
700
+
701
+ ### What This Means for You
702
+
703
+ | Scenario | Before v1.10.0 | Now |
704
+ |----------|----------------|-----|
705
+ | Two Claude Desktop tabs (Chat + Code) | Second tab crashes | Both work independently |
706
+ | Multiple CLI terminals on different projects | Only one can run | All run simultaneously |
707
+ | Claude Desktop + Claude Code CLI | Port conflict | Both coexist |
708
+
709
+ ### Do I Need to Do Anything?
710
+
711
+ **Nothing.** Multi-instance support is fully automatic:
712
+ - Each MCP server claims the next available port in the range
713
+ - The Desktop Bridge plugin scans all ports and connects to every active server
714
+ - Orphaned processes from closed tabs are automatically cleaned up on startup
715
+ - No manual port management — the plugin already scans the whole range
716
+
717
+ (Re-importing the manifest is only required when the plugin code itself changes — e.g. after a package update. Port-range scanning is already in the shipped plugin.)
718
+
719
+ ---
720
+
721
+ ## 🧩 MCP Apps (Experimental)
722
+
723
+ Figma Console MCP includes support for **MCP Apps** — rich interactive UI experiences that render directly inside any MCP client that supports the [MCP Apps protocol extension](https://github.com/anthropics/anthropic-cookbook/tree/main/misc/model_context_protocol/ext-apps). Built with the official [`@modelcontextprotocol/ext-apps`](https://www.npmjs.com/package/@modelcontextprotocol/ext-apps) SDK.
724
+
725
+ > **What are MCP Apps?** Traditional MCP tools return text or images to the AI. MCP Apps go further — they render interactive HTML interfaces inline in the chat, allowing users to browse, filter, and interact with data directly without consuming AI context.
726
+
727
+ ### Token Browser
728
+
729
+ An interactive design token explorer.
730
+
731
+ **Usage:** Ask Claude to "browse the design tokens" or "show me the design tokens" while connected to a Figma file.
732
+
733
+ **Features:**
734
+ - Browse all tokens organized by collection with expandable sections
735
+ - Filter by type (Colors, Numbers, Strings) and search by name/description
736
+ - Per-collection mode columns (Light, Dark, Custom) matching Figma's Variables panel
737
+ - Color swatches, alias resolution, and click-to-copy on any value
738
+ - Works without Enterprise plan via Desktop Bridge (local mode)
739
+
740
+ ### Design System Dashboard
741
+
742
+ A Lighthouse-style health scorecard that audits your design system across six categories.
743
+
744
+ **Usage:** Ask Claude to "audit the design system" or "show me design system health" while connected to a Figma file.
745
+
746
+ **Features:**
747
+ - Overall weighted score (0–100) with six category gauges: Naming, Tokens, Components, Accessibility, Consistency, Coverage
748
+ - Expandable category sections with individual findings, severity indicators, and actionable details
749
+ - Diagnostic locations linking findings to specific variables, components, or collections
750
+ - Tooltips explaining each check's purpose and scoring criteria
751
+ - Refresh button to re-run the audit without consuming AI context
752
+ - Pure scoring engine with no external dependencies — all analysis runs locally
753
+
754
+ **Enabling MCP Apps:**
755
+
756
+ MCP Apps are enabled by default in the setup configurations above (via `"ENABLE_MCP_APPS": "true"`). If you set up before v1.10.0 and don't have this in your config, add it to your `env` section:
757
+
758
+ ```json
759
+ "env": {
760
+ "FIGMA_ACCESS_TOKEN": "figd_YOUR_TOKEN_HERE",
761
+ "ENABLE_MCP_APPS": "true"
762
+ }
763
+ ```
764
+
765
+ > **Note:** MCP Apps require an MCP client with [ext-apps protocol](https://github.com/anthropics/anthropic-cookbook/tree/main/misc/model_context_protocol/ext-apps) support (e.g. Claude Desktop). This feature is experimental and the protocol may evolve.
766
+
767
+ ### Future MCP Apps Roadmap
768
+
769
+ Planned MCP Apps:
770
+
771
+ - **Component Gallery** — Visual browser for searching and previewing components with variant exploration
772
+ - **Style Inspector** — Interactive panel for exploring color, text, and effect styles with live previews
773
+ - **Variable Diff Viewer** — Side-by-side comparison of token values across modes and branches
774
+
775
+ The architecture supports adding new apps with minimal boilerplate — each app is a self-contained module with its own server-side tool registration and client-side UI.
776
+
777
+ ---
778
+
779
+ ## 🚀 Advanced Topics
780
+
781
+ - **[Setup Guide](docs/SETUP.md)** - Complete setup guide for all MCP clients
782
+ - **[Self-Hosting](docs/SELF_HOSTING.md)** - Deploy your own instance on Cloudflare
783
+ - **[Architecture](docs/ARCHITECTURE.md)** - How it works under the hood
784
+ - **[OAuth Setup](docs/OAUTH_SETUP.md)** - Configure OAuth for self-hosted deployments
785
+ - **[Troubleshooting](docs/TROUBLESHOOTING.md)** - Common issues and solutions
786
+
787
+ ---
788
+
789
+ ## 🤝 vs. Figma Official MCP
790
+
791
+ **Figma Console MCP (This Project)** - Debugging, data extraction, and design creation
792
+ - ✅ Real-time console logs from Figma plugins
793
+ - ✅ Screenshot capture and visual debugging
794
+ - ✅ Error stack traces and runtime monitoring
795
+ - ✅ Raw design data extraction (JSON)
796
+ - ✅ FigJam board creation and reading (stickies, flowcharts, tables)
797
+ - ✅ Works remotely or locally
798
+
799
+ **Figma Official Dev Mode MCP** - Code generation
800
+ - ✅ Generates React/HTML code from designs
801
+ - ✅ Tailwind/CSS class generation
802
+ - ✅ Component boilerplate scaffolding
803
+
804
+ **Use both together** for the complete workflow: generate code with Official MCP, then debug and extract data with Console MCP.
805
+
806
+ ---
807
+
808
+ ## 🛤️ Roadmap
809
+
810
+ **Current Status:** v1.31.0 (Stable) - Production-ready with 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, **106 tools** (Local) / **95 tools** (Cloud) / **9 tools** (Remote read-only), Comments API, cross-MCP identity disambiguation, and MCP Apps.
811
+
812
+ **Recent Releases:**
813
+ - [x] **v1.31.0** - Fixes the most-reported reliability bug: the Desktop Bridge connection dropping and staying down until you closed the plugin, restarted your MCP client, or killed ports by hand. Root cause was **zombie MCP server processes** squatting the WebSocket port range (9223–9232) after a bad shutdown. The reaper now escalates `SIGTERM` → `SIGKILL` (a hung server that ignores graceful shutdown can no longer survive), sweeps the range every 5 minutes via an `unref`'d periodic reaper, and a shutdown backstop prevents a server from zombifying in the first place. The redesigned Desktop Bridge plugin adds an auto-reconnect watchdog (re-probes every ~12s while disconnected), a context-aware **Pause / Resume / Reconnect** button, and a live server-count badge. No new tools; **plugin re-import required** (bridge `ui.html` + `code.js` changed). 1190 tests passing, including an integration test that spawns a real `SIGTERM`-ignoring process and asserts the reaper kills it.
814
+ - [x] **v1.30.0** - Native variable binding + typography in the structured write tools, closing the Plugin API gaps that used to force raw `figma_execute`. `figma_set_fills` / `figma_set_strokes` accept a `variableId` to bind a fill/stroke to a color variable via `setBoundVariableForPaint` (any plan, via the bridge). `figma_set_text` gains `fontFamily` / `fontStyle` with space-insensitive normalization (`SemiBold` → `Semi Bold`) and graceful `Regular` fallback. `figma_instantiate_component` pre-loads instance text fonts before applying overrides (fixes silently-skipped text overrides on non-Regular weights) and returns a `warnings` array for failed overrides. Also fixes a mixed-font crash in `figma_set_text` and a `ui.html` relay that was dropping new message fields. No new tools; **plugin re-import required** (bridge `ui.html` + `code.js` changed). Validated live; 1185 tests passing.
815
+ - [x] **v1.29.2** - Bug fix: `figma_generate_component_doc` now renders Figma component descriptions faithfully and reliably tags atomic-design level. Single-`#` headings in descriptions render as real sections (Usage Guidelines, Implementation Considerations, Accessibility Requirements, Content Configuration) instead of leaking as `- # Heading` list items; frontmatter `description` takes the first sentence instead of truncating on the word "Accessibility"; the generated Figma URL no longer doubles `?node-id=`; and the component's atomic level (atom/molecule/organism/template) is auto-detected via a single `ids=<node>` file request + divider walk-back, with no dependency on library publishing. No new tools; plugin re-import not required.
816
+ - [x] **v1.29.1** - Bug fix: `figma_get_design_system_kit` now resolves variables bridge-first (Desktop Bridge / cloud relay → REST fallback) instead of calling the Enterprise-only Variables REST API directly. Non-Enterprise users no longer hit a 403 on the kit's token section when a bridge is connected, and a REST 403 now points the caller back to the bridge instead of dead-ending. 7 new tests, 1185 total passing. No new tools; plugin re-import not required.
817
+ - [x] **v1.29.0** - Shared library inspection: three new tools close the gap between "I have a component key" and "I can actually use it." `figma_get_library_component_by_key` resolves any 40-char component key to full `componentPropertyDefinitions` + variants (with their published keys) + per-variant visual specs — without needing the source library file's URL. `figma_get_library_variables` lists library tokens via Plugin API (works on every Figma plan; the REST equivalent is Enterprise-only). `figma_import_library_variable` imports a library token to the current file so it can be bound to nodes. 27 new tests, 1178 total passing. Plugin re-import optional.
818
+ - [x] **v1.28.1** - Bug fix patch surfacing from live-fire testing of the v1.28.0 formatters against multi-tier semantic-token design systems. Fixes: Tailwind v3 emitted empty `module.exports` for alias-only sets (now resolves alias chains to literal values); TypeScript module + JSON flat + JSON nested formatters emitted `"{alias.path}"` strings as literal values (now resolves); Tailwind v4 namespace-prefix doubling (`--color-theme-color-X` is now `--color-theme-X`). Adds `resolveAliasChain` public helper. 1151 tests still passing.
819
+ - [x] **v1.28.0** - Full formatter coverage for `figma_export_tokens`. Seven new output formats: Tailwind v4 `@theme inline`, Tailwind v3 config, SCSS variables, TypeScript module, JSON flat/nested, Style Dictionary v3, Tokens Studio multi-file. Combined with DTCG + CSS variables, ships **10 fully-implemented output formats** with zero third-party build-tool dependencies. Tool description updated, docs/tools.md table all-green. 22 new Jest tests, 1151 total passing.
820
+ - [x] **v1.27.1** - Documentation patch. No code behavior changes. Sweeps stale "Phase 1 ships with DTCG only" claims across tool descriptions, error messages, and internal comments after CSS variables formatter and the apply phase shipped during the v1.27.0 dev cycle. Refreshes README banner + capability bullets + roadmap. Adds `Phase 3.5: Stale-Content Audit` to the release runbook so future releases get a strict pre-publish grep sweep across banners, tool descriptions, error messages, source comments, and tool-count consistency.
821
+ - [x] **v1.27.0** - Bidirectional token sync: `figma_export_tokens` + `figma_import_tokens` replace Style Dictionary and Tokens Studio's export pipeline. Canonical DTCG JSON + CSS custom properties. Diff-aware merge with round-trip ID preservation via `$extensions["figma-console-mcp"]`. Apply phase pushes hex-value edits back to Figma via the plugin bridge. Verified end-to-end against 713-token + 280-token design systems.
822
+ - [x] **v1.26.0** - Internal cleanup + cross-MCP identity: Local-mode CDP/Puppeteer transport removed entirely (WebSocket-only). `figma_diagnose` tool for designer-readable health checks. Every response tagged `_mcp: "figma-console-mcp"`; errors prefixed `[figma-console-mcp]` so attribution is unambiguous when running multiple Figma MCPs. Plugin status pill now reads `Local · ready` / `Cloud · ready` / `Local + Cloud · ready`. Net diff: −7,299 lines, plugin re-import optional.
823
+ - [x] **v1.25.0** - Description + Dev Mode annotation tracking in `figma_diff_versions` via plugin session buffer. Description and annotation edits made during a session now appear in diff output (REST API doesn't return these — bridged through the plugin's `documentchange` listener).
824
+ - [x] **v1.24.0** - Honest scope coverage on version diffs. `scope_coverage` object surfaces what `figma_diff_versions` does and doesn't track; always-on coverage warnings prevent silent invisibility on token-value changes and component-instance placements.
825
+ - [x] **v1.23.0** - Version History & Time-Series Awareness: 6 new tools (list versions, snapshot any past version, diff two versions for component/binding deltas, generate markdown changelogs, trace property/variant introduction via binary-search blame walker). Author attribution flows from autosaves, not just labeled releases.
826
+ - [x] **v1.17.0** - Figma Slides support: 15 tools for managing presentations.
827
+ - [x] **v1.16.0** - FigJam support: 9 tools for creating and reading FigJam boards.
828
+ - [x] **v1.12.0** - Cloud Write Relay: web AI clients can create and modify Figma designs without Node.js.
829
+ - [x] **v1.11.0** - Complete CDP removal, improved multi-file active tracking with focus detection.
830
+ - [x] **v1.10.0** - Multi-instance support (dynamic port fallback 9223–9232, multi-connection plugin, instance discovery).
831
+ - [x] **v1.9.0** - Figma Comments tools, improved port conflict detection.
832
+ - [x] **v1.8.0** - WebSocket Bridge transport (CDP-free connectivity), real-time selection/document tracking.
833
+ - [x] **v1.7.0** - MCP Apps (Token Browser, Design System Dashboard), batch variable operations, design-code parity tools.
834
+
835
+ **Coming Next:**
836
+ - [ ] **Token sync — parsers + import-side apply expansion** - Parsers for non-DTCG input (Tokens Studio, CSS vars, Tailwind v4, Tailwind v3 config, SCSS, Style Dictionary v3, JSON flat/nested). Plus `toCreate` apply orchestration, `toDelete` for `replace` strategy, alias-target updates, and cross-library variable resolution via `getVariableByIdAsync` so cross-library aliases render as real `var(--target)` references instead of comments.
837
+ - [ ] **Component template library** - Common UI pattern generation
838
+ - [ ] **Visual regression testing** - Screenshot diff capabilities
839
+ - [ ] **Design linting** - Automated compliance and accessibility checks
840
+
841
+ **📖 [Full Roadmap](docs/ROADMAP.md)**
842
+
843
+ ---
844
+
845
+ ## 💻 Development
846
+
847
+ ```bash
848
+ git clone https://github.com/southleft/figma-console-mcp.git
849
+ cd figma-console-mcp
850
+ npm install
851
+
852
+ # Local mode development
853
+ npm run dev:local
854
+
855
+ # Cloud mode development
856
+ npm run dev
857
+
858
+ # Build
859
+ npm run build
860
+ ```
861
+
862
+ **📖 [Development Guide](docs/ARCHITECTURE.md)**
863
+
864
+ ---
865
+
866
+ ## 📄 License
867
+
868
+ MIT - See [LICENSE](LICENSE) file for details.
869
+
870
+ ---
871
+
872
+ ## 🔗 Links
873
+
874
+ - 📚 **[Documentation Site](https://docs.figma-console-mcp.southleft.com)** — Complete guides, tutorials, and API reference
875
+ - 📖 [Local Docs](docs/) — Documentation source files
876
+ - 🐛 [Report Issues](https://github.com/southleft/figma-console-mcp/issues)
877
+ - 💬 [Discussions](https://github.com/southleft/figma-console-mcp/discussions)
878
+ - 🌐 [Model Context Protocol](https://modelcontextprotocol.io/)
879
+ - 🎨 [Figma API](https://www.figma.com/developers/api)