dsh-pen-dev
Mounts the pen.dev desktop app MCP server in a DSH session so the model can read and edit the .pen document open in Pen through the get_app_state, read_skill, execute, get_style and browser tools; finds the server binary by probing the usual install paths, and adds a pen-dev skill plus a listener th
Install
dsh plugin --profile web add dsh-pen-dev
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
dsh-pen-dev
非官方的 pen.dev 接入插件,用于 DeepSeek Harness。
它把 pen.dev 桌面版自带的 MCP server 接到 DSH 会话里,让模型能在真实的 pen.dev 画布上设计、
读取 frame 与组件、把网页复刻成可编辑图层、调用 pen.dev 的风格原型;同时附带一个 pen-dev
技能,告诉模型画布工作流,并引导它去读 pen.dev 自己的 read_skill 文档。
本项目与 pen.dev 官方无关,也未获其背书。pen.dev 及其桌面应用归其作者所有;本包不分发
任何 pen.dev 二进制,只是在已安装的应用里定位 MCP server。
装好之后你会得到
工具 · 用途
mcp__pen__get_app_state · 当前文档、选区、顶层 frame、组件、浏览器状态
mcp__pen__read_skill · pen.dev 官方的画布 API 文档(execute、schema、各类指南)
mcp__pen__execute · 对当前打开的 .pen 执行画布操作
mcp__pen__get_style · 载入视觉风格原型(字体、配色、图像方向)
mcp__pen__browser · 在应用内置浏览器打开真实网址,把页面复刻成可编辑图层
另外附带 pen-dev 技能。
前置条件
- DeepSeek Harness,且具备
@deepseek-ai/dsh-mcp-client插件。开发与验证基于 DSH0.2.1-rc.2。 - pen.dev 桌面应用已安装。开发与验证基于 macOS(arm64)上的 Pen 1.2.19。
应用内的 MCP server 位于
Pen.app/Contents/Resources/app.asar.unpacked/out/mcp-server-<platform>-<arch>。
安装
在 DSH 应用里装(推荐)
侧栏 插件 → 添加插件 → 安装第三方插件,输入包名:
dsh-pen-dev
该对话框也接受本地路径或 Git 地址。
命令行安装
dsh plugin --profile <profile> add dsh-pen-dev
安装后会默认启用该组合包。开启 HMR 时无需重启即可看到工具;否则重启应用。
从插件市场安装
如果某个市场索引收录了本插件:插件 → 发现 → 添加索引源,粘贴索引 URL 后即可在结果里安装。
[market/index.json](market/index.json) 是现成的 format-1 条目;
[PUBLISHING.zh.md](PUBLISHING.zh.md) 说明了怎么托管索引,以及这个 DSH 版本为什么还没有官方提交入口。
手动等价写法
如果你想直接看 YAML(例如包还没发布到 npm、用本地路径安装时),把它装进 profile 后,组合包
patch 会插入下面两行:
- insert:
- id: pen-dev
name: dsh-pen-dev
- id: pen-dev-skill
name: dsh-pen-dev/skill
如果你之前手写过 pen.dev 配置,请先删掉那条手写的 mcp-client 行。两个 mcp-client 实例
不能共用同一个 serverName,后加载的那个会报 serverName "pen" is already in use。
与官方 MCP 配置的关系
pen.dev 官方的桌面接入配置是:
{"name":"pencil","transport":"stdio","command":"…/mcp-server-<platform>-<arch>","args":["--app","desktop"],"env":{}}
本插件挂载的就是这个 server:同一个二进制、同样的 --app desktop、同样 5 个工具
(browser、execute、get_app_state、get_style、read_skill)。相比最小配置,它额外做了:
- 用
node:fs在/Applications、~/Applications、/opt和 Windows 的%LOCALAPPDATA%\Programs
里探测二进制,非标准安装位置不用改配置
- 传
--agent deepseekHarness,让 pen.dev 区分这是 DSH 的连接(PEN_MCP_AGENT可覆盖) - 支持
PEN_MCP_CONVERSATION_ID,映射为--conversation_id - 把单次调用超时提到 120s,
execute和browser的较大操作常常超过默认 60s
不默认传 --enable_spawn_agents:那会让 pen.dev 在 DSH 之外再拉起它自己的 agent。确实需要时
设 PEN_MCP_ENABLE_SPAWN_AGENTS=1。
另外,@pencil.dev/cli npm 包里带的是另一套 MCP server(9 个以 filePath 为参数的工具,
服务于它的无头 .pen 编辑器)。它不能替代本插件:连到桌面 app 时它调的 IPC 方法并不存在
(实测报 No handler found for method 'get-editor-state')。
配置
环境变量 · 默认值 · 含义
PEN_MCP_BIN · — · pen.dev MCP server 二进制的绝对路径,用于非标准安装位置或其他平台。
PEN_APP_PATH · 自动探测 · pen.dev 应用目录的绝对路径,自动探测不到时用。
PEN_MCP_AGENT · deepseekHarness · 传给 --agent 的值,pen.dev 用它区分连接来源。
PEN_MCP_CONVERSATION_ID · — · 映射为 --conversation_id。
PEN_MCP_ENABLE_SPAWN_AGENTS · 关 · 设为 1 或 true 时传 --enable_spawn_agents(多出 spawn_agents 工具)。
PEN_MCP_SERVER_NAME · pen · MCP 命名空间,即 mcp__<name>__* 前缀。
二进制路径在 profile 激活时计算:patch 用 node:fs 探测常见安装根目录,只有装在非常规位置才需要
PEN_APP_PATH。全部找不到时,mcp-client 会报 spawn 失败、不挂任何工具,harness 其余部分照常运行。
注意事项
.pen文件是加密的。只有 MCP 工具能读写它,不要用文件系统工具去打开。- 工具改的是用户正在看的文档。
execute要当作可见的、有破坏性的操作来处理。 - 一张画布同一时间只让一个 agent 写:如果 Claude Code 也连着 Pen,不要让两边同时改。
PEN_MCP_BIN需要由启动应用的外层把变量传进去。macOS 的 GUI 应用不继承 shell 环境,
PEN_APP_PATH 主要服务于会传环境的启动器。
- Windows / Linux:路径探测按常见 Electron 布局写了,但只在 macOS 上验证过;
PEN_MCP_BIN始终优先。
计划额度
pen.dev 把 MCP 用量记为活跃天数:本地时区下每个不同的日历天,只要调过任意 pen 工具就计 1 天,
计入当前计费周期的额度。免费计划每月有若干天上限;Pro 计划取消该上限("Design with agents every
day")。CLI 走同一套计量。
额度用尽期间所有 pen 工具都会失败(读工具也一样)。插件里的 pen-dev-quota-guard 会把上游那段
"STOP … do not work around this" 改写成简短双语提示并附上升级链接,让模型停下来而不是反复重试。
本地没有可重置的计数:判定在 pen.dev 服务端,按组织计。
卸载
把该组合包从 profile 移除(插件面板,或 dsh plugin --profile <profile> remove dsh-pen-dev)。
如果之前有手写的 mcp-pen 行,把它恢复回去。
许可
MIT。非官方社区包,见上文声明。
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::4,最后更新 2026-10-25