otie-mcp
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., "@otie-mcpValidate this protocol for the Flex robot"
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 API MCP Server
Opentrons HTTP API v2 および Python Protocol API を操作・参照するための TypeScript / Node.js ベースの Model Context Protocol (MCP) サーバーです。
Claude Desktop、Cursor などの MCP クライアントから、Opentrons ロボット(OT-2 / Opentrons Flex)の操作、プロトコルの検証・実行、ステータス確認、ドキュメント検索を行うことができます。
主な機能
📚
opentrons_search_docs: Opentrons Python Protocol API および HTTP API のドキュメント・サンプルコードを検索🔍
opentrons_validate_protocol: Python プロトコルの構文チェックおよび物理ハードウェア(モジュール/ピペット)の要求照合🚀
opentrons_upload_and_run: ハードウェア検証・プロトコルアップロード・Run 生成・実行開始を安全に一括実行📊
opentrons_get_robot_status: ロボットの接続状態、モジュール/ピペット構成、Run の進捗ステータスを取得⏸️
opentrons_control_run: Run に対する操作(play,pause,stop,resume)⚡
opentrons_execute_command: 個別のハードウェアダイレクトコマンドを発行
Related MCP server: JSON-RPC
前提条件
Node.js: v20.0.0 以上 (動作確認済み: v22.22.0)
npm: v10.0.0 以上
Opentrons ロボット: OT-2 または Opentrons Flex(API ポート
31950が開放されていること)
インストール & セットアップ
1. 依存関係のインストール
npm install2. ドキュメント検索インデックスの構築
npm run build:index3. プロジェクトのビルド
npm run build環境変数の設定
プロジェクトルートに .env ファイルを作成するか、環境変数を設定して接続先ロボット情報を指定します。
# Opentrons ロボットの IP アドレス (デフォルト: 127.0.0.1)
OPENTRONS_ROBOT_IP=192.168.1.100
# Opentrons HTTP API ポート (デフォルト: 31950)
OPENTRONS_ROBOT_PORT=31950
# API トークン (認証が必要な場合のみ)
OPENTRONS_API_TOKEN=MCP クライアントへの登録方法
Claude Desktop の場合
claude_desktop_config.json(Windows の場合は %APPDATA%\Claude\claude_desktop_config.json)に以下のように追加します。
{
"mcpServers": {
"opentrons": {
"command": "node",
"args": [
"C:/path/to/otie-mcp/dist/index.js"
],
"env": {
"OPENTRONS_ROBOT_IP": "192.168.1.100",
"OPENTRONS_ROBOT_PORT": "31950"
}
}
}
}開発モードでの実行 (tsx)
{
"mcpServers": {
"opentrons": {
"command": "npx",
"args": [
"tsx",
"C:/path/to/otie-mcp/src/index.ts"
],
"env": {
"OPENTRONS_ROBOT_IP": "192.168.1.100",
"OPENTRONS_ROBOT_PORT": "31950"
}
}
}
}ツール一覧と利用方法
1. opentrons_search_docs
Opentrons API ドキュメントをキーワード検索します。
パラメータ:
query(string, 必須): 検索キーワード(例:"temperature module","transfer","load_labware")maxResults(number, 任意): 最大取得件数(デフォルト:5)
2. opentrons_validate_protocol
Python プロトコルコードの構文チェックと、接続済みモジュール/ピペットとの適合性をチェックします。
パラメータ:
protocolContent(string, 必須): Python プロトコルコード本文
3. opentrons_upload_and_run
物理ハードウェア検証を行ったうえでプロトコルをアップロードし、Run を生成して実行を開始します。必要なモジュールが不足している場合は安全にブロックされます。
パラメータ:
protocolContent(string, 必須): Python プロトコルコード本文filename(string, 任意): 保存ファイル名(デフォルト:"protocol.py")
4. opentrons_get_robot_status
ロボットの健康状態、接続中モジュール・ピペット、および特定の Run ステータスを取得します。
パラメータ:
runId(string, 任意): 確認したい Run の ID
5. opentrons_control_run
実行中または一時停止中の Run を制御します。
パラメータ:
runId(string, 必須): 対象の Run IDaction(string, 必須):'play'|'pause'|'stop'|'resume'
6. opentrons_execute_command
指定した Run に対し、ダイレクトコマンド(ホーム復帰、ピペット移動など)を発行します。
パラメータ:
runId(string, 必須): 対象の Run IDcommandType(string, 必須): コマンド種別(例:"home","loadLabware")params(object, 任意): コマンドパラメータintent(string, 任意):'setup'|'protocol'
テストの実行
Jest によるユニットテストを実行します。
npm testライセンス
ISC License
Available Tools
6 toolsopentrons_control_runA
実行中の Run に対して play (開始/再開), pause (一時停止), stop (停止), resume (再開) の制御アクションを発行します。
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Run ID | |
| action | 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 lists the control actions but does not explain side effects (e.g., whether stop is irreversible), prerequisites beyond 'running', error handling for non-running runs, or response semantics. This is a significant gap 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, well-structured sentence that lists all supported actions and targets the correct resource. It is front-loaded with the primary action and contains no filler 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 the tool's low complexity (2 parameters, enums, no output schema), the description covers the core functionality adequately. However, it lacks details on what happens after each action (e.g., pause vs resume semantics) and possible error conditions, which would make it more 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 100% as both runId and action have descriptions. The description adds minimal extra meaning, only contextualizing runId as referring to a 'running' Run. It does not elaborate on the enum values beyond what the schema already provides.
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 issues control actions (play, pause, stop, resume) for an existing running Run. The verb '発行する' specifies the operation and the resource is explicitly '実行中の Run', differentiating it from sibling tools like upload_and_run, which likely starts a new run.
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 controlling an already running Run but does not explicitly state when to use this tool versus alternatives such as upload_and_run or execute_command. No exclusions or conditions are provided, so usage 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.
opentrons_execute_commandC
指定された Run に対して個別のハードウェアダイレクトコマンドを発行・実行します。
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Run ID | |
| intent | No | インテント | |
| params | No | コマンドパラメータ | |
| commandType | Yes | コマンドタイプ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure, but it only mentions executing direct hardware commands. It does not disclose potential side effects, required permissions, reversibility, or impact on ongoing runs, which is a significant gap for a mutating low-level 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, concise sentence with no filler or repetition. It is front-loaded and every word contributes to the basic purpose, making it efficient and 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 tool has four parameters, no annotations, and no output schema, yet the description provides minimal context. It does not explain return values, error behavior, or practical use cases, making it incomplete for a complex low-level command 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 input schema covers all parameters with descriptions, so the baseline is 3. The description does not add any meaning beyond the schema; it only refers to 'specified Run' which maps to runId, leaving intent, params, and commandType without extra 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 clearly states the tool 'issues and executes individual hardware direct commands for the specified Run', providing a specific verb and resource. It distinguishes from siblings like opentrons_validate_protocol and opentrons_upload_and_run, though it does not explicitly differentiate from opentrons_control_run.
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, and there are no exclusions, prerequisites, or examples. The description only states what it does, 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.
opentrons_get_robot_statusA
ロボットの接続状態、モジュール・ピペット構成、および指定された Run の現在ステータスを取得します。
| Name | Required | Description | Default |
|---|---|---|---|
| runId | No | Run ID (任意) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It discloses the categories of returned data (connection, configuration, run status), but does not explicitly state that the tool is read-only or has no side effects. This is a reasonable but not exhaustive disclosure for a status query 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 sentence that is front-loaded with the primary verb and object list. It contains no fluff, redundant phrasing, or unnecessary details, 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 low complexity (one optional parameter, no output schema), the description adequately covers what the tool returns. It enumerates the key status categories. A minor gap is that it doesn't explicitly say the run status portion is only relevant when runId is provided, but this is easily inferable and not critical.
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 already provides 100% coverage for the single parameter 'runId' with the description 'Run ID (任意)'. The tool description adds minimal extra meaning by referring to '指定されたRun' (specified Run), which is essentially redundant. No additional format or behavior details are provided.
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 the specific verb '取得' (retrieve) and clearly enumerates the resources: robot connection status, module/pipette configuration, and current run status. This makes the tool's purpose distinct from sibling tools like opentrons_control_run or opentrons_upload_and_run.
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 is given on when to use this tool versus alternatives. The description implies it is for obtaining status information, but does not state exclusions or contrast with sibling tools. Usage context is only indirectly communicated through the verb 'retrieve'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentrons_search_docsA
Opentrons Python Protocol API & HTTP API ドキュメントをキーワード検索し、関連する仕様やサンプルコードを返却します。
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | 検索キーワード | |
| maxResults | No | 返却件数 (既定: 5) |
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 merely states it searches and returns results, but does not disclose search behavior, result limits, pagination, or any constraints. It adds minimal context beyond the basic purpose.
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, concise sentence that front-loads the resource (Opentrons API docs) and action (keyword search), with no filler 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?
For a simple search tool with only 2 parameters and no output schema, the description provides sufficient context about what it does and what it returns (specs and sample code). It could mention return format or limitations, but the schema covers parameters.
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 100%, with clear parameter descriptions in the schema (query as search keyword, maxResults as return count with default). The description adds no parameter-specific detail, so the baseline 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 tool performs keyword search of Opentrons Python Protocol API & HTTP API documentation and returns relevant specifications and sample code. It uses a specific verb ('search') and resource (docs), distinguishing it from sibling operational tools like opentrons_validate_protocol or opentrons_control_run.
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 retrieving doc information but does not explicitly state when to use it versus alternatives or any exclusions. There is no mention of when not to use, and no alternative tools are referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentrons_upload_and_runA
プロトコル検証・アップロード・Run生成・実行開始を一括で行います。ハードウェア不足時はブロックします。
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | 保存ファイル名 | |
| protocolContent | Yes | Pythonプロトコルコード |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description adds a specific behavioral note: 'ハードウェア不足時はブロックします' (blocks when hardware is insufficient) and mentions '実行開始' (execution start), disclosing the side effect. However, it does not cover error handling, permission needs, or reversibility, leaving the safety profile partially unexplored.
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?
Two sentences, clearly front-loaded with the action list, followed by a behavior note. Every word is necessary and there is no 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?
For a moderate-complexity multi-step tool with no output schema and no annotations, the description covers the main flow and a key blocking condition but omits details about expected output (e.g., run ID), prerequisites, or failure modes. It is adequate but not fully comprehensive.
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?
Input schema covers both parameters (protocolContent and filename) with 100% description coverage, so the description does not need to add parameter details. It adds no extra semantics beyond what the schema already provides.
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 lists the sequence of actions (protocol validation, upload, run generation, and execution start) using the verb '行います' (performs), clearly distinguishing this as the combined all-in-one tool versus sibling tools like opentrons_validate_protocol.
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 this is the tool for the full workflow ('一括で行います'), but does not explicitly state when to use it instead of opentrons_validate_protocol or opentrons_control_run, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentrons_validate_protocolB
Opentrons Python プロトコルコードの構文・物理ハードウェア要件(接続モジュール/ピペット)を事前チェックします。
| Name | Required | Description | Default |
|---|---|---|---|
| protocolContent | Yes | Pythonプロトコルコード |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It mentions checking syntax and hardware requirements but does not disclose whether the tool connects to a robot, whether it is read-only, what the output/return format is, or how errors are reported. The 'pre-check' wording hints at non-destructive behavior but is not explicit.
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, clear sentence that front-loads the tool's purpose and scope. There is no redundant information or filler; every word contributes to explaining what the tool does.
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?
With no output schema and no annotations, the description should explain return values, error behavior, and any prerequisites. It only states what the tool checks, leaving the agent without information about how to interpret results or whether a robot connection is required. This is incomplete for a validation 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 already provides 100% coverage for the single parameter 'protocolContent' with description 'Pythonプロトコルコード'. The tool description adds no new meaning beyond repeating that the input is Opentrons Python protocol code, so the schema carries the burden and the description neither enhances nor detracts.
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 pre-checks Opentrons Python protocol code for syntax and physical hardware requirements (connected modules/pipettes). The verb 'pre-check' with specific resources distinguishes it from siblings like search_docs, upload_and_run, and get_robot_status.
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 '事前チェック' (pre-check) implies this should be used before uploading or running a protocol, but the description does not explicitly state when to use it versus alternatives like upload_and_run, nor does it mention exclusions. Guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clear primary purpose, and the descriptions make the differences understandable. However, opentrons_upload_and_run includes validation and starting execution, which overlaps with opentrons_validate_protocol and could create ambiguity about when to call both.
All tool names share the opentrons_ prefix and use snake_case, and most follow a verb_noun pattern (search_docs, validate_protocol, get_robot_status, control_run, execute_command). opentrons_upload_and_run breaks the pattern by combining two verbs without a direct object, which is a minor inconsistency.
Six tools is a well-scoped size for an Opentrons automation server. Each tool earns its place: documentation search, validation, upload/run, status, run control, and direct commands cover distinct operational needs without unnecessary redundancy.
The set covers the core workflow from documentation and validation through upload, execution, status monitoring, and run control. Minor gaps exist, such as a lack of separate upload-only or run-only actions and no way to retrieve run results or history, but agents can still accomplish the main tasks.
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
QuLab MCP remote server (Streamable HTTP) for computational science and lab tools.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server for AI access to Swagger by SmartBear.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceA Python-based MCP server that integrates OpenAPI-described REST APIs into MCP workflows, enabling dynamic exposure of API endpoints as MCP tools.153MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol (MCP) server based on OpenRPC, providing JSON-RPC function invocation and method discovery services.21Apache 2.0
- FlicenseNot gradedqualityBmaintenanceAn MCP server that enables AI assistants to control and monitor Klipper 3D printers via the Moonraker API. It supports comprehensive printer management, including G-code execution, toolchanger operations, and real-time status monitoring.19
- AlicenseAqualityBmaintenanceA Model Context Protocol server for PyLabRobot that exposes liquid handler, plate reader, thermocycler, and heater-shaker as MCP tools. It ships in simulation mode by default, allowing end-to-end testing without hardware.10MIT
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/koji/otie-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server