1. 项目概述当AI助手获得“手”和“眼”如果你用过Claude、GPT-4o这类带“电脑使用”能力的AI肯定体验过那种神奇感你告诉它“帮我把桌面上的截图整理到一个叫‘截图’的文件夹里”它就能自己操作鼠标键盘去完成。但这份神奇背后总伴随着一丝不确定性——每次执行同样的任务AI都需要重新“看”一遍屏幕重新“思考”一遍步骤耗时不说偶尔还会“犯傻”。autoMate这个项目就是为了解决这个痛点而生的。它本质上是一个MCP服务器。MCPModel 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:coord320,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-mcplatest这个命令做了以下几件事从PyPI查找automate-mcp包的最新版本。在一个独立的虚拟环境中安装该包及其所有依赖如pyautogui,pynput,pillow等。直接运行这个包的主入口点。这避免了污染你的全局Python环境也保证了依赖隔离。当你更新Claude Desktop重启后uvx会再次拉取最新版本实现了无缝更新。配置MCP服务器的本质是告诉你的AI客户端如Claude Desktop“我这里有这么一个叫automate的工具包它的启动命令是uvx automate-mcplatest你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: 模拟按下单个键或组合键如ctrlc,altf4。参数需要遵循平台通用的键名。scroll: 滚动鼠标滚轮。参数delta为正则向上滚为负则向下滚绝对值大小影响滚动幅度。mouse_move: 移动鼠标指针而不点击。可用于悬停触发菜单。drag: 从起点坐标拖拽到终点坐标。用于文件移动、滑块调节等场景。3.3 编写你的第一个健壮脚本以“微信发送文件”为例让我们脱离简单的坐标点击写一个更实用、更健壮的脚本。场景是每天需要将某个固定文件夹下的最新报告发送给微信上的某个联系人。一个脆弱的脚本可能完全依赖坐标[click:coord100,200]点击微信图标[click:coord300,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:alttab] 这里用快捷键切换比坐标点击更可靠 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视觉补全坐标实现“自我修复”脚本有时即使我们用了HintUI的重大更新也会导致坐标失效。我们可以设计一种模式让脚本具备“自我修复”的潜力。思路是在脚本中为关键步骤提供“备选描述”。虽然autoMate脚本语法本身不支持if-else但我们可以通过注释和步骤描述来引导AI。例如一个点击“登录”按钮的步骤可以这样写5. 点击登录按钮。该按钮通常是绿色的上面有“登录”或“Sign In”文字。如果找不到它可能变成了蓝色的“立即登录”按钮。请找到并点击它。[click:coord900, 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-mcplatest看是否有错误输出如缺少依赖、权限错误。可以调用工具但鼠标键盘无反应操作系统辅助功能权限未开启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模拟ctrlc复制再用press_key模拟ctrlv粘贴。脚本中的自然语言步骤被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:ctrls]和相对固定的坐标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这类工具在稳定性和生态上的完善我们或许正在见证“人人可编程”的桌面自动化新时代的到来。