|
|
2 天之前 | |
|---|---|---|
| data_collector_mcp | 2 天之前 | |
| docs | 2 天之前 | |
| tests | 2 天之前 | |
| tools | 2 天之前 | |
| .dockerignore | 2 天之前 | |
| .gitignore | 2 天之前 | |
| Dockerfile | 2 天之前 | |
| README.md | 2 天之前 | |
| pyproject.toml | 2 天之前 | |
| uv.lock | 2 天之前 |
基于 FastMCP 的采集器 MCP 服务。
首期提供:
project.listmodbus.point_collect_testcollector.modbus_device_createcollector.modbus_point_createcollector.device_list默认 MCP 地址:http://127.0.0.1:8501/mcp
服务使用 PostgreSQL,通过 DATABASE_URL 连接数据库。
项目配置存放在 sys_config 表中,key 为 mcp_data_collector_projects。
如果需要手动建表,推荐使用 PostgreSQL IDENTITY,不要直接引用未创建的 sys_config_id_seq:
CREATE TABLE IF NOT EXISTS public.sys_config (
id integer GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
key character varying(128) NOT NULL UNIQUE,
value json NOT NULL
);
也可以不手动建表,服务启动并访问配置时会通过 SQLAlchemy 自动创建表,但数据库用户需要有建表权限。
[
{
"project_key": "dev-01",
"project_name": "DEV开发环境",
"base_url": "http://127.0.0.1:8000",
"data_collector_base_url": "http://127.0.0.1:32080",
"username": "admin",
"password": "123456",
"enabled": true
}
]
data_collector_base_url 缺失时会直接报错,不回退到 base_url。
python -m data_collector_mcp
可选环境变量:
DATABASE_URL,必填MCP_HOST,默认 0.0.0.0MCP_PORT,默认 8501MCP_PATH,默认 /mcpUPSTREAM_REQUEST_TIMEOUT,默认 60python -m unittest discover -s tests
先启动 MCP 服务:
$env:DATABASE_URL = "postgresql+psycopg2://postgres:password@127.0.0.1:5432/data_collector_mcp"
& ".venv\Scripts\python.exe" -m data_collector_mcp
另开一个 PowerShell 窗口,列出 tools:
& ".venv\Scripts\python.exe" tools\test_mcp_call.py --list-tools
调用 project.list:
& ".venv\Scripts\python.exe" tools\test_mcp_call.py --tool project.list
调用 collector.device_list:
& ".venv\Scripts\python.exe" tools\test_mcp_call.py --tool collector.device_list --args '{"project_key":"dev-01","num_points":false}'
测试脚本会先打印本次 MCP tool 请求 payload,例如:
{
"request": {
"url": "http://127.0.0.1:8501/mcp",
"tool": "collector.device_list",
"arguments": {
"project_key": "dev-01",
"num_points": false
}
}
}
创建 Modbus 设备时必须传:
payload.device_type:协议类型,1=TCP、2=RTU、3=UDP、4=RTU OVER TCP、5=RTU OVER UDPpayload.ip:IP 地址payload.port:端口号payload.name:设备名称payload.slave_id:Modbus 从站 IDpayload.word_order:字顺序,1=Big Endian、2=Small Endianpayload.byte_order:字节顺序,1=Big Endian、2=Small Endianpayload.address_base:地址基准,会转换为汇采接口的 address_offset创建 Modbus 点位时必须传:
payload.name:点位名称payload.address:寄存器地址payload.type:数据类型payload.func_code 或 payload.register_type:寄存器类型常见点表数据类型映射:
| 点表类型 | 汇采 type |
|---|---|
BOOL / BOOLEAN |
bool |
SHORT |
int16 |
WORD |
uint16 |
LONG |
int32 |
DWORD |
uint32 |
FLOAT / REAL |
float32 |
DOUBLE |
float64 |
LONGLONG |
int64 |
QWORD |
uint64 |
register_type 可用:
register_type |
转换为 func_code |
|---|---|
coil |
1 |
discrete_input |
2 |
holding_register |
3 |
input_register |
4 |
调用其他 MCP URL:
& ".venv\Scripts\python.exe" tools\test_mcp_call.py --url "http://127.0.0.1:8501/mcp" --tool project.list