Webots MCP服务器
通用MCP(模型上下文协议)桥 任何 Webots机器人模拟。为Claude Code和Cursor提供对机器人状态、传感器、摄像头和仿真控制的实时访问。
快速入门(3行)
from mcp_bridge import MCPBridge
bridge = MCPBridge(robot) # Auto-detects Supervisor
bridge.publish({"pose": [x, y, theta], "mode": "navigate"})就是这样!Claude Code现在可以完全了解您的模拟。
安装
选项1:克隆(推荐)
git clone https://github.com/luisfelipesena/webots-youbot-mcp.git
pip install mcp pydantic选项2:复制文件
复制 mcp_bridge.py 到您的控制器目录。
Claude代码集成
添加到您的项目 .mcp.json:
{
"mcpServers": {
"webots": {
"command": "python",
"args": ["/path/to/webots-youbot-mcp/webots_youbot_mcp_server.py"],
"cwd": "/path/to/webots-youbot-mcp"
}
}
}光标集成
相同的配置-光标读取 .mcp.json 自动。
控制器集成
最小示例
import sys
sys.path.insert(0, "/path/to/webots-youbot-mcp")
from mcp_bridge import MCPBridge
class MyController:
def __init__(self):
self.robot = Robot() # or Supervisor()
self.mcp = MCPBridge(self.robot)
def run(self):
while self.robot.step(32) != -1:
# Your logic here
self.mcp.publish({
"pose": [x, y, theta],
"mode": self.mode,
"sensors": {"front": 1.2, "left": 0.8},
})
self.mcp.get_command() # Handle simulation control高级:世界重载检测
def reset_state():
"""Called automatically when world reloads"""
self.mode = "search"
self.collected = 0
bridge = MCPBridge(robot)
bridge.on_reload(reset_state)
# In main loop:
bridge.detect_reload() # Triggers callback if reload detected高级:自定义命令
def handle_custom(cmd):
if cmd.get("action") == "my_action":
print(f"Custom command: {cmd}")
bridge.register_command("my_action", handle_custom)可用的MCP工具
| 工具 | 说明 |
|---|---|
webots_get_robot_state | 获取当前机器人状态(姿势、模式等) |
webots_get_sensors | 从状态获取传感器数据 |
webots_get_camera | 获取最新的相机帧路径 |
webots_get_logs | 获取控制器日志 |
webots_simulation_control | 暂停/恢复/重置/重新加载/步进/快速 |
webots_world_reload | 强制重新加载世界(macOS:osascript) |
webots_world_reset | 将模拟重置为初始状态 |
webots_reset_controller_state | 重置控制器内部状态 |
webots_take_screenshot | 捕获模拟视图 |
webots_monitor | 监控机器人N秒 |
webots_get_full_state | 完成状态转储 |
强制重新加载(macOS)
当控制器卡住时,使用osascript强制重新加载:
# From MCP:
webots_world_reload(force=True) # Sends Ctrl+Shift+R to Webots
webots_world_reset(force=True) # Sends Ctrl+Shift+T to Webots需要“系统首选项”中终端/IDE的访问权限。
数据目录结构
data/
├── status.json # Robot state (written by controller)
├── commands.json # Commands from MCP
├── camera/ # Camera frames
├── screenshots/ # Simulation screenshots
└── logs/ # Controller logsMCPBridge API参考
bridge = MCPBridge(robot, data_dir=None, throttle_interval=5)
# Core
bridge.publish(state_dict) # Publish state (throttled)
bridge.publish(state, force=True) # Publish immediately
bridge.get_command() # Check for MCP commands
# Reload Detection
bridge.on_reload(callback) # Register reload callback
bridge.detect_reload() # Check if world reloaded
# Custom Commands
bridge.register_command(action, handler)
# Utilities
bridge.log(message) # Write to log file
bridge.save_camera_frame(camera) # Save camera image全球安装(所有项目)
增添 ~/.config/claude/mcp.json (克劳德代码)或全局光标设置:
{
"mcpServers": {
"webots": {
"command": "python",
"args": ["/absolute/path/to/webots_youbot_mcp_server.py"],
"cwd": "/absolute/path/to/webots-youbot-mcp"
}
}
}需求
- Python 3.10+
mcp>= 1.0.0pydantic>= 2.0.0Pillow(可选,适用于相机框架)
许可证
麻省理工学院
