
GitHub: https://github.com/wonderwhy-er/desktopcommandermcp
DesktopCommanderMCP 是一个 MCP(Model Context Protocol)服务器,把 Claude/Cursor/Windsurf 等任意 AI 客户端接到「主机的真桌面」,让本机每一个能力(文件、终端、进程、浏览器、DOCX/PDF/Excel)都成为 AI 一次函数调用可达的资源。
# | 素材 | 类型 | 来源 |
|---|---|---|---|
1 | https://desktopcommander.app/(首页 hero) | hero | 官网 |
2 | README header.png | hero | README 官方主视觉 |
3 | https://cursor.com/deeplink/mcp-install-dark.svg | 标识 | README(MCP 一键装视觉符号) |
4 | docs/index.html | 架构 | 项目自带活文档(53 次变更) |
5 | https://discord.gg/kQ27sNnZr7 | 社区 | 官方 Discord 入口 |
已筛选:README 7 个 excluded 主要是 favicon/logo,
docs/optimized_images/*29 次变更的小图未 verified 故未列入。
维度 | 数据 |
|---|---|
GitHub | https://github.com/wonderwhy-er/desktopcommandermcp |
Star / Fork | 7,241 / 921 |
Watcher | 111 |
Open Issue / PR | 124 / 36 |
代码行数 | 50,575(TypeScript 39.8% + JavaScript 24.1% + JSON 29.6% + 其他) |
文件数 | 261(TS 115) |
项目年龄 | 19.2 个月(2024-12-04 → 2026-07-10) |
总 commits | 546 |
开发阶段 | 稳定维护(近 30 天 22 commits,近 90 天 57 commits) |
开发模式 | 职业项目(周末 13% / 深夜 14.5%,欧洲时区独立开发者节奏) |
贡献模式 | 单人主导(68.5%)+ 稳定副手(serg33v 78 / dasein 52 / edgarsskore 36 commits) |
热度定位 | 大众热门(Smithery / SourceForge / mcp.so / Cursor Plugin / Anthropic Marketplace 多渠道分发) |
License | MIT |
质量评级 | 代码[良好] 文档[优秀] 测试[基本] CI[基本] 错误处理[规范] |
当前版本 | v0.2.45(共 55 个 tags / 37 个 releases) |
Eduard Ruzga(@wonderwhy-er),14 年 GitHub 老号,拉脱维亚里加,现任职 Prezi communication tools。硕士论文落到欧盟流体动力学基金;早年 Flash 游戏/3D Max/social games 出身(出于变现伦理脱离 game dev);自学路径 Photoshop→3D Max→编程,在 TOP US MOOC 时代系统性补 AI/Ruby/Unity。强烈「教+做」倾向——写了十几个 Custom GPT(Text2Music / GPT Shield / MenuVision / Tales from AIsteros 等)。
「单人坚持 19 个月 + 7.2k stars + 多客户端布局的 MCP 服务器」这个产出量级,几乎是 MCP 单体 server 的天花板。但他并非孤狼——serg33v 在 terminal/process 方向长期贡献 78 commits,edgarsskore 36 commits,加上 dasein 52 commits 平衡,「白天 Prezi 上班 + 晚上造工具」的稳定小队节奏清晰可辨。
Eduard 看到的不是「AI 会不会取代开发者」这类宏大问题,而是一个非常具体的工程摩擦:Anthropic 官方的 filesystem server 只让 AI 读,写/执行得自找。GitHub 上一时间出现了 6+ 个直接竞品(filesystem、commands、interactive-terminal、terminal、computer-use),但大多是「能做但不达意」——没有 prompt 工程把「为什么不用 analysis tool 做本地分析」这类反向陷阱写进工具描述。
这是一个用 prompt 文档维度而不是协议维度卡位的机会。MCP 协议 2024-11 公开后第 4 周,他就动手了——这是「早期切入 AI 控制本地电脑赛道」的代表,比 Dify / LobeHub / Continue / CopilotKit 等通用 agent 平台更聚焦。
解法不是「做更准的 diff」也不是「做更稳的 sandbox」,而是「做更对 LLM 友好的接口契约」:
interact_with_process 的描述里写了 5 段「为什么这个比 analysis tool 强」,从根上反复 prompt injection 风格的「NEVER use analysis tool for local file access」。buildPermissionError() 列出 cloud storage、未挂载网络盘、macOS Full Disk Access 五个可能成因并各附 fix 命令。allowedDirectories + blockedCommands + symlink guard,加上 onboarding 时把「first 5 commands are safety defaults」写进 prompt。{-removed-}{+added+}——LLM 拿到 diff 后自我纠正,不需要人工介入。明确选择不做的:不做全自动化 fuzzy 替换(注释里有 TODO,但作者选择「展示 diff 让 LLM 自纠」而非「猜着改」);不把代码拆成多个 MCP server(宁愿单仓 1693 行 server.ts + 27 tools,也不分解为多 server)。
Eduard 把 DesktopCommander 当作AI 桌面代理入口的主线(standalone macOS/Win app + npm MCP server 两条腿),并在 2025 启动 ai-sdk-provider-codex-app-server 这条平行 fork,做多模型后端抽象——意思是 Codex/GPT/Claude 这些「客户端」在他眼里都是可替换的转接头,真正卡位的是本机执行层。官网已经开放 Credits Plan(20–200/月),商业化路径在走,但开源主线仍是 MIT 完全开源 + Anthropic Marketplace 原生上架——典型的「open-core + SaaS 服务」的早期 indie 路径。
indexOf 精确 → expected_replacements 校验 → fastest-levenshtein + 双向 Suffix/Prefix 锚定的 fuzzy。失败时不直接替换,而是把字符级 diff {-removed-}{+added+} 展示给 LLM,让模型自纠。整个 fuzzy 跑在 worker_threads + eval: true 内联代码 + worker.unref(),主线程不被卡。
notifications/message,初始化前缓冲在内存 replay;按 client 关闭(Cline/VSCode 把 notifications 当 input 误读)。这是「stdio 上跑任何带调试输出的 npm 模块」的通用解法。
realpath,再 join 所有未存在的 basename 段拿到最终的 resolvedPath。这能防住「先在 allowed 目录里建一个 symlink 指 /etc/,再请求写 allowed/symlink/newfile」的 path-traversal 攻击——很多 MCP filesystem server 都没写得这么成熟。
edit_block 的 old_string/new_string API 完全相同 → compact + repack。compact→pretty→compact 是无损互转(<w:t> 文本节点空白不动)。这个思路可平移到 XLSX、PPTX、ODT。
AsyncLocalStorage 把 widget 起源(args.origin === 'ui')设为「零遥测」上下文栈,capture() 检测到栈内则全丢事件。预览组件的程序化 read_file/edit_block/list_directory 不会污染分析漏斗。
{-removed-}{+added+} 语义 diff:LLM-side 的 edit 校错闭环——预期 vs 实际 → 字符级 diff 直显 → agent 自动修复输入 → 再发起一次。这种「展示而非抛错」对 agent 友好度 >> 对人友好度。
~/.claude-desktop/config.json、写注册表)逻辑做成独立 runtime 入口(bin: "setup"、bin: "remove"),不混在 src/server.ts——任何有「install 时副作用」的 npm 包都该这样。
process.env.DC_REMOTE_DEVICE === 'true' 标注意图,并在模块变量之间干净切换,telemetry 分别归因。
维度 | DesktopCommander | @server-filesystem | mcp-interactive-terminal | mcp-terminal(中文圈) | computer use |
|---|---|---|---|---|---|
定位 | 本地执行层(全栈) | 必选基础(只读) | 真交互 shell | 中文圈 MCP 终端 | 截屏虚拟桌面 |
工具数 | 27+ | ~14 | ~5 | ~5 | 内置 |
文件格式 | DOCX/PDF/Excel/Image/Binary 全 coverage | text/image | 仅 text | 仅 text | 视觉 |
REPL/process | 完整异步 4 工具 | 无 | 强 | 中 | 无 |
edit | 精确+fuzzy+diff 显示 | 不含 edit | 不含 | 不含 | 视觉点击 |
安全 | realpath 向上爬 + blockedCommands | 简单 allowedDirectories | 弱 | 弱 | Anthropic 沙箱 |
跨客户端 | 8+ 客户端原生 | 8+ | 少 | 中文圈 | 仅 Claude |
部署难度 | npx 一键 | npx 一键 | npx | npx | 内置 |
Token 消耗 | 低 | 低 | 低 | 低 | 高(截图) |
在整个 AI agent 技术生态中,DesktopCommander 扮演的是「AI 可调用的本机操作系统层」——不是卷 MCP 工具品类,而是爬一整条价值链:从 filesystem server → AI 可执行的本地 OS API 层。它的真正 niche 是 execution layer,这个位置至今没有竞品占据。官网标语「Most AI assistants talk. Desktop Commander executes.」精准说出了这一定位。
src/tools/edit.ts 顶部明写「TECHNICAL DEBT」,text edit 不走 handler,与 Excel 不对称——功能够了但演进会卡。--no-onboarding 标续模式 + env 紧急 kill switch 可控。@wonderwhy-er/desktop-commander 与 GitHub 仓库名 desktopcommandermcp 不一致:历史 copy-mistake 但已稳定 npm 名称,重命名代价 ≥ 收益。npx @wonderwhy-er/desktop-commander@latest setup,一条命令搞定。src/tools/edit.ts 的 performSearchReplace —— 精确→模糊→Worker thread 隔离的范式src/tools/filesystem.ts#validatePath —— realpath 向上爬的 sandbox 实现src/custom-stdio.ts + CUSTOM_STDIO_EXPLANATION.md —— console → JSON-RPC 转换的 300 行专文src/utils/process-detection.ts —— REPL state 启发式识别(不用 polling)src/utils/files/docx.ts —— DOCX 即 XML 的跨格式 tricksrc/utils/capture.ts —— AsyncLocalStorage 隔离 UI/agent 调用setup-claude-server.js —— 945 行单文件的 install 时副作用外化docs/index.html(活文档)建立整体架构,再按上面 7 个文件深入。
tools/edit.ts 的 performSearchReplace 统一到 TextFileHandler.editRange(),消除标注的 TECHNICAL DEBT。未收录