Autonomo MCP 实战:给 AI 编程助手装上「眼睛和手」,让它看得见、摸得着、验得真
你的 AI 编程助手能写代码、重构系统、分析架构,但它有一个致命缺陷——它看不见自己写了什么。
它生成一个组件,告诉你”应该能用”,然后继续写下一段。你得手动编译、运行、检查屏幕、再把结果描述给它。这种”信任我”的循环不仅低效,而且是 AI 编码流程中最大的瓶颈。
Autonomo MCP 就是来解决这个问题的。它是一个开源 MCP 工具(AGPL-3.0 / 商业双许可),让你 AI 助手能实时读取应用的 JSON 状态、交互 UI 元素、自动验证结果——不用截图、不用视觉模型、不用人工反馈。
为什么要让 AI 看得见?
当前的 AI 编码流程,本质上是一个”盲写”过程:
写代码 → 编译 → 运行 → 你盯着屏幕 → 描述给 AI → 希望它理解
每次循环都在消耗你的注意力。AI 看不到按钮是否生效、表单是否提交成功、API 是否返回了正确数据——你成了它的眼睛。
Autonomo 改写了这个流程:
告诉 AI 你想要什么 → AI 构建并与界面交互 → 实时修正
每个操作后,AI 自动收到一份统一的状态报告,包含当前屏幕、所有可交互元素、网络请求和错误信息。它不靠猜,而是靠数据。
Autonomo 的核心机制
Autonomo 的工作流程可以概括为三个步骤:
See(查看)— autonomo_get_state
AI 调用 autonomo_get_state 获取应用的完整状态快照,返回结构化的 JSON:
{
"screen": "confirmation",
"elements": [
{ "id": "Order.Number", "type": "text" },
{ "id": "Order.Details", "type": "button" },
{ "id": "Home.Button", "type": "link" }
],
"network": {
"POST /api/orders": { "status": 201, "duration": "245ms" }
},
"errors": []
}
不同于截图方案每次分析消耗 1000+ tokens 和 2-5 秒延迟,Autonomo 的结构化状态仅需约 50 tokens 和 50ms。
Act(操作)— autonomo_send_command
AI 可以调用内置命令与界面交互:
navigate— 屏幕导航press— 点击按钮fillIn/fill— 填写输入框select— 下拉选择submit— 回车提交custom— 自定义操作
例如,AI 按下提交按钮后,立即触发新的 autonomo_get_state 读取结果。
Iterate(迭代验证)— autonomo_wait_for
验证不再需要你亲自检查。AI 用 autonomo_wait_for 等待特定条件:
"screen:confirmation"— 等待确认页出现"element:Order.Success"— 等待成功元素渲染"noError"— 确认没有错误"changed"— 检测任何状态变化
这构成了一个闭合的构建-验证-修复循环——AI 自己写、自己测、自己修。
实战:在 React 项目中集成 Autonomo
第一步:安装 MCP Server
全局安装 Autonomo MCP 服务器:
npm install -g autonomo
第二步:配置 VS Code MCP
在项目根目录创建 .vscode/mcp.json:
{
"servers": {
"autonomo": {
"command": "autonomo-mcp",
"env": {
"AUTONOMO_PORT": "9876"
}
}
}
}
如果同时打开多个 VS Code 窗口,每个工作区使用不同的端口(9876、9877 等)。
第三步:在 React 应用中嵌入桥梁
安装 React 桥接包:
npm install autonomo-react
在应用根组件中添加连接:
import { useAutonomo, AutonomoDevBadge } from 'autonomo-react';
export default function App({ children }) {
const { connected, status } = useAutonomo({
name: 'my-app',
devOnly: true // 仅开发环境启用
});
return (
<>
{children}
>
);
}
添加环境变量:
VITE_AUTONOMO_PORT=9876
启动 React 开发服务器后,AI 就能通过 MCP 看到你的应用了。
多平台支持
Autonomo 不局限于 React 生态。它提供了覆盖主流技术栈的桥梁包:
| 平台 | 安装方式 | 场景 |
|---|---|---|
| React / Next.js / Remix | npm install autonomo-react | Web 前端 |
| React Native / Expo | npm install autonomo-react-native | 移动开发 |
| Angular | npm install autonomo-angular | Angular 项目 |
| Flutter | 源码安装(packages/autonomo_flutter/) | Flutter 跨平台 |
| Python | 源码安装(packages/autonomo-python/) | 后端/桌面应用 |
| Swift | 源码安装(packages/autonomo-swift/) | iOS/macOS 原生 |
| Kotlin | 源码安装(packages/autonomo-kotlin/) | Android 原生 |
| C# (.NET) | 源码安装(packages/Autonomo.CSharp/) | .NET 桌面应用 |
| Ruby | 源码安装(packages/autonomo-ruby/) | Ruby 项目 |
这意味着无论你在哪个技术栈上开发,AI 都能看到你的应用状态。
为什么比截图方案更好?
| 对比维度 | 截图方案 | Autonomo MCP |
|---|---|---|
| 响应速度 | 2-5 秒/次 | ~50ms |
| Token 消耗 | 1000+ tokens/图 | ~50 tokens/次 |
| 跨平台性 | 每平台不同工具 | 统一 MCP 协议 |
| 可读信息 | 像素层面 | 结构化的元素ID、网络状态、错误 |
| UI 适配 | 坐标随窗口缩放断裂 | 语义 ID 保持不变 |
| 多设备 | 一次只能看一个 | 同时连接多应用多窗口 |
更重要的是,AI 可以从状态中读取网络请求的错误码、表单校验结果、API 返回的数据——这些信息是截图完全无法呈现的。
使用场景
前端组件开发:让 AI 边写边验证,确保组件渲染正确、交互逻辑完整。
端到端流程测试:AI 可以编写一个多步骤场景,然后用 autonomo_run_scenario 执行并验证每一步。
示例场景定义:
{
"steps": [
{ "action": "navigate", "target": "login" },
{ "action": "fillIn", "target": "Form.EmailInput", "value": "test@example.com" },
{ "action": "fillIn", "target": "Form.PasswordInput", "value": "mypassword" },
{ "action": "press", "target": "Login.SubmitButton" },
{ "action": "wait_for", "condition": "screen:dashboard" },
{ "action": "wait_for", "condition": "noError" }
]
}
多应用流程编排:同时监控 Web 前端和移动端的交互状态,AI 可以在两个窗口间协调操作。
项目哲学:保持简单
Autonomo 的设计哲学可以概括为一句话:提供清晰的原语,让 AI 做思考。
不内置智能断言——AI 本身就能从状态数据中推断正确性。不自动规划——AI 自己就是规划引擎。不封装复杂辅助方法——只暴露 autonomo_get_state 和 autonomo_send_command 两个核心 MCP 工具,所有推理交由 LLM 完成。
这种克制带来了两个好处:第一,项目代码精简,易于维护和扩展;第二,无论 LLM 的能力如何提升,底层的交互原语始终适用。
最佳实践
- 开发环境限定:
devOnly: true(默认推荐),避免在生产环境中暴露应用状态。 - 端口隔离:多项目并行开发时,确保每个项目的
AUTONOMO_PORT不同。 - 语义 ID 命名:使用
Login.SubmitButton而非btn1这样描述性强的元素 ID,能让 AI 更准确地识别目标。 - 利用等待条件:在复杂的异步操作后使用
wait_for,而不是固定sleep,能显著提升验证可靠性。 - 关注网络状态:
autonomo_get_state返回的network字段包含 HTTP 状态码和响应时间,这是发现后端问题的关键线索。