mcpField
O
Opentrons OT-2 / Flex

Opentrons OT-2 / Flex

本地服务
github.com科研与教育235 周前更新

关于 Opentrons OT-2 / Flex

面向 AI Agent 的 MCP 服务,通过 Opentrons HTTP API 管理 Opentrons OT-2 和 Flex 移液机器人的完整实验方案。它结合方案分析、甲板布局确认和安全联锁,限制运行启动。

主要功能

  1. 01上传并分析实验方案
  2. 02查看甲板布局和运行就绪状态
  3. 03启动、暂停、恢复和停止运行
  4. 04读取机器人、移液器和模块状态
  5. 05执行运行联锁和安全限值
  6. 06记录 HTTP 请求与响应

适用场景

  1. 01检查方案分析结果和所需甲板配置
  2. 02监控移液运行及其进度
  3. 03暂停运行以补充储液槽后再恢复
  4. 04实验方案结束后关闭模块

MCP 相关

向 MCP 客户端提供机器人状态、方案、仪器、模块和运行管理工具。它通过 Opentrons HTTP API 与机器人通信,并可配置为只读模式。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"k-dense-ai-labmcp-opentrons": {
"command": "uvx",
"args": [
"labmcp-opentrons"
],
"env": {
"LABMCP_ADDRESS": "<LABMCP_ADDRESS>",
"LABMCP_SIMULATE": "<LABMCP_SIMULATE>",
"LABMCP_READ_ONLY": "<LABMCP_READ_ONLY>",
"LABMCP_LIMITS": "<LABMCP_LIMITS>"
}
}
}
}
启动命令uvx labmcp-opentrons
需要配置的环境变量
LABMCP_ADDRESSInstrument address, e.g. serial:///dev/ttyUSB0 or tcp://192.168.1.50:5025
LABMCP_SIMULATESet to 1 to use the built-in simulator (no hardware)
LABMCP_READ_ONLYSet to 1 to disable all state-changing tools
LABMCP_LIMITSSafety limit overrides, e.g. max_temperature_c=80

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypilabmcp-opentrons0.1.3

工具

18

收录的工具列表 · 更新于 2 周前

此工具无需参数。

详细介绍

Opentrons OT-2 / Flex — MCP 服务

让 AI Agent 通过机器人有文档说明的 HTTP API,在 Opentrons Flex 和 OT-2 液体处理机器人上上传和检查协议、与你一起查看工作台布局、启动、暂停、停止和恢复运行、跟踪运行进度,以及读取移液器和模块信息。

软件包labmcp-opentrons
仪器Opentrons Flex、Opentrons OT-2(机器人软件 5.1 或更高版本)
接口以太网、Wi-Fi、USB(通过 USB 建立网络连接)
协议Opentrons 机器人服务器 HTTP API,端口 31950,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 协议会被编译并扫描,以识别实验室器具、移液器、模块和步骤;运行会经历真实的状态生命周期,模块温度也会根据协议变化。

连接机器人

  1. 查找 IP 地址: Opentrons App > Devices > 你的机器人 > Robot settings > Networking(或在 Flex 触摸屏上:Settings > Network)。机器人必须与运行 MCP 服务的计算机连接到同一网络。通过 USB 连接的机器人也会获得 IP 地址(OT-2:169.254.x.x)。
  2. 测试连接:
    uvx labmcp-opentrons --address 192.168.1.20 --check
    uvx labmcp-opentrons --address http://ot2-lab.local:31950 --check
    
    --check 会显示机器人的名称、型号、软件和固件版本。
  3. **访问控制(仅限 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,即可让 Agent 监控机器人(状态、运行、协议、模块),同时阻止上传、运行、回原点和灯光控制。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_c110 °C协议可请求的最高温度(温控模块、热循环仪模块或盖子、加热振荡器);超过此值的协议会被 start_run 拒绝
max_shake_speed_rpm3000 rpm协议可请求的最高加热振荡器转速

默认值为硬件上限。对于热敏塑料或样品,请调低这些限制:--limit max_module_temperature_c=70 --limit max_shake_speed_rpm=1500。检查会读取机器人对协议的分析结果中的设定值(模块命令中的每个 celsius 和 rpm 值,包括热循环仪程序)。

start_run 内置的其他安全联锁:

  • 机器人必须已完成分析,且结果为 ok(待处理、失败或需要参数的分析都会被拒绝,并显示错误);
  • 必须设置 deck_confirmed=true,Agent 只能在你确认机架布局与 get_protocol 返回的布局一致后才传入此值;
  • 不得有其他运行正在进行,Flex 舱门必须关闭,且急停按钮必须已释放。

提示词示例

  • “将 ~/protocols/serial_dilution.py 上传到 Flex,并告诉我分析是否通过。各个位置需要放什么实验器材?”
  • “机架已按你列出的方式设置。开始运行序列稀释程序,并在运行到一半时告诉我。”
  • “机器人现在在做什么?还剩多少步?”
  • “暂停运行——我需要补充储液槽。”……“好了,继续运行。”
  • “运行提示缺少吸头。我已在 C2 槽位的吸头架中补满吸头;继续运行。”
  • “PCR 已完成。关闭热循环仪和加热振荡器,然后关灯。”

备注

  • 运行完整协议,而非单个动作。 此服务运行的是机器人已分析过的完整协议。它特意不提供单独移液或龙门架移动的工具(POST /runs/{id}/commands),因为缺少完整的机架状态可能导致移液器撞上实验器材。以后可能会在加入更严格的检查后提供这些功能。
  • 不会应用实验器材位置检查偏移量。 通过 HTTP API 创建的运行不会包含 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-Version: 3 标头固定,如 Opentrons 的集成示例所示。如有需要,可使用 --option api_version=4 覆盖。

硬件验证

型号机器人软件接口验证者日期
尚无: 成为首位验证者

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。