你的第一个任务
硬件已经搭好、校准完毕;现在你只需用一句平实的英文给机械臂一个目标,看它干活。本页会把一个外部 agent——Claude Desktop——接到正在运行的服务器上,给它一行任务,并展示随之而来的真实工具调用轨迹:agent 看一眼屏幕、挑中一个框、点下去,然后再看一眼。
接入一个 MCP 客户端
Section titled “接入一个 MCP 客户端”PhysiClaw 讲 MCP(Model Context Protocol)——这是 AI 客户端发现并调用外部工具的标准方式。任何 MCP 客户端都能用;这里我们用 Claude Desktop 来当大脑。
-
确认服务器已启动。在你运行
physiclaw server的那个终端里,应当能看到端点这一行:PhysiClaw MCP server on http://localhost:8048/mcp -
把 PhysiClaw 加到 Claude Desktop 的配置里。打开
claude_desktop_config.json(Settings → Developer → Edit Config),加入physiclaw服务器:json {"mcpServers": {"physiclaw": {"type": "http","url": "http://localhost:8048/mcp"}}}这是一个 streamable-HTTP 服务器——URL 直接指向正在运行的进程,所以没有需要启动的命令,客户端这边也没什么要安装的。
-
重启 Claude Desktop。PhysiClaw 的十二个工具——
peek、tap、swipe、unlock_phone等等——现在会出现在客户端的工具列表里。(完整清单见 MCP 工具。)
给它一个目标
Section titled “给它一个目标”像跟人交代事情那样跟 agent 说话——一句平实的话,而不是坐标:
Set a 10-minute timer on the phone.这就是全部指令。你不用告诉它时钟 App 在哪,也不用说怎么进到计时器标签页——agent 会自己看屏幕、做决定,一步一步地搞定。
实际发生了什么
Section titled “实际发生了什么”在这一句话背后,agent 每走一步都在跑同一个看 → 做的循环。它从不发送像素或电机坐标;它通过 peek 拿到屏幕上元素的列表,每个元素都带一个 bbox——一个 [left, top, right, bottom] 的矩形,用 0–1 的屏幕比例表示——然后 tap 它想点的那个框,再 peek 一次来确认。下面是一段真实轨迹:
▸ peek() ← [home screen] id kind label bbox conf 07 icon "Clock" [0.41, 0.55, 0.49, 0.63] 0.97 08 icon "Settings" [0.51, 0.55, 0.59, 0.63] 0.96 09 icon "Photos" [0.61, 0.55, 0.69, 0.63] 0.95
▸ tap([0.41, 0.55, 0.49, 0.63]) # the "Clock" box ← tapped — `peek` to verify and plan the next move
▸ peek() ← [Clock app, World Clock tab] id kind label bbox conf 11 text "World Clock" [0.05, 0.92, 0.25, 0.98] 0.98 12 text "Timer" [0.74, 0.92, 0.95, 0.98] 0.97
▸ tap([0.74, 0.92, 0.95, 0.98]) # the "Timer" tab ← tapped — `peek` to verify and plan the next move
▸ peek() ← [Timer tab — hour / min / sec wheels, "10" already centered on minutes] id kind label bbox conf 21 text "10" [0.40, 0.40, 0.50, 0.50] 0.95 22 text "Start" [0.55, 0.78, 0.85, 0.88] 0.98
▸ tap([0.55, 0.78, 0.85, 0.88]) # the green "Start" button ← tapped — `peek` to verify and plan the next move
▸ peek() ← [Timer running — "09:58" counting down, "Cancel" / "Pause" shown] ✓ goal reached: a 10-minute timer is running.从头读到尾,节奏一目了然:看一眼、挑一个框、点下去、再看一眼。 每次 tap 都落在上一次 peek 真正返回的某个 bbox 上,每次 tap 之后又紧跟一次全新的 peek 去检查结果——正是这种“再看一眼”,让 agent 能察觉到点偏了并重试,而不是抱着一个错误的假设一路猛冲。
如果它卡住了
Section titled “如果它卡住了”- 连续两次完全相同的
peek列表 → 点击落到了空白处,或者框的位置略有偏差。agent 会根据新的列表重新瞄准;如果你正盯着看,这是正常的自我纠错,不是崩溃。 - “phone unlock failed” → 手机又锁上了。把锁屏密码设成
111111(unlock_phone用的那个一次性密码),或关掉自动锁定,然后再让它试一次。 - 客户端里没有工具 → 客户端启动时服务器没在跑,或者 URL 写错了。确认端点那一行、修正配置、重启客户端。
更多故障形态及解决办法见排障。