mcpField
A
ai2thor-mcp

ai2thor-mcp

本地服务
github.com/pj0620科研与教育04 周前更新

关于 ai2thor-mcp

ai2thor-mcp 让 LLM Agent 在 AI2-THOR 中控制仅靠摄像头观察的模拟家用机器人,可发现物体和通道并导航。它提供异步导航状态控制、地图查看和俯视录像,接口语义参考 ROS2 nav2。

主要功能

  1. 01获取带目标标记的摄像头画面
  2. 02发现物体与可通行路线
  3. 03异步导航、状态查询和取消
  4. 04手动移动与旋转控制
  5. 05俯视录制并导出 MP4

适用场景

  1. 01在 AI2-THOR 场景中测试机器人导航 Agent
  2. 02观察可见物体和可通行路线
  3. 03记录机器人导航过程的视频

MCP 相关

MCP 服务向客户端提供机器人视图、导航与手动控制工具,并公开原始摄像头画面的 view://rgb 资源。支持 stdio 和 Streamable HTTP 传输。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

ai2thor-mcp

一个 MCP 服务,可让大模型 Agent 控制 AI2-THOR 中的模拟家用机器人。机器人仅配备摄像头(没有机械臂):它会四处观察,发现目的地——可见物体,以及根据深度信息检测到的可通行通道——并使用类似 nav2 的异步导航方式驶向目的地。俯视摄像头可以录制机器人的操作视频,格式为 mp4。

该项目是 GPTPet 的仿真后端;工具契约与 ROS2 nav2 的 NavigateToPose 语义一致(异步目标、状态轮询、取消、抢占),因此日后运行 nav2+SLAM 的真实机器人也可以实现相同的 MCP 接口。

工具

工具功能
get_current_view()带编号目的地标记的摄像头画面,以及 JSON 列表:物体(绿色框,例如 "Fridge, 2.3 m ahead, closed, contains 2 items")和通道(青色框:门口/走廊/开口,宽度足以让机器人通过)。ID 保持稳定;标记在每个视图中重新编号。
set_nav_goal(destination_id, speed_mps=0.35)规划前往目的地的 navmesh 路径,并在后台开始行驶。立即返回航点和预计到达时间。正在执行的目标会被抢占。
get_nav_status()idle | planning | following | succeeded | canceled | failed(reason),以及已行驶/剩余距离、百分比、预计到达时间和航点数量。
cancel_nav()在一个步骤内让机器人停止。
list_destinations()迄今为止在所有视图中看到的全部内容。物体 ID 会重新解析为当前位置;通道 ID 是固定的世界坐标航点。
get_map()俯视地图:物体、机器人位姿、剩余路径、目的地和目标。
do_move(action, moveMagnitude) / do_rotate(action, degrees)手动控制;会抢占正在执行的导航(nav2 遥控行为)。
start_overhead_recording(mode)mode="follow"(默认):摄像头悬停在机器人上方约 2.3 m 处并跟随机器人。mode="scene":显示整个楼层平面图的固定正交视图。一次只能进行一段录制。
end_overhead_recording()完成录制并返回可在浏览器中播放的 H.264 mp4 文件路径(实时录制:空闲时段会保留静止帧),文件位于 data/recordings/ 下。

此外,还提供一个 MCP 资源 view://rgb,包含原始摄像头画面。

设置

需要 Python 3.10–3.12 和 uv。首次运行时会下载 AI2-THOR Unity 构建(约 0.5 GB)并打开 Unity 窗口;仿真器会在首次调用工具时延迟启动。

uv sync            # add --extra dev for the test suite

运行

# streamable HTTP on 0.0.0.0:8000 (endpoint: /mcp, stateless)
uv run python/ai2thor_mcp/main.py --http

# stdio transport
uv run python/ai2thor_mcp/main.py

# pick a scene (default FloorPlan2, a single kitchen; RoboTHOR apartments
# like FloorPlan_Train1_3 have real doorways and corridors)
uv run python/ai2thor_mcp/main.py --http --scene FloorPlan_Train1_3

HTTP 是无状态的,因此多个 MCP 客户端可以共享同一个仿真实例。

连接客户端

Claude Code:

claude mcp add --transport http ai2thor http://localhost:8000/mcp

Claude Desktop 只能在 claude_desktop_config.json 中使用 stdio,因此需要通过 mcp-remote 桥接:

"ai2thor": {
  "command": "npx",
  "args": ["-y", "mcp-remote", "http://localhost:8000/mcp"]
}

工作原理

python/ai2thor_mcp/
├── main.py        MCP tools and wiring
├── sim.py         single lock-guarded owner of the AI2-THOR Controller
├── perception.py  depth → world backprojection; passage detection
├── describe.py    template descriptions + destination registry
├── annotate.py    numbered set-of-marks drawing on the frame
├── nav.py         nav2-style background goal follower
├── recorder.py    overhead mp4 recording (paced ffmpeg writer thread)
├── utils.py       top-down map rendering
└── config.py      all tunables (robot width, speeds, detection thresholds…)
  • 通道来自深度图像:将点反投影到世界坐标系,分箱生成极坐标自由空间分布,并通过水平集扫描寻找间隙(通道是一段明显超出两侧障碍物的连续分箱)。地面可见性和 navmesh 可达性检查会排除窗户/镜子;最小宽度筛选(MIN_PASSAGE_WIDTH_M = 0.65)只保留机器人能够通过的间隙。
  • 路径规划使用 AI2-THOR 的 navmesh(GetShortestPath);跟随线程会以指定速度沿路径拐角行驶,并进行碰撞重试和一次重新规划,因此 get_nav_status 会显示真实的实时进度。
  • 录制会在每个仿真步骤捕获第三方摄像头画面;按节奏运行的写入器会通过捆绑的 ffmpeg(imageio-ffmpeg)每个时钟周期写入一帧,因此 mp4 与实际时间同步,且不会阻塞仿真器。注意:AI2-THOR 5.0 无法移除已添加的摄像头,因此首次录制后,每个步骤都会渲染该摄像头(开销较小)。

测试

uv run --extra dev pytest regression -m "not live"   # offline, no Unity
uv run --extra dev pytest regression -m live         # boots Unity, drives the robot

离线测试使用解析深度场景测试几何逻辑(必须找到合成门口,不得找到狭窄间隙和纯墙面),使用运动学模拟器替身测试导航状态机,并逐帧测试录制器按墙上时钟写入的行为。scripts/capture_fixture.py 可重新生成 data/ 中捕获的真实帧测试夹具。

备注

  • Agent 模式为 locobot(差速驱动,不具备操作能力)。
  • data/recordings/ 是被 git 忽略的输出目录;data/example_* 是测试夹具。
  • 使用 Claude Code 时,项目技能 /restart-ai2thor-mcp 会重启端口 8000 上的服务并进行健康检查。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。