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 "Deploy 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.
Available Tools
57 toolscapture_hall_sensor_dataB
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| captureType | Yes | ||
| nPointsToRead | Yes | ||
| nSamplesToSum | Yes | ||
| divisionFactor | Yes | ||
| timeStepsPerSample | Yes | ||
| channelsToCaptureBitmask | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry behavioral context. It does disclose the work-in-progress status, the broadcast-no-response behavior, scaling to 16-bit per hall sensor, and summing/averaging. It stops short of saying whether this starts an ongoing stream, how to stop it, or what side effects and error behavior occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The information is mostly front-loaded and the parameter/return sections make it readable, but the 'motor' parameter is listed after 'Returns:' rather than with the other inputs, and the bitmask line is self-contradictory. The length is justified by the lack of schema descriptions, but typos and misplaced content could be cleaned up.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter command with no annotations, no output schema, and zero schema descriptions, the text supplies essential parameter semantics and a return description. It is still incomplete for actual invocation: no constraints or captureType meanings, no stream/stop behavior, and no output format beyond the vague 'data' field.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description compensates by explaining all seven parameters, including motor's alias/ID/'all' forms and captureType's 1-3 valid range. It loses a point because channelsToCaptureBitmask says both on and off are '0', which is contradictory, and no defaults or broader ranges are given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening phrase 'Start sending hall sensor data' names a concrete action and resource, and the firmware-command tag confirms it. It is not a tautology. However, it does not contrast with sibling tools such as get_hall_sensor_position or control_hall_sensor_statistics, so distinguishing it from alternatives is left mostly to the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The explicit warning 'work in progress; don't send this command' gives a clear when-not-to-use signal and a reason. But there is no positive use case and no alternative tool is named, so an agent gets no guidance on what to use instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connectA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | ||
| detect | No | ||
| detect_attempts | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: detection reboots every motor, re-zeros positions, disables MOSFETs, takes ~3 s per attempt, and the new connection only replaces the old one after a successful open. These side effects are exactly what an agent needs to know before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is well-structured: the core purpose is front-loaded, then ports, defaults, side effects, and failure cases follow. It's longer than minimal, but every sentence provides operationally relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Coverage is strong for 3 optional params, describing default resolution, side effects, timing, and connection transitions. The main gap is the lack of any return-value description — with no output schema, a sentence on what the tool returns after detection would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It thoroughly documents `port` (source, examples, fallbacks), but `detect` and `detect_attempts` are never explained — their semantics (toggling detection off, number of attempts) are absent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-plus-resource ('Open a serial port... and auto-detect the motors'), and explicitly names the sibling it draws from (list_serial_ports). An agent can clearly distinguish it from connect siblings like detect_devices, disconnect, and list_serial_ports.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear when-to-use context: explains the port source, fallback resolution order (env var, single adapter, prompt), and failure handling ('try another port'). It doesn't explicitly name alternatives like detect_devices or contrast when not to use connect, but the context is unambiguous for selecting this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
control_hall_sensor_statisticsA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| control | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of explaining side effects. It clearly discloses that the command turns statistics on/off, resets them when control=1, and that broadcasts produce no responses. Minor omissions: no error behavior or consequences of resetting, but core mutating behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence)Skip firmware metadata, the parameter detail is organized and readable. Slight redundancy (duplicating the command name and parameter list) prevents a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the minimal schema and absence of annotations, the description covers invocation semantics, parameter values, and return behavior. It lacks only guidance on when to choose this tool over siblings and what a 'success confirmation' looks like precisely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema lists only types and required flags, so the description provides all real meaning. It fully documents control values (0/1), the three accepted motor identifier formats, and the broadcast no-response caveat.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific and unambiguous action:
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as reading the statistics or other hall-sensor commands. It explains mechanics but not decision context, so an agent gets no usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crc32_controlA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| enableCrc32 | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of disclosure. It explicitly warns about a persistent protocol-framing side effect on all subsequent commands and notes broadcast yields no responses. It doesn't detail permissions, failures, or exact framing change, but it is substantive beyond the raw schema. A 4 rather than 5 because it omits what happens if CRC mode is mismatched (commands being dropped/wrong framing) and doesn't discuss the broader consequences beyond the caution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads the core actiony with the warning, includes parameter documentation compactly. Slight redundancy: parameter details appear in descriptions as well as parameters list. Still no filler. A 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter control command with no output schema, the description covers purpose, effect, parameters, and return. The broadcast semantics are documentedebab. Missing a bit on error behavior and exact values beyond 1/0, but sufficient for an agent to call correctly. No output schema to rely on, so the mention of
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has minimal descriptions for both parameters, and the description includes inline parameter documentation: enableCrc32 values are defined (1 enable, 0 disable), and motor parameter accepts alias, unique ID, or broadcast with a note about no responses. That adds meaning beyond schema. However, it doesn't specify the allowed range of motor values or exact format of the ID beyond the example. Baseline 3 because schema description coverage is low and description compensates partially.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb-resource pair (
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong guidance: enables/disables CRC32, and specifically cautions 'only disable CRC32 if you know why' plus warns that it changes protocol framing for ALL subsequent commands. It gives context but does not explicitly compare to alternatives or state exact conditions (e.g., during firmware upgrade or when talking to legacy controllers), so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_devicesA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| attempts | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses a critical side effect: 'this reboots every motor on the bus — positions re-zero at the current shaft location and MOSFETs turn off.' This is exactly the kind of behavioral context an agent needs before invoking a potentially disruptive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: what it does, when to use it, and the critical warning. The caution is front-loaded enough to be noticed. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description covers the action, the trigger conditions, the parameter semantics, and the side effects. An agent has everything needed to decide whether and how to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains the 'attempts' parameter's meaning ('merged detection rounds') and its effect on reliability. It doesn't specify valid range or default behavior, but the schema already provides a default of 3, and the description adds the semantic meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Re-scan'), a specific resource ('the connected bus for motors'), and the mechanism (firmware's 'Detect devices' command). It clearly distinguishes this from siblings like list_motors (which lists known motors) and connect (which establishes a connection).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use: 'after plugging in / powering on motors, or when a motor seems missing.' It also explains the attempts parameter's trade-off (more rounds = more reliable with many motors). It doesn't name a specific alternative tool, but the usage context is clear enough to route an agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disable_mosfetsA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It adds meaningful behavioral detail: returns a success confirmation, and 'all' broadcasts never return responses. It stops short of explaining what disabling MOSFETs does to motor operation or what preconditions apply, but the disclosed behavior exceeds the minimum.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three compact clauses: the action with a necessary state caveat, the return value, and the parameter format. It is front-loaded with the core verb and every sentence conveys non-redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter firmware command with no output schema, the description is self-contained: it states the action, the relevant initial-state caveat, the return behavior, and all acceptable motor identifiers. No critical information needed to invoke the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides zero description for the single motor parameter, but the description fully compensates by specifying alias numbers, 16-hex-digit unique IDs, the literal 'all', and the no-response behavior for broadcasts. This is more than enough for an agent to format the argument correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact action ('Disables the MOSFETS') and frames it as a firmware command in the Basic Control group, so the tool's function is unmistakable. The verb also separates it from the sibling enable_mosfets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The note that MOSFETs are already disabled after initial power-on gives the agent useful context about when the call may be unnecessary. However, it never explicitly names alternatives such as enable_mosfets or states conditions for when this command should be preferred, so the guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnectA
Close the serial port (e.g. to free it for another program, or before unplugging).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does explain the practical effect (freeing the port) and appropriate timing (before unplugging), but it omits potential side effects such as invalidating subsequent commands on the device or behavior when the port is already disconnected. This is adequate but has clear gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. The main action 'Close the serial port' comes first, and the parenthetical examples add useful context without bloating the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, no-output-schema tool, the description covers the core action and practical use cases. It is mostly complete, though it could note what happens if the port is already closed or whether active operations are interrupted. Still, an agent can safely call this tool with the information provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter ambiguity to document. The schema is fully complete with no properties. Per the zero-parameter baseline, the description need not add parameter-level detail, and its usage examples provide enough context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Close the serial port'. This clearly distinguishes the tool from siblings like connect, list_serial_ports, and detect_devices. Even without a title, the tool's purpose is immediately unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete use cases: freeing the port for another program or unplugging the device. It does not explicitly mention alternatives or exclusions, but for a no-parameter serial-port lifecycle tool, this is sufficient context for an agent to decide when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emergency_stopA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses the side effects (stopping all movement, disabling MOSFETs, clearing the queue), the return behavior ('success confirmation'), and the notable special case that broadcasts receive no responses. This is substantive, though it does not mention any safety or re-enable consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the action and effects, followed by return info and parameter details. The firmware command reference is minor extra context but does not bloat the text. Every sentence serves a purpose, though the formatting feels slightly fragmented.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter emergency command with no output schema, the description covers the core aspects: what happens, what is returned, and how to specify the motor. It could be more explicit about the structure of the success confirmation and error behavior, but it is largely sufficient for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does this well by explaining the 'motor' parameter's possible forms: an alias number, a 16-hex-digit unique ID, or 'all' for broadcast, with an example and a behavioral consequence. This adds real meaning beyond the schema's bare 'string' type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action plus its complete effect: 'stop all movement, disable MOSFETS, clear the queue.' This clearly differentiates it from sibling tools like 'stop' or 'disable_mosfets' by combining distinct behaviors and naming the exact resource it operates on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied through the behavior description and the phrase 'Emergency stop,' but no explicit guidance is given about when to choose this tool over 'stop' or 'disable_mosfets.' It does not mention alternatives or exclusions, leaving the selection decision mostly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enable_mosfetsA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It states that the command is an enabling action, returns a success confirmation, and that broadcasts return no response, which are useful behavioral details. It does not disclose side effects, reversibility, or any state dependencies, leaving room for surprise in more complex flows.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, starting with the verb and resource, then giving the firmware reference, return type, and all parameter semantics in three purposeful sentences. There is no padding or redundant repetition of schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given it is a one-parameter tool with no output schema and no annotations, the description covers the purpose, parameter forms, response, and a behavioral quirk. The only missing piece is a hint about when a user would want to enable MOSFETs relative to other actions, but this is a minor gap for such a basic command.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides only 'type: string', nothing else. The description fully compensates by specifying the three valid forms (alias number, 16-hex-digit unique ID, and 'all'), including a concrete example of each, and calls out the behavioral distinction for broadcasts. This is exactly the added meaning an agent needs to invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Explicitly states the verb 'Enables' and the resource 'MOSFETS', with direct reference to the firmware command. The sibling 'disable_mosfets' makes it clearly distinct from its opposite, and the Basic Control group confirms it is a fundamental operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is given. The 'Basic Control' group implies a core power-stage enabling step, and the agent must infer the context from the tool name and sibling list. There is no discussion of alternatives or prerequisites such as whether a connection is required first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
firmware_upgradeA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| firmwarePage | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the operation is destructive ('Wrong data can brick the motor'), requires explicit user consent, and notes that broadcasts get no responses. These are meaningful behavioral disclosures beyond the schema. Minor deduction for not mentioning whether the operation is synchronous/asynchronous or if a reset is required after flashing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly dense and includes several pieces of essential information, but the structure is somewhat run-on and mixes high-level guidance with parameter details and a warning. It is front-loaded with the main purpose and the critical warning is clear. A cleaner separation of 'overview/warning' and 'parameters' would improve it, but it avoids non-essential filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there are 2 required parameters, no output schema, and no annotations, the description must stand alone. It provides the key prerequisites, a clear caution, parameter semantics, and return behavior ('Returns: success confirmation'). It is complete enough for a careful agent, although explicit details on the expected firmware format and the page data size are only partially included (it's stated within parameter semantics, not in a separate format section).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for both parameters. It does substantially: it explains that motor can be an alias number, 16-hex-digit ID, or 'all' with the broadcast caveat, and it details the exact composition of firmwarePage (model code 8 bytes, compatibility code 1 byte, page number 1 byte, data 2048 bytes). This adds meaning beyond the bare schema, though the description still lacks some format details (encoding, hex, byte order is partially implied).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('upgrade'), the resource ('flash memory of the servo motor'), and the specific operation (flashing a firmware page). It also includes a note with the command group and instructions to do calculations as shown in examples, which differentiates it from siblings like get_firmware_version or system_reset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states prerequisites: 'you must do some calculations as shown in the examples', and includes a strong when-not/ caution: 'Only use with a valid firmware file and the user's explicit go-ahead.' It also distinguishes the broadcast behavior ('all' gets no responses back), which helps select this tool appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_communication_statisticsA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| resetCounter | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the read/reset side effect, the meaning of resetCounter, and the broadcast behavior where 'all' motors return no responses. This gives the agent a clear model of what happens when the tool is invoked.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but every section earns its place: purpose, parameters, and return values. The return-value list is a bit verbose but necessary since there is no output schema. No filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is self-contained for a two-parameter tool with no annotations and no output schema. It covers parameter formats, return fields, and special broadcast behavior, so an agent can call it correctly without needing external context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates by explaining the resetCounter flag semantics and the accepted motor formats (alias, 16-hex-digit ID, or 'all' broadcast). This adds substantial meaning beyond the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the function: 'Get and optionally reset the CRC32 error counter', and lists the full set of communication statistics returned. It is specific about the resource (communication statistics) and differentiates itself from generic status tools, though it does not explicitly name sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the 'Status & Monitoring' group reference and the optional reset behavior, but there is no explicit guidance about when to choose this tool versus siblings like get_motor_status or get_status, and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_comprehensive_positionA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It does so well by noting that broadcasts return no responses, external encoder position requires additional hardware, and that commandedPosition may differ from actual. It also clarifies the semantic difference between hall sensor and commanded positions. Minor omission is explicit statement of read-only nature, but the group 'Status & Monitoring' implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a clear purpose line followed by a bulleted list of return values and parameter details. It is slightly verbose with informal phrasing ('or you could say') but remains well-organized and front-loads the core purpose. No redundant sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description provides all necessary context: return value descriptions, parameter semantics, broadcast behavior, and hardware prerequisites. It is sufficiently complete for an agent to call the tool correctly without additional documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description fully compensates by explaining the 'motor' parameter accepts an alias number, a 16-hex-digit unique ID, or 'all' for broadcast, including the side effect of broadcasts not receiving responses. This goes well beyond the schema's bare type definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves three position values (desired, hall sensor, external encoder) in one call, explicitly distinguishing it from siblings like get_position and get_hall_sensor_position. The verb 'Get' is specific and the resource is unambiguous. It even references the firmware command and group, reinforcing its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (when multiple positions are needed 'all in one shot') but does not explicitly state when not to use it or name alternative tools. It mentions the external encoder requires special hardware, which is a prerequisite, but offers no routing to single-position tools. Usage guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_timeA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden and does disclose the return value (currentTime in microseconds) and the broadcast behavior that no responses are returned when motor='all'. However, it does not explicitly state that the operation is read-only or describe side effects, which would have strengthened transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise and front-loads the main purpose, then lists returns and parameter options. The bracketed firmware command group adds minor clutter but does not significantly harm readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool, the description covers the input format, return value, and the key broadcast caveat. It lacks an explicit statement that the tool is non-destructive, but the overall context is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no parameter descriptions, but the description fully explains the motor parameter: alias number, 16-hex-digit ID, or 'all' for broadcast. It also gives concrete examples and notes the important no-response consequence of broadcasting, which is exactly the kind of semantic detail an agent needs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the current absolute time, with a specific resource and verb. It is distinct from siblings like reset_time and time_sync, though it does not explicitly call out those alternatives, so it falls short of a full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus siblings such as time_sync or get_motor_status. The description provides no conditions, exclusions, or alternative tool recommendations, leaving the agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_debug_valuesB
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 voltage 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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the full burden of behavioral disclosure. It does note that broadcasting to 'all' yields no responses, which is a useful behavioral detail. However, it does not state whether the operation is read-only, what happens on invalid motor IDs, error handling, or any side effects. The description is largely a data dictionary rather than a behavioral contract.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear purpose sentence, followed by a structured bullet list of return fields, and ends with the parameter explanation. The list is long (30+ items) but each entry is useful for setting expectations. No redundant prose; the structure is efficient for the amount of information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema, the description's exhaustive list of return fields is essential and well provided. The parameter behavior is explained. It lacks details on error cases, units, or return format structure, but for a debug data retrieval tool, it covers the key usage aspects. The absence of usage guidelines is a gap, but that is addressed in a separate dimension.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds substantial meaning to the 'motor' parameter, which the schema only types as string. It explains accepted formats (alias number, 16-hex-digit ID, 'all'), provides examples, and explicitly states that broadcasts get no responses. This fully compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves debug values and lists specific categories (motor control parameters, profiler times, hall sensor data). It goes beyond a tautology by enumerating the return fields, giving a concrete sense of scope. However, it does not explicitly differentiate from sibling tools like get_status or get_motor_status, which also return diagnostic information, so it is not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention scenarios, prerequisites, or exclusions. It only describes what it returns and the motor parameter format. The mention of the firmware command group (Status & Monitoring) is a reference, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_firmware_versionA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden, and it does disclose the mode-dependent result, the status-bit semantics, the return fields, and the fact that broadcast requests receive no responses. It does not cover error cases or permissions, but for a read-style query the key behaviors are transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably sized and front-loaded, but it contains redundancy (status bit and inBootloader explained twice) and multiple typos ('significan', 'teels', 'reguslar'). The motor parameter explanation is appended awkwardly after the return-value list rather than in a structured parameter section.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read command with no output schema, the description covers the input variants, the mode-dependent return behavior, and the exact meaning of both returned fields. There is minor ambiguity about whether both returned fields are always present, but no critical missing information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only declares motor as a required string, while the description explains the accepted forms: alias number, 16-hex-digit unique ID, or 'all' for broadcast, including the no-response consequence. This fully compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies that the tool returns the firmware or bootloader version depending on the current mode, which is a specific verb and resource. It does not explicitly distinguish itself from sibling info tools like get_product_info or get_status, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mode-dependent behavior gives some contextual guidance for when the result will be firmware versus bootloader. No alternative tools are named and there is no explicit when-to-use vs siblings guidance, but the purpose is implied clearly enough by the first sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hall_sensor_positionB
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry behavioral context. It adequately discloses the read-only nature, explains the returned hallSensorPosition field, and notes that broadcast mode receives no responses. However, it does not mention possible failures, whether the motor must be connected/calibrated, or how the returned value relates to units or desired position beyond 'about the same'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise but slightly repetitive: 'position as measured by the hall sensors' appears twice Dispersion in the first sentence and in the Returns section. The firmware command/group annotation adds useful context but is not strictly necessary and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description includes a return field, the motor parameter format, and a broadcast caveat. However, it omits practical context such as required motor connection status, possible error conditions, units of the position value, and whether the reported value is relative to a homed zero. These gaps matter for an agent deciding how to interpret and act on the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description bears full responsibility for explaining the motor parameter. It does so clearly: an alias number, a 16-hex-character ID, or 'all' to broadcast, plus the important caveat that broadcasts produce no response. This adds meaningful semantics beyond the bare 'motor' property.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb-object action: 'Get the position as measured by the hall sensors' and contrasts it with the desired position in closed-loop control. It is immediately obvious what the tool does. It does not explicitly differentiate itself from sibling tools like get_motor_status or capture_hall_sensor_data, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to choose this tool over siblings such as capture_hall_sensor_data, get_status, or get_motor_status. It mentions the firmware command group and that the measured position should approximate the desired position, but does not clarify typical use cases or conditions under which an agent should prefer this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hall_sensor_statisticsA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and it handles this well: 'Read back' signals a non-destructive read, the broadcast caveat ('broadcasts get no responses back') is disclosed, and the 10 return fields are each annotated with 'since the last statistics reset,' clarifying the data's temporal scope. It does not address reset semantics or interaction with control_hall_sensor_statistics, but the core read behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is utilitarian: purpose and context are front-loaded, followed by the return-field list. The 10-field enumeration is justified because there is no output schema, and each field repeats 'since the last statistics reset,' which is informative rather than pure redundancy. The motor parameter explanation sits at the end rather than before returns, a minor ordering quirk; the 'encoutered' typo is negligible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema and no annotations, the description is substantially complete: it covers purpose, return payload in detail, and parameter semantics. The main gaps are indirect references — how/where statistics get reset (control_hall_sensor_statistics) and any prerequisites — but nothing an agent needs to invoke this read correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate — and it does. The motor parameter is documented with its three accepted formats (alias number, 16-hex-digit ID, 'all') plus the behavioral consequence of broadcasting. This adds meaningful semantics beyond the bare string type in the schema, all in one place alongside the returns.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — 'Read back the statistics gathered from the hall sensors' — and adds a discriminative purpose: 'checking the hall sensor health and noise in the system.' This distinguishes it from siblings like get_hall_sensor_position, capture_hall_sensor_data, and control_hall_sensor_statistics without ambiguity. The firmware command reference and group label further anchor its identity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a usage context — 'useful for checking hall sensor health and noise' — but never names alternatives or states when not to use it. Unlike control_hall_sensor_statistics (which suggests resetting statistics), this tool reads them; no explicit differentiation is made against that sibling or capture_hall_sensor_data. Context is implied but exclusions and alternative routing are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_max_pid_errorA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well by disclosing the observation window ('since the last read') and the broadcast caveat ('broadcasts get no responses back'). It does not explicitly describe counter reset behavior or failure cases, but the key read-only, cumulative-window behavior is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the core purpose, and organized with a short returns list and parameter note. The bracketed firmware-command aside is slightly extraneous, but the structure is otherwise tight and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description lists both return values with short explanations and fully documents the only required parameter. It is complete enough for a simple one-parameter read command, though it omits value types or units for the returned PID errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must fully explain the motor parameter, and it does: alias number example, 16-hex-digit unique ID example, and the special 'all' broadcast behavior including the no-response consequence. This is exactly the kind of parameter meaning the schema alone cannot convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states exactly what the tool does: 'Get the minimum and maximum error value observed in the PID control loop since the last read.' This is a specific verb and resource, and it clearly separates the tool from the broader status/monitoring siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives some context through the 'Status & Monitoring' group and the 'since the last read' wording, implying a diagnostic read use case. However, it does not explicitly say when to use this tool instead of alternatives like get_debug_values or get_motor_status, nor does it state any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_motor_statusA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the load: it says the tool returns a live snapshot valley and explains that fatal errors are decoded with suggested fixes. It does not explicitly state read-only semantics or side-effect absence, but 'snapshot' strongly implies them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence front-loads the return contents; the second sentence adds practical usage timing. Every sentence contributes new information, and the tool name is not restated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter and no output schema, the description nicely covers what is returned (position, voltage, temperature, status), when to call it, and how decoded errors behave. It does not list valid motor identifiers or note preconditions, but the essential usage context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage and only names 'motor' as a required string. The description adds only that it is 'one motor's' snapshot, not how to select the motor (e.g., name, ID, alias) or how to discover valid values via list_motors.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it identifies a single motor's live snapshot including position, supply voltage, temperature, and decoded status. This clearly differentiates it from sibling tools like get_position, get_status, or get_product_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage triggers: call after moves to confirm completion, or when the user asks where something is or if it is okay. It does not mention when to prefer alternatives, but the stated scenarios are concrete and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_n_queued_itemsA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and discloses return value range (0–32), the meaning of the threshold, and the broadcast caveat that 'all' receives no response. It does not explicitly state read-only behavior, but 'Get' and 'Status & Monitoring' imply it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core function and practical warning, then presents return value and parameter details. Slightly redundant in mentioning queue capacity twice, but every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only status tool with no output schema, the description provides the return shape, range, parameter syntax, and usage guidance. An agent has enough information to invoke it correctly in the context of the observable sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The motor parameter is fully described beyond the bare schema: alias number, 16-hex-digit unique ID, special 'all' value, and the no-response consequence for broadcasts. This thoroughly compensates for 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly identifies the operation ('Get the number of items') and the specific resource ('movement queue'), plus the firmware group 'Status & Monitoring'. The queue-specific focus distinguishes it from the many movement and status sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives actionable guidance: check the queue size before queueing movements, and only add more items if the count is below 32. It does not explicitly name alternative tools or exclusions, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_positionA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It does disclose the broadcast behavior ('broadcasts get no responses back') and clarifies the value is a desired, not measured, position. However, it doesn't describe error cases, whether a missing motor produces failure, or the response shape beyond naming 'position'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first line, with the parameter contract following logically. The firmware-command reference bracket adds minor noise but the overall structure is efficient for the information delivered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition covers the core needs for a single-parameter read tool: purpose, parameter formats, and the return value. But with no output schema and no annotations, it leaves response details and error behavior unspecified, and it doesn't point the agent to the richer sibling get_comprehensive_position for actual-plus-desired position in one call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it fully explains the motor parameter's accepted forms (alias number, 16-hex-digit ID, or 'all' broadcast) plus the broadcast no-response caveat. This adds substantial meaning beyond the bare string type in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the current desired position') and adds a distinguishing clause — that it may differ from the actual hall-sensor position. This maps directly to the sibling get_hall_sensor_position, so an agent can tell them apart without opening the schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (when you want the commanded/desired position rather than the measured one) via the hall-sensor contrast, but it never names an alternative explicitly or gives a when-not-to-use condition. It also doesn't differentiate from get_comprehensive_position or get_status, leaving selection partially to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_product_descriptionB
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that broadcasting to 'all' motors gets no responses back, which is a useful behavioral caveat. However, with no annotations provided, the description carries the full burden and doesn't mention other behavioral aspects like whether this is a read-only operation or what happens if the motor is not found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise but the return value section is a bit awkwardly formatted. The motor parameter explanation is embedded in the Returns section, which is slightly confusing. It could be better structured with a separate Parameters section.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description covers the parameter semantics and one behavioral caveat. However, it doesn't describe the return format in detail (e.g., what the productDescription looks like), and there's no output schema. The description is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains the 'motor' parameter well: alias number, 16-hex-digit unique ID, or 'all' to broadcast. It also explains the broadcast behavior. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Get the product description.' It also includes the firmware command context. However, it doesn't explicitly differentiate from sibling tools like get_product_info or get_product_specs, which could be confused with this one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description mentions the motor parameter and broadcast behavior, but doesn't explain when to choose this over get_product_info or get_product_specs. The context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_product_infoC
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It reveals that broadcasts return no responsescars, which is a key behavioral trait, and describes the hardware version byte order. However, it does not clarify whether the tool is read-only (does not modify device state) beyond the 'Get' command, does it discuss error cases, timeouts, or what happens if the motor is not found. The description is incomplete in disclosing the operational behavior of a read-only command.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized: it starts with the tool's purpose, then lists return fields in a bullet-like format, and finally explains the 'motor' parameter with examples. It is appropriately detailed for the complexity, and the front-loading of the firmware command context is useful. Slightly verbose but each element serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool returns structured product information (including firmware compatibility) and has one parameter. The description covers the return fields and the parameter's syntax, which is largely sufficient given the simplicity. However, it lacks notes on error handling, typical use cases (e.g., pre-upgrade checks), and does not clarify whether the command is read-only, which is relevant for a 'Get' operation. Since the output schema is absent, the description does need to convey return semantics, which it does well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the only parameter 'motor' is a string with no schema description. The description provides substantial semantics for 'motor': it can be an alias (e.g., 88), a 16-hex-digit unique ID, or 'all' to broadcast. This is highly valuable and compensates for the schema's lack of detail. However, since it is the only parameter, the baseline for 0 params is 4, but here there is exactly one param, and the description does fully compensate, so a score of 5 is not appropriate; a 1 seems too low. Wait: the description directly explains the parameter's allowed values, which is beyond what the schema provides, so I'll score this as 4, not 1. (Correction in justification.)
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: retrieving product information via a firmware command, and lists the specific fields returned (product code, firmware compatibility, hardware version, serial number, unique ID, reserved). It distinguishes itself from siblings like get_product_specs and get_product_description by providing a distinct, comprehensive set of product metadata. However, it does not explicitly differentiate from get_firmware_version, though the field list makes it clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly conveys that this is for retrieving product details, and mentions the 'motor' parameter accepts an alias, a unique ID, or 'all' to broadcast (with the note that broadcasts get no responses). However, it does not explicitly state when to use this tool over alternatives like get_product_specs or get_firmware_version, nor does it provide conditions for when not to use it. The firmware compatibility note hints at use during upgrades but lacks explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_product_specsA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that broadcasting to 'all' yields no responses, which is a useful behavioral caveat. However, it does not mention whether the tool is read-only, whether it requires a connection, or what happens on error. The description adds some value but leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise and front-loads the core purpose. The return field explanations are useful but slightly verbose; the 'motor' parameter explanation could be tightened. Overall, every sentence earns its place, though the structure is a bit dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description covers the return values and parameter semantics well. However, with no output schema and no annotations, it lacks information about error behavior, connection requirements, and how the response is delivered. It is adequate but not fully complete for an agent to invoke it confidently in all contexts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does so by explaining the 'motor' parameter in detail: alias number, 16-hex-digit ID, or 'all' to broadcast, including the caveat that broadcasts get no responses. This is meaningful semantic information beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves update frequency and counts per rotation, with a specific verb ('Get') and resource ('product specs'). It distinguishes itself from siblings like get_product_info and get_product_description by specifying the exact return fields, though it doesn't explicitly name those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by explaining the motor parameter and broadcast behavior, but it does not explicitly state when to use this tool versus alternatives like get_product_info or get_product_description. The context is clear enough for an agent to infer the tool's purpose, but explicit routing guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statusA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It usefully explains that broadcasts to 'all' motors produce no responses, and it details the fatal-error consequence and reset options, which goes beyond a simple 'get' operation. It does not explicitly state that the operation is side-effect-free, but the name and content imply a read-only status query.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is mostly concise and information-dense, but the structure is confusing: 'motor:' is listed under 'Returns:' even though it is an input parameter, not a return value. The firmware command reference is useful but not essential, and the lack of separate 'Args:' and 'Returns:' labels harms clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema and no annotations, the description covers the parameter forms, the return fields, and the critical broadcast no-response behavior. It is nearly complete, though the ambiguous placement of the motor parameter prevents it from being excellent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate fully. It does: it explains that 'motor' can be an alias number, a 16-hex-digit unique ID, or 'all' for broadcast, and it notes that broadcasts receive no responses. This gives an agent everything needed to construct the parameter correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'gets the status of the motor' and enumerates specific returned fields, making the core purpose evident. However, it does not differentiate from the sibling tool get_motor_status, so an agent could not tell which status tool to prefer without additional context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as get_motor_status or other monitoring tools. It mentions the firmware command group but offers no explicit context or exclusions to help an agent choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_supply_voltageA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It discloses that the returned voltage must be divided by 10 to get actual volts, which is important. However, it doesn't mention that broadcasting with 'all' yields no responses, which is critical for an agent to avoid confusion when using that alias.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient with three sentences, covering the purpose and key return scaling. The return scaling is front-loaded after the first sentence, which is good. However, the 'motor' parameter explanation is somewhat disconnected from the main text, but still clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, single-parameter read command with no output schema, the description covers the purpose, the return format (with scaling), and the parameter values. The only notable omission is the broadcast behavior (no responses), which is a marginal gap given the parameter documentation includes the 'all' option.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% coverageage and only provides the parameter name 'motor'. The description partially compensates by listing the types of values allowed: an alias number, a 16-hex-digit ID, or 'all' to broadcast. This is essential because the schema is bare, so the description adds significant meaning where the schema fails.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the measured supply voltage using a specific firmware command ('Get supply voltage'). It is distinct from siblings like get_temperature and get_status, so an agent can tell what it does without confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explain when to use this tool versus alternatives, nor does it mention any prerequisites or frequency of use. It only describes the operation itself, leaving usage context to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_temperatureA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden and does meaningful work: it discloses accuracy (±3 °C), the measurement point (motor driver PCB), and a critical caveat that broadcasting to 'all' produces no responses. This is genuinely useful beyond the schema and adds context a caller needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is reasonably sized and the purpose is front-loaded, but the structure is muddled: parameter documentation for 'motor' is glued to the end of the 'Returns:' block rather than presented as its own parameter section. The sentence ordering makes the document less scannable than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the description covers purpose, return value, accuracy, measurement location, and parameter semantics. It omits error behavior or prerequisites, but nothing essential for a basic temperature read is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description fully compensates. It explains the motor parameter as an alias number, a 16-hex-digit unique ID, or 'all' for broadcast, and clarifies the broadcast has no return values. This is exactly the semantic content the schema omits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Get the measured temperature of the motor,' naming a specific verb, resource, and measurement type. This is clearly distinguishable from siblings such as get_supply_voltage, get_position, and get_motor_status, which cover different read operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like get_motor_status or get_status, which may also expose temperature or related diagnostics. The text provides context (firmware group, measurement location) but no when-to-use criteria, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
go_to_closed_loopB
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It adds some behavioral facts: it returns a success confirmation and explicitly notes that broadcast commands receive no responses. However, it does not disclose any side effects, potential errors, or whether switching mode interrupts motion. The 'no responses' broadcast detail is valuable but the transparency about the mode switch's effects is limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is compact and front-loaded: it opens with purpose, then the return statement, then the parameter details. Each sentence provides distinct info, and there is no filler. The broadcast caveat is placed with the parameter, which is the most relevant place. Minor inefficiency: 'group:' adds background but is not essential for invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, the description covers the command purpose and return confirmation. However, it lacks contextual details such as when the command must be called, whether it is required before position moves, and what happens if an invalid motor ID is given or if broadcast is not supported. The description is adequate but leaves the agent without full operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema only states 'motor' is a string, but the description explains accepted forms: alias number, 16-hex-digit ID, or 'all' for broadcast. It clarifies the meaning of the parameter and adds the critical caveat about broadcast responses. Since schema coverage is 0%, this text fully compensates by giving concrete value examples and semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'Go to closed loop position mode', naming the verb and the resource (the control mode). The firmware command and group reference provide context that distinguishes it from motion commands like move_to or set_position. It is not explicitly compared to sibling tools, so the differentiation relies on the mode terminology rather than an explicit contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells what the tool does but not when to use it. It does not mention prerequisites (e.g., motor must be enabled or calibrated) or scenarios where this command is appropriate, nor does it reference alternatives. There is only the 'motor' parameter explanation, so an agent is left to infer usage from the name and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
go_to_positionA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| duration | Yes | ||
| position | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond the schema: the move is queued (non-blocking), acceleration/deceleration are applied, and the function returns immediately. It also tells the agent to poll get_n_queued_items for completion. Since no annotations are provided, the description carries the full burden, and it does so well. It could add a bit more about error conditions or what 'success confirmation' means, but the core behavior is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core action, then the queuing behavior, then the prerequisite, then parameter details. Every sentence earns its place. The only minor issue is that the parameter details are embedded in the description rather than in the schema, but they are still concise and well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a motion-control tool with no annotations and no output schema, the description covers the essential context: what it does, how it behaves (queued), when to use it, prerequisites, and parameter meanings. It could be more complete by describing the return value format or error handling, but the agent has enough to invoke it correctly and know what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does: it explains position is in degrees, duration is in seconds, and motor can be an alias, a 16-hex-digit ID, or 'all' (with the caveat that broadcasts get no responses). This adds significant meaning beyond the bare schema. It doesn't detail the exact format of the success confirmation, but the essential parameter semantics are covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Move to this new given position'), the resource (position), and the key parameter (time). It also distinguishes itself from siblings by noting that this command QUEUES the move and returns immediately, unlike move_to/move_relative which wait. The firmware command group is also provided for context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: when you want to queue a move and return immediately, and it names the alternatives (move_to/move_relative) that wait. It also provides a critical prerequisite: 'Requires enable_mosfets first.' This is excellent guidance for an agent deciding between similar motion-control tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
homingA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| maxDistance | Yes | ||
| maxDuration | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states the crash-and-stop behavior, the zeroing action, that broadcasts get no responses, and the risk of fatal errors if maxDuration is too short. This is transparent about key behaviors an agent needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a clear definition, a safety note, a parameter list, a return note, and motor addressing details. It is front-loaded with the core concept and each section serves a purpose, though it could be slightly more succinct without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and output schema, the description covers the operation, parameter semantics, safety precautions, return type, and motor addressing. It is sufficient for an agent to call the tool correctly, with only minor omissions such as detailed error response formats or behavior when no crash occurs within maxDistance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero descriptions for its parameters, so the description must fully compensate. It explains maxDistance in degrees with sign determining direction, maxDuration in seconds with a caution about timing, and motor covering aliases, unique IDs, or 'all' with the broadcast behavior. This adds substantial semantic meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states that homing means moving until a crash and then stopping immediately, and that it zeroes the position there. This clearly identifies the operation. However, it does not explicitly differentiate it from sibling tools like move_to or move_relative, though the name and definition are distinctive enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides practical usage guidance: it warns to ensure a hard stop exists within maxDistance and to give enough time via maxDuration to avoid fatal errors. This implies when homing is appropriate (establishing a reference position), but it does not explicitly state when to use this tool over alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
identifyA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden. It discloses the LED behavior, the 3-second duration, the firmware command, the success return, and the important 'all broadcasts get no responses back' behavior—good transparency for a one-parameter command.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core user-relevant behavior. The bracketed firmware-command metadata is slightly redundant but does not add significant noise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter, no-output-schema command, the description provides the invocation forms, expected behavior, and result behavior. The broadcast caveat is included, which is the main trap that could confuse an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only says motor is a string, so the description is essential. It fully compensates by defining the three accepted forms—alias number, 16-hex-digit ID, and 'all'—with concrete examples and the special broadcast consequence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool identifies a motor and produces a visible response—the green LED flashing for 3 seconds. This is a distinct result that distinguishes it from sibling tools like ping or get_product_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended situation is implied: call this when you need to physically identify which motor on the bus is which. However, it never names alternatives or gives explicit when-not-to-use guidance, leaving the agent to infer the use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_motorsA
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden. It communicates that the result is a live snapshot, that an empty list is possible even when hardware is connected, and that detection or a different serial port may be needed. It does not explicitly state side-effect freedom, but the 'List' verb and the content provided make the read-only nature reasonably clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose first, then usage guidance, then a troubleshooting fallback. Every sentence contributes actionable information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the absence of an output schema and annotations, the description covers the return content, the prerequisite (connect), the user-intent trigger, and the empty-result fallback. For a zero-parameter listing tool, this is sufficient for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds relevant context about the bus and detected motors without needing to explain parameters that do not exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List the detected motors' followed by the exact data returned (position, voltage, temperature, status). This clearly differentiates it from siblings like detect_devices (detection vs listing) and get_motor_status (single motor vs all motors).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to call it: after connect, or when the user asks about connected motors and their locations. It also names the fallback action and alternative tool, detect_devices, for the empty-result case, giving clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_serial_portsA
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It adds useful behavioral context beyond the name: USB-RS485 adapters show VID:PID and manufacturer hints, and it is cheap to try connecting to another port. It doesn't describe the exact return format or edge cases like no ports found, but for a harmless listing operation the provided context is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and call order, then adds only useful interpretive guidance. Each sentence earns its place, and there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema listing tool, the description is complete: it tells the agent when to call it, what to expect in the output, how to handle ambiguity, and what to do next. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description correctly does not need to explain parameters and instead focuses on what the operation returns and how to interpret it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List the serial ports on this computer'. It also states the purpose, 'so one can be chosen for connect', and clearly positions this tool as the first step in a session, distinguishing it from sibling tools like connect and list_motors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit, strong usage guidance: 'Call this FIRST in any session.' It also explains how to handle multiple adapters and ambiguity. It does not explicitly name alternative tools or when not to use them, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_relativeA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| degrees | Yes | ||
| speed_dps | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that the call waits for completion, enables MOSFETs automatically, returns the settled position, and allows arbitrary magnitude including multiple turns. This covers the most important side effects, though it omits error behavior or interactions with limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence contributes: one verb statement, a use-case line, a speed note, a MOSFET side-effect note, and a parameter explanation. It is front-loaded with the core purpose and avoids filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description conveys what the tool does, when to use it, how parameters are interpreted, and that it blocks until finish and returns a position. It does not discuss error cases, but that is a minor gap for a simple relative move command.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description fully compensates: it explains 'motor' can be an alias or 16-hex ID from list_motors, defines 'degrees' as relative signed degrees, and defines speed_dps with units and default. This is exactly the semantic context an agent needs beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise action: moving one motor by a relative amount in degrees and waiting for completion. It clearly distinguishes this from absolute moves and other motor operations by emphasizing 'RELATIVE' and 'incremental jogging,' making it easy for an agent to differentiate from siblings like move_to.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly lists use cases ('turn a bit more', 'back off 10 degrees', incremental jogging), which tells the agent when to use this function. It does not explicitly contrast with sibling tools, but the relative/absolute distinction and the examples provide strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_toA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| degrees | Yes | ||
| speed_dps | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses critical behaviors: it waits for completion, enables MOSFETs automatically, returns the settled position, and notes potential timeout for long moves. It doesn't mention error handling or reaction to invalid motors, but overall meets the need for a motor-movement tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loading the core purpose with a bold key term. The first sentence is concise and informative. The later sentences add details that are necessary (speed unit, motor identification) and alternate usage. It's slightly dense but no fluff, so a 4 is warranted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (absolute multi-turn moves, timeout risk), the description covers the essentials: what it does, how parameters work, and when to use an alternative. It doesn't cover error scenarios or return format specifics, but for a motor move tool with no output schema, it's complete enough for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains 'degrees' as absolute angle with examplesholistic, and defines 'speed_dps' with default. For 'motor', it gives a detailed semantic definition (alias number or 16-hex-digit ID) beyond the schema's generic string type. This is strong compensation for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('move'), resource ('one motor'), and mode ('ABSOLUTE angle in degrees'), distinguishing it from relative moves by name. It also gives concrete examples ('go to 90 degrees', 'one full turn' = 360) and key semantic details like unbounded multi-turn angles. This sets it apart from siblings like move_relative and trapezoid_move.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: when the user names a target position (absolute), contrasting with relative moves. It also provides an alternative for long moves ('go_to_position' plus 'get_n_queued_items' polling) to avoid timeouts. This is exemplary guidance for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_with_accelerationA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| timeSteps | Yes | ||
| acceleration | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the command queues and returns immediately, that acceleration goes to zero after timeSteps and velocity is maintained, that broadcasts get no responses back, and that enable_mosfets is required. This is meaningful behavioral context beyond the schema, though it doesn't detail error conditions or what 'success confirmation' contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but organized: a one-sentence purpose, a queuing/alternative note, a prerequisite, and a parameter list. It front-loads the core behavior and then details parameters. Slightly long due to the parameter explanations, but every sentence earns its place given the 0% schema coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter motion command with no annotations and no output schema, the description covers the key operational facts: queuing behavior, completion polling, waiting alternatives, prerequisite, parameter semantics, and broadcast caveat. It doesn't describe error handling or exact return payload, but 'success confirmation' plus the queuing guidance is adequate for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains acceleration's unit (degrees_per_second_squared with a microstep formula), timeSteps meaning (number of time steps, use command 18 for frequency, behavior after elapsing), and motor formats (alias, 16-hex-digit ID, or 'all' with broadcast caveat). This adds substantial meaning beyond the bare schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Rotates the motor') and resource ('with the specified acceleration'), and distinguishes it from siblings move_to/move_relative by noting this version queues and returns immediately. It is clear what the tool does, though it doesn't explicitly name all sibling alternatives for every variant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: it queues the move and returns immediately, and tells the agent to poll get_n_queued_items for completion or use move_to/move_relative which wait. It also states a prerequisite: 'Requires enable_mosfets first.' This is strong guidance, though it doesn't enumerate when to prefer this over trapezoid_move or move_with_velocity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_with_velocityA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| duration | Yes | ||
| velocity | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the non-blocking queued behavior, the need to poll get_n_queued_items, the prerequisite enable_mosfets, and the broadcast behavior (no response). It does not explicitly frame the operation as a hardware mutation, but the transparency is otherwise strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: definition, critical queueing behavior with alternatives, and required parameters. Each sentence earns its place and front-loads the core action before routing guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a state-mutating hardware command with no annotations and no output schema, the description covers prerequisites, async behavior, polling strategy, sibling alternatives, parameter meanings, and return value. Lacks error/edge-case detailty and has a confusing unit clarification, but it is broadly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain the parameters itself. It does: motor alias formats, duration in seconds, velocity unit. However, the velocity unit is internally contradictory — labeled 'degrees_per_second' but then described as 'microsteps per time step * 2^20'. This undermines reliability despite the added semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and object (
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states that the move is queued and returns immediately, contrasts with move_to/move_relative which wait, and names the prerequisite enable_mosfets. This gives an agent clear routing and timing guidance without needing sibling tool descriptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
multimoveA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| moveList | Yes | ||
| moveCount | Yes | ||
| moveTypes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses asynchronous queue-and-return behavior, a fatal error when the queue empties without a standstill, the need for the final move to stop the motor, the enable_mosfets prerequisite, queue-spot consumption, and that broadcasts receive no responses.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with a summary, critical error note, usage note, and parameter breakdown. It is somewhat redundant, repeating the fatal-error/standstill warning twice and the 32-move limit twice, but the added length is mostly justified for a complex command.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description covers prerequisites, error conditions, queue behavior, parameter formats, return confirmation, and motor addressing. An agent has enough information to invoke this tool correctly and interpret the main risks.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema description coverage is 0%, the description thoroughly compensates by explaining moveCount, moveTypes bit encoding, moveList structure with units and examples, the 32-command limit, and motor addressing. However, it calls moveList 'a 2D list in Python format' while the schema declares it as a string, creating ambiguity about whether to pass a list object or a stringified representation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific action: 'compose multiple moves one after another.' It later contrasts with move_to/move_relative, which wait, making the tool's unique role clear relative to its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: it queues and returns immediately, suggests polling get_n_queued_items or using move_to/move_relative when waiting is desired, and notes the enable_mosfets prerequisite. It does not explicitly say when not to use this tool in favor of single-move alternatives, but the guidance is otherwise strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingB
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| pingData | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It explains the response is the same as the payload, and notes that broadcast (motor='all') gets no responses. However, it does not describe error conditions, timeout behavior, or the significance of the echo beyond confirming a live link.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, covering purpose, parameters, returns, and broadcast caveat in a compact format. The key information is front-loaded. Minor redundancy: the 'Returns' section restates the echo, but it's acceptable. Could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simplicityful 2-parameter tool with no output schema, the description covers the core usage. However, lacking annotations and detailed error handling, it is barely adequate for an agent to know what happens on failure or how to interpret the response. Given sibling complexity, a bit more context on when to use ping as a diagnostic would help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. The description explains pingData as any binary payload and motor as an alias, ID, or 'all'. This adds meaning beyond the schema's bare 'string' typesressing, but it doesn't specify acceptable formats for pingData (e.g., hex, string length) or how to handle binary data in JSON.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sends a payload and gets the same data back, which is a specific verb-resource pair. It distinguishes from siblings like get_motor_status by focusing on echo testing connectivity. However, it could be more explicit that this is a liveness/connectivity check, so 4 instead of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for testing device connectivity but does not explicitly state when to prefer this over alternatives like get_product_info or get_status. It mentions broadcast behavior (no responses back), which is useful, but lacks clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_multipurpose_bufferA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explains that the returned bufferData has variable format and length depending on what was stored, and it warns that broadcasting to 'all' motors yields no responses. Minor gaps remain around empty-buffer or error behavior, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the action and buffer purpose come first, followed by return and parameter details in readable bullets. The firmware-command/group fragment is minor boilerplate but does not hurt clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the description provides the buffer's purpose, usage contexts, the return field name, and complete parameter semantics. It does not specify edge-case behavior such as reading an empty buffer, but that is a relatively minor omission for a simple read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only says motor is a string, so the description fully compensates. It documents alias numbers, 16-hex-digit unique IDs, the 'all' broadcast option, and the important no-response caveat for broadcasts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete action and resource: 'Read whatever is in the multipurpose buffer', then explains what populates that buffer. This clearly identifies the tool's purpose and distinguishes it from sibling capture/get tools like capture_hall_sensor_data and get_hall_sensor_position.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly lists the contexts that generate buffer data: calibration, going to closed loop mode, and capturing hall sensor data. This lets an agent infer when to call this tool, though it does not explicitly name alternatives or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_timeA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the transparency burden. It discloses the return type ('success confirmation') and the no-response behavior for broadcasts, but it does not mention side effects on time-dependent operations or prerequisites like motor connectivity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and efficient—purpose, timing guidance, firmware identifier, return behavior, and parameter semantics each appear once without redundant filler. The bracketed firmware note is slightly noisy but not harmful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives the essential call information and return behavior, but omits edge cases such as invalid motor targets, effects on queued time-based commands, or whether success confirmation differs for broadcast mode. This is adequate for a simple reset command but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, motor, is fully explained beyond the schema: alias number, unique ID, or 'all' broadcast, including the caveat that broadcasts produce no responses. The schema provides no description, so the description is essential and complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific action ('Resets the absolute time to zero') and the target resource (the motor's time base). It also adds useful context about when it should be called. It doesn't explicitly distinguish itself from related time commands like time_sync, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives direct placement guidance: 'call this first before issuing any movement commands.' It lacks explicit exclusions or alternative-tool comparisons, but the timing instruction is concrete and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_sequenceA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it states steps run in order, that the 'command' action can invoke 'any raw catalog command', and that the tool returns the middleware final state of every detected motor. It stops short of applying details like atomicity, error handling, or blocking behavior, but the key facts are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description opens with the purpose and examples, then presents a precise, compact DSL specification with a single comment. No sentence is wasted; it packs all necessary syntax into a small, scannable format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotation and no output schema, the description covers the main usage information: step format, ordering, arbitrary command capability, and return value. The only gap is that field semantics like degrees for move_to versus move_relative are not explained in detail, though they are inferable from sibling tool definitions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema only says 'array of objects' with additionalProperties. The description fully defines the parameters for each step type (move_to, move_relative, stop, wait, command) with exact fields and defaults, adding rich meaning that the schema conspicuously lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource in 'Execute a choreographed sequence of steps', with clear examples ('draw a square' or 'wave'). It distinguishes itself from the many sibling single-action tools (move_to, stop, vibrate) by explicitly framing the tool as a sequence orchestrator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'choreographed sequence of steps' makes it clear the tool is intended when multiple ordered actions are needed, and the step list implies it combines individual actions. However, it never explicitly says 'use this when you need many steps; for a single step, use the individual tool,' so it stops short of explicit exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_device_aliasA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| alias | Yes | ||
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description adds important behavioral detail: the change takes effect immediately, affects how the motor is addressed, requires re-running detect_devices, and broadcasts receive no responses. It also documents reserved alias values and the special 255 removal behavior, though it does not mention error cases or persistence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loads the core purpose and the most important side effect. Minor structural inconsistency exists because the return value line is placed between the two parameter descriptions, but it remains easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers key operational details: alias range, reserved values, broadcast behavior, side effects, and a follow-up action. It does not mention error cases or consequences of setting an invalid alias, but it is sufficiently complete for an agent to invoke the tool safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only lists parameter names and types, but the description fully explains valid alias ranges, reserved values, the meaning of 255, the three accepted motor identifiers, and the broadcast caveat. This adds substantial meaning far beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action with a specific verb and resource: 'Sets device alias' and explains the immediate effect on how the motor is addressed. This makes its purpose distinct from the sibling tools in the same domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides practical context by telling the user to re-run detect_devices afterwardsness, but it does not explicitly explain when to choose this tool over alternatives or give exclusions. The intended use case is implied rather than directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_max_allowable_position_deviationA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| maxAllowablePositionDeviation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a key behavioral trait: it throws a fatal error if the deviation is exceeded. However, with no annotations provided, the description carries the full burden. It does not mention whether the setting persists, whether it applies immediately, or any side effects on motor operation. The broadcast behavior for 'all' is mentioned, which is useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose, followed by parameter details. The parameter explanations are embedded in the description rather than a separate section, which is slightly unstructured but still clear. The firmware command reference adds context without excessive length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential parameters and return value, but it lacks details on error conditions beyond the fatal error, persistence of the setting, and any prerequisites (e.g., motor must be connected). Given the tool's safety-related nature, more context on when the fatal error triggers and how to recover would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the schema: it explains that maxAllowablePositionDeviation is in degrees, and it details the motor parameter's accepted formats (alias, 16-hex ID, or 'all' for broadcast). The schema only provides types, so this is valuable. However, it does not specify units for the motor parameter or clarify the 'microsteps' relationship to degrees.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: setting the maximum allowable position deviation in microsteps, measured by hall sensors, and throwing a fatal error if exceeded. It also identifies the firmware command and group, making it distinct from sibling tools like set_safety_limits or set_maximum_velocity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does and its parameters, but it does not explicitly state when to use it versus alternatives. It mentions the fatal error behavior, which implies a safety-related use case, but there is no direct guidance on when to choose this over set_safety_limits or other configuration tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_maximum_accelerationA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| maximumAcceleration | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It does add useful behavioral detail: the motor parameter can be 'all' to broadcast, and broadcasts receive no responses back. However, it does not explain effects on current or subsequent moves, persistence, or safety implications of changing max acceleration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and structured with a clear action line, parameter bullet, return note, and motor explanation. The motor detail placed after the return note is slightly out of order, but every part earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter configuration command with no annotations and no output schema, the description covers both parameters, units, allowed motor identifiers, and return behavior. It does not cover range or side effects, but an agent has enough to invoke it correctly for typical cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides the unit for maximumAcceleration (degrees_per_second_squared) and gives detailed semantics for motor: alias number, 16-hex-digit ID, or 'all' for broadcast, including the no-response consequence. The maximumAcceleration meaning is still close to tautological, but the unit and motor detail add real value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Sets max acceleration'. It clearly identifies the tool as the configuration command for maximum acceleration, which distinguishes it from siblings like set_maximum_velocity and move_with_acceleration. The firmware-command and group context reinforce what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives such as move_with_acceleration or set_maximum_velocity. The context is implied by the name and resource, but no when/when-not guidance or alternative routing is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_maximum_motor_currentA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| motorCurrent | Yes | ||
| regenerationCurrent | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral transparency burden. It discloses immediate effect, non-persistence across resets, overheating risk, that regenerationCurrent is currently unused, and that broadcasting to 'all' yields no responses. This is strong operational transparency, though it omits error cases and prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well front-loaded with the core purpose and key caveat, then organizes parameter notes in a readable list. Every sentence adds useful information, though the placement of motor addressing after 'Returns' makes the structure slightly less clean than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-required-parameter configuration command with no annotations and no output schema, the description covers behavior, persistence, safety, return confirmation, and addressing formats. It does not discuss invalid values or connection prerequisites, but it is complete enough for routine invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it explains motor addressing formats (alias, unique ID, or 'all'), suggests suitable motorCurrent values (150/200) and notes arbitrary units, and flags regenerationCurrent as unused. The 'in milliamps' label followed by 'units are some arbitrary units and not amps' is internally inconsistent, which prevents a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Set the maximum motor current and maximum regeneration current,' which is a specific verb and resource. It clearly distinguishes itself from sibling configuration commands like set_maximum_velocity and set_maximum_acceleration by naming the exact resource, though it does not explicitly mention those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: values take effect immediately, are not saved to non-volatile memory, and revert after reset. It also warns that excessive current can overheat the motor, which guides safe usage. However, it does not explicitly state when to use this command versus an alternative or what a persistent configuration path would be.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_maximum_velocityB
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| maximumVelocity | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral transparency burden. It discloses the firmware command, the degrees_per_second unit, and the important broadcast behavior that 'all' receives no responses. However, the 'not used at this time' statement is ambiguous, and side effects or persistence of the setting are not explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably compact and front-loaded with the main purpose, but the structure is awkward: 'motor' is described after 'Returns', and the parameter documentation is split in an inconsistent flow. It is not overly verbose, yet the ordering could be cleaner.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic parameters and return behavior, which is enough for simple invocation. However, the 'not used at this time' caveat is unresolved, and because annotations and output schema are absent, the description should clarify whether this is effectively a no-op, how the value is applied, and what conditions affect invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema description coverage is 0%, the description must compensate for the input schema. It adds meaningful semantics for both parameters: maximumVelocity is given units of degrees_per_second, and motor is given valid formats including alias numbers, 16-hex-digit IDs, and the broadcast value 'all'. A range or default for maximumVelocity is missing, but the description goes well beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'Sets maximum velocity' on a motor. It lacks differentiation from siblings like set_maximum_acceleration or move_with_velocity, and the caveat 'this is not used at this time' adds ambiguity, so it is not a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as set_maximum_acceleration or move_with_velocity. The phrase 'this is not used at this time' hints that the tool may be non-functional but does not provide explicit when-to-use or when-not-to-use direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_pid_constantsB
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).
| Name | Required | Description | Default |
|---|---|---|---|
| kD | Yes | ||
| kI | Yes | ||
| kP | Yes | ||
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It does add an important safety warning ('Bad gains can make the motor oscillate violently') and clarifies that broadcasting to 'all' receives no responses. However, it omits details about whether the constants are applied immediately, whether the change is persistent, or what other side effects might occur on the motion loop.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is separated into logical lines: intent, firmware metadata, safety note, parameter list, return note, and motor argument detail. Each sentence contributes a necessary piece of information and nothing is redundant. It is a bit longer than strictly needed, but the structure makes it well suited for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema and no annotations, the description covers the important pitfalls: return value, motor selector variants, and the no-response behavior on broadcasts. It also warns about dangerous gains. While it does not mention whether constants apply immediately or if there are command prerequisites, these gaps do not block a typical invocation of this configuration tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description provides the entire parameter semantics for all four fields. It explains what kP, kI, and kD stand for, and it expands the motor parameter with concrete forms (alias/decimal ID/id, 'all') and the broadcast no-response behavior. This goes well beyond the bare type/title information in the schema, though it remains silent on value ranges or units.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Set PID constants for the control loop that will try to maintain the motion trajectory.' It clearly communicates the tool's effect and distinguishes it from the many other set_* siblings by explicitly targeting PID parameters. It doesn't name a sibling alternative, but the resource name is specific enough to prevent confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance about when to use this tool instead of other configuration tools (e.g. set_maximum_velocity, set_maximum_acceleration, set_max_allowable_position_deviation), nor any exclusion conditions. The context is implied only by the phrase 'control loop' and the warning about bad gains, so the description does not help an agent decide between alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_safety_limitsB
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| lowerLimit | Yes | ||
| upperLimit | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that setting limits affects firmware position limits and that exceeding them faults the motor, which is important behavioral context. It also notes that broadcasting to 'all' motors yields no responses, a useful edge-case behavior. However, it doesn't mention whether this is persistent across reboots, whether it requires prior homing, or any side effects on existing motion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise and front-loads the core purpose. However, the parameter section is somewhat disorganized: the 'in degrees' vs 'in microsteps' contradiction suggests sloppy editing, and the motor description is placed awkwardly after the returns line. It earns a 3 because it's compact but not cleanly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no output schema and no annotations, the description covers the basic purpose, parameters, and return behavior. But the unit ambiguity for limits is a critical gap, and there's no mention of prerequisites (e.g., homing, motor enabled) or whether limits are absolute positions relative to zero. The motor parameter is well covered, but the core numeric parameters are under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does list the three parameters and their types, but the descriptions are confusing: lowerLimit is described as 'in degrees' yet the parenthetical says 'in microsteps' – a direct contradiction. The motor parameter is well explained with examples, but the limit units are ambiguous, which is a significant gap for a tool that sets numeric bounds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: setting safety limits to prevent motion from exceeding set bounds, and identifies it as a firmware command in the Configuration group. It distinguishes itself from siblings like set_maximum_velocity and set_maximum_acceleration by focusing on position bounds rather than motion parameters. However, it doesn't explicitly name a sibling alternative, so it's clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when configuring firmware position limits to prevent motion from exceeding bounds. It notes that moves beyond these limits fault the motor, which is a key usage consideration. However, it doesn't explicitly state when not to use it or mention alternatives like set_maximum_velocity for velocity limits, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_calibrationA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses side effects: motor spins and becomes unresponsive, which is crucial for a hardware tool. It also mentions that broadcasts get no responses back, a useful behavioral nuance. However, it doesn't specify success/failure conditions or potential risks beyond the physical constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with the main purpose first, followed by a behavioral caution, then return info photoeffects and parameter semantics. It is concise but includes essential details without fluff. Slightly long due to firmware command annotation, but that adds context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single-param complexity and no output schema, the description covers purpose, side effects, parameter format, and return type. It lacks details on how to interpret success confirmation or error handling, but for a simple calibration command, it is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must fully explain the 'motor' parameter. It does: an alias number, a 16-hex-digit ID, or 'all' for broadcast, and states broadcasts get no responses. This is comprehensive and compensates for the schema's lack of detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it starts a calibration routine, defines its purpose (determine average hall sensor values and check sensor correctness), and mentions the motor spins and the shaft must be free. However, it does not explicitly differentiate from sibling tools like 'capture_hall_sensor_data' or 'control_hall_sensor_statistics', though the calibration purpose is distinct enough for an agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit operational notes: the motor will spin, the shaft must be free, and the motor is unresponsive during calibration. It does not explicitly say when to use vs. alternatives, but the unique calibration purpose makes the usage context clear. Missing exclusions for cases like when calibration is unnecessary or when other tools should be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stopA
Immediately halt one motor, or ALL motors if motor is omitted.
Use for "stop", "halt", or any sign something is wrong. Sends the firmware's
emergency stop: motion halts and the move queue empties; holding torque remains.
Use disable_mosfets afterwards to let the shaft spin freely.
| Name | Required | Description | Default |
|---|---|---|---|
| motor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It transparently explains that motion halts, the move queue empties, holding torque remains, and that disable_mosfets can later free the shaft. It doesn't mention what the response/return looks like or whether motion can be resumed after the stop, but the core side effects are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no filler. The first sentence front-loads the core behavior; the second gives usage context; the third provides a crucial follow-up instruction. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema and no annotations, this description is nearly complete: behavior, usage context, side effects, and follow-up are all present. It loses a point because the sibling 'emergency_stop' tool is never addressed, leaving an agent uncertain about which stop-like tool to invoke in a given situation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the only parameter's semantics: 'one motor' when provided, 'ALL motors' when omitted. This makes the default null meaningful. It doesn't specify the accepted identifier format for motor, but for a single simple optional parameter, this is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('halt') and a specific resource ('one motor, or ALL motors if motor is omitted'), so the agent understands what the tool does. However, it doesn't differentiate this from the sibling 'emergency_stop' tool, and the phrase 'the firmware's emergency stop' actively blurs that boundary, preventing a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear when-to-use guidance: 'Use for stop, halt, or any sign something is wrong.' It also suggests a follow-up action (disable_mosfets) to release the shaft. But it doesn't explicitly state when not to use this tool or mention the alternative 'emergency_stop' sibling, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
system_resetA
System reset / go to the bootloader. The motor will reset immediately and will enter the bootloader. If there is no command sent within a short time, the motor will exit the bootloader and run the application from the beginning. [Firmware command "System reset", group: Basic Control.] NOTE: Reboots the motor (~2 s): position re-zeroes at the current shaft location, MOSFETs disable, fatal errors clear. 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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the behavioral disclosure. It details the immediate reset, bootloader timeout, reboot duration (~2s), position re-zeroing, MOSFET disabling, fatal error clearing, and broadcast no-response behavior. This is thorough and leaves no ambiguity about side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized with a main action, a note for key effects, a return value, and a parameter explanation. It is reasonably concise and front-loaded, though the note section could be slightly more compact without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description covers the action, behavior, side effects, return value, and parameter semantics. There is nothing an agent needs to know to call this tool correctly that is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides zero description coverage for the 'motor' parameter, but the description compensates fully by explaining the accepted formats: alias number, 16-hex-digit ID, or 'all' for broadcast, including the note that broadcasts yield no responses. This is exactly the semantic information an agent needs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action: 'System reset / go to the bootloader' and explains the immediate reset behavior. It clearly distinguishes this from sibling tools like 'reset_time' and 'emergency_stop' by focusing on the bootloader entry and reboot side effects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (for rebooting/resetting a motor) but does not explicitly state when to prefer this over alternatives like 'emergency_stop' or 'reset_time'. There is no direct guidance on when not to use it or which tool to use instead for other scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_modeA
Set or trigger a certain test mode. This is a bit undocumented at the moment. Don't use this unless you are a developer working on test cases. Notable modes: 0 = clear all test modes; 1-9 = motor test modes; 10-13 = LED test modes (locks up the device); 14-73 = trigger fatal errors 0-59; 74 = set the overvoltage-protection threshold to 22 V (production test, should trip on a 24 V supply); 75 = set the overvoltage-protection threshold to 26 V (production test, should not trip on a 24 V supply). A system reset restores the default overvoltage threshold. [Firmware command "Test mode", group: Configuration.] NOTE: Developer/diagnostic modes; behavior depends on firmware internals. Parameters:
testMode: The test mode to use or trigger 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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| testMode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, and it delivers. It reveals that LED modes lock up the device, modes 14-73 trigger fatal errors, overvoltage thresholds can be changed with a production-test side effect, and a system reset restores defaults. It also discloses dependency on firmware internals and that broadcasts yield no responses.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than typical but every sentence earns its place. It front-loads the warning and then uses a compact list to cover all mode ranges. The only mild inefficiency is the 'NOTE: Developer/diagnostic modes' line, which partially duplicates the earlier warning, but the overall structure is clear and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two parameters and complex mode semantics, the description provides sufficient context: it states the return value ('success confirmation'), explains the side effects of each mode group, and covers both parameters exhaustively. No aspects an agent needs to call it safely are missing, and the absence of an output schema is offset by the explicit return note.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no parameter descriptions in the schema), and the description compensates thoroughly. For testMode it enumerates every meaningful value (0-75) with behavioral consequences. For motor it explains valid formats: alias number, 16-hex-digit ID, or 'all' for broadcast, including the caveat that broadcasts get no responses. This removes any need to guess parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource pair: 'Set or trigger a certain test mode.' It goes on to enumerate concrete mode values and their effects (motor tests, LED tests, fatal errors, overvoltage thresholds), which clearly distinguishes it from the many motor control and configuration siblings. An agent can tell this is a diagnostic tool, not a normal motion or config operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use and when-not-to-use guidance: 'Don't use this unless you are a developer working on test cases.' It also warns that certain modes 'locks up the device' and that fatal errors are triggerable, plus notes that broadcasts return no responses. These constraints and consequences leave no ambiguity about whether an agent should call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_syncC
Sends the master time to the motor so that it can sync its own clock (do this 10 times per second). [Firmware command "Time sync", group: Device Management.] Parameters:
masterTime (in seconds): The motor absolute time that the motor should sync to (in microseconds). Returns:
timeError: The error in the motor's time compared to the master time.
rccIcscr: The contents of the RCC-ICSCR register (holds the HSICAL and HSITRIM settings). 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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| masterTime | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It does mention return values and broadcast behavior, but it contains a direct internal contradiction: masterTime is described as '(in seconds)' and then '(in microseconds)'. This is misleading and could cause incorrect inputs. It also does not state any side effects (e.g., that it modifies the motor's clock) or prerequisites (e.g., connection). The conflicting units are a serious transparency failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is not well structured: the motor parameter description appears after the returns section, and the unit contradiction adds confusion. The first sentence is front-loaded and efficient, but the rest is disjointed and includes redundant firmware info. The organization harms readability and violates the conciseness principle of every sentence earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description attempts to explain returns (timeError, rccIcscr) and the motor parameter, but it omits critical context: the unit ambiguity for masterTime, error handling, and any prerequisites or limitations. Since there is no output schema, the description must be the sole source for correct usage, and it fails to be complete due to the contradictory unit information and lack of edge-case guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must fully document parameters. It does describe motor (alias, ID, or 'all') and masterTime, but the masterTime documentation is self-contradictory about units and unclear. This adds some value over the bare schema but is misleading and potentially harmful. The motor description is useful, but the masterTime flaw drags the score down.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence clearly states the tool's purpose: 'Sends the master time to the motor so that it can sync its own clock.' This is a specific verb and resource that distinguishes it from siblings like get_current_time or reset_time. The firmware command reference adds context but is not necessary for clarity. The purpose is unambiguous despite the messy parameter documentation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete usage guidance: 'do this 10 times per second' and explains the motor parameter formats including broadcast behavior with its caveat ('broadcasts get no responses back'). It implies when to use (for clock sync) but does not explicitly name alternatives or exclusions. The frequency recommendation and broadcast caution are valuable for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trapezoid_moveA
Move immediately to the given position using the currently set speed (the speed is set by a separate command) [Firmware command "Trapezoid move", group: Motion Control.] NOTE: The displacement is RELATIVE to the current position. 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:
displacement (in degrees): The displacement to travel. Can be positive or negative.
duration (in seconds): The time over which to do 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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| duration | Yes | ||
| displacement | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It fully delivers: the move is relative, queued, non-blocking, requires enable_mosfets, broadcasts get no responses, and completion should be checked via get_n_queued_items. This is strong transparency for a motion-control command.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but well-organized: core semantics first, then queuing behavior and prerequisites, then parameter details. Every sentence adds value, and the critical relative-move and non-blocking facts are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description covers all operational essentials: what the move does, how it behaves, prerequisites, parameter meanings, return behavior, and how to monitor completion. An agent has enough context to call this tool correctly and to choose it over alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must explain all three parameters. It does: displacement is in degrees and can be positive or negative, duration is in seconds, and motor can be an alias, a 16-hex-digit ID, or 'all' with broadcast caveats. This fully compensates for the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: move to a position via a trapezoid move, with the key semantic that displacement is relative to the current position. It also distinguishes itself from siblings by noting it queues the move and returns immediately, unlike move_to/move_relative which wait.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains when to use this tool versus alternatives: use this when you want a queued, non-blocking move, or use move_to/move_relative when you want to wait for completion. It also states a prerequisite: enable_mosfets must be called first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vibrateB
Cause the motor to start to vary the voltage quickly and therefore to vibrate (or stop). [Firmware command "Vibrate", group: Device Management.] Parameters:
vibrationLevel: Vibration level (0 = turn off, 1 = turn on). 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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes | ||
| vibrationLevel | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that motor='all' broadcasts and returns no response, and that return is a success confirmation. But with no annotations, the description carries the full burden and omits edge behaviors (e.g., behavior when already vibrating, safety implications).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and mostly front-loaded, but the motor parameter explanation is awkwardly placed after the return statement; the paragraph could be structured more cleanly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers return confirmation and motor addressing, but omits connection requirements, error conditions, and whether the vibration is persistent or a pulse. For a simple command this is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description fully compensates: it explains vibrationLevel values (0=off, 1=on) and the three motor addressing forms, including the special 'all' broadcast case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('cause the motor to vibrate') with the ability to stop it via level 0. Clear enough as a distinct command, though it does not explicitly contrast with sibling tools like stop or move_with_acceleration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to choose this vs. siblings such as stop, emergency_stop, or move_with_acceleration. It implies vibration control but never states the intended context or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zero_positionA
Make the current position the position zero (origin) [Firmware command "Zero position", group: Basic Control.] NOTE: Redefines the current shaft location as 0 degrees (no movement). 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).
| Name | Required | Description | Default |
|---|---|---|---|
| motor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It explicitly states that the command redefines the current position without moving the shaft and mentions that broadcasts receive no responses. It does not discuss persistence or side effects on homing/limits, but for this simple command it is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with the core purpose stated first. The firmware reference, no-movement clarification, return note, and parameter semantics are each useful and earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter command with no output schema, the description covers purpose, side effects, response confirmation, and parameter input variants. It is slightly light on exact response format and persistence of the zero reference, but those are not critical for invoking this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only says 'motor' is a required string, but the description explains that it accepts a numeric alias, a 16-hex-character ID, or 'all', and discloses that broadcasting to all motors yields no responses. This significantly adds meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Make the current position the position zero' and 'Redefines the current shaft location as 0 degrees.' It clearly distinguishes this calibration action from movement commands by explicitly noting that no physical movement occurs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the primary use case—setting the current position as the origin—and the 'no movement' note helps avoid confusion with move commands. However, it does not explicitly state when to prefer this over alternatives like homing, nor does it mention prerequisites or cautionary conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
56 tool updates
v0.3.1- Added
capture_hall_sensor_data - Added
connect - Added
control_hall_sensor_statistics - Added
crc32_control - Added
detect_devices - Added
disable_mosfets - Added
disconnect - Added
emergency_stop - Added
enable_mosfets - Added
firmware_upgrade - Added
get_communication_statistics - Added
get_comprehensive_position - Added
get_current_time - Added
get_debug_values - Added
get_firmware_version - Added
get_hall_sensor_position - Added
get_hall_sensor_statistics - Added
get_max_pid_error - Added
get_motor_status - Added
get_n_queued_items - Added
get_position - Added
get_product_description - Added
get_product_info - Added
get_product_specs - Changed
get_status4 fields changed- removed
Input schema / properties / motor / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / motor / defaultRemoved value: -null - added
Input schema / properties / motor / typeAdded value: +"string" - added
Input schema / requiredAdded value: +[ + "motor" +]
- Added
get_supply_voltage - Added
get_temperature - Added
go_to_closed_loop - Added
go_to_position - Removed
home - Added
homing - Added
identify - Added
list_serial_ports - Changed
move_relative2 fields changed- removed
Input schema / properties / speedRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Speed" -} - added
Input schema / properties / speed_dpsAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Speed Dps" +}
- Changed
move_to2 fields changed- removed
Input schema / properties / speedRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Speed" -} - added
Input schema / properties / speed_dpsAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Speed Dps" +}
- Added
move_with_acceleration - Added
move_with_velocity - Added
multimove - Added
ping - Added
read_multipurpose_buffer - Removed
reset - Added
reset_time - Added
set_device_alias - Added
set_max_allowable_position_deviation - Added
set_maximum_acceleration - Added
set_maximum_motor_current - Added
set_maximum_velocity - Added
set_pid_constants - Added
set_safety_limits - Added
start_calibration - Added
system_reset - Added
test_mode - Added
time_sync - Changed
trapezoid_move5 fields changed- removed
Input schema / properties / degreesRemoved value: -{ - "title": "Degrees", - "type": "number" -} - added
Input schema / properties / displacementAdded value: +{ + "title": "Displacement", + "type": "number" +} - added
Input schema / properties / durationAdded value: +{ + "title": "Duration", + "type": "number" +} - removed
Input schema / properties / duration_sRemoved value: -{ - "title": "Duration S", - "type": "number" -} - changed
Input schema / requiredPrevious value: -[ - "motor", - "degrees", - "duration_s" -]New value: +[ + "motor", + "displacement", + "duration" +]
- Added
vibrate - Added
zero_position
9 tool updates
v0.1.0- First observed
get_status - First observed
home - First observed
list_motors - First observed
move_relative - First observed
move_to - First observed
reset - First observed
run_sequence - First observed
stop - First observed
trapezoid_move
TDQS
Scored across 57 tools
The tool set has significant overlap among movement commands (move_to, go_to_position, move_relative, trapezoid_move, move_with_velocity, move_with_acceleration, multimove) and position getters (get_position, get_hall_sensor_position, get_comprehensive_position). Although descriptions clarify queue-vs-wait and absolute-vs-relative behavior, an agent could easily select the wrong tool. Many status/device-management tools are distinct, but the same action is exposed through multiple similar command names.
Most tools follow a consistent verb_noun snake_case pattern (get_, set_, enable_, disable_, move_, etc.). There are minor deviations like 'multimove' instead of 'multi_move', 'trapezoid_move' instead of 'move_trapezoid', and bare verbs ('stop', 'ping', 'identify'}), but the overall style is readable and predictable enough.
57 tools is far more than an agent can efficiently handle for a motor control domain. Many are low-level firmware directives (e.g. capture_hall_sensor_data, test_mode, crc32_control, get_debug_values) that add little to typical use cases and bloat the API surface. The count feels like a raw protocol dump rather than a curated MCP surface.
The tool set thoroughly covers the motor lifecycle: connection, detection, high-level moves, queued low-level moves, homing, calibration, status/telemetry, safety limits, error recovery, and device management. It is reasonably complete for a motor-control server, with minor gaps like a dedicated set-saved-configuration command and high-level helper for complex motion expressed through raw commands.
Maintenance
Related MCP Connectors
MCP server for generating rough-draft project plans from natural-language prompts.
- mcpOAuthcom.gibsonai
GibsonAI MCP server: manage your databases with natural language
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables natural language control of ElephantRobotics MyCobot series robotic arms (especially ultraArmP340) through MCP protocol, with simulation mode and safety features.36MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for Reachy Mini robot that exposes robot state and motion control to LLM frontends like Claude Desktop.MIT

Robonine MCP Serverofficial
AlicenseAqualityDmaintenanceA local MCP server that connects Claude Code or any MCP-compatible AI assistant to a Robonine robot arm.1MIT- FlicenseNot gradedqualityCmaintenanceControls surgical bed and C-arm through natural language commands via MCP protocol, with a mock backend and 3D visualization for real-time feedback.-