Skip to main content

YMS MCP Server - ONVIF camera control and YMS query tools for Model Context Protocol

Project description

YMS MCP Server

YMS MCP 是一个集成了 ONVIF 摄像头控制和 YMS 后端查询功能的 MCP (Model Context Protocol) 服务器。该项目为 AI 助手提供标准化的工具接口,支持摄像头控制和物流管理系统查询。

功能特性

ONVIF 摄像头控制

  • 设备发现:自动扫描局域网内符合 ONVIF 标准的设备
  • PTZ 控制:云台旋转、镜头变焦等操作
  • 媒体流管理:获取 RTSP 视频流 URL
  • 设备信息:查询设备型号、固件版本等信息
  • 图像抓拍:远程抓拍并上传到 MinIO
  • 焦距控制:调整摄像头焦距

YMS 后端查询

  • Entry Tickets 查询:查询工作空间入场记录,支持多种过滤条件
  • Appointments 查询:查询预约记录,支持分页和过滤

安装

环境要求

  • Python 3.11+
  • pip 或 uv 包管理器

安装依赖

使用 pip:

pip install -r requirements.txt

使用 uv:

uv pip install -e .

配置

1. 创建配置文件

复制示例配置文件:

cp .env.example .env

2. 配置 YMS 后端

编辑 src/config/config.yaml 文件,配置 YMS 后端连接信息:

yms_backend:
  url: https://yms-staging.item.com/api/yms
  login_path: /auth/yms/login-by-password
  headers:
    tenant_id: LT
    yard_id: LT_F3
    timezone: America/Los_Angeles
    token_expire_seconds: 3000

server:
  host: 0.0.0.0
  port: 8020

3. 配置环境变量

.env 文件中设置 YMS 认证信息:

# YMS Backend Configuration
YMS_USERNAME=your_username
YMS_PASSWORD=your_password

# MinIO Configuration (optional)
MINIO_ENDPOINT=your_minio_endpoint
MINIO_ACCESS_KEY=your_access_key
MINIO_SECRET_KEY=your_secret_key

使用

启动服务器

python main.py --host 0.0.0.0 --port 8020

服务器将在 http://0.0.0.0:8020 启动,提供 SSE 传输的 MCP 服务。

使用 MCP CLI

mcp dev main.py

MCP 客户端配置

配置 Claude Desktop

方式一:SSE 传输(推荐用于远程访问)

  1. 首先启动 YMS MCP 服务器:
python main.py --host 0.0.0.0 --port 8020
  1. 编辑 Claude Desktop 配置文件:

Windows: %APPDATA%\Claude\claude_desktop_config.json macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Linux: ~/.config/Claude/claude_desktop_config.json

  1. 添加以下配置:
{
  "mcpServers": {
    "yms-mcp": {
      "url": "http://localhost:8020/sse"
    }
  }
}

方式二:stdio 传输(推荐用于本地开发)

编辑 Claude Desktop 配置文件,添加以下配置:

{
  "mcpServers": {
    "yms-mcp": {
      "command": "python",
      "args": [
        "C:/Users/YourUsername/PycharmProjects/yms-mcp/main_stdio.py"
      ]
    }
  }
}

注意

  • 将路径替换为你的实际项目路径
  • Windows 路径使用正斜杠 / 或双反斜杠 \\
  • 确保 Python 在系统 PATH 中,或使用完整的 Python 路径

配置其他 MCP 客户端

对于其他支持 MCP 的客户端,可以使用以下连接信息:

  • SSE 端点: http://localhost:8020/sse
  • 消息端点: http://localhost:8020/messages/
  • 传输协议: Server-Sent Events (SSE)

验证配置

  1. 重启 Claude Desktop
  2. 在对话中输入类似 "查询预约记录" 或 "控制摄像头" 的请求
  3. Claude 应该能够调用 YMS MCP 提供的工具

可用工具

ONVIF 摄像头工具

  1. handle_discover_devices - 发现网络中的 ONVIF 设备
  2. handle_ptz_control - 控制摄像头 PTZ 移动
  3. get_rtsp - 获取摄像头 RTSP 地址
  4. get_deviceInfo - 获取摄像头设备信息
  5. snap_image_to_minio - 抓拍图像并上传到 MinIO
  6. focus_move - 控制摄像头焦距
  7. get_camera_list - 获取摄像头列表
  8. get_camera_live - 获取摄像头直播流地址

YMS 查询工具

  1. search_entry_tickets - 查询工作空间入场记录

    • 支持分页 (page_num, page_size)
    • 支持多种过滤条件 (entry_id, keyword, driver_id, vehicle_id, appointment_id, tractor_no, trailer_no, container_no, load_no, entry_status, appointment_status)
  2. search_appointments - 查询预约记录

    • 支持分页 (page_num, page_size)
    • 支持多种过滤条件 (appointment_id, appointment_type, carrier_id, driver_id, appointment_status, customer_id, entry_id, reference_code, keyword, load_id, receipt_id)

使用示例

查询预约记录

# 查询第1页,每页20条记录
result = await search_appointments(page_num=1, page_size=20)

# 根据预约ID查询
result = await search_appointments(appointment_id="APT-12345")

# 根据司机ID查询
result = await search_appointments(driver_id="DRV-001")

查询入场记录

# 查询第1页,每页20条记录
result = await search_entry_tickets(page_num=1, page_size=20)

# 根据车牌号查询
result = await search_entry_tickets(tractor_no="ABC123")

# 根据预约ID查询
result = await search_entry_tickets(appointment_id="APT-12345")

控制摄像头

# PTZ 控制
result = await handle_ptz_control(
    host="192.168.1.100",
    port=80,
    usr="admin",
    pwd="admin123",
    direction="Up",
    speed=50
)

# 抓拍图像
result = await snap_image_to_minio(
    host="192.168.1.100",
    port=80,
    usr="admin",
    pwd="admin123"
)

项目结构

yms-mcp/
├── src/
│   ├── config/          # 配置模块
│   │   ├── settings.py  # 配置加载器
│   │   └── config.yaml  # YAML 配置文件
│   ├── managers/        # 管理器模块
│   │   └── token.py     # YMS Token 管理器
│   ├── services/        # 服务层
│   │   └── yms_query.py # YMS 查询服务
│   └── onvif_device_manage.py  # ONVIF 设备管理
├── main.py              # 主程序入口
├── pyproject.toml       # 项目配置
└── README.md            # 项目文档

技术栈

  • FastMCP - MCP 服务器框架
  • Starlette - ASGI Web 框架
  • ONVIF-zeep - ONVIF 协议客户端
  • httpx - 异步 HTTP 客户端
  • loguru - 日志记录
  • pydantic-settings - 配置管理
  • MinIO - 对象存储

开发

运行测试

pytest tests/

代码格式化

black src/ main.py

许可证

MIT License

贡献

欢迎提交 Issue 和 Pull Request!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yms_mcp-2.0.1.tar.gz (24.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yms_mcp-2.0.1-py3-none-any.whl (25.6 kB view details)

Uploaded Python 3

File details

Details for the file yms_mcp-2.0.1.tar.gz.

File metadata

  • Download URL: yms_mcp-2.0.1.tar.gz
  • Upload date:
  • Size: 24.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.8

File hashes

Hashes for yms_mcp-2.0.1.tar.gz
Algorithm Hash digest
SHA256 e8b92b35871bc8e52cf9a78f706ab4bb672af867dd47224b9ccf183701cbae45
MD5 4c8acf6714ebfb6f78a98e2aa3b41333
BLAKE2b-256 b6b954aa77d189e853d306d9d512f11093728ac5b0aab86ea42a0b2f8276a9a1

See more details on using hashes here.

File details

Details for the file yms_mcp-2.0.1-py3-none-any.whl.

File metadata

  • Download URL: yms_mcp-2.0.1-py3-none-any.whl
  • Upload date:
  • Size: 25.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.8

File hashes

Hashes for yms_mcp-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7eb225bef78960cd64e3a4db9a39b451a426e43e8583974d739f168c94223d50
MD5 83401dca4f5585a2b149f64bda197aeb
BLAKE2b-256 fa0d4cac12125faaf7e3a19c3b6a6373aa0b11f877d14ccf08c3c4afaf49ec95

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page