ROMA MCP Integration
MCP (Model Context Protocol) 让 AI 助手(Claude Desktop 等)能够安全地访问 ROMA 跳板机的运维功能。
🎯 核心理念
ROMA MCP Bridge 是一个轻量级桥接器,通过 SSH 连接到 ROMA 跳板机,完全复用 ROMA 的认证、权限、审计系统。
Claude Desktop
↓ stdio (JSON-RPC)
MCP Bridge (~8MB,~580 行代码)
↓ SSH (tcp:2200)
ROMA 跳板机
├─ 认证 ✅
├─ 权限检查 ✅
├─ 审计日志 ✅
└─ SSH 到目标服务器📁 目录结构
mcp/
├── bridge/ # ✅ MCP Bridge(主要实现)
│ ├── main.go # 主程序
│ ├── client.go # SSH 客户端
│ ├── types.go # 类型定义
│ ├── mappings.go # 工具映射
│ ├── README.md # 使用指南
│ └── ARCHITECTURE.md # 架构说明
│
├── client/ # 测试客户端(可选)
│ └── main.go # 用于测试 MCP 工具
│
└── README.md # 本文件🚀 快速开始
1. 编译 MCP Bridge
cd /usr/sourcecode/roma/mcp/bridge
go build -o roma-mcp-bridge2. 配置 Claude Desktop
编辑 ~/.config/Claude/claude_desktop_config.json:
{
"mcpServers": {
"roma": {
"command": "/usr/sourcecode/roma/mcp/bridge/roma-mcp-bridge",
"env": {
"ROMA_SSH_HOST": "10.2.2.230",
"ROMA_SSH_PORT": "2200",
"ROMA_SSH_USER": "super",
"ROMA_SSH_KEY": "-----BEGIN OPENSSH PRIVATE KEY-----\n...\n-----END OPENSSH PRIVATE KEY-----"
}
}
}
}3. 重启 Claude Desktop
完全退出并重启 Claude Desktop,MCP Bridge 会自动启动。
4. 测试
在 Claude 中说:
请列出所有 Linux 服务器Claude 会自动调用 MCP Bridge,通过 SSH 连接到 ROMA,执行 ls linux 命令并展示结果。
📚 文档
主要文档(推荐)
- bridge/README.md - 完整使用指南 ⭐
- bridge/ARCHITECTURE.md - 架构说明 ⭐
其他文档
- client/README.md - 测试客户端使用说明
- CLEANUP_PLAN.md - 代码清理计划
🎨 特性
✅ 轻量级:~580 行代码,二进制 ~8MB ✅ 安全:SSH Key 认证,所有操作经过 ROMA 权限检查 ✅ 统一审计:所有操作记录在 ROMA 的 access_logs ✅ 零维护:不需要数据库,不需要管理凭证 ✅ 高性能:直接 SSH,延迟低 ✅ 易扩展:添加新工具只需在 mappings.go 中添加映射
🛠️ 工具列表
资源管理
list_resources- 列出资源execute_command- 执行命令
系统信息
whoami- 当前用户信息get_history- 命令历史
便捷工具
get_disk_usage- 磁盘使用情况get_process_list- 进程列表get_memory_usage- 内存使用情况get_cpu_info- CPU 信息get_network_info- 网络信息get_uptime- 运行时间和负载get_system_info- 系统详细信息
完整列表请查看 bridge/mappings.go
🔧 开发
添加新工具
编辑 bridge/mappings.go:
"your_new_tool": {
Method: "roma_ln",
ROMACommand: "ln",
Description: "工具描述",
Parameters: []ParameterDef{
{
Name: "identifier",
Type: "string",
Description: "资源标识符",
Required: true,
},
},
Transform: func(args map[string]interface{}) map[string]interface{} {
return map[string]interface{}{
"resource_type": "linux",
"identifier": args["identifier"],
"command": "your_command_here",
}
},
}测试
使用测试客户端:
cd client
go build -o mcp-client
./mcp-client -tool list_resources -args '{"resource_type":"linux"}'或直接使用 Claude Desktop 测试。
📖 工作原理
- Claude 理解用户意图
用户:"查看 server1 的磁盘使用情况"
- 选择并调用 MCP 工具
工具:get_disk_usage 参数:{identifier: "server1", resource_type: "linux"}
- MCP Bridge 转换为 SSH 命令
SSH 命令:ln -t linux server1 "df -h"
- SSH 到 ROMA 跳板机
- ROMA 验证 SSH Key ✅ - ROMA 检查权限 ✅ - ROMA 记录审计日志 ✅
- ROMA 连接目标服务器
ROMA → SSH → server1 → 执行 df -h
- 返回结果
server1 → ROMA → MCP Bridge → Claude → 用户
🔒 安全性
认证链
- MCP Bridge ↔ ROMA:SSH Key 认证
- ROMA ↔ 目标服务器:ROMA 管理的凭证(加密存储)
权限控制
- 所有操作都经过 ROMA 的角色权限检查
- 支持:super, ops, trial, ordinary 等角色
审计日志
- 所有操作记录在
access_logs表 - 包含:用户、时间、操作、资源、结果
🆚 与其他方案的对比
| 方案 | 通过 HTTP API | 直接访问数据库 | SSH 到 ROMA(本方案) |
|---|---|---|---|
| 代码量 | ~1000 行 | ~4000 行 | ~580 行 ✅ |
| 二进制大小 | ~15MB | ~50MB | ~8MB ✅ |
| 依赖 | HTTP Server | 数据库+SSH | 仅 SSH ✅ |
| 权限控制 | 需要重新实现 | 需要重新实现 | 复用 ROMA ✅ |
| 审计日志 | 需要单独记录 | 需要单独记录 | 统一在 ROMA ✅ |
| 维护成本 | 中 | 高 | 低 ✅ |
📦 历史
- v1.0 (已归档):独立服务实现(直接访问数据库)
- 位置:_archive/old-mcp-implementations/mcp-server-old/ - 问题:代码重复、维护困难
- v2.0 (当前):轻量级 Bridge 实现
- 位置:mcp/bridge/ - 优势:简洁、复用 ROMA、易维护
🤝 贡献
欢迎贡献新工具!
- Fork 项目
- 在
bridge/mappings.go中添加工具映射 - 测试
- 提交 Pull Request
📄 许可证
MIT License - 与 ROMA 主项目相同
🔗 相关链接
💡 常见问题
Q: 为什么要 SSH 到 ROMA 而不是 HTTP API?
A: ROMA 本身就是跳板机!用户通过 SSH 连接到 ROMA 来访问其他服务器。MCP Bridge 做同样的事,这样:
- 完全复用 ROMA 的认证、权限、审计系统
- 不需要额外的 HTTP Server
- 代码更简洁
- 维护更容易
Q: 如何添加新工具?
A: 只需在 bridge/mappings.go 中添加映射,无需修改其他代码。
Q: 支持哪些 AI 工具?
A: 支持所有兼容 MCP 的 AI 工具:
- Claude Desktop ✅
- Continue ✅
- Cursor ✅
- 其他 MCP 兼容工具 ✅
Q: 性能如何?
A:
- 延迟:20-100ms(取决于网络)
- 内存:10-20MB
- CPU:<1%(空闲时)
Q: 安全吗?
A:
- SSH Key 认证 ✅
- ROMA 权限检查 ✅
- 完整审计日志 ✅
- 不暴露数据库 ✅
开始使用: bridge/README.md ⭐
