使用说明
Reachy迷你MCP
控制 Reachy Mini Claude、ChatGPT或任何MCP兼容客户端的机器人(或模拟器)。
Quickstart
|
试运行(视频)
短暂的“模拟运行” reachy_debug.py 顺序演示运行器(模拟器):步骤通知、动作、视觉和伪影。
运作原理
AI Assistant --stdio--> MCP Server (reachy.py) --> ReachyMini SDK --> Robot / Simulator
服务器通过以下方式公开16个工具、4个提示和4个资源 模型上下文协议人工智能助手调用这些工具来穿透机器人的摄像头、移动机器人、表达情感、播放声音或检测音频方向——人工智能方面不需要机器人知识。
安装
先决条件
- Python 3.13+
- Reachy迷你机器人 或Reachy Mini模拟器
- 紫外线 (推荐)或pip
安装服务器
git clone https://github.com/ArturSkowronski/reachy-mini-mcp.git
cd reachy-mini-mcp
uv sync
或者使用pip:
pip install -e .
配置您的MCP客户端
将服务器添加到MCP客户端配置中。具体位置取决于客户:
克劳德桌面 (~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):
{
"mcpServers": {
"reachy-mini": {
"command": "uv",
"args": ["--directory", "/path/to/reachy-mini-mcp", "run", "reachy.py"]
}
}
}
克劳德代码 (.mcp.json 在项目根目录中):
{
"mcpServers": {
"reachy-mini": {
"command": "uv",
"args": ["--directory", "/path/to/reachy-mini-mcp", "run", "reachy.py"]
}
}
}
通用标准传输:
uv run reachy.py
ElevenLabs TTS(可选)
要启用 speak_text 工具,设置这些环境变量:
export ELEVENLABS_API_KEY="your-api-key"
export ELEVENLABS_VOICE_ID="your-voice-id"
#
# Optional override prefix (takes precedence):
# export REACHY_ELEVENLABS_API_KEY="your-api-key"
# export REACHY_ELEVENLABS_VOICE_ID="your-voice-id"
默认语音(预制/免费层友好): George 带语音ID JBFqnCBsd6RMkjVDRZzb.
最喜欢的声音(作者偏好): Horatius 带语音ID qXpMhyvQqiRxWQs4qSSB.
可选覆盖: ELEVENLABS_MODEL_ID (默认值: eleven_multilingual_v2), ELEVENLABS_OUTPUT_FORMAT (默认值: mp3_44100_128).
WAV支持:如果您的ElevenLabs计划允许,您可以设置 ELEVENLABS_OUTPUT_FORMAT=wav_44100 以获得WAV输出而不是MP3。
MP3与WAV播放说明
- 默认TTS输出为MP3(
mp3_44100_128)因为它适用于ElevenLabs的较低层。 - 一些Reachy音频后端/环境可能没有可用的MP3解码。在这种情况下,即使WAV工作,MP3播放也可能失败。
- 如果您需要ElevenLabs直接退回WAV(
wav_44100)ElevenLabs要求更高的级别(最低 专业版). - 要强制WAV输出(如果可用),请通过环境变量覆盖输出格式:
REACHY_ELEVENLABS_OUTPUT_FORMAT=wav_44100(首选,优先)- 或
ELEVENLABS_OUTPUT_FORMAT=wav_44100
环境变量
概述:
NO_COLOR:禁用ANSI颜色reachy_debug.py输出。
调试运行器(reachy_debug.py):
REACHY_DEBUG_ANNOUNCE_PAUSE_S(默认值:0.6):在运行步骤之前,在每次公告后暂停。REACHY_DEBUG_TTS_SPEED(默认值:0.8)ElevenLabs的语音速度。
ElevenLabs(使用 speak_text 和 reachy_debug.py 公告):
REACHY_ELEVENLABS_API_KEY或ELEVENLABS_API_KEY(TTS必需):API键。REACHY_前缀值优先。REACHY_ELEVENLABS_VOICE_ID或ELEVENLABS_VOICE_ID(可选):语音id。默认为JBFqnCBsd6RMkjVDRZzb(乔治)如果没有设定。REACHY_ELEVENLABS_MODEL_ID或ELEVENLABS_MODEL_ID(可选):模型id(默认值:eleven_multilingual_v2).REACHY_ELEVENLABS_OUTPUT_FORMAT或ELEVENLABS_OUTPUT_FORMAT(可选):输出格式(默认值:mp3_44100_128,可选wav_44100如果你的计划允许的话)。
可用工具
| 工具 | 说明 |
|---|---|
capture_image |
从机器人的高清摄像头捕获JPEG帧 |
scan_surroundings |
将相机从多个角度平移,并返回一组全景图像 |
track_face |
通过OpenCV检测一张脸,然后转头面对它 |
move_head |
6-DOF头部定位(x/y/z,单位为毫米,横滚/俯仰/偏航,单位为度) |
move_antennas |
独立天线控制(-3.14至3.14弧度) |
look_at_point |
将头部朝向世界坐标系中的三维点 |
express_emotion |
表情驱动的情绪系统,具有同步的动作和声音 |
play_sound |
播放内置声音(唤醒、睡眠、困惑1、不耐烦1、跳舞1、计数) |
speak_text |
通过ElevenLabs API进行文本到语音传输,通过机器人扬声器播放 |
detect_sound_direction |
麦克风阵列到达方向+语音检测 |
wake_up |
内置有声音的问候动画 |
go_to_sleep |
内置有声音的告别动画 |
nod |
上下点头表示“是”或同意 |
shake_head |
左右摇头表示“不”或不同意 |
reset_position |
将头部和天线恢复到中性休息姿势 |
do_barrel_roll |
精心编排的头部倾斜+天线摆动序列 |
资源
服务器还公开了MCP资源,让AI助手动态发现机器人的能力:
| 资源URI | 描述 |
|---|---|
reachy://emotions |
支持的表情到表情的映射 |
reachy://sounds |
可用的内置声音名称 |
reachy://limits |
物理限制(天线范围、头部自由度、相机规格) |
reachy://capabilities |
按类别(视觉、运动、表情、音频、生命周期)分组的所有工具 |
视觉
capture_image 从Reachy Mini的广角高清相机中抓取一帧,并通过MCP协议将其作为内联JPEG内容返回。AI助手在对话中直接接收图像——没有文件路径,没有URL,也没有额外的设置。
scan_surroundings 通过在多个角度上平移相机并在单个响应中返回所有帧,进一步实现了这一点:
User: "Look around and describe the room"
Claude calls scan_surroundings(steps=5, yaw_range=120)
<- Robot pans from -60deg to +60deg in 5 steps
<- MCP returns 5 labeled JPEG frames + summary text
Claude: "Starting from the left I can see a window with blinds,
then a whiteboard, your desk with two monitors in the
center, a bookshelf to the right, and a door at the
far right."
相机从OpenCV返回一个标准的BGR numpy帧,该帧经过JPEG压缩并作为MCP交付 ImageContent任何支持图像输入的多模态AI模型都可以处理它——Claude、GPT-4o、Gemini等。
工具注释
每个工具都带有语义注释,告诉AI客户端如何安全地使用它:
| 注释 | 含义 | 工具 |
|---|---|---|
readOnlyHint |
不会改变机器人状态 | capture_image, detect_sound_direction |
idempotentHint=true |
可以安全地反复呼叫 | capture_image, detect_sound_direction |
idempotentHint=false |
重复通话重复动作/成本 | 所有动作/手势/音频工具,包括 speak_text |
destructiveHint=false |
没有不可逆的操作 | 所有工具 |
openWorldHint |
呼叫外部服务 | speak_text (ElevenLabs API) |
提示
预构建的提示模板,指导AI助手完成常见的机器人交互场景:
| 提示 | 描述 |
|---|---|
greet_user |
唤醒机器人,表达快乐,并用名字问候 |
explore_room |
用相机扫描周围环境并描述环境 |
react_to_conversation |
在聊天过程中使用手势和情绪做出身体反应 |
find_person |
使用摄像头和面部跟踪来定位和跟踪一个人 |
情感系统
express_emotion 将表情符号角色映射到精心编排的动作:
| 表情符号 | 情绪 | 行为 |
|---|---|---|
😊 |
快乐 | 天线竖起,姿势欢快,舞蹈声 |
😕 |
头部倾斜、天线不对称、声音混乱 | |
😤 |
不耐烦 | 天线快速移动,不耐烦的声音 |
😴 |
困倦 | 有声音的睡眠姿势 |
👋 |
问候 | 唤醒动画 |
🤔 |
思考 | 沉思的头倾斜,天线散开 |
😮 |
惊讶 | 天线高,头向后 |
😢 |
悲伤 | 天线和低头 |
🎉 |
庆祝 | 充满活力的摆动,舞蹈声 |
😐 |
中立 | 回到静止位置 |
发展
# Install with dev dependencies
uv sync --extra dev
# Run all tests
uv run pytest -v
# Unit tests only
uv run pytest -v -m "not integration"
# Integration tests only (MCP protocol layer)
uv run pytest -v -m integration
# Lint
uv run ruff check . && uv run ruff format --check .
# Set up pre-commit hooks
pre-commit install
直接机器人测试
对于一键式完整顺序调试演示(移动、手势、音频、视觉、跟踪),并进行每一步状态检查:
uv sync --extra reachy
# If you want to auto-spawn the simulator daemon, also install:
uv sync --extra reachy-sim
uv run python reachy_debug.py
reachy_debug.py 现在:
- 宣布每个即将进行的测试步骤(如果配置了,则通过ElevenLabs进行语音,否则通过控制台回退)。
- 按顺序执行完整的演示套件。
- 将所有捕获的图像和降价运行摘要保存到
results/run-YYYYMMDD-HHMMSS/. - 为运行生成单个报告文件:
run_report.md.
GitHub页面
此仓库包含一个静态GitHub Pages网站,位于 docs/ (嵌入了模拟运行视频)。
发布:GitHub仓库设置->页面->“构建和部署”->来源:“从分支部署”->分支: main ->文件夹: /docs.
