线性导轨控制服务器

通过自然语言控制线性导轨的MCP服务器,支持多种控制器和配置选项。

  • by global-mysterysnailrevolution
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 global-mysterysnailrevolution/simple-rail-mcp

使用说明

简单铁路MCP服务器

在Cursor中,通过Claude AI使用自然语言控制线性导轨的MCP(模型上下文协议)服务器。

这是做什么用的

用自然语言控制您的直线导轨:

You: "Move the rail to position 500mm"
Claude: ✅ Rail moved to 500mm

You: "Move rail to opentrons station"
Claude: ✅ Rail at opentrons station

支持的控制器

  • ✅ UW PICO 5.09 - 支持G代码转发的HTTP API(预配置)
  • 任何接受命令的HTTP API
  • ✅ 串口控制器
  • ✅ Python脚本包装器
  • ✅ G代码发送器

快速入门

1. 安装

npm install

2. 配置

编辑 index.js 第32-37行:

// For UW PICO controller:
this.RAIL_IP = "192.168.1.101";      // Your controller IP
this.RAIL_PORT = "80";
this.RAIL_ENDPOINT = "/command";
this.COMMAND_TEMPLATE = "G0 X{position} F1000";

设定你的位置(第41-47行):

this.POSITIONS = {
  "pickup_station": 0,
  "opentrons": 500,
  "plate_reader": 750,
  "storage": 1000,
  "home": 0
};

3. 添加到光标

编辑 .cursor/mcp.json:

{
  "mcpServers": {
    "rail": {
      "command": "node",
      "args": ["/absolute/path/to/simple-rail-mcp/index.js"],
      "env": {
        "RAIL_IP": "192.168.1.101"
      }
    }
  }
}

4. 重启光标(或:重启光标工具)

5. 使用!

"Move the rail to opentrons"
"Move rail to 500mm"
"Move to home position"

配置选项

对于UW PICO 5.09控制器

您的控制器具有一个HTTP API,可通过UART转发G代码。

使用curl进行测试:

curl -X POST http://192.168.1.101/command \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "cmd=G0 X500 F1000"

配置:

this.RAIL_IP = "192.168.1.101";
this.RAIL_PORT = "80";
this.RAIL_ENDPOINT = "/command";
this.COMMAND_TEMPLATE = "G0 X{position} F1000";

对于其他HTTP API

如果您的控制器使用了不同的端点/格式:

this.RAIL_IP = "192.168.1.100";
this.RAIL_ENDPOINT = "/api/move";
this.COMMAND_TEMPLATE = '{"position": {position}}';  // JSON format

位置配置

编辑 POSITIONS 与您的物理设置相匹配的对象:

this.POSITIONS = {
  "station_a": 0,        // First position (mm)
  "station_b": 250,      // Second position (mm)
  "station_c": 500,      // Third position (mm)
  "home": 0              // Home position
};

时序配置

调整移动后的等待时间(第54行):

this.MOVE_WAIT_TIME = 5;  // Wait 5 seconds after sending command

如果你的轨道运行速度更快或更慢,请相应调整。

环境变量

你可以使用环境变量来覆盖配置:

{
  "mcpServers": {
    "rail": {
      "command": "node",
      "args": ["/path/to/index.js"],
      "env": {
        "RAIL_IP": "192.168.1.101",
        "RAIL_PORT": "80"
      }
    }
  }
}

API 参考文档

工具: move_rail_and_wait

将线性导轨移动到指定位置并等待完成。

参数:

  • position (字符串) - 来自命名位置 POSITIONS 配置
    • 示例: "opentrons", "pickup_station", "home"
  • position_number (数字) - 以毫米为单位的数值位置
    • 示例: 500, 750.5
  • wait_seconds (数字) - 覆盖默认等待时间
    • 默认: MOVE_WAIT_TIME 来自配置

示例:

// Via Claude in natural language:
"Move rail to opentrons"
"Move rail to 500mm"
"Move to home position"

// Direct tool call (from code):
move_rail_and_wait({ position: "opentrons" })
move_rail_and_wait({ position_number: 500 })
move_rail_and_wait({ position: "storage", wait_seconds: 10 })

G代码参考手册

线性导轨的常用G代码指令:

命令 描述
G0 X500 F1000 以1000毫米/分钟的速度(快速)移动到500毫米处
G1 X500 F500 以500毫米/分钟的速度移动到500毫米处(受控)
G28 X 主页 X 轴
G90 设置绝对定位模式
G91 设置相对定位模式
G92 X0 将当前位置设置为零
M114 查询当前位置
M400 等待所有动作完成

故障排除

无法连接到控制器

  1. 检查IP:

    ping 192.168.1.101
    
  2. 测试终端点:

    curl http://192.168.1.101/command
    
  3. 检查防火墙 - 允许Node.js/Cursor通过防火墙

轨道不移动

  1. 手动测试G代码:

    curl -X POST http://192.168.1.101/command -d "cmd=G28 X"  # Home first
    curl -X POST http://192.168.1.101/command -d "cmd=G0 X500 F1000"
    
  2. 检查定位模式:

    curl -X POST http://192.168.1.101/command -d "cmd=G90"  # Absolute mode
    
  3. 验证位置是否在范围内 - 检查轨道的物理限制

位置错误

  1. 检查单位 - 确保已设置G21(毫米):

    curl -X POST http://192.168.1.101/command -d "cmd=G21"
    
  2. 校准位置 - 测量实际距离并更新 POSITIONS

  3. 首先将轨道固定在家(或位置)上:

    curl -X POST http://192.168.1.101/command -d "cmd=G28 X"
    

在Cursor中无法加载MCP服务器

  1. 手动测试:

    node index.js
    
  2. 检查节点版本:

    node --version  # Should be ≥18.0.0
    
  3. 检查路径中的(内容/项目) .cursor/mcp.json - 使用绝对路径

  4. 完全重启光标(或:重新初始化光标)

高级:自定义控制器支持

要添加对其他控制器类型的支持,请修改 sendHttpCommand 方法:

async sendHttpCommand(position) {
  const gcode = this.COMMAND_TEMPLATE.replace('{position}', position);
  const url = `http://${this.RAIL_IP}:${this.RAIL_PORT}${this.RAIL_ENDPOINT}`;
  
  // Customize request format here
  const response = await fetch(url, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'  // Change as needed
    },
    body: JSON.stringify({ command: gcode })  // Change format
  });
  
  // Customize response parsing here
  const data = await response.json();
  return data;
}

集成示例

与其他MCP服务器配合使用,实现全面自动化:

// Example: Pick up plate and move to Opentrons
"Move rail to pickup station"  // This MCP server
"Run VLA pickup script"        // VLA MCP server
"Move rail to opentrons"       // This MCP server
"Upload purple_mixing.py"      // Opentrons MCP server
"Start the protocol"           // Opentrons MCP server

Claude AI 自动协调所有系统!

要求

  • Node.js 大于等于18.0.0
  • Cursor 集成开发环境(IDE) 带有MCP支持
  • 直线导轨 通过HTTP/串行/脚本控制

许可证

麻省理工学院(MIT)

做出贡献

欢迎提出问题和拉取请求!

致谢/制作人员名单

  • 模型上下文协议 - 人类中心主义(或“以人为本”)
  • Claude AI - 自然语言编曲(或“自然语言协同”)
  • Cursor 集成开发环境(IDE) - 开发环境

有问题吗? 打开一个问题或查看 故障排除指南。