rdp-cli

如何让 Claude Code 控制远程 Windows 桌面

Claude Code 很擅长处理代码、文件和命令行工具。但很多实际任务仍然需要 Windows 桌面:打开 Excel、使用旧版软件、处理文件对话框,或操作没有 API 的应用程序。

实用的做法,是通过 MCP 把 Claude Code 连接到远程桌面工具。

MCP 提供工具接口,RDP 提供 Windows 机器的连接。Claude Code 决定下一步做什么,远程桌面工具负责执行并验证操作。

基本架构

Claude Code
  ↓
MCP 远程桌面服务器
  ↓
rdp-cli 或其他桌面控制器
  ↓
远程 Windows 桌面

MCP 服务器应只暴露必要的操作:

  • 连接 RDP 会话
  • 截取屏幕
  • 点击和输入文字
  • 发送快捷键
  • 上传和下载文件
  • 查询会话状态
  • 断开连接

除非确有必要,不要默认开放不受限制的远程 Shell。

最重要的规则:先观察,再操作

Agent 不应该根据旧截图点击。可靠的桌面自动化流程是:

截图 → 判断 → 执行一个动作 → 再次截图 → 验证

使用 rdp-cli 时,底层流程可以是:

rdp-cli screenshot --session SESSION --out before.png

rdp-cli click \
  --session SESSION \
  --desktop \
  --x 420 \
  --y 260 \
  --observation OBSERVATION

rdp-cli screenshot --session SESSION --out after.png

第一张截图帮助 Claude 找到正确的窗口和控件。新的 observation 可以避免把操作发送到已经过时的画面。第二张截图则确认点击是否真的产生了预期结果。

点击命令成功返回,并不代表 Windows 应用已经完成任务。界面可能弹出错误、权限提示,或切换到其他窗口。验证不是额外步骤,而是任务本身的一部分。

示例:自动化 Windows 报表应用

假设你希望 Claude Code:

  1. 打开 Windows 报表应用。
  2. 导入 sales.csv。
  3. 生成报表。
  4. 导出 report.pdf。
  5. 下载结果。

推荐流程是:

connect
upload_file("sales.csv")
screenshot
click("打开应用")
screenshot
click("导入")
type("sales.csv")
screenshot
verify data loaded
click("导出 PDF")
wait for completion
download_file("report.pdf")

文件传输应尽量使用结构化工具,而不是让 Agent 操作文件管理器:

rdp-cli files upload \
  --session SESSION \
  --local ./sales.csv \
  --path input/sales.csv

rdp-cli files download \
  --session SESSION \
  --path output/report.pdf \
  --local ./report.pdf

下载完成后,MCP 服务器应返回传输状态,并在支持时返回文件哈希。

给 Claude Code 清晰的任务说明

不要只说“用远程桌面生成报表”。应明确要求每一步验证:

连接远程 Windows 桌面。

打开报表应用,导入 input/sales.csv,
生成月度报表,并导出为 output/report.pdf。

每次图形化操作后:
1. 截取新的屏幕截图。
2. 确认预期窗口或对话框可见。
3. 如果画面不符合预期,停止并报告问题。

不要在未检查会话状态前重复不确定的操作。

对于文件写入、剪贴板和桌面输入等工具,应配置明确的权限边界。

如果 API 或命令行已经可以完成任务,就优先使用它们。只有真正需要图形界面的部分,才交给 RDP 自动化。

可靠的模式很简单:让 MCP 暴露受控的桌面工具,让 Claude Code 选择下一步,让截图和文件检查证明任务确实完成。