实验室自动化里最难的部分往往不是模型能不能写代码而是模型敢不敢操作设备。Anthropic 提出的 MHS 标准目标就是把模型与实验室设备之间的交互从临时拼接变成可复用协议设备先声明能力模型再按能力清单下发命令设备执行后回报结果和错误。整个过程要有握手、有格式、有校验而不是让 Claude 直接拼一段裸指令发给仪器。这套思路放到工具链里正好和 Claude Code 的定位吻合。Claude Code 负责把模型接到本地环境MCP 负责把工具以标准方式暴露给模型MHS 则负责定义“设备能力声明、命令边界、结果格式”这层语义。下面用一个可复现的工程案例说明 MHS 的落地方式安装 Claude Code实现一个 MHS 网关接入一台温控摇床模拟器在对话里完成状态读取和参数设置并验证错误输入会被安全拦截。1. 先理解 MHS 解决的是什么问题1.1 模型能调用工具和模型能安全操控设备是两回事大模型调用普通工具核心是“参数格式对得上”。模型根据函数定义生成 JSON工具执行后把结果返回这层能力已经被 function calling 和 MCP 解决得很成熟。但实验室设备完全不是这个逻辑。设备背后是真实的物理过程温度超限可能破坏样品转速波动可能影响实验重复性校准状态不对会让整批数据失真。设备接口也千差万别有的走串口有的走 GPIB有的只提供厂商私有 HTTP 服务。如果让模型直接对着这些接口发指令模型既不理解设备的安全边界也不清楚返回数据代表什么风险会完全失控。MHS 标准要解决的就是这个问题它把“模型想要的”和“设备能给的”抽象成一套可校验的协议。设备先把自己的能力、参数范围、单位和读写权限声明出来模型只在这个声明范围内操作命令由网关统一校验后下发到设备驱动。这样模型不需要理解每一台仪器的私有协议设备也不需要为每一种模型单独适配。1.2 MHS 的核心交互握手、能力清单、命令、结果MHS 的交互模型可以拆成两个阶段。握手阶段客户端模型侧发送 hello服务端设备侧返回 manifest。manifest 就是设备的能力清单包含设备型号、可读参数、可写参数、每个参数的单位、最小值、最大值、步进和读写权限。一次成功的握手意味着模型知道了“这台设备到底能干什么、每项操作的边界在哪”。操作阶段客户端下发 command设备执行后返回 result 或 error。命令必须是 manifest 中出现过的参数和操作超出范围的值在网关层直接拒绝不会到达真实驱动。这套设计最大的价值是边界清晰。模型负责把自然语言翻译成结构化命令网关负责校验驱动负责和设备通信审计日志负责记录每一次操作。任何一层出问题都可以独立定位。1.3 MHS、MCP、Claude Code 的分工很多人会把 MHS 和 MCP 混在一起其实两者解决的问题不在一个层面。层级职责一句话类比Claude Code运行会话、调度工具调用、执行本地代码操作员MCP把本地工具以标准方式暴露给 Claude接线端子板MHS定义设备能力声明、命令格式、结果和错误语义设备说明书 操作规程设备驱动和真实仪器通信执行物理操作设备本身MHS 可以直接作为协议跑在 MCP 之上也可以完全不经过 MCP。本文选择 MCP 作为承载是因为 Claude Code 原生支持 MCP 服务器接入成本最低。你可以把 MCP 理解为“工具传输层”把 MHS 理解为“设备业务层”两层各管各的事。1.4 为什么协议边界必须放在驱动层一种常见错误做法是把校验逻辑写在 prompt 里提醒模型“不要设置超过 60 度的温度”。这在演示环境看起来很聪明实际上完全不可靠。模型可能因为指令转述、单位换算、上下文长度等原因最终生成一个危险参数prompt 也不会覆盖所有边界情况。正确做法是默认不信任模型侧的任何数值。范围内校验、单位换算、步进取整、读回确认全部放在网关和驱动层。模型只是命令的翻译器不是安全判断的最终执行者。这也是 MHS 把能力清单设计成结构化数据而不是自然语言描述的原因机器可读、可校验、可审计。2. 准备环境先把 Claude Code 在本机跑起来2.1 机器要求和前置检查Claude Code 是命令行工具通过 npm 安装底层依赖 Node.js。开始之前先确认本机环境避免后面装到一半才发现基础环境不对。检查项要求验证命令Node.js18 或更高版本node -vnpm9 或更高版本npm -v操作系统Windows / macOS / Linux 均可uname -a或系统信息权限能执行 npm 全局安装部分环境需要管理员权限账号Anthropic 账号或 API Key启动时按提示登录版本号会随时间变化安装前以官方安装说明为准。如果 Node 版本过低先去 Node 官网装新版不要用系统自带的旧版本凑合否则后面启动 Claude Code 会出现各种奇怪的依赖报错。检查命令node -v npm -v两个命令都能正常输出版本号再继续下一步。2.2 安装 Claude Code使用 npm 全局安装npm install -g anthropic-ai/claude-code安装完成后验证版本claude --version如果全局安装路径不在 PATH 中claude命令会找不到。这种情况最常见的两种表现是PowerShell 提示“无法将‘claude’项识别为 cmdlet、函数、脚本文件或可运行程序的名称”或 cmd 提示“‘claude’不是内部或外部命令也不是可运行的程序或批处理文件”。临时方案是用npx直接启动npx anthropic-ai/claude-code长期方案是找到 npm 全局 bin 目录并加入 PATH。在命令行执行npm config get prefixWindows 下通常把输出的目录下的cmd或对应 bin 目录加到系统 PATHmacOS / Linux 下把bin目录加到 shell 配置文件中。改完 PATH 后重开一个终端窗口再验证。2.3 登录与认证直接执行claude启动首次运行会触发浏览器登录流程用 Anthropic 账号授权即可。如果没有订阅账号也可以使用 API KeymacOS / Linuxexport ANTHROPIC_API_KEY这里填你的 API Key claudeWindows PowerShell$env:ANTHROPIC_API_KEY这里填你的 API Key claude注意不要把 API Key 直接写进项目里的.mcp.json或任何会提交到仓库的文件。环境变量是更稳妥的方式也可以通过操作系统的密钥管理服务注入。提醒API Key 属于敏感凭据。不要提交到 Git 仓库不要截图发到聊天群。泄露后第一时间到控制台吊销并重新生成。2.4 用一个小任务验证 Claude Code 可用登录后先不急着接设备用一个简单任务验证模型调用工具的能力是否正常。在 Claude Code 对话中输入请写一个 Node.js 脚本打印当前时间然后运行它。正常情况下Claude 会创建脚本文件调用工具运行并把输出展示在对话中。这一步验证了两件事模型能理解自然语言Claude Code 能执行本地命令。如果这一步失败后面接 MHS 网关就没有意义。2.5 常见坑命令找不到现象常见原因处理方式PowerShell 提示“无法将‘claude’项识别为 cmdlet”npm 全局 bin 不在 PATH用npx anthropic-ai/claude-code临时验证或配置 PATHcmd 提示“‘claude’不是内部或外部命令”同上检查npm config get prefix把 bin 目录加入 PATH安装时提示权限不足npm 全局目录不可写Windows 用管理员终端macOS / Linux 使用 nvm 安装 Nodeclaude --version能执行但版本很旧更新不及时执行npm update -g anthropic-ai/claude-code3. 实现 MHS 网关把设备能力变成模型可调用的工具3.1 目录结构下面示例代码用于说明