Modbus数据服务器

一个标准化和上下文化Modbus数据的MCP服务器,实现AI代理与工业物联网系统的无缝集成。

  • by kukapay
  • Python
  • 本地部署
  • 25 星标
  • 更新于
在 GitHub 查看 kukapay/mudbus-mcp

使用说明

Modbus MCP服务器

一个标准化和上下文化Modbus数据的MCP服务器,实现了AI代理与工业物联网系统的无缝集成。

特性

  • Modbus工具:
    • 读/写保持寄存器(read_register, write_register).
    • 读/写线圈(read_coils, write_coil).
    • 读取输入寄存器(read_input_registers).
    • 读取多个保持寄存器(read_multiple_holding_registers).
  • 提示:使用可定制的提示分析Modbus寄存器值(analyze_register).
  • 柔性连接:支持TCP、UDP或串行Modbus,通过环境变量配置。

需求

  • python: 3.10
  • 紫外线 用于依赖性和虚拟环境管理。

安装

  1. 安装 uv:

    curl -LsSf https://astral.sh/uv/install.sh | sh
    
  2. 克隆存储库:

    git clone https://github.com/kukapay/modbus-mcp.git
    cd modbus-mcp
    
  3. 再进行:

    uv sync
    

配置

服务器使用通过环境变量指定的参数连接到Modbus设备。将这些变量设置为 .env 文件或shell环境。

环境变量

变量 描述 默认值 必填
MODBUS_TYPE 连接类型: tcp, udp,或 serial tcp 是的
MODBUS_HOST TCP/UDP的主机地址 127.0.0.1 对于TCP/UDP
MODBUS_PORT TCP/UDP端口 502 对于TCP/UDP
MODBUS_DEFAULT_SLAVE_ID 从属ID 1 对于TCP/UDP
MODBUS_SERIAL_PORT 串行端口(例如。, /dev/ttyUSB0, COM1) /dev/ttyUSB0 对于串行
MODBUS_BAUDRATE 串行波特率 9600 对于串行
MODBUS_PARITY 串行奇偶校验: N (无), E (甚至), O (奇数) N 对于串行
MODBUS_STOPBITS 串行停止位 1 对于串行
MODBUS_BYTESIZE 串行字节大小 8 对于串行
MODBUS_TIMEOUT 串行超时(秒) 1 对于串行

示例 .env 文件

对于TCP:

MODBUS_TYPE=tcp
MODBUS_HOST=192.168.1.100
MODBUS_PORT=502
MODBUS_SLAVE_ID=1

对于序列号:

MODBUS_TYPE=serial
MODBUS_SERIAL_PORT=/dev/ttyUSB0
MODBUS_BAUDRATE=9600
MODBUS_PARITY=N
MODBUS_STOPBITS=1
MODBUS_BYTESIZE=8
MODBUS_TIMEOUT=1

用法

为Claude Desktop安装

配置文件:

{
   "mcpServers": {
       "Modbus MCP Server": {
           "command": "uv",
           "args": [ "--directory", "/path/to/modbus-mcp", "run", "modbus-mcp" ],
           "env": { "MODBUS_TYPE": "tcp", "MODBUS_HOST": "127.0.0.1", "MODBUS_PORT": 502 },
       }
   }
}

使用工具

备注:自然语言支持取决于客户端解析提示并将其映射到工具的能力。MCP检查器需要结构化的JSON,但下面的示例显示了会话输入是如何翻译的。

  1. 读取持有登记簿:

    • 提示:
      Please read the value of Modbus holding register 0.
      
    • MCP检查器JSON:
      {
        "tool": "read_register",
        "parameters": {"address": 0, "slave_id": 1}
      }
      
    • 期望输出: Value: <register_value>
  2. 写入持有登记簿:

    • 提示:
      Set Modbus holding register 10 to the value 100.
      
    • MCP检查器JSON:
      {
        "tool": "write_register",
        "parameters": {"address": 10, "value": 100, "slave_id": 1}
      }
      
    • 期望输出: Successfully wrote 100 to register 10
  3. 读线圈:

    • 提示:
      Check the status of the first 5 Modbus coils starting at address 0.
      
    • MCP检查器JSON:
      {
        "tool": "read_coils",
        "parameters": {"address": 0, "count": 5, "slave_id": 1}
      }
      
    • 期望输出: Coils 0 to 4: [False, False, False, False, False]
  4. 写入线圈:

    • 提示:
      Turn on Modbus coil 5.
      
    • MCP检查器JSON:
      {
        "tool": "write_coil",
        "parameters": {"address": 5, "value": true, "slave_id": 1}
      }
      
    • 期望输出: Successfully wrote True to coil 5
  5. 读取输入型寄存器:

    • 提示:
      Read the values of 3 Modbus input registers starting from address 2.
      
    • MCP检查器JSON:
      {
        "tool": "read_input_registers",
        "parameters": {"address": 2, "count": 3, "slave_id": 1}
      }
      
    • 期望输出: Input Registers 2 to 4: [<value1>, <value2>, <value3>]
  6. 读取多个保持寄存器:

    • 提示:
      Get the values of Modbus holding registers 0 through 2.
      
    • MCP检查器JSON:
      {
        "tool": "read_multiple_holding_registers",
        "parameters": {"address": 0, "count": 3, "slave_id": 1}
      }
      
    • 期望输出: Holding Registers 0 to 2: [<value1>, <value2>, <value3>]

许可证

该项目根据MIT许可证获得许可。看 许可证 了解详情。