返回市场
遥测监控服务器

遥测监控服务器

作者:PaulMRamirez2 星标更新:2025-10-27

项目介绍

Yamcs MCP 服务器

一个全面的模型上下文协议(MCP)服务器,用于 Yamcs(又一个任务控制系统),它将 Yamcs 的功能作为标准化的 MCP 工具和资源提供。

概述

Yamcs MCP 服务器通过自然语言使 AI 助手能够与任务控制系统进行交互,提供了 MCP 兼容客户端与 Yamcs 实例之间的桥梁。它使用 FastMCP 2.x 实现 MCP 协议,并采用模块化组件架构。

特性

  • 任务数据库(MDB):访问参数、命令、算法和空间系统
  • 遥测/遥令处理(TM/TC Processing):实时遥测监控和命令执行
  • 链路管理:监控和控制数据链路
  • 对象存储:管理 Yamcs 存储中的桶和对象
  • 实例管理:控制 Yamcs 实例和服务
  • 告警管理:监控并确认告警,带有汇总统计信息

安装

预备条件

  • Python 3.12 或更高版本
  • Yamcs 服务器实例(本地或远程)
  • uv 包管理器(推荐)或 pip

使用 uv(推荐)

# 克隆仓库
git clone https://github.com/PaulMRamirez/yamcs-mcp-server.git
cd yamcs-mcp-server

# 安装依赖
uv sync

# 运行服务器
uv run yamcs-mcp

使用 pip

# 克隆仓库
git clone https://github.com/PaulMRamirez/yamcs-mcp-server.git
cd yamcs-mcp-server

# 创建虚拟环境
python -m venv venv
source venv/bin/activate  # 在 Windows 上:venv\Scripts\activate

# 安装包
pip install -e .

# 运行服务器
yamcs-mcp

运行 Yamcs

你需要一个正在运行的 Yamcs 实例。最简单的方法是使用 Docker:

docker run -d --name yamcs -p  8090:8090 yamcs/example-simulation

这将启动包含示例遥测数据的 simulator 实例的 Yamcs。

配置

服务器可以通过环境变量或 .env 文件进行配置:

# Yamcs 连接设置
YAMCS_URL=http://localhost:8090
YAMCS_INSTANCE=simulator
YAMCS_USERNAME=admin
YAMCS_PASSWORD=password

# 服务器开关
YAMCS_ENABLE_MDB=true
YAMCS_ENABLE_PROCESSOR=true
YAMCS_ENABLE_LINKS=true
YAMCS_ENABLE_STORAGE=true
YAMCS_ENABLE_INSTANCES=true
YAMCS_ENABLE_ALARMS=true
YAMCS_ENABLE_COMMANDS=true

# 服务器设置
MCP_TRANSPORT=stdio
MCP_HOST=127.0.0.1
MCP_PORT=8000

使用方法

与 Claude Desktop 结合使用

在你的 Claude Desktop 配置中添加服务器:

{
  "mcp-servers": {
    "yamcs": {
      "command": "uv",
      "args": ["--directory", "/path/to/yamcs-mcp-server", "run", "yamcs-mcp"],
      "env": {
        "YAMCS_URL": "http://localhost:8090",
        "YAMCS_INSTANCE": "simulator"
      }
    }
  }
}

重要

  • /path/to/yamcs-mcp-server 替换为你实际的 yamcs-mcp-server 目录路径
  • --directory 参数对于 uv 找到正确的项目是必需的
  • 如果 uv 不在你的 PATH 中,请使用完整的 uv 路径(例如,/Users/PaulMRamirez/.local/bin/uv

可用工具

服务器暴露了大量按服务器组织的工具:

MDB 工具

  • mdb_list_parameters - 列出可用参数
  • mdb_describe_parameter - 获取参数详情
  • mdb_list_commands - 列出可用命令
  • mdb_describe_command - 获取命令详情
  • mdb_list_space_systems - 列出空间系统
  • mdb_describe_space_system - 获取空间系统详情

处理工具

  • processors_list_processors - 列出可用处理器
  • processors_describe_processor - 获取处理器详情
  • processors_delete_processor - 删除处理器
  • processors_issue_command - 发布命令
  • processors_subscribe_parameters - 订阅参数更新

链路工具

  • links_list_links - 列出所有数据链路
  • links_describe_link - 获取详细链路信息
  • links_enable_link - 启用数据链路
  • links_disable_link - 禁用数据链路

实例工具

  • instances_list_instances - 列出 Yamcs 实例
  • instances_describe_instance - 获取实例详情
  • instances_start_instance - 启动实例
  • instances_stop_instance - 停止实例

存储工具

  • storage_list_buckets - 列出存储桶
  • storage_list_objects - 列出桶中的对象
  • storage_upload_object - 上传对象
  • storage_download_object - 下载对象

告警工具

  • alarms_list_alarms - 列出活动告警及其汇总计数
  • alarms_describe_alarm - 获取详细告警信息
  • alarms_acknowledge_alarm - 确认告警
  • alarms_shelve_alarm - 暂时搁置告警
  • alarms_unshelve_alarm - 取消搁置告警
  • alarms_clear_alarm - 清除告警
  • alarms_read_log - 读取告警历史

命令工具

  • commands_list_commands - 列出可用于执行的命令
  • commands_describe_command - 获取详细命令信息
  • commands_run_command - 执行命令(支持干运行)
  • commands_read_log - 读取命令执行历史

可用资源

服务器还提供了只读资源:

  • mdb://parameters - 列出所有参数
  • processors://list - 列出所有处理器及其详情
  • links://status - 显示所有链路的状态
  • instances://list - 列出所有实例及其详情
  • alarms://list - 显示活动告警摘要

开发

设置开发环境

# 安装开发依赖
uv sync --all-extras

# 安装预提交钩子
pre-commit install

# 运行测试
uv run pytest

# 运行代码检查
uv run ruff check .

# 运行类型检查
uv run mypy src/

测试

运行测试套件:

# 运行所有测试
uv run pytest

# 运行带覆盖率的测试
uv run pytest --cov=yamcs_mcp --cov-report=html

# 运行特定测试文件
uv run pytest tests/test_server.py

# 运行带详细输出的测试
uv run pytest -v

不连接 Yamcs 服务器进行测试

服务器可以在演示模式下运行,无需连接真实的 Yamcs 服务器:

# 在演示模式下运行(会显示连接失败警告但继续运行)
uv run python -m yamcs_mcp.server

# 或使用演示脚本
uv run python run_demo.py

项目结构

yamcs-mcp-server/
├── src/
│   └── yamcs_mcp/
│       ├── server.py           # 主服务器入口点
│       ├── servers/            # MCP 服务器
│       │   ├── base_server.py # 所有服务器的基础类
│       │   ├── mdb.py         # 任务数据库
│       │   ├── processors.py  # 遥测/遥令处理
│       │   ├── links.py       # 链路管理
│       │   ├── storage.py     # 对象存储
│       │   ├── instances.py   # 实例管理
│       │   └── alarms.py      # 告警管理
│       ├── client.py          # Yamcs 客户端管理
│       ├── config.py          # 配置
│       └── types.py           # 类型定义
├── tests/                     # 测试套件
├── scripts/                   # 测试脚本
└── CLAUDE.md                  # AI 助手指南

故障排除

常见问题

执行命令时出现“输入验证错误”

问题:收到类似 '{"voltage_num": 1}' is not valid under any of the given schemas 的错误

解决方案commands/run_command 工具现在接受两种格式。服务器将自动解析 JSON 字符串为对象。

现在支持以下两种格式:

参数作为对象(首选):

{
  "command": "/YSS/SIMULATOR/SWITCH_VOLTAGE_OFF",
  "args": {"voltage_num": 1}
}

参数作为 JSON 字符串(自动解析):

{
  "command": "/YSS/SIMULATOR/SWITCH_VOLTAGE_OFF",
  "args": "{\"voltage_num\": 1}"
}

无参数命令:

{
  "command": "/TSE/simulator/get_identification"
}

多个参数:

{
  "command": "/YSS/SIMULATOR/SET_HEATER",
  "args": {
    "heater_id": 2,
    "temperature": 25.5,
    "duration": 300
  }
}

无法连接到 Yamcs

问题:服务器启动时无法连接到 Yamcs

解决方案

  1. 确保 Yamcs 正在运行:docker ps | grep yamcs
  2. 检查 URL 是否正确:curl http://localhost:8090/api
  3. 即使 Yamcs 不可用,服务器也会继续以演示模式运行

枚举序列化错误

问题:关于无法序列化枚举类型的错误

解决方案:此问题已在最新版本中修复。请更新到最新版本的服务器。

贡献

欢迎贡献!请在提交拉取请求之前阅读我们的贡献指南

许可证

本项目根据 MIT 许可证发布 - 详情请参阅LICENSE文件。

致谢