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.
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.
- 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
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` (0.1.0 in pyproject).
One command plus a key — pip install -e ., then supply credentials
