dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DSH multimodal plugin prototype: settings page, image output, map/web cards
兼容 DeepSeek Harness(DSH)的插件,用来统一挂载和管理「控制其他工作软件」的 MCP 服务器(Office / 创作工具 / Windows 桌面 / Notion / Cloudflare / GitHub / ComfyUI 等)。每个工作组件以 @deepseek-ai/dsh-mcp-client 子插件的形式挂载:不写进 profile,随本插件卸载,设置改动后只重挂受影响的组件。
自有代码采用 MIT 许可证。vendor/dsh-tools/ 是 DeepSeek 的代码副本,版权归 DeepSeek,许可同样是 MIT,全文和保留义务见 NOTICE 与 vendor/dsh-tools/LICENSE。
文中的产品名称只用来说明兼容对象,是各自权利人的商标。本项目与 DeepSeek、微软、Blender Foundation、Unity Technologies、Figma、Adobe、Google、Godot Foundation、Notion、Cloudflare、GitHub、Comfy、FFmpeg、Obsidian 等没有隶属、赞助或授权关系。设置页图标是通用线条;仓库不收录第三方产品标志。插件自身设置页的实装截图见下文「实装截图」。
组件 · MCP 服务器 · 工具名前缀 · 前提(简述) Office · OfficeMCP(COM) · mcp__officemcp__ · Windows + Office(Word / Excel / PowerPoint 等) Blender · mcp-for-blender(PyPI) · mcp__blender__ · Blender 开着并启用对应插件 Unity · mcp-for-unity / mcpforunityserver(Coplay) · mcp__unity__ · Unity 编辑器装了 MCP for Unity 包并开着工程 Figma · figma-console-mcp(npm;也可改连官方桌面版 MCP) · mcp__figma__ · Figma 桌面版 + Desktop Bridge(console)或 Dev Mode 官方 MCP Photoshop · @alisaitteke/photoshop-mcp(npm,COM / ExtendScript) · mcp__photoshop__ · Windows(或 macOS)装有 Photoshop 并开着 Chrome · chrome-devtools-mcp(npm) · mcp__chrome__ · 本机 Google Chrome;可独立启动或连已有实例 Windows · Windows-MCP(PyPI) · mcp__windows__ · Windows;stdio 由插件拉起,或连已有 HTTP 服务 桌面控制 · 插件自带经纪人(UI Automation) · mcp__desktop__ · Windows;随插件提供,打开「启用」即可,无需下载 Notion · Notion MCP(经 mcp-remote OAuth 桥) · mcp__notion__ · 首次 OAuth;token 在 %USERPROFILE%.mcp-auth Gmail · 插件自带(IMAP imap.gmail.com / SMTP smtp.gmail.com) · mcp__gmail__ · 需要填写地址和应用专用密码;send_message 会直接发信 Cloudflare · Cloudflare API MCP(经 mcp-remote) · mcp__cloudflare__ · 首次 OAuth(scope=offline_access) Cloudflare Docs · Cloudflare Docs MCP(公开 HTTP) · mcp__cloudflare-docs__ · 无需登录 GitHub · GitHub MCP(托管 HTTP) · mcp__github__ · PAT:设置 githubToken 或环境变量 GITHUB_MCP_PAT ComfyUI · comfy-mcp(PyPI) · mcp__comfyui__ · 本机 ComfyUI / comfy-cli Godot · godot-ai(PyPI,godot-ai attach) · mcp__godot__ · Godot 4.7+ 编辑器开着项目,且项目启用了同版本 Godot AI 插件 FFmpeg · Kinocut(PyPI kinocut,原 mcp-video) · mcp__ffmpeg__ · 本机已安装 ffmpeg/ffprobe(PATH 或设置路径) Obsidian · obsidian-mcp-server(npm) · mcp__obsidian__ · Obsidian 开着 + 社区插件 Local REST API + API 密钥 REA 逆向分析 · rea-agents(npm rea-agents@6.4.0) · mcp__rea__ · Node.js ^22.19 / ^24.11 / >=26;原生二进制另需 Ghidra/Hopper/IDA DeepSlate · deepslate-mcp(MIT,启动本机检出目录,不内置) · mcp__deepslate__ · 本机已 clone 并 npm install && npm run build;Node.js 20+ Termalin · Termalin MCP(本机 termalin-mcp 或托管 HTTP) · mcp__termalin__ · 本机:已安装并运行 Termalin 应用;托管:Pro / 试用的 API 密钥 KiCad · KiCad MCP Pro(社区,uvx kicad-mcp-pro,不内置) · mcp__kicad__ · 本机 uv(uvx);ERC / DRC / 导出需 KiCad(kicad-cli) Fusion · Autodesk Fusion MCP Server(Fusion 内置,本机 HTTP 27182) · mcp__fusion__ · Fusion 开着,并在首选项里启用 MCP 服务器 FreeCAD · freecad-mcp(社区,uvx freecad-mcp,不内置) · mcp__freecad__ · 本机 uv;FreeCAD 装好 MCP 插件并启动 RPC 服务器(9875) MATLAB · MATLAB MCP Server(官方 Go 可执行文件,不内置) · mcp__matlab__ · 本机 MATLAB(有效许可)+ 自行下载的服务器 exe ESP-IDF · ESP-IDF MCP 服务器(idf.py mcp-server) · mcp__espidf__ · ESP-IDF v6.0+(EIM 安装)+ 项目目录 串口 · serial-mcp-server(社区,uvx,不内置) · mcp__serial__ · 本机 uv;串口设备 Rhino · RhinoAI(官方,默认)或 rhinomcp(社区) · mcp__rhino__ · Rhino 8 开着并装好对应插件 Altium · eda-agent(社区,不内置) · mcp__altium__ · Altium Designer 开着 + 自行安装的 eda-agent
组件依赖的运行时(uv + Python,或 Node.js)与各上游 MCP 包,都可以在设置页「下载安装」到插件数据目录的 tools/(见下文「数据目录」)。新鲜安装时所有工作组件 MCP 与会话控制均默认关闭(*Enabled: false),装好后在管理页逐个打开「启用」才会挂载对应 MCP。具体安装、桥接、端口与项目侧配置都在设置 UI 里完成,本 README 不重复操作步骤。
已内嵌:GameBot(src/components/gamebot/)、桌面控制(src/components/desktop/broker/dist/DSHDesktopBroker.exe,设置页「通用」分组,打开「启用」即可;npm 包内已含,git 检出需 npm run build:desktop 构建,要求 .NET SDK 8+)。
deepslate-mcp(MIT,© Philogag contributors;渲染引擎 misode/deepslate,MIT,© Misode)把 .nbt / .schem / .litematic 结构文件渲染为 PNG。本组件在「工作组件」分组,默认关闭;只启动您本机已有的 deepslate-mcp(node /bin/deepslate-mcp.js),不从网络下载,也不把上游源码放进本仓库。工具说明保持上游英文原文。
git clone https://github.com/Philogag/deepslate-mcp,在目录内执行 npm install 与 npm run build(需 Node.js 20+,原生依赖 gl 需能在本机编译或下载预编译包);在设置中填写「deepslate-mcp 目录」,或点击「安装」把本机已有的检出目录(设置中的目录或主目录 / 桌面 / 文档下的 deepslate-mcp)复制到 tools/deepslate(原目录保留,跳过 .git;目录留空时自动使用该副本),再打开「启用」。client.jar(「client.jar 路径」,即 DEEPSLATE_JAR_PATH),或由上游首次运行时从 Mojang 下载并缓存在本机(「材质缓存目录」,即 DEEPSLATE_CACHE_DIR)。本插件从不打包或分发 Mojang 资源,使用须遵守 Minecraft EULA。OPEN_PREFIXES),与 mc_* / mcp__gamebot-* 的场景限制无关;聊天室调用时宽高上限 1600 像素(上游允许 64–4096)。Termalin 是 SSH 客户端,自带 MCP 服务器。本组件在「工作组件」分组,默认关闭,不内置、也不自动安装 Termalin。工具说明保持上游英文原文。
termalin-mcp,所有套餐可用。先安装 Termalin(winget install Termalin.Termalin、Microsoft Store、scoop 或官网安装包),在应用「Settings → Security → Agent Access (MCP)」中允许需要的主机,并把「Connect an assistant」里显示的 termalin-mcp 路径填入设置 termalinCommand(留空时自动探测常见位置和 PATH)。实时终端类工具要求应用保持运行。https://termal.in/api/v1/mcp,请求头为 Authorization: Bearer tk_live_…。API 密钥在 termal.in/account 的「API keys & MCP」中创建,需 Pro 或试用;只能访问已注册 Connector 的服务器,每分钟约 60 次、单次约 90 秒。密钥按其他密钥的方式保存在本机设置中,界面与接口只返回掩码。https://termal.in/mcp 需要浏览器 OAuth 2.1 授权流程,插件内不支持;填写该地址会被拒绝,请改用 API 密钥端点。mcp__termalin__ 前缀强制拒绝,即使该工具被误加入开放清单也不会放行。使用社区服务器 KiCad MCP Pro。本组件在「工作组件」分组,默认关闭,经 stdio 启动用户自己的副本(默认命令 uvx kicad-mcp-pro,首次运行由 uv 从 PyPI 下载到 uv 缓存)。本插件不内置、不打包、不分发其代码。
LICENSE 为 MIT;如所装版本采用 PolyForm Noncommercial,则只能用于非商业用途。KICAD_MCP_PROJECT_DIR,留空时可用工具 kicad_set_project 选择)、工具配置(KICAD_MCP_PROFILE:default / pcb_only / build / release / expert / full)、操作模式(KICAD_MCP_OPERATING_MODE:readonly / write / manufacturing,默认 readonly)。winget install astral-sh.uv)。ERC / DRC / 导出依赖 KiCad 自带的 kicad-cli;实时编辑依赖正在运行的 KiCad 及其 IPC 接口。mcp__kicad__ 工具都只有所有者(本机桌面端,或 Telegram 用户 ID 为所有者 ID 的消息)发起的任务可以使用,代码层按前缀强制拒绝。使用 Autodesk Fusion 内置的 Fusion MCP Server。本组件在「工作组件」分组,默认关闭,经 Streamable HTTP 连接本机服务器(默认 http://127.0.0.1:27182/mcp,不需要密钥),不启动任何进程。
fusion_mcp_read 只读;fusion_mcp_execute / fusion_mcp_update 会修改设计。需要只读时请在对话中明确要求模型只用 fusion_mcp_read(仅为提示,不是强制)。mcp__fusion__ 工具都只有所有者(本机桌面端,或 Telegram 用户 ID 为所有者 ID 的消息)发起的任务可以使用,代码层按前缀强制拒绝;聊天室中仅所有者触发的轮次可用。使用社区服务器 freecad-mcp,经 stdio 启动用户自己的副本(默认 uvx freecad-mcp)。本插件不内置、不打包、不分发其代码。
addon/FreeCADMCP 放进 FreeCAD 的 Mod 目录,重启 FreeCAD,切到「MCP Addon」工作台,点「Start RPC Server」(端口 9875)。--host,本机留空)、仅文字反馈(--only-text-feedback,不回传截图)、令牌(FREECAD_MCP_TOKEN,按密钥处理,不显示)。mcp__freecad__ 工具都只有所有者(本机桌面端,或 Telegram 用户 ID 为所有者 ID 的消息)发起的任务可以使用,代码层按前缀强制拒绝;聊天室中仅所有者触发的轮次可用。使用 MathWorks 官方 MATLAB MCP Server(Go 可执行文件),经 stdio 启动用户自己下载的 exe。本插件不内置、不下载该程序。
matlab-mcp-server-windows-x64.exe,在设置里填写其路径(或放进 PATH)。--matlab-root)、初始工作文件夹(--initial-working-folder)、显示模式(--matlab-display-mode)、会话模式(--matlab-session-mode:auto / new / existing;existing 时只连接已共享的会话)、遥测(默认关闭,传 --disable-telemetry=true)。mcp__matlab__ 工具都只有所有者(本机桌面端,或 Telegram 用户 ID 为所有者 ID 的消息)发起的任务可以使用,代码层按前缀强制拒绝;聊天室中仅所有者触发的轮次可用。使用 ESP-IDF 自带的 MCP 服务器,默认命令 eim run "idf.py mcp-server",经 stdio 启动;项目目录经 IDF_MCP_WORKSPACE_FOLDER 传入。
mcp 功能;设置里必须填写一个已存在的项目目录。mcp__espidf__ 工具都只有所有者(本机桌面端,或 Telegram 用户 ID 为所有者 ID 的消息)发起的任务可以使用,代码层按前缀强制拒绝;聊天室中仅所有者触发的轮次可用。独立的「串口」组件(不放在 ESP-IDF 里,任何串口设备都能用),使用社区服务器 serial-mcp-server,默认 uvx --from serial-mcp-server serial_mcp。本插件不内置其代码。
SERIAL_MCP_PLUGINS,默认不加载;可填 all 或逗号分隔的名字)。工具名分隔符固定为 _(模型接口不接受带点的工具名),默认关闭追踪。mcp__serial__ 工具都只有所有者(本机桌面端,或 Telegram 用户 ID 为所有者 ID 的消息)发起的任务可以使用,代码层按前缀强制拒绝;聊天室中仅所有者触发的轮次可用。默认使用 McNeel 官方 RhinoAI(rhino-mcp-router --default-version 8,stdio);也可在设置里改为社区 rhinomcp(uvx rhinomcp,连接 Rhino 内 TCP 端口,默认 1999)。
MCPConnect 查看路由程序命令;若不在 PATH,把完整命令填进设置。mcpstart;可在设置中关闭脚本执行(RunCommand / RhinoScript / C#)。mcp__rhino__ 工具都只有所有者(本机桌面端,或 Telegram 用户 ID 为所有者 ID 的消息)发起的任务可以使用,代码层按前缀强制拒绝;聊天室中仅所有者触发的轮次可用。使用社区服务器 eda-agent,默认命令 eda-agent(按上游说明自行安装)。本插件不内置其代码。
EDA_AGENT_TOOLSET=minimal(tool_catalog / tool_invoke 按需调用全部功能),需要时可在设置里改为 full。EDA_AGENT_DISABLE_DASHBOARD=1)、界面自动化(可关闭)。需要 Altium Designer 正在运行。mcp__altium__ 工具都只有所有者(本机桌面端,或 Telegram 用户 ID 为所有者 ID 的消息)发起的任务可以使用,代码层按前缀强制拒绝;聊天室中仅所有者触发的轮次可用。在 DSH Desktop 里让智能体用内置的 plugin_manager 安装 bundle(不要自己在 profile 目录里跑 npm / pnpm,install_bundle 会完成包安装和 bundle 选择):
dsh-work-components」。lib/ 构建产物)。本包的 prepare 仅在缺少 lib/index.mjs 时才会执行 npm run build(例如从 git 源码安装);从 npm 安装时通常已有产物并跳过。若 plugin_manager 列出待批准的构建脚本,先确认来源再批准 dsh-work-components 的 prepare(pnpm ≥10 可能还需在 profile 的 pnpm-workspace.yaml 里允许该包)。桌面经纪人 exe 随 npm 包分发;纯 git 安装且本机无 .NET SDK 时,桌面控制需另跑 npm run build:desktop(或改用 npm 包)。list_bundles / list_plugins 确认 dsh-work-components 已启用;结果是 restart-required 时重启 DSH Desktop。替换已装的版本(升级)同样需要重启才会加载新代码。卸载:plugin_manager 的 remove_bundle。数据目录(设置、已下载的工具、GameBot 数据)不随包删除,需要时手动删掉。
要求:DSH Desktop(运行时 Node ^22.19 || >=24,与 package.json 的 engines 一致;会话控制要用 zstd);Office / Photoshop / Windows / 桌面控制等组件只在 Windows 上可用。桌面控制随插件提供,不需要单独下载或安装 .NET。装好后可用设置页打开「启用」并调用 mm_send_image 等工具做一次冒烟;仓库 CI(.github/workflows/ci.yml)在 PR / push 时跑 check + smoke。
插件不往自己的包目录写任何东西(升级时包目录会被整个替换)。可写状态都在 $DSH_HOME/data/dsh-work-components/(DSH_HOME 缺省 ~/.dsh;可用 DSH_WORKBENCH_DATA_DIR 整体改位置):
路径 · 内容 settings.json · 没有 DSH 设置服务时的设置持久化(可用 DSH_WORKBENCH_SETTINGS_FILE 改) tools/ · 「下载安装」落地的 uv / Python / Node.js / 各组件(可用 DSH_WORKBENCH_TOOLS_DIR 改) local-components/ · 本地兼容组件源码(可用 DSH_WORKBENCH_LOCAL_COMPONENTS_DIR 改) gamebot/ · GameBot 的 Python 环境(.venv)与数据(data/game-configs.json、记忆等;含服务商密钥明文) cards/ · 牌类规则源(src/rlcard/,用户从设置页下载,不随包分发)和按游戏、会话分开的存档(saves/)
从旧版本(直接在仓库目录里运行)升级时,首次启动会一次性迁移:仓库根的 .dsh-workbench-settings.json 移到 settings.json,src/components/gamebot/data/ 移到 gamebot/data/;已有的 tools/、local-components/ 里有绝对路径(venv),所以原地沿用并记录在 legacy-locations.json。迁移记录在 migration.json,不会重复执行。
GET /dsh-workbench/api/settings 返回的密钥字段(令牌、API key、密码)一律是占位值 __dsh_secret_saved__;POST 原样带回占位值 = 保持不变,传空字符串 = 清除。
多模态:mm_send_image(本地图片 → Host attachmentId;render=text+image;UI:presentationMeta.mm → turnTail MmCard,toolview 仅 pending/compact)。
地图(默认关闭):在设置页启用并保存高德 Web 服务 Key 后,提供地理编码、地点检索、路线规划、天气预报、地图标点卡片与可点击的路线图。标点卡片在页面上可打开高德地图;发到 Telegram 时改为原生命置,不再发送静态地图图片。路线图点开后进入高德导航页,并附带可在手机打开的网页分享链接与导航深链,坐标为 GCJ-02。可将分享链接通过 Telegram 发送,或复制到系统浏览器打开;该链接适用于 iOS 与 Android。导航深链(amapuri)供 Android 与 HarmonyOS 直接打开。上述方式不写入高德账号收藏夹。Key 只保存在设置页,不读取环境变量。设置项「绕过代理」默认开启,高德请求不使用系统或环境变量中的 HTTP 代理。静态地图预览经 attachments.saveImage 发出,不落盘缓存。媒体卡片中的图片可点击放大。
GPT Image 2 生图(「多模态」分组,默认关闭):在设置页填写 API Key、Base URL(默认 https://api.openai.com/v1)、模型(默认 gpt-image-2)与默认尺寸 / 质量并打开「启用」后,注册 image_generate(POST {base}/images/generations)与 image_edit(POST {base}/images/edits,multipart,1–16 张本地 png/jpg/webp 与可选 PNG 蒙版)。返回的 b64_json 或 url 图片保存到数据目录 images//(上海时区),经 attachments 以图片块显示,并返回文件路径。「测试连接」只请求 GET {base}/models,不产生出图费用。API Key 为 secret 设置项,设置接口只返回掩码,错误信息中出现的 Key 会被打码。Telegram:两个工具都不在 OPEN_TOOLS 中,只有授权用户(所有者)触发的回合可用——image_generate 消耗付费额度,image_edit 会读取本机任意图片并上传到第三方。
视频理解(「多模态」分组,默认开启):经 Google Gemini 观看视频。设置项为「启用」「Gemini API 密钥」「模型」(默认 gemini-3.8-flash)「YouTube 链接」「哔哩哔哩链接」与「yt-dlp 路径」;组件卡片中的状态框显示密钥来源与末四位掩码、会话工具是否已挂载、正在使用的 yt-dlp 版本与来源。密钥只用本组件单独配置的 videoGeminiKey(输入框与其他密钥一致:已保存时留空并显示「已配置 ••••xxxx」,输入新值即替换,「清除」删除)(与「余额查询」各服务商密钥相同的做法:设置中按密钥保存、界面只显示掩码;不沿用聊天室转写密钥或成员凭据,也不读取环境变量),未填写时状态为「未配置密钥」;密钥只放在请求头中,不写入日志,也不经设置接口返回。聊天室语音转写与原生 Gemini 成员的「视频输入」仍用各自原来的密钥;访问 Gemini 时沿用聊天室的 Telegram 代理设置。
watch_video 就某一时间段提问;原生 Gemini 成员可在成员设置中开启「视频输入」,直接收到最新消息中的视频。describe_video(整体描述)与 watch_video(按问题与时间段观看,相同问题直接返回上次的回答)。参数可为本机视频文件的绝对路径(不超过 200 MB)、YouTube 公开链接(不下载,直接交给 Gemini)或哔哩哔哩链接。不超过 14 MB 的视频内联发送,更大的经 Gemini Files API 上传,48 小时内复用。Telegram:两个工具都不在 OPEN_TOOLS 中,只有授权用户(所有者)触发的回合可用(会把本机文件上传给 Google)。PATH → 按需下载的副本。组件卡片的「下载 yt-dlp」(下载后变为「更新 / 重新下载 yt-dlp」)与棋类辅助引擎同一做法:只在设置页(本机,即所有者)点击时,从官方 GitHub 发布页取最新正式版中适合本平台的单文件程序(Windows yt-dlp.exe、macOS yt-dlp_macos、Linux yt-dlp_linux 等),用同一版本的 SHA2-256SUMS 校验 sha256(不符即删除),放到 /bin/,并记录版本;下载过程显示进度,完成后清除检测缓存。没有注册为 AI 工具。版本号先问 GitHub API(带 User-Agent 与 Accept: application/vnd.github+json);API 失败时(常见:未登录请求每小时 60 次的上限在共用代理出口上用完,返回 403)改读 github.com/yt-dlp/yt-dlp/releases/latest 的跳转目标取版本号,程序与校验文件都从 github.com/…/releases/download// 下载,sha256 校验照样强制。所有请求与其他下载一样走设置「下载代理」(留空时用环境变量 HTTPS_PROXY / HTTP_PROXY),失败时给出中文原因。棋类辅助引擎的下载同样改为走「下载代理」。视频下载到数据目录 videos//(会话工具)或房间附件目录(聊天室)后按普通视频处理,单个不超过 25 MB。未检测到 yt-dlp 或下载失败时给出原因。watch_video 与视频输入,会话工具卸下;已保存的视频与描述保留。旧版设置键 chatroomVideoEnabled / chatroomVideoModel(原在聊天室「附件与语音」中)仍会读取,并在启动时迁移到本组件。日历(默认开启):calendar_show、calendar_event_save、calendar_event_delete。公历、农历、节气和中国法定节假日(含调休)由 lunar-javascript 离线计算,「今天」按 Asia/Shanghai。日程写在数据目录 calendar/events.json,不放进设置。天气预报来自 Open-Meteo(CC BY 4.0),填写设置项「天气城市」后按接口能提供的最长天数查询,不使用高德 Key,请求沿用当前进程的代理。未填城市时历法与日程仍然可用。聊天卡片和设置页「日历」共用同一块月历,每种天气有一枚动态小图标。发到 Telegram 时,calendar_show 的卡片另成一条 HTML 月历(天气用对应表情),模型的文字回复仍走原通道。
牌类(默认关闭):card_open、card_look、card_play、card_close、card_reset。可打二十一点、勒杜克扑克、限注德州扑克、UNO(2 至 10 人)和斗地主。规则源是 RLCard(MIT,钉死提交),在设置页下载到数据目录,不随本插件分发,也不运行它的对局或智能体。牌桌在对话右侧;发到 Telegram 时每一步用新图片替换上一张。对手的暗牌在公开前不会出现在工具结果或图片里。
模型能否收到图片,取决于 DSH 模型配置中声明的输入模态。须在 cordis.patch.yml 的 llm-pi-ai → providers → 对应服务商的 models 中,为该模型声明 input: [text, image](也可用服务商级的 defaultInput 统一声明);未声明时按纯文本模型处理,图片改为文字:聊天室由能识图的成员生成图片描述,其他场景由 Vision Router 插件把图片替换为文字说明。修改后需重新加载 DSH。示例:
- id: llm-pi-ai
name: "@deepseek-ai/dsh-llm-pi-ai"
config:
providers:
gpt:
apiKeyEnv: GPT_API_KEY
api: openai-responses
baseURL: https://api.example.com/v1
models:
- id: gpt-6.1-sol
name: gpt-6.1-sol
input:
- text
- image视频不受 input 声明影响:DSH 不向模型转发视频,所有视频均经「多模态 › 视频理解」组件(Google Gemini)处理。其他成员看到内容描述并可调用 watch_video;原生 Gemini 成员开启「视频输入」后直接观看。
DSH 设置里的「工作组件」页:首页是功能列表(按分组),行首应用图标、行尾实时状态,点进该项的管理页。
分组 · 功能 · 列表状态(示意) · 管理页要点 多模态 · 媒体卡片 · mm_send_image · 可用 · mm_send_image 发图(API text+image;settled MmCard 在 turnTail,toolview 折叠后仍可见) 多模态 · 日历 · 已启用 · 月历、农历、节假日、日程;天气城市走 Open-Meteo 工作组件 · Office / Blender / Unity / Figma / Photoshop / Chrome / Godot / Windows / Notion / Gmail / Cloudflare / Cloudflare Docs / GitHub / ComfyUI / Termalin / KiCad / Fusion / FreeCAD / MATLAB / ESP-IDF / 串口 / Rhino / Altium / FFmpeg / Obsidian / REA 逆向分析(徽标「已验证」) · 已连接 / 已启用 / 未启用 / 未安装 / 出错 / 安装中… · 运行与连接说明、下载安装 / 卸载、「启用」、组件专属配置 本地兼容 · local-components// 下的用户模块(徽标「本地」;可用 env DSH_WORKBENCH_LOCAL_COMPONENTS_DIR) · 同上 · 与仓库自带同接口;详情页「启用」;管理页复制 PR 清单 / 打开 Compare(不自动 commit / push / gh pr create) 通道 · Telegram(徽标「已验证」,默认关闭) · 未启动 / 正在连接 / 已连接 / 未连接 / 出错 · 卡片内完成全部设置:启用、机器人令牌(存宿主凭据)、网络代理、所有者 / 允许的用户 ID、新会话预设、新消息插队;连接行显示实时说明或最近一条错误 游戏 · Minecraft / 文明 VI / 视觉(徽标「已验证」与「实验性」,默认关闭) · 未启动 / 已启动 / 出错… · 共享 GameBot REST + 按游戏 MCP;仓库自带无需下载,首次启用准备 Python 环境 游戏 · 牌类 · 未启用 / 已启用 · card_open 等;右侧牌桌;RLCard 在设置页按需下载,每种牌单独核对规则,不随包分发 通用 · 桌面控制 / 会话控制 / uv / Node.js / 下载代理 · 已连接 / 可用 / 未安装 / 已设置… · 桌面控制随插件提供,打开「启用」即可;其余为会话能力、运行时与代理 基础工具 · 添加工作组件 · 提示词工具 · Token 声明 + 可复制 AI 提示词:写成本地模块(不装进 tools/)。选型功能最全优先;应补可配置/必填参数(中文 label);本地阶段 keys + launch/spec 硬编码默认,拟议 schema 写注释;自定义键未进 schema 前不持久化。模块就位后重启 DSH,再在设置页下载安装。
有上游仓库的功能在标题旁显示蓝色网址文字(新标签打开)。管理页「‹ 返回」或 Esc 回列表;每页各自「保存」;「启用」拨动后立即单独保存(本地组件同样有启用开关,键 Enabled,缺省关)。安装进行中列表与管理页约每 1.5 秒刷新;有组件已启动时约每 5 秒刷新以跟上「已连接」。设置命名空间:dsh-workbench。
优先级:安装中 / 排队中 → 出错 → 已连接 → 已启动 → 未启动 / 未安装。
status: on):MCP 服务器已挂载,尚未确认够得着目标程序。status: connected):已启动,且 (a) 对应程序在运行,(b) MCP 层可达。探测在 GET /components 时按需进行(src/connect.mjs):只读、不拉起程序;结果缓存 PROBE_TTL_MS(6s),同一组件不并发,一轮共用一次进程列表;单次探测限时 PROBE_TIMEOUT_MS(15s)、工具调用默认限时 4s;请求最多等 1.5s,未完成的下次再带。工具经 ctx.tools 里 dsh-mcp-client 已有连接直接执行。上次已连接而本次工具超时则暂保持已连接并注明。组件重挂后旧结果作废。
组件 · (a) 程序在运行 · (b) MCP 够得着 Office · 进程 WINWORD / EXCEL / POWERPNT 等(含 Visio、Outlook、WPS 等) · RunningApps(COM,只读)非空 Blender · 进程 blender · 已注册工具 + TCP 连插件端口(BLENDER_HOST:BLENDER_PORT,默认 localhost:9876) Unity · 进程 Unity · 已注册工具 + 按 ~/.unity-mcp(或 UNITY_MCP_STATUS_DIR)端口文件与默认 6400 做桥接 ping Figma(console) · 进程 Figma(不含 figma_agent) · figma_get_status 中 transport.websocket.available Figma(官方) · 进程 Figma · TCP 连官方 MCP 地址(默认 127.0.0.1:3845) Photoshop · 进程 Photoshop · photoshop_ping 成功(PSMCP_FEEDBACK=0、ANALYTICS_DISABLED=1) Chrome(launch) · chrome-devtools-mcp 专用配置目录被 Chrome 占用 · list_pages 成功(未占用时不调,避免拉起 Chrome) Chrome(autoConnect) · chrome + 渠道默认配置目录有 DevToolsActivePort 且端口开 · list_pages 成功 Chrome(browserUrl) · GET /json/version 成功 · list_pages 成功 Godot · 进程名以 Godot 开头(不含 venv 里的 godot-ai) · 已注册工具 + session_manage(op=list) 有会话 + editor_state 成功 FFmpeg · 本机能解析到 ffmpeg(PATH 或 ffmpegPath) · MCP 已就绪(Kinocut 不依赖常驻 GUI) Obsidian · 进程 Obsidian · 已注册工具 + TCP 连 Local REST API(obsidianBaseUrl,默认 127.0.0.1:27123) REA 逆向分析 · (无常驻 GUI) · MCP 已挂载(静态分析无需外部程序;原生需 Ghidra/Hopper/IDA) 桌面控制 · 不要求单独的业务进程(本机桌面) · 已注册工具 + status 成功
组件文件夹约定见 docs/component-module.md(布局、稳定导出、共享层、新增检查清单)。
src/
index.mjs 宿主入口:SettingsSchema、API、mm_send_image
components.mjs 兼容再导出 → ./components/
components/ 仓库自带组件 + shared / registry / manager
connect-lib.mjs 「已连接」共享原语(进程 / TCP / MCP 调用)
connect.mjs 汇总各组件 app/probe,提供 probeComponent
tools.mjs 数据目录 / 迁移、tools/ 布局、下载、uv / Node / npm / venv 安装
component-sdk.mjs 本地组件 SDK(shared + tools + connect-lib;构建成 lib/component-sdk.mjs)
lib/
index.mjs 构建产物(宿主)
local-loader-worker.mjs 构建产物(本地组件加载子进程)
component-sdk.mjs 构建产物(本地组件 SDK,`dsh-work-components/sdk`)
client.js 前端设置页、mm_send_image toolview(pending)与 turnTail MmCard(ModuleLoader)
office/launch.py OfficeMCP 启动包装(stdio 友好)
cordis.patch.yml bundle 层,插入宿主插件行
docs/component-module.md 组件模块约定(含 bundled vs local)
scripts/ build、vendor:sync、各类 smoke
locale/ icon.svg 插件管理器里的标题 / 简介 / 图标托管安装:设置页可把 uv、Node.js 与各组件装进数据目录的 tools/(.dsh-install.json 记版本)。启动查找顺序一般为:托管 tools/ → 设置路径 → 系统 / 旁路回退(如 uvx、npx、旁边的 ../officemcp)。Figma「官方桌面版 MCP」模式走 streamable-http,不需本地包。测试可用环境变量 DSH_WORKBENCH_TOOLS_DIR 改落地目录。
同源 API(前缀 /dsh-workbench/api):
方法 · 路径 · 说明 GET/POST · /settings · 读写 dsh-workbench 设置(密钥打码,见「数据目录」) GET · /components · { ok, dataDir, toolsDir, localComponentsDir, contributeCompareUrl, components };组件含 moduleSource(bundled/local)、status、connection、install、source(启动来源)等 GET · /components//contribute · 仅 local:PR 清单、文件列表、compare URL、命令模板 | POST | /components//install | 开始(重新)安装,202;冲突 409。id:uv / node / office / … / godot / ffmpeg