kukapay
服务介绍
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 用于依赖管理和虚拟环境管理。
安装
-
安装
uv:
bash
curl -LsSf https://astral.sh/uv/install.sh | sh -
克隆仓库:
bash
git clone https://github.com/kukapay/modbus-mcp.git
cd modbus-mcp -
安装依赖:
bash
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 桌面版安装
配置文件:
json
{
"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 Inspector 需要结构化的 JSON,但下面的例子展示了会话输入如何转换。
-
读取保持寄存器:
-
提示:
请读取 Modbus 保持寄存器 0 的值。
-
MCP Inspector JSON:
json
{
"tool": "read_register",
"parameters": {"address": 0, "slave_id": 1}
}- 预期输出:Value: <register_value>
-
-
写入保持寄存器:
-
提示:
将Modbus保持寄存器10设置为值100。
-
MCP Inspector JSON:
json
{
"tool": "write_register",
"parameters": {"address": 10, "value": 100, "slave_id": 1}
} -
预期输出:
成功将100写入寄存器10
-
-
读取线圈状态:
-
提示:
检查从地址0开始的前5个Modbus线圈的状态。
-
MCP Inspector JSON:
json
{
"tool": "read_coils",
"parameters": {"address": 0, "count": 5, "slave_id": 1}
} -
预期输出:
线圈0到4: [False, False, False, False, False]
-
-
写入线圈:
-
提示:
打开Modbus线圈5。
-
MCP Inspector JSON:
json
{
"tool": "write_coil",
"parameters": {"address": 5, "value": true, "slave_id": 1}
} -
预期输出:
成功将True写入线圈5
-
-
读取输入寄存器:
-
提示:
从地址2开始读取3个Modbus输入寄存器的值。
-
MCP Inspector JSON:
json
{
"tool": "read_input_registers",
"parameters": {"address": 2, "count": 3, "slave_id": 1}
} -
预期输出:
输入寄存器2到4: [<value1>, <value2>, <value3>]
-
-
读取多个保持寄存器:
-
提示:
获取Modbus保持寄存器0至2的值。
-
MCP Inspector JSON:
json
{
"tool": "read_multiple_holding_registers",
"parameters": {"address": 0, "count": 3, "slave_id": 1}
} -
预期输出:
保持寄存器0至2: [<value1>, <value2>, <value3>]
-
许可证
本项目采用MIT许可证。详情请参见LICENSE。