Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Gearotons M17 Servomotor

PYPI · SERVOMOTOR-MCP · SCANNED SEP 20

Drive Gearotons M17 open-source servomotors from plain English over RS-485; mock mode, no hardware.

Available components

−10 this week 54 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 0 of 29 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency45
Schema Quality & AI Usability63
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 9467 tokens (~166/item across 57 items; 57 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management37
  • Stability observed for 11 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage67
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "run_sequence" implies "execute" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 57 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the Gearotons M17 Servomotor MCP server?

Gearotons M17 Servomotor runs locally as a PyPI package, launched with uvx servomotor-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · servomotor-mcp

# add to Claude Code
claude mcp add gearotons-servomotor-mcp -- uvx servomotor-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "gearotons-servomotor-mcp": {
      "command": "uvx",
      "args": [
        "servomotor-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "gearotons-servomotor-mcp": {
      "command": "uvx",
      "args": [
        "servomotor-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add gearotons-servomotor-mcp -- uvx servomotor-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "gearotons-servomotor-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "servomotor-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add gearotons-servomotor-mcp --command uvx --arg servomotor-mcp
# ~/.hermes/config.yaml
mcp_servers:
  gearotons-servomotor-mcp:
    command: "uvx"
    args: ["servomotor-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "gearotons-servomotor-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "servomotor-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add gearotons-servomotor-mcp -t stdio -c uvx -a servomotor-mcp
// mcp.json
{
  "mcpServers": {
    "gearotons-servomotor-mcp": {
      "command": "uvx",
      "args": [
        "servomotor-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 +4
    • Stability: unverified → 0.27 functional
  • 14 Sept 26 −15
    • Malware scan: pass → unverified security
  • 13 Sept 26 +15
    • Malware scan: unverified → pass security
  • 9 Sept 26 49

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed pypi/servomotor-mcp@0.3.1

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 29 packages
Packages resolved 29
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 57 exposed · ~9,467 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
capture_hall_sensor_data ~355

Start sending hall sensor data (work in progress; don't send this command) [Firmware command "Capture hall sensor data", group: Other.] Parameters: - captureType: Indicates the type of data to capture. Currently 1 to 3 are valid. - nPointsToRead: Number of points to read back from the device - channelsToCaptureBitmask: Channels to capture bitmask. The first three bits are valid, which will turn on (0) or turn off (0) that hall sensor channel - timeStepsPerSample: Aquire a sample every this number of time steps. Time steps happen at the update frequency, which can be read with the Get product specs command - nSamplesToSum: Number of samples to sum together to make one point to transmit back - divisionFactor: Division factor to apply to the sum of the samples to scale it down before transmitting it so that it fits into the returned data type, which is a 16-bit number per each hall sensor Returns: - data: The data of the hall sensors after suming and averaging motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
captureTypeintegeryes
channelsToCaptureBitmaskintegeryes
divisionFactorintegeryes
motorstringyes
nPointsToReadintegeryes
nSamplesToSumintegeryes
timeStepsPerSampleintegeryes

No output schema declared.

No examples provided.

connect ~203

Open a serial port (230400 baud) and auto-detect the motors on that RS-485 bus. ``port`` is a device name from ``list_serial_ports`` (e.g. "/dev/cu.usbserial-210", "COM3", "/dev/ttyUSB0"). If omitted: uses $GEAROTONS_SERIAL_PORT if set, else the single USB serial adapter if there is exactly one, else asks you to choose. Detection reboots every motor on the bus (positions re-zero at the current shaft location, MOSFETs turn off) and takes ~3 s per attempt. If no motors are found, the adapter may be the wrong one — try another port. Connecting to a different port replaces the previous connection, but only once the new port opens successfully — a failed attempt leaves the old connection intact.

NameTypeReqDescription
detectboolean
detect_attemptsinteger
port

No output schema declared.

No examples provided.

control_hall_sensor_statistics ~137

Turn on or off the gathering of statistics for the hall sensors and reset the statistics [Firmware command "Control hall sensor statistics", group: Status & Monitoring.] Parameters: - control: 0 = turn off statistics gathering, 1 = reset statistics and turn on gathering. Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
controlintegeryes
motorstringyes

No output schema declared.

No examples provided.

crc32_control ~146

Enable or disable CRC32 checking for commands [Firmware command "CRC32 control", group: Configuration.] NOTE: Changes protocol framing for ALL subsequent commands; only disable CRC32 if you know why. Parameters: - enableCrc32: Control value (1 to enable, 0 to disable CRC32 checking) Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
enableCrc32integeryes
motorstringyes

No output schema declared.

No examples provided.

detect_devices ~101

Re-scan the connected bus for motors using the firmware's "Detect devices" command. Use after plugging in / powering on motors, or when a motor seems missing. Runs ``attempts`` merged detection rounds (more rounds = more reliable with many motors on one bus). CAUTION: this reboots every motor on the bus — positions re-zero at the current shaft location and MOSFETs turn off.

NameTypeReqDescription
attemptsinteger

No output schema declared.

No examples provided.

disable_mosfets ~110

Disables the MOSFETS (note that MOSFETs are disabled after initial power on). [Firmware command "Disable MOSFETs", group: Basic Control.] Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

disconnect ~27

Close the serial port (e.g. to free it for another program, or before unplugging).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

emergency_stop ~100

Emergency stop (stop all movement, disable MOSFETS, clear the queue) [Firmware command "Emergency stop", group: Basic Control.] Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

enable_mosfets ~96

Enables the MOSFETS. [Firmware command "Enable MOSFETs", group: Basic Control.] Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

firmware_upgrade ~207

This command will upgrade the flash memory of the servo motor. Before issuing a firmware upgrade command, you must do some calculations as shown in the examples. [Firmware command "Firmware upgrade", group: Device Management.] NOTE: Flashes a firmware page (hex-encoded bytes). Wrong data can brick the motor. Only use with a valid firmware file and the user's explicit go-ahead. Parameters: - firmwarePage: The data to upgrade one page of flash memory. Contents includes the product model code (8 bytes), firmware compatibility code (1 byte), page number (1 byte), and the page data itself (2048 bytes). Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
firmwarePagestringyes
motorstringyes

No output schema declared.

No examples provided.

get_communication_statistics ~241

Get and optionally reset the CRC32 error counter [Firmware command "Get communication statistics", group: Status & Monitoring.] Parameters: - resetCounter: Reset flag (1 to reset the counter after reading, 0 to just read) Returns: - crc32ErrorCount: Number of CRC32 errors detected - packetDecodeErrorCount: Number of packet decode errors detected - firstBitErrorCount: Number of times that the first bit in the first byte of a packet was not 1 as expected - framingErrorCount: Number of framing errors detected during reception from the RS485 interface - overrunErrorCount: Number of overrun errors detected during reception from the RS485 interface - noiseErrorCount: Number of noise errors detected during reception from the RS485 interface motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes
resetCounterintegeryes

No output schema declared.

No examples provided.

get_comprehensive_position ~160

Get the desired motor position, hall sensor position, and external encoder position all in one shot [Firmware command "Get comprehensive position", group: Status & Monitoring.] Returns: - commandedPosition: The commanded position (which may differ from actual) - hallSensorPosition: The hall sensor position (or you could say the actual measured position) - externalEncoderPosition: The external encoder position. This needs special hardware attached to the motor to work motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

get_current_time ~102

Gets the current absolute time [Firmware command "Get current time", group: Status & Monitoring.] Returns: - currentTime: The current absolute time in microseconds motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

get_debug_values ~500

Get debug values including motor control parameters, profiler times, hall sensor data, and other diagnostic information. [Firmware command "Get debug values", group: Status & Monitoring.] Returns: - maxAcceleration: Maximum acceleration setting - maxVelocity: Maximum velocity setting - currentVelocity: Current velocity - measuredVelocity: Measured velocity - nTimeSteps: Number of time steps left in the current move - debugValue1: Debug value 1 - debugValue2: Debug value 2 - debugValue3: Debug value 3 - debugValue4: Debug value 4 - allMotorControlCalculationsProfilerTime: All motor control calculations profiler time - allMotorControlCalculationsProfilerMaxTime: All motor control calculations profiler maximum time - getSensorPositionProfilerTime: Get sensor position profiler time - getSensorPositionProfilerMaxTime: Get sensor position profiler maximum time - computeVelocityProfilerTime: Compute velocity profiler time - computeVelocityProfilerMaxTime: Compute velocity profiler maximum time - motorMovementCalculationsProfilerTime: Motor movement calculations profiler time - motorMovementCalculationsProfilerMaxTime: Motor movement calculations profiler maximum time - motorPhaseCalculationsProfilerTime: Motor phase calculations profiler time - motorPhaseCalculationsProfilerMaxTime: Motor phase calculations profiler maximum time - motorControlLoopPeriodProfilerTime: Motor control loop period profiler time - motorControlLoopPeriodProfilerMaxTime: Motor control loop period profiler maximum time - hallSensor1Voltage: Hall sensor 1 voltage - hallSensor2Voltage: Hall sensor 2 voltage - hallSensor3Voltage: Hall sensor 3 voltage - commutationPositionOffset: Commutation position offset - motorPhasesReversed: Motor phases reversed flag - maxHallPositionDelta: Maximum hall position delta - minHallPositionDelta: Minimum hall position delta - averageHallPositionDelta: Average hall position delta - motorPwmVoltage: Motor PWM…

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

get_firmware_version ~200

Get the firmware version or the bootloader version depending on what mode we are in. This command also returns the status bits, where the least significan bit teels us if we are currently in the bootloader (=1) or the main firmware (=0) [Firmware command "Get firmware version", group: Device Management.] Returns: - firmwareVersion: The firmware version stored as 4 bytes. The first byte is the development number, then patch version, followed by the minor and major versions. - inBootloader: A flag that tells us if we are in the bootloader (=1) or in the reguslar firmware (=0) motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

get_hall_sensor_position ~139

Get the position as measured by the hall sensors (this should be the actual position of the motor and if everything is ok then it will be about the same as the desired position) [Firmware command "Get hall sensor position", group: Status & Monitoring.] Returns: - hallSensorPosition: The current position as determined by the hall sensors motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

get_hall_sensor_statistics ~331

Read back the statistics gathered from the hall sensors. Useful for checking the hall sensor health and noise in the system. [Firmware command "Get hall sensor statistics", group: Status & Monitoring.] Returns: - maxHall1: The maximum value of hall sensor 1 encoutered since the last statistics reset. - maxHall2: The maximum value of hall sensor 2 encoutered since the last statistics reset. - maxHall3: The maximum value of hall sensor 3 encoutered since the last statistics reset. - minHall1: The minimum value of hall sensor 1 encoutered since the last statistics reset. - minHall2: The minimum value of hall sensor 2 encoutered since the last statistics reset. - minHall3: The minimum value of hall sensor 3 encoutered since the last statistics reset. - sumHall1: The sum of hall sensor 1 values collected since the last statistics reset. - sumHall2: The sum of hall sensor 2 values collected since the last statistics reset. - sumHall3: The sum of hall sensor 3 values collected since the last statistics reset. - measurementCount: The number of times the hall sensors were measured since the last statistics reset. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

get_max_pid_error ~129

Get the minimum and maximum error value ovserved in the PID control loop since the last read. [Firmware command "Get max PID error", group: Status & Monitoring.] Returns: - minPidError: The minimum PID error value. - maxPidError: The maximum PID error value. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

get_motor_status ~75

One motor's live snapshot: position, supply voltage, temperature, decoded status. Call after moves to CONFIRM completion, or when the user asks "where is it / is it okay". Includes any fatal error decoded to plain English with suggested fixes (clear faults with ``system_reset``).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

get_n_queued_items ~159

Get the number of items currently in the movement queue (if this gets too large, don't queue any more movement commands) [Firmware command "Get n queued items", group: Status & Monitoring.] Returns: - queueSize: The number of items in the movement queue. This command will return between 0 and 32. If less than 32, you can add more items to the queue to continue the movements in order without stopping. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

get_position ~113

Get the current desired position (which may differ a bit from the actual position as measured by the hall sensors) [Firmware command "Get position", group: Status & Monitoring.] Returns: - position: The current desired position motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

get_product_description ~102

Get the product description. [Firmware command "Get product description", group: Device Management.] Returns: - productDescription: This is a brief description of the product. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

get_product_info ~203

Get product information [Firmware command "Get product info", group: Device Management.] Returns: - productCode: The product code / model number (when doing a firmware upgrade, this must match between the firmware file and the target device). - firmwareCompatibility: A firmware compatibility code (when doing a firmware upgrade, this must match between the firmware file and the target device). - hardwareVersion: The hardware version stored as 3 bytes. The first byte is the patch version, followed by the minor and major versions. - serialNumber: The serial number. - uniqueId: The unique ID for the product. - reserved: Not currently used. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

get_product_specs ~160

Get the update frequency (reciprocal of the time step) [Firmware command "Get product specs", group: Device Management.] Returns: - updateFrequency: Update frequency in Hz. This is how often the motor executes all calculations for hall sensor position, movement, PID loop, safety, etc. - countsPerRotation: Counts per rotation. When commanding the motor or when reading back position, this is the number of counts per one shaft rotation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

get_status ~169

Gets the status of the motor [Firmware command "Get status", group: Status & Monitoring.] Returns: - statusFlags: A series of flags which are 1 bit each - fatalErrorCode: The fatal error code. If 0 then there is no fatal error. Once a fatal error happens, the motor becomes disabled and cannot do much anymore until reset. You can press the reset button on the motor or you can execute the System reset command to get out of the fatal error state. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

get_supply_voltage ~115

Get the measured voltage of the power supply. [Firmware command "Get supply voltage", group: Status & Monitoring.] Returns: - supplyVoltage: The voltage. Divide this number by 10 to get the actual voltage in volts. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

get_temperature ~120

Get the measured temperature of the motor. [Firmware command "Get temperature", group: Status & Monitoring.] Returns: - temperature: The temperature in degrees celcius. The accuracy is about +/- 3 degrees celcius and is measured at the motor driver PCB. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

go_to_closed_loop ~95

Go to closed loop position control mode [Firmware command "Go to closed loop", group: Motion Control.] Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

go_to_position ~191

Move to this new given position in the amount of time specified. Acceleration and deceleration will be applied to make the move smooth. [Firmware command "Go to position", group: Motion Control.] This QUEUES the move and returns immediately; poll get_n_queued_items for completion, or use move_to/move_relative which wait. Requires enable_mosfets first. Parameters: - position (in degrees): New absolute position value. - duration (in seconds): Time allowed for executing the move. Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
durationnumberyes
motorstringyes
positionnumberyes

No output schema declared.

No examples provided.

homing ~225

Homing (or in other words, move until a crash and then stop immediately) [Firmware command "Homing", group: Motion Control.] NOTE: The motor moves until it hits a physical obstruction, then zeroes there. Ensure a hard stop exists within maxDistance. Parameters: - maxDistance (in degrees): The maximum distance to move (if a crash does not occur). This can be positive or negative. the sign determines the direction of movement. - maxDuration (in seconds): The maximum time to allow for homing. Make sure to give enough time for the motor to cover the maximum distance or the motor may move too fast or throw a fatal error. Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
maxDistancenumberyes
maxDurationnumberyes
motorstringyes

No output schema declared.

No examples provided.

identify ~103

Identify your motor by sending this command. The motor's green LED will flash rapidly for 3 seconds. [Firmware command "Identify", group: Device Management.] Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

list_motors ~77

List the detected motors with live position, voltage, temperature, and status. Call after ``connect`` to see what is on the bus, or any time the user asks "what motors are connected / where are they". If this is empty but hardware is plugged in, run ``detect_devices`` or try another serial port.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_serial_ports ~114

List the serial ports on this computer so one can be chosen for ``connect``. Call this FIRST in any session. USB-RS485 adapters show up with a USB VID:PID and usually a telling description/manufacturer (FTDI, CH340, CP210x...). If several adapters are present, connect to the most likely one and check whether motors are detected; it is cheap to connect to another port and look again. Relay the options to the user in plain English if it is ambiguous.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

move_relative ~134

Move one motor by a RELATIVE amount in degrees (+/-) and wait for it to finish. Use for "turn a bit more", "back off 10 degrees", or incremental jogging. Any magnitude is allowed, including multiple full turns. ``speed_dps`` is degrees/second (default 180). Enables the MOSFETs automatically and returns the settled position. motor: an alias number (e.g. 88) or a 16-hex-digit unique ID from list_motors.

NameTypeReqDescription
degreesnumberyes
motorstringyes
speed_dps

No output schema declared.

No examples provided.

move_to ~174

Move one motor to an ABSOLUTE angle in degrees and wait for it to finish. Use when the user names a target position ("go to 90 degrees", "one full turn" = 360). Angles are unbounded multi-turn (720 = two full turns). ``speed_dps`` is degrees/second (default 180). Enables the motor's MOSFETs automatically and returns the settled position. For very long moves (>30 s) prefer ``go_to_position`` plus ``get_n_queued_items`` polling so the tool call doesn't time out. motor: an alias number (e.g. 88) or a 16-hex-digit unique ID from list_motors.

NameTypeReqDescription
degreesnumberyes
motorstringyes
speed_dps

No output schema declared.

No examples provided.

move_with_acceleration ~227

Rotates the motor with the specified acceleration [Firmware command "Move with acceleration", group: Motion Control.] This QUEUES the move and returns immediately; poll get_n_queued_items for completion, or use move_to/move_relative which wait. Requires enable_mosfets first. Parameters: - acceleration (in degrees_per_second_squared): The acceleration (the unit is microsteps per time step per time step * 2^24). - timeSteps (in seconds): The number of time steps to apply this acceleration. Use command 18 to get the frequency of the time steps. After this many time steps, the acceleration will go to zero and velocity will be maintained. Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
accelerationnumberyes
motorstringyes
timeStepsnumberyes

No output schema declared.

No examples provided.

move_with_velocity ~187

Rotates the motor with the specified velocity. [Firmware command "Move with velocity", group: Motion Control.] This QUEUES the move and returns immediately; poll get_n_queued_items for completion, or use move_to/move_relative which wait. Requires enable_mosfets first. Parameters: - velocity (in degrees_per_second): The velocity (the unit is microsteps per time step * 2^20). - duration (in seconds): The time to maintain this velocity. Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
durationnumberyes
motorstringyes
velocitynumberyes

No output schema declared.

No examples provided.

multimove ~474

The multimove command allows you to compose multiple moves one after another. Please note that when the queue becomes empty after all the moves are executed and the motor is not at a standstill then a fatal error will be triggered. [Firmware command "Multimove", group: Motion Control.] NOTE: moveList is a list of [value, duration_seconds] pairs (max 32): value is degrees/s^2 for acceleration moves (moveTypes bit = 0) or degrees/s for velocity moves (bit = 1); this server converts to firmware units. The final move must bring the motor to a standstill or the firmware raises a fatal error when the queue empties. This QUEUES the move and returns immediately; poll get_n_queued_items for completion, or use move_to/move_relative which wait. Requires enable_mosfets first. Parameters: - moveCount: Specify how many moves are being communicated in this one shot. - moveTypes: Each bit specifies if the move is a (bit = 0) MOVE_WITH_ACCELERATION_COMMAND or a (bit = 1) MOVE_WITH_VELOCITY_COMMAND. - moveList: A 2D list in Python format (list of lists). Each item in the list is of type [i32, u32] representing a series of move commands. Each move command specifies the acceleration to move at or the velocity to instantly change to (according to the bits above) and the number of time steps over which this command is to be executed. For example: '[[100, 30000], [-200, 60000]]'. There is a limit of 32 move commands that can be listed in this one multi-move command. Each of the moves takes up one queue spot, so make sure there is enough space in the queue to store all of the commands. Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes
moveCountintegeryes
moveListstringyes
moveTypesintegeryes

No output schema declared.

No examples provided.

ping ~142

Send a payload containing any data and the device will respond with the same data back [Firmware command "Ping", group: Device Management.] Parameters: - pingData: Any binary data payload to send to the device. Returns: - responsePayload: The same data that was sent to the device will be returned if all went well. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes
pingDatastringyes

No output schema declared.

No examples provided.

read_multipurpose_buffer ~144

Read whatever is in the multipurpose buffer (the buffer is used for data generated during calibration, going to closed loop mode, and when capturing hall sensor data) [Firmware command "Read multipurpose buffer", group: Other.] Returns: - bufferData: The data in the buffer (the format and length of the data depends on what was put in the buffer) motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

reset_time ~101

Resets the absolute time to zero (call this first before issuing any movement commands) [Firmware command "Reset time", group: Basic Control.] Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

run_sequence ~175

Execute a choreographed sequence of steps, e.g. "draw a square" or "wave". Each step is one of: {"action": "move_to", "motor": "88", "degrees": 90, "speed_dps": 120} {"action": "move_relative", "motor": "88", "degrees": -30} {"action": "stop"} # motor optional -> all {"action": "wait", "seconds": 0.5} {"action": "command", "motor": "88", "name": "vibrate", "params": [1]} Steps run in order; "command" runs any raw catalog command by tool name. Returns the final state of every detected motor.

NameTypeReqDescription
stepsarrayyes

No output schema declared.

No examples provided.

set_device_alias ~166

Sets device alias [Firmware command "Set device alias", group: Device Management.] NOTE: Changes how the motor is addressed (takes effect immediately). Re-run detect_devices afterwards. Parameters: - alias: The alias (which is a one byte ID) ranging from 0 to 251. It cannot be 252 to 254 because those are reserved. You can set it to 255, which will remove the alias. Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
aliasintegeryes
motorstringyes

No output schema declared.

No examples provided.

set_max_allowable_position_deviation ~161

Set the amount of microsteps that the actual motor position (as measured by the hall sensors) is allowed to deviate from the desired position. Throw a fatal error if this is exceeded. [Firmware command "Set max allowable position deviation", group: Configuration.] Parameters: - maxAllowablePositionDeviation (in degrees): The new maximum allowable position deviation setting Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
maxAllowablePositionDeviationnumberyes
motorstringyes

No output schema declared.

No examples provided.

set_maximum_acceleration ~115

Sets max acceleration [Firmware command "Set maximum acceleration", group: Configuration.] Parameters: - maximumAcceleration (in degrees_per_second_squared): The maximum acceleration. Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
maximumAccelerationnumberyes
motorstringyes

No output schema declared.

No examples provided.

set_maximum_motor_current ~225

Set the maximum motor current and maximum regeneration current. The values take effect immediately but are not saved to non-volatile memory, so they revert to the firmware default after a reset. [Firmware command "Set maximum motor current", group: Configuration.] NOTE: Higher current = more torque AND more heat; excessive settings can overheat the motor. Parameters: - motorCurrent (in milliamps): The motor current. The units are some arbitrary units and not amps. A value of 150 or 200 is suitable. - regenerationCurrent (in milliamps): The motor regeneration current (while it is braking). This parameter is currently not used for anything. Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes
motorCurrentnumberyes
regenerationCurrentnumberyes

No output schema declared.

No examples provided.

set_maximum_velocity ~121

Sets maximum velocity (this is not used at this time) [Firmware command "Set maximum velocity", group: Configuration.] Parameters: - maximumVelocity (in degrees_per_second): Maximum velocity. Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
maximumVelocitynumberyes
motorstringyes

No output schema declared.

No examples provided.

set_pid_constants ~175

Set PID constants for the control loop that will try to maintain the motion trajectory. [Firmware command "Set PID constants", group: Configuration.] NOTE: Bad gains can make the motor oscillate violently. Parameters: - kP: The proportional term constant (P) - kI: The integral term constant (I) - kD: The differential term constant (D) Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
kDintegeryes
kIintegeryes
kPintegeryes
motorstringyes

No output schema declared.

No examples provided.

set_safety_limits ~160

Set safety limits (to prevent motion from exceeding set bounds) [Firmware command "Set safety limits", group: Configuration.] NOTE: Sets firmware position limits; moves beyond them fault the motor. Parameters: - lowerLimit (in degrees): The lower limit in microsteps. - upperLimit (in degrees): The upper limit in microsteps. Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
lowerLimitnumberyes
motorstringyes
upperLimitnumberyes

No output schema declared.

No examples provided.

start_calibration ~135

Starts a calibration, which will determine the average values of the hall sensors and will determine if they are working correctly [Firmware command "Start calibration", group: Configuration.] NOTE: The motor spins through a calibration routine; the shaft must be free to rotate. Takes some seconds; the motor won't respond until done. Returns: success confirmation. motor: an alias number (e.g. 88), a 16-hex-digit unique ID (e.g. "0123456789ABCDEF"), or "all" to broadcast to every motor on the bus (broadcasts get no responses back).

NameTypeReqDescription
motorstringyes

No output schema declared.

No examples provided.

Common questions

What is the Gearotons M17 Servomotor MCP server?

Gearotons M17 Servomotor is an MCP server listed in the public MCP registry as io.github.Gearotons/servomotor-mcp. Drive Gearotons M17 open-source servomotors from plain English over RS-485; mock mode, no hardware. This page covers its PyPI package (servomotor-mcp).

Is the Gearotons M17 Servomotor MCP server safe to use?

Gearotons M17 Servomotor scores 54 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Gearotons M17 Servomotor MCP server expose?

Gearotons M17 Servomotor exposes 57 tools: list_serial_ports, connect, disconnect, detect_devices, list_motors, and 52 more. Their descriptions and schemas cost roughly 9,467 tokens of context every time the server is loaded.

Is the Gearotons M17 Servomotor MCP server still maintained?

Gearotons M17 Servomotor is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Gearotons M17 Servomotor MCP server under?

Gearotons M17 Servomotor declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.