npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

text-to-design-mcp

v0.8.3

Published

MCP server bridging AI clients to the jsDesign (即时设计) desktop plugin via a local WebSocket

Readme

text-to-design 后台服务

让 AI 助手直接帮你操作即时设计(jsDesign)画布:读取选中内容、按描述画图、改样式、导出图片。装好后不用手动启动任何东西,打开 AI 工具就能用。

这里说的「后台服务」,就是负责在 AI 和设计软件插件之间传话的那个小帮手。

能做什么

  • 读取画布当前选中的内容
  • 按你的描述画图:卡片、按钮、文字、形状等
  • 修改已有内容:改位置、颜色、文字、圆角
  • 把多个元素合成一个图形、给图形加轮廓
  • 把图形变成可反复复用的组件
  • 导出图片(PNG / JPG / SVG / PDF)
  • 用本地图片填充图形

安装(三步)

第一步:告诉 AI 工具

后台服务不用手动安装,注册命令统一为 npx -y text-to-design-mcp@latest,任意 AI 工具都会自动化拉取运行。把下面需求丢给 AI,它会自动注册并验证:

请帮我完成 text-to-design 安装,并按步骤汇报进度:

1. 注册 MCP 服务:用你工具原生的方式注册一个 stdio MCP server,
   命令 npx -y text-to-design-mcp@latest(无需手动安装,npx 会自动拉取运行)。

2. 验证后台服务能启动:
   timeout 5 npx -y text-to-design-mcp@latest
   预期输出含 "[text-to-design-mcp] shim 模式" 或 "daemon 就绪"(首次会自动拉起常驻服务)。

3. 安装设计软件插件,下载并解压到用户目录:
   cd ~ && npm pack text-to-design-ui
   mkdir -p text-to-design-plugin
   tar -xzf text-to-design-ui-*.tgz -C text-to-design-plugin --strip-components=1

4. 上述三步完成后,告知用户剩下两步需手动:
   - 在即时设计里「插件 → 导入」,选择 ~/text-to-design-plugin/dist/manifest.json,
     运行插件,面板显示「已连接」即就绪
   - 重启 AI 会话,调用 jsd_ping 验证连通

5. 汇报完成情况。

若希望全局安装(装一次、不依赖联网拉取),可 npm i -g text-to-design-mcp,注册命令可简化为 text-to-design-mcp。

第二步:安装设计软件插件

先拿到插件包(任选):

| 管理器 | 命令 | | --- | --- | | npm | npm pack text-to-design-ui | | pnpm | pnpm pack text-to-design-ui | | yarn | yarn dlx npm pack text-to-design-ui |

解压得到的安装包里有个 dist 文件夹。在即时设计里点「插件 → 导入」,选择里面的 manifest.json,然后回到画布运行插件。面板显示「已连接」就是准备好了。

第三步:重启 AI 工具

改完重启 AI 工具会话(首次使用会自动拉取后台服务并常驻运行)。

怎么用

打开会话后直接说人话,比如:

  • 「读取当前画布选中的内容」
  • 「在画布中心画一个 300x200 的卡片,标题叫发布页,背景浅灰」
  • 「把选中的按钮导出成 PNG 存到 /tmp/btn.png」

想确认插件通不通,先让它调 jsd_ping。

常见问题

  • AI 说连不上插件:看即时设计里的插件面板是不是「已连接」,没有就重新运行插件,再重启 AI 会话
  • AI 说某工具/某字段「平台不支持」:当前插件平台没有这项能力。面板可折叠的「能力」区块、jsd_ping 回包、jsd://platform/state 三处看到的是同一份能力表(即时设计侧只有本地样式;变量 / 组件属性 / 文本截断是 Figma 侧才有的差异能力)
  • 改了配置没反应:重启 AI 工具会话
  • 想深入排查:看文末「给开发者看」的日志部分
  • 旧版升级见下方「升级」

升级

新版起会自动替换:启动时若检测到旧版常驻服务,会自动关停并拉起新版,无需手动操作。

仅从旧版(没有自动替换能力)升级时,首次需手动清理一次残留的常驻服务:

pkill -f text-to-design-mcp

之后任意一次 AI 调用会自动拉起新版服务。


给开发者看

以下内容供开发、排查问题的人参考。

完整工具清单

一个操作对应一个工具,没有 op 分发;两个聚合入口(jsd_manage_nodes / jsd_manage_components)仅用于批量或一次改多组字段。所有写工具都支持 ids(缺省作用于当前选中);属性类工具(及 jsd_set_*)的 recursive 只作用于后代,不含目标节点自身(给一组图标容器刷色时容器不会被套上方框),要连容器自身一起改才传 includeSelf=true。

| 工具 | 用途 | | --- | --- | | jsd_ping | 检查插件是否在线,返回三张能力表(核心能力 / 平台差异能力 / 平台特有 op 名单);回包被 daemon 缓存,后续可读 jsd://platform/state | | jsd_get_selection | 读取画布当前选中的节点 | | jsd_find | 按名称/类型/id 查找节点 | | jsd_create_nodes | 按描述创建节点(frame/rect/text 等,支持阴影/描边/渐变/文本样式) | | jsd_create_svg | 直接导入 SVG 字符串(保留 path/矢量数据,不经降级) | | jsd_create_icon | 按名称/别名模糊匹配插入 Lucide 内置图标,查无时返回候选名 | | jsd_html_to_design | 把 HTML 转成设计节点 | | jsd_set_fill_color | 填充(fills 整体替换)、混合模式、填充样式 | | jsd_set_stroke | 描边列表/宽度(可四边分开)/对齐/端点/连接/虚线/描边样式 | | jsd_set_cornerRadius | 圆角半径(四角可分开)与圆角平滑度 | | jsd_set_text | 文本内容与排版(characters/fontSize/fontName/对齐/行高/字距/截断) | | jsd_move_node | 位置 x/y 与旋转 | | jsd_resize_node | 尺寸 width/height,可同时传 x/y 一步改尺寸并定位 | | jsd_set_layout | FRAME auto-layout(layoutMode/间距/内边距/对齐/伸缩/约束) | | jsd_set_effects | 阴影/模糊、溢出裁剪、布局网格、椭圆环形参数 | | jsd_set_visibility | 不透明度、显示开关、锁定 | | jsd_rename_node | 重命名 | | jsd_update_node | 聚合:一次改多组字段,或改 pointCount/innerRadius 等长尾字段 | | jsd_select_nodes | 设置画布当前选中 | | jsd_delete_node | 删除节点(matchName 可再过滤;ids 缺省删当前选中) | | jsd_clone_node | 复制节点(克隆 COMPONENT 得到 INSTANCE) | | jsd_group_nodes | 编组(至少 2 个),可同时设置 auto-layout | | jsd_ungroup_nodes | 解组 | | jsd_flatten_nodes | 至少 2 个节点合并为单一矢量 | | jsd_outline_stroke | 描边转轮廓矢量(几何被烘焙) | | jsd_reparent_nodes | 移入父节点成为其子节点(parentId 建议显式传;跨父级移动保持绝对位置,内部自动换算,移入 auto-layout 容器时位置由布局接管) | | jsd_repair_nodes | 清理引擎残留的损坏/失效节点 | | jsd_manage_nodes | 聚合入口,op 含 select/remove/clone/group/ungroup/flatten/outline_stroke/reparent/repair;各 op 返回键不同(select→selected / remove→removed / ungroup→ungrouped / repair→cleaned 为 id 字符串数组;clone/outline_stroke→created 节点数组,group/flatten→created 节点单对象;reparent→moved,同时附同义的 updated)。结构变更类 op 与固定 op 小工具一样会做同层几何漂移复核 | | jsd_create_component | 建「空壳」组件:先 resize 再 reparent 归入子节点,最后删除原容器 | | jsd_create_instance | 按 COMPONENT 生成实例 | | jsd_detach_instance | 取消实例链接,得到可自由编辑的普通节点 | | jsd_import_component | 按 key 从团队库导入组件 | | jsd_swap_component | 换绑组件(丢弃目标既有覆盖) | | jsd_set_instance_properties | 设置变体属性(属性名需与 variantGroupProperties 完全匹配) | | jsd_combine_as_variants | 合并为变体集(仅 COMPONENT,实例不能直接合成)。⚠ 本引擎必然失败(平台缺陷),全败时返回可执行出口:改用「族名 / 状态」命名的多个独立主件 | | jsd_copy_overrides | 复制源实例覆盖为快照,返回 snapshotId(缓存) | | jsd_apply_overrides | 按 snapshotId 批量套用,可 swapToSource | | jsd_sync_overrides | 无状态一次性「复制+套用」,适合 jsd_batch | | jsd_manage_components | 聚合入口,op 含 create_component/create_instance/detach_instance/import_component/swap_component/set_instance_properties/combine_as_variants/copy_overrides/apply_overrides/sync_overrides | | jsd_batch | 批量编排器:一次请求顺序执行多个 jsd_* 步骤,双花括号占位符串起中间值;步骤回显做摘要裁剪(节点只留 id/name/type/x/y,丢 vectorPaths 等大字段,超预算降级为 id 清单),占位符解析用完整数据;含图标的批次另配一次 jsd_export 目视验收;含删除/移父的步骤自动复核同层几何漂移(结果 warnings,checkDrift:false 可关;单工具调用同样会复核) | | jsd_export | 导出节点为 PNG/JPG/SVG/PDF(导出失败的 id 在文本里点名) | | jsd_list_fonts | 列出可用字体:families 与各族的可用字型 fonts:[{family,styles}](写 fontName 前照这份取组合,family+style 需精确匹配,猜错会静默退回默认字重) | | jsd_fill_image | 用本地图片填充节点 | | jsd_platform_op | 平台特有能力的通用通道(Figma 变量/本地样式/组件属性定义与设值)。先读 jsd_ping 的 platformOps 名单再传 op 名;插件平台不适用(如即时设计)时由 daemon 直接拦截并给出替代路径,不发插件往返 |

配方 prompt(prompts/list)

带参数的操作引导词,让 AI 少猜流程细节;策略类以 assistant 身份下发,配方式以 user 身份下发。

| prompt | 用途 | | --- | --- | | design-strategy | 设计策略总纲:命名/层级/间距字号阶梯/出错回滚,附登录页示例结构树 | | text-replace-strategy | 大改文案:jsd_clone_node 留底 → 语义分块 → jsd_set_text 批量替换 → 逐块导小图复核 | | variant-sync | 把一个实例的样式/文案批量套用到多个同类实例(优先 jsd_sync_overrides / copy+apply,手工 jsd_set_* 兜底) | | html-to-design | HTML 转设计稿,含保真度取舍说明 | | icon-grid | 批量插入 Lucide 图标并排成自动布局网格 | | script-ops | 脚本化调用纪律:压缩工具往返与上下文占用 |

只读资源(resources/list)

按需读取画布与平台状态,模型可直接作为上下文。资源目录恒定列出,不随连接门控隐藏: 插件离线时调用会快速失败并返回「插件未连接」的明确提示,而不是把整张目录藏起来 (隐藏式门控依赖客户端处理 listChanged,多数客户端不处理,会话若在插件离线时建立就会永久看不到资源)。

| resource | 内容 | | --- | --- | | jsd://canvas/selection | 当前选中的序列化树(等价 jsd_get_selection depth=2) | | jsd://fonts | 当前环境可用字体:families 与各族的可用字型 fonts:[{family,styles}] | | jsd://styles | 当前文档可复用本地样式(PAINT/TEXT/EFFECT/GRID,按名应用样式前先读这里) | | jsd://page | 当前页顶层节点轻量摘要(名称/类型/位置/尺寸/子节点数,从头设计整页前先读) | | jsd://node/{id} | 按 id 读节点序列化结构 | | jsd://platform/state | 插件平台状态与能力表(platform / capabilities / coreCapabilities / platformOps)。读 daemon 本地缓存,不发插件请求;插件上线时 daemon 自动探测一次,断开即清空,未探测时为空 |

工作原理(简版)

  • 一个常驻的轻量服务负责和插件通信,连接即时设计里的插件
  • 每个 AI 会话会自动连上这个服务;会话关掉不影响插件
  • 服务常驻;更新版本时自动替换,无需手动清理(旧版首次升级除外,见「升级」)
  • 多个会话可以同时用,共享同一个插件连接

环境变量

| 变量 | 默认 | 说明 | | --- | --- | --- | | TEXT_TO_DESIGN_MCP_PORT | 47812 | 与插件通信的端口(被占用会启动失败) | | TEXT_TO_DESIGN_MCP_HTTP_PORT | 47820 | 内部服务端口(一般不用动) | | TEXT_TO_DESIGN_MCP_LOG | /tmp/text-to-design-mcp.log | 日志文件路径 | | TEXT_TO_DESIGN_MCP_LOG_LEVEL | info | 落盘级别:debug/info/warn/error;只约束日志文件,面板推送全量下发 |

日志排查

  • 看日志:tail -f /tmp/text-to-design-mcp.log(请求/响应耗时、HTTP 状态码、插件连接、二进制组装都会记)
  • 要更细的连接日志,启动时设 TEXT_TO_DESIGN_MCP_LOG_LEVEL=debug(默认 info);该开关只减落盘量,面板推送不受限制
  • 插件面板自带连接状态和日志:服务端日志实时推送,档位默认隐藏 debug,切「全部」可见帧级明细;插件离线期间的日志会先缓冲,上线后按顺序回放
  • 面板还有可折叠的「能力」区块:核心能力(两平台一致)、当前平台可用的差异能力、平台特有 op 名单 —— 数据与 MCP 侧 capabilities / platformOps 同源

构建与开发

pnpm install
pnpm dev        # watch 构建 ui/code
pnpm mcp        # 开发态启动后台服务(tsx 直跑)