capture_imageLABSCO SUMMARY
The camera frame lands in the conversation, which is what makes the loop close.
Returning images as inline MCP content rather than paths or URLs means the assistant sees what the robot sees in the same turn it decided to look — so "look around and describe the room" is one exchange, not a file-handling exercise. The tool annotations deserve credit too: marking movement and speech as non-idempotent tells a client that retrying repeats the physical action, which on a robot is the difference between a safe retry and a surprise.
What it is
An MCP server that puts the Reachy Mini robot behind a conversational interface. Vision, movement, expression and audio are all tools, so an assistant can look through the robot's camera and act on what it sees without any robotics knowledge on its side. It runs against the physical robot or the simulator.
What you get
- 16 tools, 4 prompts and 4 resources over stdio
- Vision that arrives in the conversation rather than as a file path: a JPEG frame from the wide-angle HD camera returned as inline content, a panoramic sweep that pans across several angles and returns every frame in one response, and face detection that turns the head toward what it finds —
capture_image,scan_surroundings,track_face - Movement at the level you want it: 6-DOF head positioning in millimetres and degrees, independent antenna control in radians, or a target point in world coordinates to orient toward —
move_head,move_antennas,look_at_point - Expression driven by emoji, each mapping to a choreographed movement and sound — happy, confused, impatient, sleepy, greeting, thinking, surprised, sad, celebrate and neutral —
express_emotion - Named gestures and lifecycle animations as their own calls —
wake_up,go_to_sleep,nod,shake_head,reset_position,do_barrel_roll - Audio in both directions: built-in sounds, text-to-speech played through the robot's speaker, and microphone-array direction-of-arrival with speech detection —
play_sound,speak_text,detect_sound_direction - Resources the assistant can read to discover the robot rather than guess at it: the emoji-to-emotion map, the sound names, the physical limits, and every tool grouped by category
- Four ready-made prompts for common interactions —
greet_user,explore_room,react_to_conversation,find_person - Honest tool annotations: capture and sound-direction are marked read-only and safe to repeat, every movement and audio call is marked as repeating its action and cost, and the one tool that reaches an external service is flagged as doing so
Requirements
A Reachy Mini robot or the Reachy Mini simulator. Python 3.13+ and uv, or pip. Clone and uv sync, then the client config runs the server entry point with uv pointed at your checkout; a plain stdio launch works too. Text-to-speech is optional and off until you set ELEVENLABS_API_KEY and ELEVENLABS_VOICE_ID, with prefixed variants taking precedence and further overrides for the model id and output format. One practical note from the README: the default output format is MP3 because it works on lower ElevenLabs tiers, and some Reachy audio backends cannot decode MP3 — WAV output works but needs a higher ElevenLabs tier. The project is reachy-mini-mcp (version 0.1.0).
Setup effort
Build from source — git clone https://github.com/ArturSkowronski/reachy-mini-mcp.git
USE CASES
Asking the robot what is in the room
Pan the camera across a range of angles and get every frame back in one response, then have the assistant describe what it sees.
Making the robot react while you talk to it
Drive expressions from emoji so agreement, confusion or surprise arrive as movement and sound instead of text.
Having it turn toward whoever is speaking
Read the microphone array's direction of arrival, then orient the head at that point and look for a face there.
Giving it a voice
Send text to be spoken through the robot's speaker — checking the audio format first, since the default encoding is not playable on every backend.
Building an interaction without reading the source
Let the assistant read the capability resources for the emotion map, sound names and physical limits, so it stays inside what the hardware can actually do.
16 tools
Listed in project docs. Your client may show a different list.
scan_surroundingstrack_facemove_headmove_antennaslook_at_pointexpress_emotionplay_soundspeak_textdetect_sound_directionwake_upgo_to_sleepnodshake_headreset_positiondo_barrel_rollBEFORE YOU INSTALL
What to know first
Tools you get
16 tools named in the project's documentation.
Requires
Python 3.13+
Optional
ELEVENLABS_API_KEY in your environment
INSTALLATION
Connect your client
You clone this one yourself.
Server setup
git clone https://github.com/ArturSkowronski/reachy-mini-mcp.git
cd reachy-mini-mcp
uv syncMCP Clients
Claude Desktop
{
"mcpServers": {
"reachy-mini": {
"command": "uv",
"args": [
"--directory",
"<YOUR_PATH_TO_REACHY_MINI_MCP>",
"run",
"reachy.py"
]
}
}
}~/Library/Application Support/Claude/claude_desktop_config.json on macOS
The configuration on this page does not set ELEVENLABS_API_KEY; the project's instructions set it with an export line. That line reaches only programs started from the same terminal, so to supply ELEVENLABS_API_KEY, start your client or the server from that terminal.
Claude Code
{
"mcpServers": {
"reachy-mini": {
"command": "uv",
"args": [
"--directory",
"<YOUR_PATH_TO_REACHY_MINI_MCP>",
"run",
"reachy.py"
]
}
}
}.mcp.json in your project root
The configuration on this page does not set ELEVENLABS_API_KEY; the project's instructions set it with an export line. That line reaches only programs started from the same terminal, so to supply ELEVENLABS_API_KEY, start your client or the server from that terminal.
Any MCP client — stdio
uv run reachy.py