Opentrons OT-2 / Flex について
AI エージェントが Opentrons OT-2 と Flex の液体ハンドリングロボットで完全なプロトコルを管理する MCP サーバーです。プロトコル解析、デッキ確認、安全インターロックにより実行を制御します。
主な機能
- 01プロトコルのアップロードと解析
- 02デッキ配置と実行準備状況の確認
- 03実行の開始、一時停止、再開、停止
- 04ロボット、ピペット、モジュールの状態取得
- 05実行インターロックと安全制限
- 06HTTP リクエストと応答の記録
活用シーン
- 01プロトコル解析と必要なデッキ構成の確認
- 02液体ハンドリング実行と進行状況の監視
- 03リザーバー補充のため実行を一時停止して再開
- 04プロトコル終了後のモジュール停止
MCP 対応
ロボットの状態、プロトコル、機器、モジュール、実行管理のツールを MCP クライアントに公開します。Opentrons HTTP API でロボットと通信し、読み取り専用にも設定できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx labmcp-opentronsLABMCP_ADDRESSInstrument address, e.g. serial:///dev/ttyUSB0 or tcp://192.168.1.50:5025LABMCP_SIMULATESet to 1 to use the built-in simulator (no hardware)LABMCP_READ_ONLYSet to 1 to disable all state-changing toolsLABMCP_LIMITSSafety limit overrides, e.g. max_temperature_c=80ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
18掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
Opentrons OT-2 / Flex — MCP サーバー
AI エージェントが、プロトコルのアップロードと確認、デッキレイアウトのレビュー、実行の開始・一時停止・停止・再開、進行状況の追跡、Opentrons Flex および OT-2 液体処理ロボットのピペットやモジュールの読み取りを行えるようにします。ロボットの公式 HTTP API を使用します。
| パッケージ | labmcp-opentrons |
| 機器 | Opentrons Flex、Opentrons OT-2(ロボットソフトウェア 5.1 以降) |
| インターフェース | イーサネット、Wi-Fi、USB(USB 経由のネットワーク接続) |
| プロトコル | ポート 31950 の Opentrons robot-server HTTP API、Opentrons-Version: 3(HTTP API ガイド、robot-server のソース。各ロボットは仕様を http://<robot-ip>:31950/openapi.json および /redoc でも提供します) |
| ステータス | 🧪 シミュレーション済み:メモリ内の robot-server シミュレーターでテスト済みですが、ハードウェアでは未検証です。ハードウェアテストを報告 |
汎用 HTTP ラッパーではなく、このサーバーを使う理由:ロボットによるプロトコル解析の合格、ユーザーによるデッキの確認、ドアが閉じていること、非常停止が解除されていること、モジュールの設定値が指定した制限内であることを確認しない限り、実行を開始しません。個別のピペッティング操作コマンドは公開せず、読み取り専用モードでも一時停止と停止を使用でき、すべての HTTP リクエストをコマンドログに記録します。
ハードウェアなしで試す
uvx labmcp-opentrons --simulate --check
uvx labmcp-opentrons --simulate --option sim_model=ot2 --check # simulate an OT-2
シミュレーターはプロトコルをメモリ内で実行します。Python プロトコルをコンパイルし、ラボウェア、ピペット、モジュール、ステップをスキャンして、実行を実際のステータスライフサイクルに沿って進め、モジュールの温度をプロトコルに応じて変化させます。
ロボットに接続する
- IP アドレスを確認する: Opentrons App > デバイス > 使用するロボット > ロボット設定 > ネットワーク(または Flex のタッチスクリーンで、設定 > ネットワーク)。ロボットは MCP サーバーを実行しているコンピューターと同じネットワークに接続されている必要があります。USB 接続のロボットにも IP アドレスが割り当てられます(OT-2:
169.254.x.x)。 - 接続をテストする:
uvx labmcp-opentrons --address 192.168.1.20 --check uvx labmcp-opentrons --address http://ot2-lab.local:31950 --check--checkを指定すると、ロボット名、モデル、ソフトウェアおよびファームウェアのバージョンが表示されます。 - アクセス制御(Flex のみ、通常は不要): Flex でアクセス制御が有効になっており、リクエストが HTTP 401 で失敗する場合は、
--option access_token=<token>でトークンを渡します。
MCP クライアントに追加する
Claude Code
claude mcp add opentrons -- uvx labmcp-opentrons --address 192.168.1.20
Claude Desktop / Cursor / Windsurf(claude_desktop_config.json、.cursor/mcp.json、…)
{
"mcpServers": {
"opentrons": {
"command": "uvx",
"args": ["labmcp-opentrons", "--address", "192.168.1.20"]
}
}
}
エージェントによるロボットの監視(ステータス、実行、プロトコル、モジュール)を許可しつつ、アップロード、実行、ホーミング、ライトを禁止するには、--read-only を追加します。pause_run、stop_run、deactivate_modules は引き続き使用できます。その他のクライアントでは、uvx labmcp config opentrons --address 192.168.1.20 --client vscode を実行して設定例を生成してください(cursor、codex、claude-code も指定できます)。
ツール
| ツール | 種類 | 説明 |
|---|---|---|
deactivate_modules | 🛑 safety | 接続されているモジュールをオフにします:加熱/冷却(Temperature Module、Thermocycler ブロックとリッド、Heater-Shaker のヒーター)を停止し、振とうを停止して、Magnetic Module の磁石を下げます。実行中のランがない場合にのみ可能です。先にランを停止してください。 |
get_command_log | 👁 read | 装置に送信された最新の生コマンドと、装置から受信した返信を返します(新しいものが最後)。デバッグや実施内容の記録に役立ちます。 |
get_connection_info | 👁 read | 接続されている装置(識別情報、アドレス、シミュレーションか実機か)、サーバーが読み取り専用かどうか、有効な安全制限を報告します。最初に呼び出してください。 |
get_protocol | 👁 read | 保存されたプロトコルの解析結果を表示します。実行可能かどうか、解析エラー、想定されるデッキレイアウト(スロットごとのラボウェアとモジュール、マウントごとのピペット、液体)、ステップ数、要求される最高モジュール温度/振とう速度を確認できます。start_run の前にユーザーと一緒に確認してください。 |
get_robot_status | 👁 read | ロボットの名前、モデル(Flex/OT-2)、ソフトウェアとファームウェアのバージョン、ライト、ドアと E-stop の状態、現在のランを報告します。ロボットの準備ができているか確認するため、最初に呼び出してください。 |
get_run_status | 👁 read | ランのステータス、現在のステップ、進捗状況、最近のステップとエラーに加え、次に行うべき操作(エラー復旧待ちのランの場合など)を報告します。 |
home_robot | ⚠️ hazard | ロボットのすべての軸をホーム位置に戻します(ガントリーとピペットがホーム位置に移動します)。ランの実行中は拒否されます。ロボットの移動経路に何もないことと、ドアが閉まっていることを確認してください。 |
list_instruments | 👁 read | 接続されているピペット(および Flex グリッパー)を一覧表示します。マウント、名前、チャンネル数、容量範囲、チップが検出されているか、キャリブレーションデータがあるかを確認できます。 |
list_modules | 👁 read | 接続されているモジュール(Temperature Module、Heater-Shaker、Thermocycler、Magnetic Module、Absorbance Plate Reader など)を、現在の温度、目標値、振とう速度、ステータスとともに一覧表示します。 |
list_protocols | 👁 read | ロボットに保存されているプロトコルを、解析ステータスと結果とともに一覧表示します(新しいものが最後)。 |
list_runs | 👁 read | 最近のプロトコル実行を、新しいものから順にステータスとともに一覧表示します。 |
pause_run | 🛑 safety | 実行中のプロトコルを一時停止します。ロボットは現在のステップを完了してから停止状態になります。resume_run で再開できます。 |
reconnect | 🛑 safety | 装置への接続をいったん閉じてから再度開きます(電源を入れ直した後や、ケーブルを挿し直した後など)。 |
resume_run | ⚠️ hazard | 一時停止中のランを再開する(ロボットが再び動き始める)か、エラー復旧状態から抜けます。ドアが開いている場合は拒否されます。復旧待ちのランでは、error_recovery を指定する必要があります。 |
set_lights | 🎛 control | ロボットのデッキ(レール)ライトをオンまたはオフにします。 |
start_run | ⚠️ hazard | 解析済みプロトコルのランを作成して開始します。ロボットが動き始め、ピペッティングを行います。プロトコルの解析がエラーなしで完了していること、モジュールの設定値が安全制限内であること、他のランが実行中でないこと、ドアが閉まっていること、E-stop が解除されていることを満たさない場合は拒否されます。 |
stop_run | 🛑 safety | ランを直ちに停止(キャンセル)します。停止したランは再開できません。ロボットはホーム位置に戻り、装着中のチップをゴミ箱に落とします。異常が見られた場合は必ず使用してください。 |
upload_protocol | 🎛 control | プロトコルファイル(および任意のカスタムラボウェア)をロボットにアップロードします。ロボットが解析(シミュレーション)を行い、このツールはエラー、デッキレイアウト、実行可能かどうかを返します。アップロードによってロボットが動くことはありません。同一ファイルをアップロードした場合は、既存のプロトコルが返されます。 |
get_connection_info、get_command_log、reconnect は、すべての LabMCP サーバーに組み込まれています。get_command_log には、ロボットに送信されたすべての HTTP リクエストとその返信が表示されます。
安全制限
| 制限 | デフォルト | 意味 |
|---|---|---|
max_module_temperature_c | 110 °C | プロトコルで要求できる最高温度(Temperature Module、Thermocycler のブロックまたはリッド、Heater-Shaker)。これを超えるプロトコルは start_run によって拒否されます |
max_shake_speed_rpm | 3000 rpm | プロトコルで要求できる Heater-Shaker の最高速度 |
デフォルト値はハードウェアの最大値です。熱に弱いプラスチックやサンプルを扱う場合は、制限を厳しくしてください:--limit max_module_temperature_c=70 --limit max_shake_speed_rpm=1500。このチェックでは、ロボットによるプロトコルの解析結果から設定値を読み取ります(サーモサイクラープロファイルを含む、モジュールコマンド内のすべての celsius および rpm 値)。
start_run には、次の安全インターロックも組み込まれています。
- ロボットによる解析が完了し、結果が
okである必要があります(保留中、失敗、またはパラメーターが必要な解析は拒否され、エラーが表示されます)。 deck_confirmed=trueが必要です。エージェントは、デッキがget_protocolのレイアウトと一致することをあなたが確認した後にのみ、この値を渡してください。- 実行中のほかのランがなく、Flex のドアが閉じていて、非常停止が解除されている必要があります。
プロンプトの例
- 「
~/protocols/serial_dilution.pyを Flex にアップロードして、解析に合格したか教えてください。どのラボウェアをどこに置けばよいですか?」 - 「デッキは指定どおりにセットアップしました。連続希釈のランを開始して、半分まで進んだら教えてください。」
- 「今、ロボットは何をしていますか? 残りのステップ数はいくつですか?」
- 「ランを一時停止してください。リザーバーを補充する必要があります。」…「わかりました。再開してください。」
- 「ランでチップが足りないと表示されています。スロット C2 のチップラックを補充しました。ランを続けてください。」
- 「PCR が完了しました。サーモサイクラーと Heater-Shaker をオフにしてから、ライトを消してください。」
注意事項
- 個別の動作ではなく、プロトコルを実行します。 このサーバーは、ロボットが解析した完全なプロトコルを実行します。デッキ全体の状態がわからないとピペットがラボウェアに衝突するおそれがあるため、個別のピペッティングやガントリー移動のツール(
POST /runs/{id}/commands)は意図的に用意していません。今後、より厳格なチェックを設けたうえで対応する可能性があります。 - Labware Position Check のオフセットは適用されません。 HTTP API で作成したランには、Labware Position Check に基づいて Opentrons App が適用するオフセットは含まれません。セットアップでオフセットが必要な場合は、App からランを開始するか、プロトコルでオフセットを設定してください(
labware.set_offset(...))。 - 実行時パラメーターにはデフォルト値が使用されます。このサーバーでは指定できない値(例:CSV ファイルのパラメーター)が必要なプロトコルは、準備未完了として報告されます。
- 停止すると、ランは終了します。ロボットは原点復帰して、チップを廃棄場所に捨てます。一時停止の場合は、現在のステップが完了するまで待機します。
- エラーからの復旧(主に Flex の最近のロボットソフトウェアが対象):ステップが失敗すると(例:チップが検出されない)、ランは
awaiting-recoveryの状態で待機します。resume_run(error_recovery="continue")は、ロボットの実際の状態から続行し、失敗したステップをスキップします。"assume_false_positive"は、失敗を誤検知として扱います。どちらも、ロボットを確認した人がいる場合にのみ使用してください。 - プロトコルでオフにしない限り、プロトコル終了後もモジュールはオンのままです。
deactivate_modulesは、ロボットのステートレスな無効化コマンド(POST /commands)を送信します。このコマンドは、ランの実行中はロボットに受け付けられません。 list_instrumentsはGET /instrumentsを使用します。ロボットは Flex でこの機能を完全にサポートしていますが、OT-2 では、より詳細な情報(キャリブレーションデータなし)を含まないピペットが返されます。- HTTP API のバージョンは、Opentrons の統合例と同様に、
Opentrons-Version: 3ヘッダーで固定されています。必要に応じて、--option api_version=4で上書きしてください。
ハードウェアの検証
| モデル | ロボットソフトウェア | インターフェース | 検証者 | 日付 |
|---|---|---|---|---|
| まだありません:最初の検証を行ってください |
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。