用于Red Hat OpenShift AI的MCP服务器
该项目实现了一个模型上下文协议(MCP)服务器,用于管理Red Hat OpenShift AI(RHOAI)工作台。它提供了用于列出、创建和管理OpenShift集群中的工作台、映像、硬件配置文件和存储的工具,还提供了用于监控每个用户、工作台、命名空间或集群的工作台资源消耗的工具。 这个项目是学士学位论文的一部分。
先决条件
- 转到1.24.0或更高版本
- 访问安装了RHOAI的OpenShift集群
ocCLI已登录到集群- (可选)golangci lint用于代码linting
安装
- 克隆存储库:
git clone https://github.com/amaly/mcp-server-rhoai.git
cd mcp-server-rhoai- 下载依赖关系:
go mod download- 确保您已登录到OpenShift集群:
oc login 建筑
该项目包括一个易于构建的Makefile:
用Make构建
# Build with linting and testing (recommended)
make build
# Build without running lint and tests (faster)
go build -o mcp-server-rhoai构建过程将:
- 运行绒毛检查(golangci lint)
- 执行所有测试
- 将二进制文件编译为
mcp-server-rhoai
构建输出
- 二进制位置:
./mcp-server-rhoai
测试
该项目有一个全面的单元测试套件(7个测试文件中的60个测试),涵盖了每个工具模块。测试使用Kubernetes假客户端(dynamicfake.NewSimpleDynamicClient)以及函数变量mocking,用于将逻辑与实时集群依赖关系隔离开来,因此不需要运行集群。
使用Make或直接使用Go运行测试:
# Run all tests with Make
make test
# Run tests directly with verbose output
go test -v ./tools/... ./resources/... ./prompts/...测试覆盖范围包括:
- 工作台工具 --CRUD操作、状态转换和辅助函数(图像标签解析、资源提取、PVC名称解析)
- 存储工具 --PVC创建、删除和尺寸更新,包括拒绝尺寸减小
- 图像工具 --自定义映像CRUD、默认映像和使用中的保护检查、映像列表
- 硬件配置文件工具 --配置文件CRUD和资源标识符解析
- 资源消耗工具 --值解析(毫核、Gi后缀、小数)、聚合和每个工作台/命名空间/用户/集群查询
- 命名空间和pod工具 --按命名空间列出和筛选
每个工具模块都有一个专用的 *_test.go 包含成功和错误路径案例的文件。在需要验证多个输入变量的情况下,使用表驱动的子测试。
评估
用途 Promptfoo 的 用于测试工具选择精度。
运行评估
export GOOGLE_API_KEY=your-key-here
make eval # run tests
make eval-view # run and open results in browser它测试了什么
- 工具选择 -每个提示都需要正确的工具
- 参数提取 -正确传递的参数(命名空间、工作台名称等)
主要学习内容
工具描述必须明确,以实现与模型无关的兼容性:
- 用标记可选字段
omitempty并在jsonschema描述中描述默认值 - 在描述中包含有效值(例如,“状态:0表示运行,1表示停止”)
- 更简单的模型(Gemini Flash)比Claude更严格——有利于测试鲁棒性
配置
MCP服务器可以在AI助手中配置,以通过自然语言实现工作台管理。
VSCode/光标设置
- 构建服务器:
make build- 在光标中打开MCP设置:
- 按 Ctrl + Shift + P (Windows/Linux)或 Cmd + Shift + P (Mac) - 键入“打开MCP设置” - 点击“新建MCP服务器”
- 添加配置:
只读模式 (默认,更安全):
{
"mcpServers": {
"mcp-server-rhoai": {
"command": "/home/amaly/mcp-server-rhoai/mcp-server-rhoai"
}
}
}读写模式 (完全访问):
{
"mcpServers": {
"mcp-server-rhoai": {
"command": "/home/amaly/mcp-server-rhoai/mcp-server-rhoai",
"env": {
"MCP_RHOAI_MODE": "write"
}
}
}
}- 验证安装:
- 检查服务器是否在Cursor MCP设置中启用 - 您应该看到列出的可用工具
- 开始使用:
- 询问AI助手:“列出命名空间mcp-test中的所有工作台” - 或者:“显示每个命名空间的资源消耗”
Claude桌面设置
- 构建服务器:
make build- 找到Claude Desktop配置文件:
- macOS: ~/Library/Application Support/Claude/claude_desktop_config.json - 窗户: %APPDATA%\Claude\claude_desktop_config.json - Linux: ~/.config/Claude/claude_desktop_config.json
- 编辑配置文件 并添加MCP服务器:
只读模式 (默认):
{
"mcpServers": {
"mcp-server-rhoai": {
"command": "/home/amaly/mcp-server-rhoai/mcp-server-rhoai"
}
}
}读写模式 (完全访问):
{
"mcpServers": {
"mcp-server-rhoai": {
"command": "/home/amaly/mcp-server-rhoai/mcp-server-rhoai",
"env": {
"MCP_RHOAI_MODE": "write"
}
}
}
}- 重新启动克劳德桌面 使更改生效
- 验证连接:
- 在Claude Desktop中查找MCP连接指示灯 - 问Claude:“我的集群中有哪些工作台?”
重要说明
权限: MCP服务器使用您当前的 oc 登录凭据。所有操作都是在您的用户权限下执行的。
安全: 从只读模式开始,安全探索。仅在需要创建或修改资源时启用写入模式。
工具模式
服务器支持两种操作模式,既安全又灵活:
只读模式(默认)
只有列表和查询工具可用。此模式为 更安全 并防止对集群的意外修改。
可用操作:
- 列出工作台、图像、硬件配置文件、PVC
- 查询资源消耗
- 查看命名空间和pod信息
读写模式
所有工具都可用,包括创建、删除和修改操作。
附加操作:
- 创建/删除工作台
- 创建/删除自定义图像
- 创建/删除硬件配置文件
- 创建PVC
- 启动/停止工作台
配置模式
可以通过命令行标志或环境变量设置模式:
命令行标志(建议用于promptfoo/scripts):
./mcp-server-rhoai -mode write环境变量(用于MCP客户端配置):
export MCP_RHOAI_MODE=write| 值 | 模式 | 描述 |
|---|---|---|
| 未设置 | 只读 | 默认安全模式 |
write | 读写 | 完全访问所有工具 |
这 -mode 标志优先于环境变量。
可用工具
只读工具(始终可用)
- 列出Pod -在命名空间中列出Pod
- 列出命名空间 -列出群集中的所有命名空间
- 列出工作台 -列出特定命名空间中的工作台
- 列出所有工作台 -列出所有命名空间中的工作台
- 列出图片 -列出所有可用的笔记本图像
- 列出硬件配置文件 -列出可用的硬件配置文件
- 列出PVC -在命名空间中列出持久卷声明
- 列出每个工作台的资源消耗 -获取特定工作台的资源使用情况
- 列出每个命名空间的资源消耗 -获取命名空间中所有工作台的资源使用情况
- 列出每个用户的资源消耗 -获取特定用户的资源使用情况
- 列出每个群集的资源消耗 -获取集群范围内的资源使用情况
写入工具(仅在写入模式下)
- 创建工作台 -使用指定配置创建新工作台
- 删除工作台 -删除现有工作台
- 更改工作台状态 -启动或停止工作台
- 创建自定义图像 -创建自定义笔记本映像
- 删除图像 -删除自定义图像
- 创建硬件配置文件 -创建新的硬件配置文件
- 删除硬件配置文件 -删除硬件配置文件
- 创建PVC -创建持久卷声明
发展
项目结构
mcp-server-rhoai/
├── main.go # Entry point
├── core/ # Shared types and utilities
│ ├── gvr.go # Kubernetes GroupVersionResource definitions
│ ├── common_types.go # Shared output/namespace types
│ ├── workbench_types.go # Workbench-related types
│ ├── image_types.go # Image-related types
│ ├── hardware_profile_types.go # Hardware profile types
│ ├── pvc_types.go # PVC-related types
│ ├── resource_consumption_types.go # Resource consumption types
│ └── logging.go # Logging utilities
├── tools/ # MCP tool implementations
│ ├── registry.go # Tool registration (read-only & write modes)
│ ├── workbench_tools.go # Workbench CRUD & status tools
│ ├── image_tools.go # Image management tools
│ ├── hardware_profile_tools.go # Hardware profile tools
│ ├── storage_tools.go # PVC management tools
│ ├── namespace_tools.go # Namespace listing tools
│ ├── pod_tools.go # Pod listing tools
│ ├── resource_consumption_tools.go # Resource monitoring tools
│ └── common.go # Shared tool helpers
├── resources/ # MCP resource definitions
├── prompts/ # MCP prompts
└── Makefile # Build automation添加新工具
- 在相应的文件中实现工具功能
tools/ - 在中注册
tools/registry.go:
- 只读:添加到 RegisterReadOnlyTools() - 写作:添加到 RegisterWriteTools()
- 在中添加测试
tools/*_test.go - 更新此自述文件
代码检查
此存储库使用 戈朗茨皮棉 用于代码质量检查。
安装golangci棉绒
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest跑林婷
make lint