servomotor-mcp
This server controls Gearotons M17 servomotors over RS-485 via natural language through an MCP interface, with auto-discovery and full firmware command access.
Discover & Connect: List serial ports, connect to one, and auto-detect all motors on the bus by alias, unique 16-hex-digit ID, or broadcast (
"all").Absolute Positioning: Move a motor to a specific angle in degrees with optional speed control (
move_to).Relative Movement: Nudge a motor by a relative amount for incremental jogging (
move_relative).Smooth Trapezoid Moves: Move to an absolute angle with smooth acceleration/deceleration over a specified duration (
trapezoid_move).Homing: Run homing/zeroing on one motor or all motors (
home).Status Monitoring: Check position, voltage, temperature, motion state, and decoded errors for one or all motors (
get_status,list_motors).Emergency Stop: Immediately halt motion on one motor or all (
stop).Fault Recovery: Reset a motor from a latched fault via firmware reboot (
reset).Choreographed Sequences: Execute complex multi-step motion sequences with mixed move types, safety-checked (
run_sequence).Full Firmware Access: All 48 underlying firmware commands (e.g., enable MOSFETs, set PID, zero position, ping) are exposed as individual MCP tools.
Mock Backend: Built-in mock backend for development and testing without physical hardware.
Cross-platform: Supports serial port discovery on macOS, Windows, and Linux.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@servomotor-mcpHome all motors"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
servomotor-mcp
Drive open-source Gearotons M17 servomotors from natural language.
An MCP server that exposes the M17 — a NEMA-17 integrated, closed-loop, RS-485 servomotor — to Claude Desktop, Claude Code, or any MCP client. Control real motors by just asking:
"Find my motors and rotate the one on the bench two full turns, slowly."
Nothing is hardcoded: the server discovers your serial ports, auto-detects the
motors on the bus (the firmware's "Detect devices" command), and exposes the entire
firmware command set — every command in the servomotor library's catalog becomes an
MCP tool automatically (48 commands as of library 0.10.0), plus a few high-level tools
for everyday moves. It ships with a mock backend, so you can try the whole thing with
no hardware.
The first servomotor with an official MCP server. Open hardware, open firmware, open software — and now an open, AI-native control interface.
Quickstart (no hardware, ~2 minutes)
# Run the server directly with uv (recommended):
uvx --from servomotor-mcp servomotor-mcp
# or install it:
pip install servomotor-mcp
servomotor-mcpThen add it to Claude Desktop — copy the block from
examples/claude_desktop_config.json into your
claude_desktop_config.json, restart Claude Desktop, and ask:
"What serial ports do you see? Connect and find my motors."
See examples/demo_prompts.md for a scripted demo.
Related MCP server: reachy-mini-mcp
Drive real motors
Plug an M17 (or a daisy-chain of them) into a USB↔RS-485 adapter and install the
[serial] extra — that's it, no configuration:
pip install 'servomotor-mcp[serial]' # pulls in the Gearotons servomotor library
servomotor-mcpWith the servomotor library installed the server uses the real serial backend
automatically. In a session, the model then:
list_serial_ports— enumerates the machine's ports (macOS/dev/cu.*, WindowsCOM*, Linux/dev/ttyUSB*), flagging USB serial adapters;connect— opens the port you (or it) picked, at 230400 baud;auto-detects every motor on that bus (unique ID + alias) — no address maps to write;
drives them. Tell it in plain English which adapter to use if you have several.
Tools
High-level (discovery + everyday motion):
Tool | What it does |
| Enumerate serial ports with USB metadata (call first). |
| Open a port and auto-detect the motors on that bus. |
| Re-scan the bus (reboots the motors on it). |
| Detected motors with live position/voltage/temperature/status. |
| Absolute / relative moves in degrees; waits for completion. |
| Emergency-stop one or all motors. |
| One motor's snapshot, fatal errors decoded to plain English. |
| Choreographed steps ("draw a square"), incl. raw command steps. |
Plus one tool per firmware command, generated from the library's command catalog:
enable_mosfets, go_to_position, move_with_velocity, move_with_acceleration,
multimove, homing, zero_position, get_position, get_temperature,
set_device_alias, set_pid_constants, system_reset, vibrate, ping, … — anything
the motor can do, the model can do. Motors are addressed by their alias number, their
16-hex-digit unique ID, or "all" (broadcast). Values are in friendly units (degrees,
seconds, degrees/s, volts, °C); the server converts to firmware units.
How it works
natural language → Claude → MCP tool calls → this server → RS-485 → M17 motorsThe server is a thin layer over the Gearotons servomotor Python library. The library is
data-driven — motor_commands.json defines every firmware command — and the server turns
that same catalog into MCP tools, so new library commands appear automatically. Tool calls
are forwarded straight to the hardware — no software clamping; full multi-turn travel, any
speed. The motor's own firmware protections (over-current / over-voltage /
over-temperature) still apply. The same tools run against the mock backend
(GEAROTONS_MOTOR_BACKEND=mock) for development and CI.
Environment variables (all optional):
GEAROTONS_MOTOR_BACKEND—auto(default: serial when theservomotorlibrary is installed, else mock),serial, ormock.GEAROTONS_SERIAL_PORT— default port forconnectwhen the model doesn't pass one.GEAROTONS_DEFAULT_SPEED_DPS— default speed formove_to/move_relative(180).
Develop / test
pip install -e '.[dev]'
GEAROTONS_MOTOR_BACKEND=mock pytest # catalog + mock-bus + server-tool testshardware_tests/ contains scripts that exercise the real serial path end to end
(port sweep, full command suite, stdio MCP session) against a bench motor.
Status
✅ Full firmware command surface (48 commands), serial-port discovery, bus auto-detection — verified on a physical M17 (fw 0.15.3.0) over a real stdio MCP session and via
uvx, on all four test adapters (motor found only where it truly is).✅ Mock backend + 39 unit tests, no hardware needed.
✅ Cross-platform port handling (macOS / Windows / Linux) via pyserial enumeration.
License
MIT. Hardware, firmware, and software for the M17 are open-source — see github.com/tomrodinger/servomotor.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Gearotons/servomotor-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server