项目简介
Desktop Commander MCP 为 Claude 等 AI 助手提供终端控制、文件搜索与代码编辑能力。支持执行命令、管理进程、读写文件以及文本替换。基于 MCP Filesystem Server 构建,新增交互式进程控制与文件预览功能。
README 预览
# Desktop Commander MCP\n### Search, update, manage files and run terminal commands with AI\n\n[](https://www.npmjs.com/package/@wonderwhy-er/desktop-commander)\n[](https://agentaudit.dev/skills/desktop-commander)\n[](https://archestra.ai/mcp-catalog/wonderwhy-er__desktopcommandermcp)\n[](https://smithery.ai/server/@wonderwhy-er/desktop-commander)\n[](https://www.buymeacoffee.com/wonderwhyer)\n\n\n[](https://discord.gg/kQ27sNnZr7)\n\n\nWork with code and text, run processes, and automate tasks, going far beyond other AI editors - while using host client subscriptions instead of API token costs.\n\n\n \n\n\n## 🖥️ Try the Desktop Commander App (Beta)\n\n**Want a better experience?** The Desktop Commander App gives you everything the MCP server does, plus:\n\n- **Use any AI model** — Claude, GPT-4.5, Gemini 2.5, or any model you prefer\n- **See file changes live** — visual file previews as AI edits your files\n- **Add custom MCPs and context** — extend with your own tools, no config files\n- **Coming soon** — skills system, dictation, background scheduled tasks, and more\n\n**👉 [Download the App](https://desktopcommander.app/#download)** (macOS & Windows)\n\n> The MCP server below still works great with Claude Desktop and other MCP clients — the app is for those who want a dedicated, polished experience.\n\n## Table of Contents\n- [Features](#features)\n- [How to install](#how-to-install)\n- [Getting Started](#getting-started)\n- [Usage](#usage)\n- [File Preview UI & Markdown Editor](#file-preview-ui--markdown-editor)\n- [Handling Long-Running Commands](#handling-long-running-commands)\n- [Work in Progress and TODOs](#roadmap)\n- [Sponsors and Supporters](#support-desktop-commander)\n- [Website](#website)\n- [Media](#media)\n- [Testimonials](#testimonials)\n- [Frequently Asked Questions](#frequently-asked-questions)\n- [Contributing](#contributing)\n- [License](#license)\n\nAll of your AI development tools in one place.\nDesktop Commander puts all dev tools in one c
常见问题 (5)
故障排除当 read_multiple_files 返回多个大图片时,如何修复“MCP error -32000: Connection closed”错误?
将 **Remote Desktop Commander 升级到 0.2.51 或更高版本**。0.2.51 版本对过大的 read_multiple_files 响应进行了防护,使其不会超过 MCP stdio 缓冲区;并且当本地 Desktop Commander 子进程终止时,它会立即使进行中的调用失败。
根本原因:在 @modelcontextprotocol/sdk 1.30.0 中,StdioClientTransport 默认使用 **10 MiB 读取缓冲区**,当单条消息超过该限制时会关闭传输。多个 Base64 编码的图像很容易超过此限制——例如,约 8.8 MB 的源图像在计入 JSON 开销之前就会产生约 11.8 MB 的 Base64 数据。
0.2.47 的临时解决方法:
1. 逐个或以更小的批次读取 PNG/JPEG 文件。
2. 将合并后的 Base64 负载保持在 10 MiB 以下;考虑到 Base64 和 JSON 的开销,建议保守地将每次请求的源图像控制在 **7 MB 或更小**。
3. 如果客户端报告 Not connected,请重启 Remote Desktop Commander。
4. 减少每次 read_multiple_files 调用的文件数量后重试。
故障排除如何修复 Desktop Commander 远程连接在 WebSocket socket 1006 错误之后出现 "IncreaseConnectionPool" 并离线的问题?
将远程代理升级到 Desktop Commander 0.2.51 或更高版本;重连/连接池问题已在该版本中修复并得到确认。停止所有现有的远程代理,移除重复的 index.js remote/Node 进程,然后使用以下命令重启:
npx @wonderwhy-er/desktop-commander@latest remote
如需明确测试该修复版本,请使用:
npx @wonderwhy-er/desktop-commander@0.2.51 remote
在 0.2.47 版本上,重启代理只能暂时恢复连接。如果升级后错误仍然存在,尤其是同时伴随 Cloudflare 525 SSL 错误时,请检查网络/SSL 路径和 Desktop Commander 服务状态,因为这可能表明存在独立的服务容量或连接问题。
故障排除如何阻止 Desktop Commander MCP 服务器在 initialize 期间打开浏览器欢迎页面?
欢迎页面是 Desktop Commander 的首次运行引导,只会打开一次。若要在不显示该页面的情况下运行,请执行:
npx @wonderwhy-er/desktop-commander@latest setup --no-onboarding
你也可以在启动 Desktop Commander 时传入 --no-onboarding,或在其配置中设置 onboarding_injection: false。这样可以防止在无头(headless)、IDE 或 CI 环境中,MCP initialize 握手期间触发浏览器窗口和 utm_source 分析请求。
故障排除如何修复 `npm audit --omit=dev` 在 desktop-commander 0.2.52 中报告的高危漏洞?
这些漏洞已通过合并的生产依赖更新修复,该更新将 npm audit --omit=dev 的报告结果从 38 个降至 0 个。请在包含此修复的版本发布后升级到该版本:
npm install -g @wonderwhy-er/desktop-commander@latest
如果是通过 MCP 客户端配置启动的,请使用:
["-y", "@wonderwhy-er/desktop-commander@latest"]
然后重启 MCP 服务器,并使用以下命令进行验证:
node --version
npm audit --omit=dev
需要 Node.js **22.12 或更高版本**。在完成升级之前,请从 ChatGPT/MCP 配置中禁用或移除 desktop-commander,以避免授予不受限制的系统访问权限。
故障排除为什么在 Windows 上通过 Desktop Commander 执行 read_file 之后,os.replace() 或 fs.rename() 会失败并报错 'PermissionError: WinError 5'(ERROR_ACCESS_DENIED)?
原因:Desktop Commander 的 read_file 在读取因达到行数上限而提前停止时,会泄漏文件句柄。readFromStartWithReadline 跳出其 readline 循环并调用 rl.close(),但 readline.Interface.close() 并不会关闭底层的 fs.createReadStream,因此 Node 进程会一直持有该文件的打开状态,直到服务器退出。随后,Windows 会拒绝来自任何其他进程的原子重命名替换操作(os.replace()、fs.rename()、File.Move(...,true)、带有 MOVEFILE_REPLACE_EXISTING 的 MoveFileEx),并报错 WinError 5 / EPERM。
触发条件(已在 0.2.46–0.2.52 上确认,并在 0.3.0 中再次回归):只有当读取遇到 break 而非读到 EOF 时才会发生泄漏。示例:对一个 5 行的文件使用 length=5 读取(或对 1200 行的文件使用默认的 1000 行限制)会泄漏句柄;而对同一文件使用 length=6 读取则不会。你可以使用 Windows Restart Manager 验证锁的持有方(查找 Desktop Commander 的 node.exe)。
解决方法:
1. 释放现有锁:完全重启 Desktop Commander / Claude Desktop(正常关闭会释放所有泄漏的句柄;之后文件即可正常移动/替换)。
2. 避免触发新的泄漏:调用 read_file 时,传入大于文件总行数的 length,使流读到 EOF 并正常关闭。避免使用默认的 1000 行限制对大文件进行部分读取。
3. 代码修复(供贡献者参考):在所有四个 readline 调用点捕获输入的 ReadStream,在 finally 块中调用 stream.destroy(),并在返回前等待流的 close 事件;同时处理输入流和 readline 接口上的 error/abort 事件。