Opentrons MCP Server
Hosts the source code repository for the Opentrons MCP server that can be cloned for installation from source.
Supported as a platform for running the MCP server, with specific configuration file paths provided for macOS users.
Serves as the runtime environment for the MCP server, with Node.js 18+ listed as a requirement for running the server.
Provides package management for installing the Opentrons MCP server via the recommended installation method.
Supports protocol files written in Python format (.py) that can be uploaded and executed on Opentrons robots.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Opentrons MCP Servercheck if my robot at 192.168.1.100 is healthy and ready"
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.
Opentrons MCP Server
A Model Context Protocol (MCP) server for Opentrons robot automation and API documentation. This tool provides both comprehensive API documentation and direct robot control capabilities for Opentrons Flex and OT-2 robots.
Features
API Documentation Tools
Search Endpoints: Find API endpoints by functionality, method, or keyword
Endpoint Details: Get comprehensive information about specific API endpoints
Category Browsing: List endpoints by functional category
API Overview: High-level overview of the entire Opentrons HTTP API
Robot Automation Tools
Protocol Management: Upload, list, and manage protocol files
Run Control: Create runs, start/stop execution, monitor progress
Robot Health: Check connectivity and system status
Hardware Control: Home robot, control lights, and basic operations
Related MCP server: Swagger/Postman MCP Server
Installation
From npm (recommended)
npm install -g opentrons-mcpFrom source
git clone https://github.com/yerbymatey/opentrons-mcp.git
cd opentrons-mcp
npm installConfiguration
Add to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"opentrons": {
"command": "opentrons-mcp",
"args": []
}
}
}If installed from source:
{
"mcpServers": {
"opentrons": {
"command": "node",
"args": ["/path/to/opentrons-mcp/index.js"]
}
}
}Available Tools
Documentation Tools
search_endpoints
Search Opentrons HTTP API endpoints by functionality, method, path, or keyword.
query(required): Search termmethod(optional): Filter by HTTP method (GET, POST, PUT, DELETE, PATCH)tag(optional): Filter by API categoryinclude_deprecated(optional): Include deprecated endpoints
get_endpoint_details
Get comprehensive details about a specific API endpoint.
method(required): HTTP methodpath(required): API endpoint path
list_by_category
List all endpoints in a specific functional category.
category(required): API category (Health, Control, Protocol Management, etc.)
get_api_overview
Get high-level overview of the Opentrons HTTP API structure and capabilities.
Automation Tools
upload_protocol
Upload a protocol file to an Opentrons robot.
robot_ip(required): Robot IP addressfile_path(required): Path to protocol file (.py or .json)protocol_kind(optional): "standard" or "quick-transfer" (default: "standard")key(optional): Client tracking keyrun_time_parameters(optional): Runtime parameter values
get_protocols
List all protocols stored on the robot.
robot_ip(required): Robot IP addressprotocol_kind(optional): Filter by protocol type
create_run
Create a new protocol run on the robot.
robot_ip(required): Robot IP addressprotocol_id(required): ID of protocol to runrun_time_parameters(optional): Runtime parameter values
control_run
Control run execution (play, pause, stop, resume).
robot_ip(required): Robot IP addressrun_id(required): Run ID to controlaction(required): "play", "pause", "stop", or "resume-from-recovery"
get_runs
List all runs on the robot.
robot_ip(required): Robot IP address
get_run_status
Get detailed status of a specific run.
robot_ip(required): Robot IP addressrun_id(required): Run ID to check
robot_health
Check robot health and connectivity.
robot_ip(required): Robot IP address
control_lights
Turn robot lights on or off.
robot_ip(required): Robot IP addresson(required): true to turn lights on, false to turn off
home_robot
Home robot axes or specific pipette.
robot_ip(required): Robot IP addresstarget(optional): "robot" for all axes, "pipette" for specific mountmount(optional): "left" or "right" (required if target is "pipette")
Usage Examples
With Claude Desktop
Screenshot showing the Opentrons MCP server in action with Claude Desktop after asking for current protocols with opentrons for the Flex, give it the robot ip!
Once configured, you can use natural language to control your robot:
Upload a protocol:
Upload the protocol file at /path/to/my_protocol.py to my robot at 192.168.1.100Check robot status:
Check if my robot at 192.168.1.100 is healthy and readyRun a protocol:
List all protocols on my robot, then create and start a run for the latest oneMonitor progress:
Show me the status of run abc123 on my robotProgrammatic Usage
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
// Connect to MCP server
const client = new Client(/* transport */);
// Upload protocol
await client.request({
method: "tools/call",
params: {
name: "upload_protocol",
arguments: {
robot_ip: "192.168.1.100",
file_path: "/path/to/protocol.py",
protocol_kind: "standard"
}
}
});Requirements
Node.js 18+
Opentrons robot with HTTP API enabled (port 31950)
Network connectivity between client and robot
Robot Setup
Ensure your Opentrons robot is:
Connected to the same network as your client
Running robot software version 7.0.0+
Accessible on port 31950 (default for HTTP API)
You can verify connectivity by visiting http://your-robot-ip:31950/health in a browser.
API Reference
This tool provides access to the complete Opentrons HTTP API, including:
Protocol Management: Upload, analyze, and manage protocol files
Run Management: Create, control, and monitor protocol runs
Hardware Control: Robot movement, homing, lighting, and calibration
System Management: Health monitoring, settings, and diagnostics
Module Control: Temperature modules, magnetic modules, thermocyclers
Data Management: CSV files for runtime parameters
For detailed API documentation, use the search and documentation tools provided by this MCP server.
Troubleshooting
Cannot connect to robot
Verify robot IP address is correct
Ensure robot is powered on and connected to network
Check that port 31950 is accessible
Confirm robot software is running
Protocol upload fails
Verify file path exists and is readable
Ensure protocol file is valid Python (.py) or JSON format
Check available disk space on robot
Confirm protocol is compatible with robot type (OT-2 vs Flex)
Run execution issues
Verify all required labware and modules are attached
Check robot calibration status
Ensure protocol analysis completed successfully
Confirm no hardware errors or conflicts
Contributing
Contributions are welcome! Please feel free to submit issues and pull requests.
License
No license go brazy
Related Projects
Available Tools
14 toolscontrol_lightsC
Turn robot lights on or off
| Name | Required | Description | Default |
|---|---|---|---|
| robot_ip | Yes | Robot IP address | |
| on | Yes | True to turn lights on, false to turn off |
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 states the action ('turn') but does not disclose behavioral traits such as required permissions, whether the change is immediate or reversible, error handling, or effects on robot operation. For a mutation tool with zero annotation coverage, this is a significant gap.
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, efficient sentence with zero waste. It is appropriately sized and front-loaded, directly stating the tool's purpose without unnecessary elaboration.
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 (a mutation tool controlling hardware), lack of annotations, and no output schema, the description is incomplete. It does not address return values, error conditions, or operational constraints, leaving gaps for safe and effective use by an AI 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?
Schema description coverage is 100%, so the schema already documents both parameters ('robot_ip' and 'on') with clear descriptions. The description adds no additional meaning beyond what the schema provides, such as format details or usage examples. Baseline 3 is appropriate when schema does the heavy lifting.
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 ('turn') and resource ('robot lights') with the specific states ('on or off'). It distinguishes from most siblings (e.g., 'control_run', 'home_robot') but not explicitly from 'robot_health' which might involve light status. The purpose is specific but lacks differentiation from potential overlapping 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?
No guidance on when to use this tool versus alternatives is provided. The description does not mention prerequisites (e.g., robot connectivity), exclusions, or related tools like 'robot_health' that might check light status. Usage is implied by the action but without explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
control_runC
Control run execution (play, pause, stop, resume)
| Name | Required | Description | Default |
|---|---|---|---|
| robot_ip | Yes | Robot IP address | |
| run_id | Yes | Run ID to control | |
| action | Yes | Action to perform |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but lacks behavioral details. It doesn't disclose whether actions are destructive (e.g., 'stop' might terminate a run irreversibly), authentication needs, rate limits, or response behavior. The description only lists actions without operational context.
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, efficient sentence that front-loads the core purpose ('control run execution') and lists key actions. Every word earns its place with no redundancy or unnecessary elaboration.
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 mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral traits (e.g., what 'stop' does to the run), error scenarios, or return values. Given the complexity of controlling execution, more context is needed beyond the basic action list.
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 100%, so the schema fully documents parameters. The description adds no additional meaning beyond implying the action parameter controls execution states, which is already clear from the enum. Baseline score of 3 is appropriate as the schema handles parameter documentation.
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 'control' and the resource 'run execution', with specific actions listed (play, pause, stop, resume). It distinguishes from siblings like 'create_run' (creation vs. control) and 'get_runs' (retrieval vs. control), though it doesn't explicitly mention these distinctions.
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. It doesn't mention prerequisites (e.g., needing an existing run from 'create_run'), exclusions, or contextual cues like error handling. The description only lists actions without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_runC
Create a new protocol run on the robot
| Name | Required | Description | Default |
|---|---|---|---|
| robot_ip | Yes | Robot IP address | |
| protocol_id | Yes | ID of protocol to run | |
| run_time_parameters | No | Optional runtime parameter values |
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 of behavioral disclosure. It states the tool creates a run but doesn't explain what that entails—e.g., whether it starts execution immediately, requires specific robot states, has side effects like resource locking, or returns a run ID. This is a significant gap for a mutation tool with zero annotation coverage.
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, efficient sentence that directly states the tool's purpose without any fluff or redundancy. It's appropriately sized and front-loaded, making it easy to parse quickly.
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 of creating a robot protocol run (a mutation operation with no annotations and no output schema), the description is incomplete. It lacks details on behavioral traits, return values, error conditions, or how it fits with sibling tools, leaving critical gaps for an AI agent to use it effectively.
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 100%, so the schema already documents all three parameters (robot_ip, protocol_id, run_time_parameters) with clear descriptions. The description adds no additional meaning beyond what the schema provides, such as format examples or usage context, resulting in a baseline 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 clearly states the action ('create') and resource ('new protocol run on the robot'), making the purpose immediately understandable. However, it doesn't distinguish this tool from sibling tools like 'control_run' or 'upload_protocol', which might have overlapping or related functionality in the robot protocol ecosystem.
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. It doesn't mention prerequisites (e.g., needing an uploaded protocol first), exclusions, or how it relates to sibling tools like 'control_run' or 'upload_protocol', leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_api_overviewB
Get high-level overview of the Opentrons HTTP API structure and capabilities
| 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 of behavioral disclosure. It states the tool retrieves an 'overview' but doesn't clarify what that entails—such as whether it returns a summary, documentation links, or structured data. It also omits details like response format, potential rate limits, or authentication requirements, leaving significant gaps in understanding its behavior.
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, efficient sentence that directly states the tool's purpose without any unnecessary words. It is front-loaded with the core action and resource, making it easy to parse and understand quickly.
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 tool's simplicity (no parameters, no output schema, no annotations), the description is adequate but has clear gaps. It explains the purpose but lacks details on the output format or behavioral traits, which could be important for an AI agent to use it effectively. The absence of an output schema means the description should ideally hint at what is returned, but it doesn't.
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, and the schema description coverage is 100%, meaning there are no parameters to document. The description doesn't need to add parameter semantics, so it meets the baseline expectation for such cases, though it doesn't provide extra context beyond the schema's completeness.
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 with a specific verb ('Get') and resource ('high-level overview of the Opentrons HTTP API structure and capabilities'), making it easy to understand what it does. However, it doesn't explicitly differentiate from sibling tools like 'get_endpoint_details' or 'search_endpoints', which might provide more specific API information.
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. It doesn't mention when this overview is appropriate compared to more detailed tools like 'get_endpoint_details' or 'search_endpoints', nor does it specify any prerequisites or contextual cues for its use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_endpoint_detailsC
Get comprehensive details about a specific API endpoint
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | HTTP method (GET, POST, etc.) | |
| path | Yes | API endpoint path |
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 states the tool retrieves details but doesn't specify what 'comprehensive details' include (e.g., response format, rate limits, authentication needs, or whether it's a read-only operation). This lack of detail makes it inadequate for a tool with potential behavioral 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?
The description is a single, efficient sentence that front-loads the core action ('Get comprehensive details') without any wasted words. It's appropriately sized for a straightforward tool, making it easy for an agent to parse quickly.
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 lack of annotations and output schema, the description is incomplete for a tool that presumably returns detailed endpoint information. It doesn't explain what 'comprehensive details' entail (e.g., parameters, response codes, examples), leaving significant gaps in understanding the tool's full behavior and output.
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 100% description coverage, clearly documenting both parameters ('method' and 'path') with their types and purposes. The description adds no additional semantic context beyond implying these parameters identify a specific endpoint, so it meets the baseline for high schema coverage without compensating 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 clearly states the tool's purpose with a specific verb ('Get') and resource ('comprehensive details about a specific API endpoint'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_api_overview' or 'search_endpoints', which might offer broader or different endpoint information.
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. It doesn't mention prerequisites, context for use, or comparisons to siblings like 'get_api_overview' (which might give a high-level view) or 'search_endpoints' (which could list multiple endpoints), leaving the agent to infer usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_protocolsC
List all protocols stored on the robot
| Name | Required | Description | Default |
|---|---|---|---|
| robot_ip | Yes | Robot IP address | |
| protocol_kind | No | Filter by protocol type (optional) |
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 mentions listing protocols but doesn't specify whether this is a read-only operation, if it requires authentication, what the output format is, or any rate limits. This leaves significant gaps in understanding the tool's behavior.
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, efficient sentence that directly states the tool's purpose without any unnecessary words. It is front-loaded and wastes no space, making it highly concise and well-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?
Given the lack of annotations and output schema, the description is incomplete. It doesn't cover behavioral aspects like safety, permissions, or output format, which are crucial for a tool that interacts with a robot. The description alone is insufficient for full contextual understanding.
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 100% description coverage, clearly documenting both parameters. The description adds no additional meaning beyond the schema, such as explaining the optionality of 'protocol_kind' or providing examples. Since the schema does the heavy lifting, the baseline score of 3 is appropriate.
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 ('List') and resource ('protocols stored on the robot'), making the tool's function immediately understandable. However, it doesn't differentiate from sibling tools like 'list_by_category' or 'get_runs', which might also involve listing operations, so it doesn't fully distinguish itself from 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 no guidance on when to use this tool versus alternatives such as 'list_by_category' or 'get_runs', nor does it mention any prerequisites or exclusions. It simply states what the tool does without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_runsB
List all runs on the robot
| Name | Required | Description | Default |
|---|---|---|---|
| robot_ip | Yes | Robot IP address |
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 of behavioral disclosure. It states it 'List all runs' but doesn't describe what a 'run' entails, whether this is a read-only operation, if it requires specific permissions, or how results are returned (e.g., pagination, format). For a tool with no annotations, this is a significant gap in 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 a single, efficient sentence ('List all runs on the robot') that is front-loaded with the core purpose. There is zero waste or redundancy, making it appropriately sized and structured for 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 tool's low complexity (one parameter, no output schema, no annotations), the description is minimally adequate but incomplete. It covers the basic purpose but lacks details on behavioral traits, usage context, or output format, which are needed for full understanding in the absence of annotations and output schema.
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 100% description coverage, with the single parameter 'robot_ip' clearly documented as 'Robot IP address'. The description doesn't add any meaning beyond this, such as explaining why the IP is needed or format examples. With high schema coverage, the baseline score of 3 is appropriate as the schema does the heavy lifting.
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 ('List all runs') and the resource ('on the robot'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from sibling tools like 'get_run_status' or 'control_run', which also involve runs, so it doesn't fully differentiate from 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 no guidance on when to use this tool versus alternatives like 'get_run_status' (for status of a specific run) or 'create_run' (to start a new run). It lacks explicit when/when-not instructions or named alternatives, leaving usage context implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_run_statusC
Get detailed status of a specific run
| Name | Required | Description | Default |
|---|---|---|---|
| robot_ip | Yes | Robot IP address | |
| run_id | Yes | Run ID to check |
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 of behavioral disclosure. It states the tool retrieves status but doesn't describe what 'detailed status' includes (e.g., progress, errors, timestamps), whether it's a read-only operation, potential rate limits, or authentication needs. This leaves significant gaps for a tool that likely interacts with robot runs.
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, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and wastes no space, making it easy to parse quickly.
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 of interacting with robot runs and the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'detailed status' entails, potential error cases, or the return format, which are crucial for an AI agent to use this tool effectively in a robotics 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?
The input schema has 100% description coverage, clearly documenting both parameters ('robot_ip' and 'run_id'). The description adds no additional meaning beyond the schema, such as format examples or constraints. With high schema coverage, the baseline score of 3 is appropriate as the schema handles the parameter documentation adequately.
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 'Get' and the resource 'detailed status of a specific run', making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_runs' (which likely lists multiple runs) or 'robot_health' (which might provide health status rather than run status), so it lacks explicit sibling differentiation.
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. It doesn't mention prerequisites (e.g., needing a valid run ID), exclusions (e.g., not for general robot status), or comparisons to siblings like 'get_runs' for listing runs or 'control_run' for managing runs, leaving usage context unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
home_robotC
Home robot axes or specific pipette
| Name | Required | Description | Default |
|---|---|---|---|
| robot_ip | Yes | Robot IP address | |
| target | No | What to home | robot |
| mount | No | Which mount (required if target is 'pipette') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but provides minimal behavioral context. It mentions 'home' which suggests a physical movement/reset operation, but doesn't disclose safety implications, required robot state, time duration, or what happens during homing. This is inadequate for a tool that likely involves hardware control.
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 extremely concise at just 5 words, front-loading the core purpose with zero wasted words. Every word earns its place by specifying the tool's scope (robot/pipette homing).
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 hardware control tool with no annotations and no output schema, the description is insufficient. It doesn't explain what 'homing' entails, what state changes occur, potential risks, or return values. Given the complexity of robot operations and lack of structured safety hints, more context is needed.
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 100%, so parameters are well-documented in the schema itself. The description adds no additional parameter semantics beyond what's in the schema, but with complete schema coverage and only 3 parameters, this meets the baseline expectation without needing compensation.
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 'Home robot axes or specific pipette' states a general purpose (homing operation) but is vague about what 'home' means in this context. It distinguishes from siblings by focusing on robot/pipette homing rather than lights control, run management, or protocol operations, but lacks specificity about the action's effect.
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 guidance on when to use this tool versus alternatives is provided. The description implies usage for homing operations, but there's no mention of prerequisites, error conditions, or comparison to other robot control tools like 'control_run' or 'robot_health'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_by_categoryC
List all endpoints in a specific functional category
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | API category/tag to filter by |
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 of behavioral disclosure. It states the tool lists endpoints but doesn't describe what 'list' entails (e.g., pagination, format, sorting, or error handling). For a tool with zero annotation coverage, this is a significant gap in transparency about its behavior and limitations.
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, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and every part of the sentence contributes to understanding the tool's function, making it highly concise and well-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?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what the output looks like (e.g., list format, data structure) or address potential behavioral aspects like error cases or performance. For a tool with no structured data beyond the input schema, more context is needed to fully understand its 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 has 100% description coverage, with a clear enum for the 'category' parameter. The description adds no additional meaning beyond what the schema provides, such as explaining the purpose of categories or how they relate to endpoints. With high schema coverage, the baseline score of 3 is appropriate.
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 ('List all endpoints') and the resource ('in a specific functional category'), providing a specific verb+resource combination. However, it doesn't explicitly distinguish this tool from sibling tools like 'search_endpoints' or 'get_api_overview', which might offer similar or overlapping functionality.
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 like 'search_endpoints' or 'get_api_overview'. It lacks context about prerequisites, exclusions, or specific scenarios where this tool is preferred, leaving the agent to infer usage based solely on the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
poll_error_endpoint_and_fixC
Fetch specific JSON error report and automatically fix protocols
| Name | Required | Description | Default |
|---|---|---|---|
| json_filename | No | Name of JSON file to fetch | error_report_20250622_124746.json |
| original_protocol_path | No | Path to original protocol file | /Users/gene/Developer/failed-protocol-5.py |
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 mentions 'automatically fix protocols,' implying a mutation/write operation, but doesn't disclose critical behavioral traits: what 'fix' entails (e.g., modifies files, restarts processes), potential side effects, required permissions, error handling, or rate limits. This is inadequate for a tool with implied destructive behavior.
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, efficient sentence with zero waste. It's appropriately sized and front-loaded, directly stating the tool's core function without unnecessary elaboration.
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 tool's complexity (involving fetching and fixing), lack of annotations, and no output schema, the description is incomplete. It doesn't explain what 'fix' means behaviorally, what the tool returns, or error conditions. For a mutation tool with zero annotation coverage, this leaves significant gaps for an AI 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?
Schema description coverage is 100%, so the schema already documents both parameters fully. The description adds no additional meaning beyond what the schema provides (e.g., how parameters relate to the fetch-and-fix process). Baseline 3 is appropriate as the schema does the heavy lifting.
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 with specific verbs ('fetch' and 'fix') and resources ('JSON error report' and 'protocols'). It distinguishes this as an error-handling tool among siblings that are mostly about control, creation, and retrieval operations. However, it doesn't explicitly differentiate from potential error-related siblings (none listed).
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. It doesn't mention prerequisites (e.g., when an error report exists), exclusions, or comparisons to other tools like 'get_protocols' or 'upload_protocol' for protocol management. Usage is implied only by the tool's name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
robot_healthC
Check robot health and connectivity
| Name | Required | Description | Default |
|---|---|---|---|
| robot_ip | Yes | Robot IP address |
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 of behavioral disclosure. While 'Check' implies a read-only operation, it doesn't specify whether this requires authentication, what the response format looks like, if there are rate limits, or what 'health and connectivity' entails (e.g., metrics, status codes). This leaves significant gaps for an agent to understand the tool's behavior.
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 extremely concise at just four words, with zero wasted language. It's front-loaded with the core action ('Check') and resource, making it easy to parse quickly. Every word earns its place by directly contributing to understanding the tool's 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?
Given the lack of annotations and output schema, the description is incomplete for a tool that presumably returns health status information. It doesn't explain what 'health and connectivity' means in practice, what values are returned, or how to interpret results. For a diagnostic tool, this leaves too much ambiguity for effective agent use.
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 100% description coverage, with the single parameter 'robot_ip' clearly documented as 'Robot IP address'. The description doesn't add any meaningful semantic context beyond this, such as format requirements (e.g., IPv4) or examples. With high schema coverage, the baseline score of 3 is appropriate as the schema does the heavy lifting.
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 with a specific verb ('Check') and resource ('robot health and connectivity'), making it immediately understandable. However, it doesn't explicitly differentiate this health-checking function from similar sibling tools like 'get_run_status' or 'poll_error_endpoint_and_fix', which might also provide status information.
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. With sibling tools like 'get_run_status' and 'poll_error_endpoint_and_fix' that might overlap in functionality, there's no indication of when this health check is preferred, what prerequisites exist, or any exclusions for its use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_endpointsC
Search Opentrons HTTP API endpoints by functionality, method, path, or any keyword
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query - searches across endpoint names, descriptions, paths, and tags | |
| method | No | HTTP method filter (GET, POST, PUT, DELETE, PATCH) | |
| tag | No | Filter by API category/tag | |
| include_deprecated | No | Include deprecated endpoints in results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states what the tool does ('search'), not behavioral traits. It doesn't disclose whether this is a read-only operation, if it requires authentication, rate limits, pagination behavior, or what the output format looks like. For a search tool with 4 parameters and no output schema, this is a significant gap in behavioral context.
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, efficient sentence that front-loads the core purpose ('search Opentrons HTTP API endpoints') followed by search criteria. Every word earns its place with zero waste or redundancy.
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 4 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain the tool's behavior, output format, or usage context relative to siblings. For a search tool in this environment, more guidance on results format and when to use it would be needed for adequate completeness.
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 100%, so the schema fully documents all 4 parameters. The description mentions search criteria ('functionality, method, path, or any keyword') which aligns with the 'query' parameter but doesn't add meaning beyond what the schema provides for other parameters. Baseline 3 is appropriate when schema does the heavy lifting.
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 ('search') and resource ('Opentrons HTTP API endpoints') with specific search criteria (functionality, method, path, keyword). It distinguishes from siblings like 'get_endpoint_details' or 'get_api_overview' by focusing on search functionality rather than retrieval of specific resources. However, it doesn't explicitly differentiate from 'list_by_category' which might also list endpoints.
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 like 'get_endpoint_details' for specific endpoint information or 'list_by_category' for categorized listings. It mentions search criteria but doesn't explain when searching is preferable to direct retrieval methods available among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_protocolC
Upload a protocol file to an Opentrons robot
| Name | Required | Description | Default |
|---|---|---|---|
| robot_ip | Yes | Robot IP address (e.g., '192.168.1.100') | |
| file_path | Yes | Path to protocol file (.py or .json) | |
| protocol_kind | No | standard | |
| key | No | Optional client tracking key (~100 chars) | |
| run_time_parameters | No | Optional runtime parameter values |
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 states the action ('Upload') but doesn't describe what happens after upload (e.g., whether it triggers execution, requires confirmation, or has side effects like overwriting existing protocols). It also omits details on authentication needs, rate limits, or error handling, leaving significant gaps for a mutation 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 a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, with every word earning its place in conveying the core functionality.
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 mutation tool with 5 parameters, no annotations, and no output schema, the description is incomplete. It doesn't address behavioral aspects like side effects, success/failure responses, or integration with sibling tools (e.g., what happens after upload relative to 'control_run'). The lack of output schema increases the need for more context, which isn't 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?
Schema description coverage is 80%, providing a strong baseline. The description adds no parameter-specific information beyond what the schema already documents (e.g., file types, robot IP format, optional keys). It doesn't explain interactions between parameters like 'protocol_kind' and 'run_time_parameters', so it meets but doesn't exceed the baseline expectation.
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 ('Upload') and resource ('a protocol file to an Opentrons robot'), providing a specific verb+resource combination. It distinguishes from siblings like 'get_protocols' (read) and 'create_run' (different action), though it doesn't explicitly mention these distinctions in the description itself.
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 like 'create_run' or 'control_run', nor does it mention prerequisites such as robot connectivity or file format requirements. It lacks explicit when/when-not instructions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have distinct purposes, but there is some overlap between get_endpoint_details, list_by_category, and search_endpoints, which all relate to API endpoint discovery and could cause confusion. Additionally, poll_error_endpoint_and_fix combines error fetching and fixing in one tool, which might overlap with general run control functions.
The naming follows a consistent verb_noun pattern (e.g., control_lights, create_run, get_protocols) with only minor deviations like poll_error_endpoint_and_fix being more descriptive and robot_health as a noun phrase. Overall, it's readable and mostly predictable.
With 14 tools, this is well-scoped for managing an Opentrons robot, covering protocol handling, run control, robot operations, and API exploration. Each tool appears to serve a specific function without being excessive.
The tool set covers core robot operations (lights, homing, health), protocol lifecycle (upload, list, create runs), and run management (control, status). A minor gap is the lack of a tool for deleting or modifying protocols, but agents can likely work around this.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
- mcpOAuthcom.gibsonai
GibsonAI MCP server: manage your databases with natural language
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
The Fireflies MCP Server enables AI tools to connect directly to meeting data from Fireflies.ai, providing access to meeting transcripts, summaries, action items, and insights without switching platforms. It includes capabilities for querying cross-meeting data for analysis (such as sales insights or product feedback), and a separate Documentation MCP Server that allows searching the Fireflies knowledge base for API references, guides, and code examples.
Related MCP Servers
- AlicenseBqualityCmaintenanceThis server facilitates the invocation of AI models from providers like Anthropic, OpenAI, and Groq, enabling users to manage and configure large language model interactions seamlessly.213MIT
- FlicenseNot gradedqualityDmaintenanceServer that ingests Swagger/OpenAPI specifications and Postman collections, providing just 4 strategic tools that allow AI agents to dynamically discover and interact with APIs instead of generating hundreds of individual tools.3
- AlicenseNot gradedqualityDmaintenanceA server that provides organized documentation content for various applications using the Model Context Protocol, enabling AI assistants to access quickstart guides and code examples.MIT
- AlicenseNot gradedqualityDmaintenanceA sophisticated server that enables AI assistants to automatically analyze codebases and generate comprehensive, professional documentation.2MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/yerbymatey/opentrons-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server