autoMate:基于MCP协议的桌面自动化脚本工具,让AI操作可复用
1. 项目概述:当AI助手获得“手”和“眼”
如果你用过Claude、GPT-4o这类带“电脑使用”能力的AI,肯定体验过那种神奇感:你告诉它“帮我把桌面上的截图整理到一个叫‘截图’的文件夹里”,它就能自己操作鼠标键盘去完成。但这份神奇背后,总伴随着一丝不确定性——每次执行同样的任务,AI都需要重新“看”一遍屏幕,重新“思考”一遍步骤,耗时不说,偶尔还会“犯傻”。
autoMate这个项目,就是为了解决这个痛点而生的。它本质上是一个MCP服务器。MCP(Model Context Protocol)你可以理解成是给AI大模型用的“插件协议”,让AI能调用外部工具。而autoMate提供的工具,就是一套完整的桌面自动化能力,并且,它最核心的价值在于脚本化。
简单说,autoMate让AI的“电脑使用”能力从一次性的、临时的“手工作业”,变成了可保存、可复用、可分享的“自动化流水线”。你第一次教AI完成一个复杂流程(比如用剪映导出抖音视频、用Photoshop批量处理图片),AI在操作的同时,autoMate会把这个流程记录成一个人类可读的脚本文件。下次你需要时,直接让AI“运行那个剪映导出脚本”,它就能瞬间调用脚本完成,无需再次观察和推理,又快又准。
它的定位非常清晰:自动化那些没有开放API的桌面GUI应用。无论是国内的剪映、微信、钉钉,还是专业的AutoCAD、Photoshop,或是你公司内部那些陈年老旧的业务系统,只要它有个图形界面,autoMate就能尝试去驱动它。这就像是给AI世界里的Quicker(一个优秀的Windows自动化工具),但它是跨平台的,并且是“用自然语言编程”的。
2. 核心设计思路与架构解析
2.1 为什么是MCP?与原生“电脑使用”的差异
要理解autoMate,首先要明白它和AI自带的“电脑使用”功能有何不同。以Claude为例,其原生电脑使用(Computer Use)能力是一个黑盒:AI通过视觉模型理解屏幕,通过规划模型决定操作,再通过底层执行器控制鼠标键盘。这个过程每次都是“从头开始”。
autoMate通过MCP协议,在这套流程中插入了一个“脚本层”和“工具层”。
- 工具抽象层:它将底层的鼠标点击、键盘输入、截图等操作,封装成标准的MCP工具(Tools),如
click,type_text,screenshot。AI可以直接调用这些工具,这比它自己模拟虚拟输入更稳定、更直接。 - 脚本持久层:这是autoMate的杀手锏。当AI通过调用上述工具完成一个任务后,用户可以通过
save_script工具,将这一系列工具调用及其参数(或对屏幕的自然语言描述)保存为一个脚本文件。这个文件存储在本地,是一个结构化的Markdown文档。 - 执行优化层:下次需要时,AI不再需要视觉模型一步步识别和规划,而是直接调用
run_script工具。该工具读取本地脚本,将其中的步骤解析为具体的工具调用序列并执行。这相当于把耗时的“视觉识别-逻辑规划”环节,替换成了毫秒级的“脚本加载-指令执行”环节。
所以,差异的核心在于“状态是否持久化”。原生电脑使用是“无状态”的,每次都是新的。而autoMate是“有状态”的,它将成功的操作经验固化了下来。
2.2 脚本设计哲学:在确定性与灵活性之间权衡
autoMate的脚本设计体现了其核心哲学:人类负责定义流程和关键路标,AI负责处理过程中的视觉识别和微调。
脚本采用Markdown格式,这很巧妙。它既是机器可读的(有YAML头信息、标准的Hint语法),也是人类可读和可手动编辑的。一个脚本主要由两部分构成:
- 元信息区(YAML Front Matter):包含脚本名称、描述、创建日期等,便于管理。
- 步骤区(Steps):由一系列步骤描述组成。这里的设计亮点在于“Hint”(提示)语法。
Hint语法(如[click:coord=320,480])是一种“强坐标”指令。它直接告诉执行引擎:“去点击屏幕坐标(320, 480)”。这种方式执行速度极快,完全规避了AI视觉识别的开销。但它的缺点是脆弱的:一旦应用窗口位置改变、UI组件偏移,坐标就会失效。
因此,autoMate并不强制所有步骤都使用Hint。你可以只在关键节点(如点击一个位置固定的按钮)使用坐标Hint,而在需要识别动态内容的步骤(如“找到名为‘导出’的按钮”)使用纯自然语言描述。当脚本运行时,对于没有Hint的步骤,autoMate会调用screenshot工具截图,然后将图片和自然语言描述一并交给AI,由AI的视觉模型来识别并生成具体的点击坐标,再执行。
这种混合模式取得了很好的平衡:既通过Hint保证了核心流程的稳定和高速,又通过AI视觉保留了应对UI变化的灵活性。用户在实践中,应该将Hint用于那些几乎不会改变位置的核心界面元素(如菜单栏按钮、固定位置的选项卡),而将动态内容交给AI实时识别。
2.3 跨平台实现的考量
autoMate宣称支持Windows、macOS、Linux三大平台,这是一个超越许多同类工具(如仅限Windows的Quicker)的巨大优势。实现这一点,关键在于其底层依赖的选型。
它依赖于像pyautogui、keyboard、pynput这类Python库来进行跨平台的GUI自动化。这些库封装了不同操作系统底层输入控制的差异,提供统一的API。例如,pyautogui.click(x, y)这个调用,在Windows上会调用ctypes操作Win32 API,在macOS上会使用Quartz框架,在Linux上则会使用Xlib。
然而,跨平台也带来了挑战。不同系统的UI范式、快捷键(如macOS的Commandvs Windows的Ctrl)、甚至屏幕坐标系的细微差别都可能影响脚本的通用性。因此,autoMate社区分享的脚本,往往需要注明其适用的平台,或者脚本作者需要编写更健壮、依赖视觉识别而非绝对坐标的逻辑。
3. 从零开始:环境配置与深度使用指南
3.1 安装与配置的底层原理
项目推荐使用uv和uvx来安装运行。uv是一个用Rust写的极速Python包管理器和安装器,uvx则是其“全局运行”工具,类似于pipx。uvx automate-mcp@latest这个命令做了以下几件事:
- 从PyPI查找
automate-mcp包的最新版本。 - 在一个独立的虚拟环境中安装该包及其所有依赖(如
pyautogui,pynput,pillow等)。 - 直接运行这个包的主入口点。
这避免了污染你的全局Python环境,也保证了依赖隔离。当你更新Claude Desktop重启后,uvx会再次拉取最新版本,实现了无缝更新。
配置MCP服务器的本质,是告诉你的AI客户端(如Claude Desktop):“我这里有这么一个叫automate的工具包,它的启动命令是uvx automate-mcp@latest,你(AI)可以通过某个端口(通常是进程间通信)来调用它提供的工具。” 编辑JSON配置文件,就是建立这个连接关系。
注意:首次运行时,系统可能会弹出安全警告,询问是否允许“Python”或“终端”访问辅助功能(Accessibility)或输入监听。这是必须授权的,否则自动化工具无法控制鼠标和键盘。在macOS的“系统设置-隐私与安全性-辅助功能”中,你需要勾选你的终端应用或Python解释器。
3.2 核心工具详解与实战调用
autoMate提供的工具可以分为两大类:脚本管理工具和底层控制工具。理解每个工具的具体行为,是写出可靠脚本的关键。
脚本管理工具:
list_scripts: 列出~/.automate/scripts/目录下所有脚本。AI调用此工具来了解当前可用的自动化资产。run_script: 这是核心。调用时需传入脚本名。引擎会解析脚本,按顺序执行每一步。对于有Hint的步骤,直接执行;对于纯文本步骤,会先调用screenshot,然后将截图和文本发给AI请求解析。save_script: 将“当前对话上下文中”AI使用autoMate工具的历史记录,保存为一个新脚本。这里的技巧是:你需要先让AI用底层工具完成一次任务,然后在同一个对话中,让它“把刚才的操作保存为脚本”。AI会整理之前的工具调用记录,生成脚本文件。show_script/delete_script: 查看和删除脚本,用于管理。install_script: 支持从Raw GitHub URL直接安装社区脚本。这为脚本生态的分享奠定了基础。
底层控制工具:
screenshot: 返回当前屏幕的base64编码PNG图片。这是AI的“眼睛”。除了用于解析无Hint步骤,你也可以主动让AI截图来确认某个状态。click/double_click: 在指定坐标点击。坐标原点(0,0)在屏幕左上角。type_text: 模拟键盘输入文本。这里有个重要细节:它支持全Unicode,包括中文、日文等。这意味着你可以让AI在微信对话框里直接输入中文,而不需要依赖剪贴板。press_key: 模拟按下单个键或组合键(如ctrl+c,alt+f4)。参数需要遵循平台通用的键名。scroll: 滚动鼠标滚轮。参数delta为正则向上滚,为负则向下滚,绝对值大小影响滚动幅度。mouse_move: 移动鼠标指针而不点击。可用于悬停触发菜单。drag: 从起点坐标拖拽到终点坐标。用于文件移动、滑块调节等场景。
3.3 编写你的第一个健壮脚本:以“微信发送文件”为例
让我们脱离简单的坐标点击,写一个更实用、更健壮的脚本。场景是:每天需要将某个固定文件夹下的最新报告发送给微信上的某个联系人。
一个脆弱的脚本可能完全依赖坐标:[click:coord=100,200]点击微信图标,[click:coord=300,400]点击联系人... 一旦窗口位置变化,全盘皆输。
一个更好的脚本应该混合使用Hint和自然语言描述,并将文件路径等变量参数化。虽然autoMate脚本目前不支持原生变量,但我们可以通过让AI在运行时“填空”来实现。
--- name: send_latest_report_to_wechat description: 打开微信,找到指定联系人,发送指定文件夹中最新的PDF文件。 created: 2025-04-10 --- ## 前置条件 1. 微信已登录并位于主界面。 2. 报告文件夹路径为:`C:\DailyReports` (Windows) 或 `/Users/username/DailyReports` (macOS)。 ## 步骤 1. 确保微信窗口已激活。如果未激活,请定位并点击微信窗口。[key:alt+tab] (这里用快捷键切换比坐标点击更可靠) 2. 在微信左侧联系人列表中,找到名为“项目组”的联系人并点击。 (这里使用自然语言描述,让AI通过视觉识别查找) 3. 点击输入框以激活聊天窗口。[click:coord= (此坐标可以相对固定,因为聊天窗口内输入框位置通常稳定) ] 4. 点击聊天工具栏中的“文件”图标(看起来像一个曲别针)。[click:coord= (同样,工具栏图标位置相对固定) ] 5. 在打开的文件选择对话框中,导航至 `C:\DailyReports` 文件夹。 (自然语言描述,AI会操作文件对话框) 6. 在文件列表中,找出修改日期最新的那个PDF文件,并选中它。 (自然语言描述,依赖AI视觉识别文件列表和日期) 7. 点击“打开”或“发送”按钮。[click:coord= (对话框的确定按钮位置通常固定) ] 8. 等待文件发送完成,观察进度条消失。[wait:10]在这个脚本中,只有步骤3、4、7使用了[click:coord]Hint,因为这些是微信聊天界面和系统对话框内位置极其固定的元素。步骤1使用了键盘快捷键,这是跨窗口操作最稳健的方式。步骤2、5、6则完全交给了AI的视觉识别能力,这使得脚本能适应联系人列表顺序变化、文件列表内容动态更新等情况。
实操心得:编写脚本时,把自己想象成一个在教新人操作的老师。你会告诉他“去点那个绿色的发送按钮”,而不是“去点坐标(755, 632)”。把“是什么”的描述交给AI,只把“绝对在哪”的坐标信息作为辅助Hint。同时,在脚本开头用“前置条件”明确执行环境,能极大提高成功率。
4. 高级技巧与生态构建
4.1 利用AI视觉补全坐标:实现“自我修复”脚本
有时,即使我们用了Hint,UI的重大更新也会导致坐标失效。我们可以设计一种模式,让脚本具备“自我修复”的潜力。
思路是:在脚本中,为关键步骤提供“备选描述”。虽然autoMate脚本语法本身不支持if-else,但我们可以通过注释和步骤描述来引导AI。
例如,一个点击“登录”按钮的步骤,可以这样写:
5. 点击登录按钮。该按钮通常是绿色的,上面有“登录”或“Sign In”文字。如果找不到,它可能变成了蓝色的“立即登录”按钮。请找到并点击它。[click:coord=900, 500] (此坐标仅为参考,如失效请依据文字描述寻找)当AI执行run_script遇到这个步骤时,它会先尝试坐标(900,500)。如果因为UI更新导致点击无效(如下一步预期画面没出现),AI在后续的步骤中会“察觉”到任务偏离了轨道。此时,由于我们在描述中提供了丰富的视觉线索(绿色、文字),当AI重新调用screenshot和视觉模型进行分析时,就有很大概率能定位到新的按钮位置,并继续执行下去。
这要求AI具备一定的任务执行和异常检测能力。目前,这更像是一种“最佳实践”的引导,而非绝对可靠的机制,但随着AI Agent规划能力的增强,这种模式会越来越有效。
4.2 脚本分享与社区库构想
install_script工具为脚本生态打开了大门。社区可以围绕常见应用(如Adobe全家桶、Office、各类设计开发工具)构建脚本库。
一个理想的社区脚本应该包含:
- 清晰的元信息:名称、描述、作者、版本、适用平台(Windows/macOS/Linux)、适用软件版本。
- 详细的前置条件:软件需要处于什么状态?需要打开特定文件吗?需要管理员权限吗?
- 稳健的步骤设计:优先使用自然语言描述和键盘快捷键,慎用绝对坐标。如果必须用坐标,最好说明该坐标是基于何种分辨率(如1920x1080)和缩放设置(100%)得出的。
- 错误处理提示:在可能失败的步骤后,添加
[wait:2]给界面反应时间,或描述失败后的界面状态,供AI判断。
分享时,可以将脚本文件托管在GitHub Gist或任何能提供Raw文本链接的地方。用户只需对AI说:“安装这个脚本:https://gist.githubusercontent.com/.../raw/wechat_send_file.md”,AI就会调用install_script工具完成下载和保存。
4.3 与其他MCP服务器的协同
autoMate不是孤立的。它可以与其它MCP服务器完美协同,形成更强大的自动化工作流。
- 与Filesystem MCP协同:AI可以先使用Filesystem MCP的工具来遍历文件夹、读取文件内容、进行预处理(如重命名、格式转换),然后再调用autoMate脚本,将处理好的文件用桌面软件打开、编辑、保存。例如,“先找出所有未分类的图片,然后用Photoscript脚本批量调整尺寸并添加水印”。
- 与Browser MCP协同:AI可以用Browser MCP从网页上抓取数据、填写表单,然后用autoMate将数据粘贴到某个没有Web版本的本地客户端软件中。或者反过来,将本地软件生成的结果,通过autoMate操作复制,再用Browser MCP粘贴到网页后台发布。
- 与Windows/macOS系统MCP协同:AI可以先用系统MCP查询进程、调节音量、连接网络,然后再启动特定的软件并用autoMate进行操作。
关键在于,AI作为大脑,会根据你的指令和它对这些工具能力的理解,自动选择并串联最合适的工具。你只需要说:“帮我把今天收到的所有邮件附件中的Excel数据汇总成一个图表,然后插入到正在写的周报PPT里。” AI可能会组合使用邮件客户端脚本(autoMate)、数据处理脚本(Python MCP?)、以及PPT操作脚本(autoMate)来完成这个复杂任务。
5. 常见问题、故障排查与性能优化
5.1 执行失败问题排查清单
当你发现AI运行脚本失败或行为异常时,可以按以下顺序排查:
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| AI完全无法调用autoMate工具 | 1. MCP配置错误 2. uvx或Python环境问题 | 1. 检查Claude Desktop等客户端的配置JSON,确保command和args正确,重启客户端。2. 在终端手动运行 uvx automate-mcp@latest,看是否有错误输出(如缺少依赖、权限错误)。 |
| 可以调用工具,但鼠标键盘无反应 | 操作系统辅助功能权限未开启 | macOS:前往“系统设置 > 隐私与安全性 > 辅助功能”,确保你使用的终端或IDE已被勾选。 Windows:通常以管理员身份运行客户端可解决多数问题。 Linux:可能需要安装 xdotool或xorg-xinput等包,并赋予相应权限。 |
| 点击坐标偏移,点不准 | 1. 屏幕缩放比例不是100% 2. 多显示器坐标混乱 3. 脚本坐标基于的分辨率与当前不同 | 1.这是最常见原因!将系统显示缩放比例设置为100%(或脚本记录时使用的比例)。 2. 确保脚本在主显示器上运行,或使用 pyautogui的position()函数重新校准坐标。3. 重新录制脚本,或使用基于相对位置(如图像识别)而非绝对坐标的方法。 |
type_text输入中文乱码或失败 | 系统输入法或焦点问题 | 1. 在执行type_text前,确保目标输入框已获得焦点(可先让AI点击一下输入框)。2. 将系统输入法切换到英文状态,因为自动化工具模拟的是物理键盘输入,可能绕过输入法。对于中文,可考虑先用 press_key模拟ctrl+c复制,再用press_key模拟ctrl+v粘贴。 |
| 脚本中的自然语言步骤被AI误解 | AI视觉模型识别错误 | 1. 提供更精确的描述。将“点击那个按钮”改为“点击那个蓝色的、带有下载图标和‘导出’文字的按钮”。 2. 在关键步骤前增加 screenshot步骤,让AI有最新的画面进行分析。3. 如果某个元素极难识别,考虑在该步骤强制使用坐标Hint,牺牲灵活性换取可靠性。 |
run_script执行到一半卡住 | 1. 等待时间[wait]不足2. 上一步操作未生效 3. 弹出意外对话框 | 1. 在涉及网络请求、大文件加载、复杂渲染的步骤后,增加等待时间(如[wait:10])。2. 在上一步骤后添加一个“验证步骤”,例如“等待直到屏幕上出现‘保存成功’的提示”。 3. 让脚本具备基础异常处理能力,例如描述“如果出现更新提示框,点击其中的‘稍后提醒我’按钮”。 |
5.2 性能优化与最佳实践
- 精简截图与识别:每次调用
screenshot并让AI识别都是耗时操作。优化脚本的原则是:尽量减少无Hint的纯描述步骤。在录制脚本时,有意识地多使用键盘快捷键([key:ctrl+s])和相对固定的坐标Hint。 - 使用“地标”导航:不要试图用一个脚本从桌面开始操作到软件最深层的功能。而是创建多个小脚本,像地标一样。例如,一个
open_photoshop_and_new_file.md,一个photoshop_save_as_jpeg.md。AI可以按顺序调用它们,每个脚本内部高效可靠。 - 环境标准化:尽量在固定的屏幕分辨率、缩放比例和软件窗口布局下开发和运行脚本。为自动化任务准备一个干净的虚拟桌面或固定的工作空间布局。
- 加入冗余确认:对于关键操作(如删除、覆盖保存),可以在脚本中设计一个“确认”步骤,哪怕只是等待2秒。或者,让AI在执行前用
screenshot工具给你看一眼当前屏幕状态,你确认后再继续。 - 日志与调试:目前autoMate本身可能不提供详细日志。但你可以通过观察AI的思考过程(在Claude Desktop中可以看到它调用了哪些工具、参数是什么)来调试。对于复杂脚本,可以分阶段保存和测试。
5.3 安全边界与使用伦理
autoMate赋予了AI强大的自动化能力,使用时必须明确边界:
- 不要自动化涉及密码输入的过程:避免录制包含密码输入的脚本。使用密码管理器或系统级的自动填充功能更安全。
- 谨慎处理金融和交易软件:自动化股票交易、网银操作等具有极高风险,任何错误都可能导致实际损失。这类场景下,人类的直接监督不可或缺。
- 尊重软件许可协议:确保你的自动化操作不违反所使用软件的用户协议。一些专业软件可能禁止未经授权的自动化。
- 隐私考量:自动化脚本可能会接触到屏幕信息。确保脚本存储的位置安全,不与他人共享包含敏感信息的截图或操作记录。
autoMate代表了一个令人兴奋的方向:将人类从重复、琐碎的GUI操作中解放出来,同时又将流程的控制权和知识(脚本)留在了人类手中。它降低了自动化的门槛,从“编写代码”变成了“描述任务”。随着AI视觉和规划能力的持续进步,以及autoMate这类工具在稳定性和生态上的完善,我们或许正在见证“人人可编程”的桌面自动化新时代的到来。
