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
- 紫外线 用于依赖性和虚拟环境管理。
安装
- 安装
uv:
curl -LsSf https://astral.sh/uv/install.sh | sh- 克隆存储库:
git clone https://github.com/kukapay/modbus-mcp.git
cd modbus-mcp- 再进行:
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,但下面的示例显示了会话输入是如何翻译的。
- 读取持有登记簿:
- 提示:
Please read the value of Modbus holding register 0.- MCP检查器JSON:
{
"tool": "read_register",
"parameters": {"address": 0, "slave_id": 1}
}- 期望输出: Value:
- 写入持有登记簿:
- 提示:
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
- 读线圈:
- 提示:
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]
- 写入线圈:
- 提示:
Turn on Modbus coil 5.- MCP检查器JSON:
{
"tool": "write_coil",
"parameters": {"address": 5, "value": true, "slave_id": 1}
}- 期望输出: Successfully wrote True to coil 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: [, , ]
- 读取多个保持寄存器:
- 提示:
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: [, , ]
许可证
该项目根据MIT许可证获得许可。看 许可证 了解详情。
