Serpent MCP 开发指南
Serpent MCP 由 Desktop Main 进程内嵌提供,仅监听 127.0.0.1 的 Streamable HTTP。它服务于不应安装 Node/npm 的美术和设计师;客户端只需粘贴设置页复制的配置。
用户侧启用
- 在“设置 → MCP”打开“启用 MCP 服务”。
- 可选打开“自动启动”。
- 点击“启动 MCP 服务”。
- 点击“复制 MCP 配置”,粘贴到目标客户端。
- 新 credential 默认 Auto;可切到 Full Access(普通和可恢复操作直接执行,启用时有红色警告)。
不需要编辑 JSON、启动 npm、选择工作目录或重复批准普通操作。
进程边界
- Main 持有 HTTP listener、credential、访问模式和 MCP transport。
- Renderer 只通过类型化 IPC 操作设置页,不接收 token、socket、数据库连接或任意文件系统能力。
- Library Worker 是 SQLite 和资源文件的唯一所有者。
- 所有 MCP 请求经 Automation Registry、Gateway、Schema、目标库校验、版本/变更序列和 Worker 安全边界。
transport 可以为 MCP SDK 保存 session,但禁止把 active library、library authorization、capability grant、默认目标或动态核心工具目录放入 session。每个库级调用必须带显式 libraryId;library.show-in-desktop 只投影 UI。
自动化与人类操作等价(产品原则)
MCP/脚本的操作与人类的操作没有不同:file.import 导入 = 人类导入,asset.trash 删除 = 人类删除。含义:
- 领域校验与安全边界不变(Schema、计划、版本、Worker),source 只影响审计标签;
- 副作用必须与人类操作一致:自动 AI 分析入队(
onImportCompleted→enqueueAutoAnalyzeAfterImport,与桌面导入 IPC 同一函数)、Worker 操作历史回执、插件 will-hooks、桌面提示(同一套 toast,见 Serpent-fmbr); - 不得为自动化单独造一套提示/入队/撤销机制;触发点放在统一完成点(Gateway 钩子 / 事件),而非 MCP transport 层。
若发现某个人类操作的副作用在自动化路径缺失,视为 bug(Serpent-ihpx 即此类)。
Registry 与请求处理
src/automation/command-registry.ts 是 MCP 工具和输入/输出 Schema 的单一来源。src/mcp/tool-catalog.ts 为核心工具生成静态目录,src/mcp/call-tool.ts 对库级调用提取并校验显式 libraryId,再通过 Gateway 的 contextOverrides 做单次目标绑定。
过渡约束:插件 MCP 工具当前只在 full-access 档暴露(tool-catalog.ts 的 exposure 判断);Auto 客户端拿不到插件工具列表。与 ADR-0025“插件与脚本/MCP 同一 Action 面”的完全对齐留待插件权限投影设计。
插件 MCP 工具也必须在每次调用的参数中携带显式 libraryId,并同时提供至少一个 assetIds、folderIds 或 collectionIds。Provider 不会从 Desktop 焦点库补全目标;插件暴露开关在 list/call 两条路径都会即时生效。
全局命令(列出最近资源库、列出已打开资源库、建库、导入已导出的库)不要求 libraryId。库级命令(资产、文件夹、标签、合集、导入资产、AI 和任务)要求 libraryId。不要从 Desktop 当前库或 HTTP session 填充缺省目标。库级调用的目标由 Gateway 单次绑定,不会写回 MCP session。
路径输入必须在 MCP Schema 中声明并直接传给 Main:
- 创建资源库:
selectedParentPath; - 导入:
sourcePaths; - 其他文件操作:由 Registry 声明具体业务参数。
MCP 路径请求绝不调用 Electron 原生文件选择器。Windows 需要独立验证盘符、UNC、长路径、保留名、大小写不敏感、反斜杠和 reparse point/junction。