一个全面的模型上下文协议(MCP)服务器,用于与Modbus TCP设备进行交互。此服务器使大型语言模型能够连接到、读取和写入工业Modbus TCP设备。
pip install mcp pymodbus --break-system-packages
或者如果你正在使用虚拟环境:
python -m venv venv
source venv/bin/activate # 在Windows上:venv\Scripts\activate
pip install mcp pymodbus
python modbus_tcp_mcp.py
该服务器作为基于标准I/O的MCP服务器运行,并等待来自MCP客户端的请求。
在你的Claude Desktop配置文件中添加以下内容:
macOS:~/Library/Application Support/Claude/claude_desktop_config.json
Windows:%APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"modbus_tcp": {
"command": "python",
"args": ["/path/to/modbus_tcp_mcp.py"]
}
}
}
连接到Modbus TCP设备。
参数:
host (str):IP地址或主机名(例如:"192.168.1.100")port (int, 可选):TCP端口(默认:502)timeout (float, 可选):连接超时时间(秒,默认:10.0)unit_id (int, 可选):Modbus从机/单元ID(默认:1)示例:
连接到位于192.168.1.50的PLC
从Modbus寄存器或线圈读取值。
参数:
host (str):设备IP地址register_type (str):"holding"、"input"、"coil"或"discrete"start_address (int):起始寄存器地址(以0为基准)count (int):要读取的寄存器数量data_type (str, 可选):"uint16"、"int16"、"uint32"、"int32"、"float32"、"bool"(默认:"uint16")port (int, 可选):TCP端口(默认:502)unit_id (int, 可选):从机ID(默认:1)response_format (str, 可选):"markdown"或"json"(默认:"markdown")示例:
从位于192.168.1.50的PLC读取保持寄存器100-105作为float32
向单个Modbus寄存器或线圈写入值。
参数:
host (str):设备IP地址address (int):要写入的寄存器地址value (int/float/bool):要写入的值register_type (str, 可选):"holding"或"coil"(默认:"holding")data_type (str, 可选):编码的数据类型(默认:"uint16")port (int, 可选):TCP端口(默认:502)unit_id (int, 可选):从机ID(默认:1)response_format (str, 可选):"markdown"或"json"(默认:"markdown")示例:
将1500写入位于192.168.1.50的PLC的保持寄存器100
向连续的多个寄存器或线圈写入值。
参数:
host (str):设备IP地址start_address (int):起始寄存器地址values (list):要写入的值列表register_type (str, 可选):"holding"或"coil"(默认:"holding")data_type (str, 可选):编码的数据类型(默认:"uint16")port (int, 可选):TCP端口(默认:502)unit_id (int, 可选):从机ID(默认:1)response_format (str, 可选):输出格式(默认:"markdown")示例:
将值[100, 200, 300]写入位于192.168.1.50的设备的保持寄存器40-42
查询设备标识信息。
参数:
host (str):设备IP地址port (int, 可选):TCP端口(默认:502)unit_id (int, 可选):从机ID(默认:1)response_format (str, 可选):输出格式(默认:"markdown")示例:
从位于192.168.1.50的PLC获取设备信息
对设备执行诊断测试。
参数:
host (str):设备IP地址port (int, 可选):TCP端口(默认:502)unit_id (int, 可选):从机ID(默认:1)test_read (bool, 可选):执行测试读取(默认:True)response_format (str, 可选):输出格式(默认:"markdown")示例:
对位于192.168.1.50的Modbus设备执行诊断
关闭与设备的连接。
参数:
host (str):设备IP地址port (int, 可选):TCP端口(默认:502)示例:
从位于192.168.1.50的PLC断开连接
| 类型 | 大小 | 范围 | 描述 |
|---|---|---|---|
uint16 | 1寄存器 | 0 到 65535 | 无符号16位整数 |
int16 | 1寄存器 | -32768 到 32767 | 带符号16位整数 |
uint32 | 2寄存器 | 0 到 4294967295 | 无符号32位整数 |
int32 | 2寄存器 | -2147483648 到 2147483647 | 带符号32位整数 |
float32 | 2寄存器 | ±3.4e±38 | IEEE 754浮点数 |
bool | 1寄存器/线圈 | True/False | 布尔值 |
此服务器使用以0为基准的地址(协议地址):
如果你的设备文档使用了以1为基准的地址或偏移地址(例如,保持寄存器的40001-49999),减去偏移量:
从位于192.168.1.50的设备读取输入寄存器100作为float32
将True写入位于192.168.1.50的设备的线圈5
从位于192.168.1.100的PLC读取保持寄存器0-9
将值[1000, 2000, 3000, 4000, 5000]写入位于192.168.1.50的设备的保持寄存器200-204
对位于192.168.1.50的设备执行诊断,检查连通性和响应时间
服务器提供清晰且可操作的错误消息:
modbus_connectmodbus_disconnect释放资源modbus_diagnostics工具进行故障排除此MCP服务器按原样提供,用于工业Modbus TCP设备。
对于问题或疑问:
modbus_diagnostics工具进行故障排除⚠️ 注意:此工具可以写入工业设备。始终: