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:
- 打开 Windows 报表应用。
- 导入 sales.csv。
- 生成报表。
- 导出 report.pdf。
- 下载结果。
推荐流程是:
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 选择下一步,让截图和文件检查证明任务确实完成。