一个全面的模型上下文协议(MCP)服务器,用于 Yamcs(又一个任务控制系统),它将 Yamcs 的功能作为标准化的 MCP 工具和资源提供。
Yamcs MCP 服务器通过自然语言使 AI 助手能够与任务控制系统进行交互,提供了 MCP 兼容客户端与 Yamcs 实例之间的桥梁。它使用 FastMCP 2.x 实现 MCP 协议,并采用模块化组件架构。
# 克隆仓库
git clone https://github.com/PaulMRamirez/yamcs-mcp-server.git
cd yamcs-mcp-server
# 安装依赖
uv sync
# 运行服务器
uv run yamcs-mcp
# 克隆仓库
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 实例。最简单的方法是使用 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 配置中添加服务器:
{
"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_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 服务器:
# 在演示模式下运行(会显示连接失败警告但继续运行)
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
解决方案:
docker ps | grep yamcscurl http://localhost:8090/api问题:关于无法序列化枚举类型的错误
解决方案:此问题已在最新版本中修复。请更新到最新版本的服务器。
欢迎贡献!请在提交拉取请求之前阅读我们的贡献指南。
本项目根据 MIT 许可证发布 - 详情请参阅LICENSE文件。