RHOAI MCP服务器
  ](https://github.com/opendatahub-io/rhoai-mcp)   
MCP(模型上下文协议)服务器,使AI代理能够与Red Hat OpenShift AI(RHOAI)环境进行交互。此服务器通过编程工具复制OpenShift AI仪表板的功能。
特性
- 项目管理:创建、列出和管理数据科学项目
- 工作台操作:创建、启动、停止和删除Jupyter工作台
- 模特服务:使用KServe部署和管理InferenceServices
- 数据连接:管理数据访问的S3凭据
- 管道:配置数据科学管道基础设施
- 存储:创建和管理持久数量声明
- 训练:使用Kubeflow Training Operator对模型进行微调
- MCP提示:多步骤操作的工作流程指南(18个提示)
技术栈
| 组件 | 技术 | 目的 |
|---|---|---|
| 运行时 | Python 3.10+ | 核心语言 |
| MCP框架 | FastMCP 1.0+ | 模型上下文协议服务器 |
| Kubernetes客户端 | kubernetes-python 28.1+ | 集群API交互 |
| 数据验证 | Pydantic 2.0+ | 类型安全模型和设置 |
| HTTP客户端 | httpx 0.27+ | 异步HTTP请求 |
| 集装箱基地 | 红帽UBI 9 | 生产容器图片 |
| 包管理器 | uv | 快速Python依赖管理 |
安装
使用紫外线(推荐)
# Clone the repository
git clone https://github.com/admiller/rhoai-mcp-prototype.git
cd rhoai-mcp-prototype
# Install dependencies
uv sync
# Run the server
uv run rhoai-mcp使用pip
pip install -e .
rhoai-mcp使用容器(Podman/Docker)
# Build the image
make build
# Run with HTTP transport
make run-http
# Run with STDIO transport (interactive)
make run-stdio
# Run with debug logging
make run-dev或者直接运行而不使用Make:
# Build
podman build -f Containerfile -t rhoai-mcp:latest .
# Run with HTTP transport
podman run -p 8000:8000 \
-v ~/.kube/config:/opt/app-root/src/kubeconfig/config:ro \
-e RHOAI_MCP_AUTH_MODE=kubeconfig \
-e RHOAI_MCP_KUBECONFIG_PATH=/opt/app-root/src/kubeconfig/config \
rhoai-mcp:latest --transport sse
# Run with STDIO transport
podman run -it \
-v ~/.kube/config:/opt/app-root/src/kubeconfig/config:ro \
-e RHOAI_MCP_AUTH_MODE=kubeconfig \
-e RHOAI_MCP_KUBECONFIG_PATH=/opt/app-root/src/kubeconfig/config \
rhoai-mcp:latest --transport stdio可用目标:
| 目标 | 描述 |
|---|---|
make build | 构建容器映像 |
make run-http | 在8000端口上使用SSE传输运行 |
make run-streamable | 使用流式http传输运行 |
make run-stdio | 使用STDIO传输(交互式)运行 |
make run-dev | 运行调试日志 |
make run-token | 使用令牌身份验证运行(需要token和API_SERVER) |
make stop | 停止正在运行的容器 |
make logs | 查看容器日志 |
make clean | 删除容器和图像 |
Kubernetes部署
对于集群内部署,应用Kubernetes清单:
kubectl apply -f deploy/kubernetes/deployment.yaml这将创建:
- 命名空间
rhoai-mcp - RHOAI资源的RBAC服务帐户
- 使用SSE传输运行MCP服务器的部署
- 服务暴露端口8000
- 带TLS终止的路由(仅限OpenShift)
配置
服务器可以通过环境变量进行配置( RHOAI_MCP_ 前缀)或a .env 文件。
认证
服务器支持三种身份验证模式:
- 自动(默认):首先尝试集群身份验证,然后回退到kubeconfig
- Kubeconfig:使用kubeconfig文件
- 代币:使用明确的API服务器URL和令牌
# Auto mode (default)
export RHOAI_MCP_AUTH_MODE=auto
# Kubeconfig mode
export RHOAI_MCP_AUTH_MODE=kubeconfig
export RHOAI_MCP_KUBECONFIG_PATH=/path/to/kubeconfig
export RHOAI_MCP_KUBECONFIG_CONTEXT=my-context
# Token mode
export RHOAI_MCP_AUTH_MODE=token
export RHOAI_MCP_API_SERVER=https://api.cluster.example.com:6443
export RHOAI_MCP_API_TOKEN=sha256~xxxxx运输
# stdio (default) - for Claude Desktop and similar tools
export RHOAI_MCP_TRANSPORT=stdio
# HTTP transports
export RHOAI_MCP_TRANSPORT=sse
export RHOAI_MCP_HOST=127.0.0.1
export RHOAI_MCP_PORT=8000安全设置
# Enable delete operations (disabled by default)
export RHOAI_MCP_ENABLE_DANGEROUS_OPERATIONS=true
# Read-only mode (disable all write operations)
export RHOAI_MCP_READ_ONLY_MODE=true安全特性概述
| 功能 | 描述 | 默认值 |
|---|---|---|
| 只读模式 | 禁用所有创建/更新/删除操作 | 关闭 |
| 危险操作门 | 删除操作需要明确启用 | 已禁用 |
| 确认模式 | 需要删除工具 confirm=True 参数 | 必填 |
| 凭证屏蔽 | S3密钥在所有响应中都被屏蔽 | 始终 |
| RBAC感知 | 使用OpenShift Projects API尊重用户权限 | 始终 |
| 身份验证 | 启动时验证身份验证配置 | 始终 |
模型注册表
MCP服务器与RHOAI模型注册表集成,以列出和查询已注册的模型。默认情况下,它会自动发现群集中的模型注册表服务。
发现模式
# Auto-discovery (default) - finds Model Registry in the cluster
export RHOAI_MCP_MODEL_REGISTRY_DISCOVERY_MODE=auto
# Manual - use a specific URL
export RHOAI_MCP_MODEL_REGISTRY_DISCOVERY_MODE=manual
export RHOAI_MCP_MODEL_REGISTRY_URL=https://model-registry.example.com认证
当通过外部路由(集群外)访问模型注册表时,通常需要进行身份验证(OAuth用于OAuth代理路由;还支持显式令牌身份验证):
# No authentication (default) - for in-cluster access
export RHOAI_MCP_MODEL_REGISTRY_AUTH_MODE=none
# OAuth authentication - uses your oc login token
export RHOAI_MCP_MODEL_REGISTRY_AUTH_MODE=oauth
# Explicit token authentication
export RHOAI_MCP_MODEL_REGISTRY_AUTH_MODE=token
export RHOAI_MCP_MODEL_REGISTRY_TOKEN=sha256~xxxxx| 身份验证模式 | 描述 | 用例 |
|---|---|---|
none | 无身份验证标头 | 通过端口8080进行群集中访问 |
oauth | 使用kubeconfig中的OAuth令牌 | 使用OAuth代理的外部路由 |
token | 使用显式承载令牌 | 服务帐户,CI/CD |
外部路由访问
要通过OpenShift路由从集群外部访问模型注册表,请执行以下操作:
# 1. Log in to OpenShift (this stores the OAuth token in kubeconfig)
oc login --server=https://api.cluster.example.com:6443
# 2. Configure the MCP server to use the external route with OAuth
export RHOAI_MCP_MODEL_REGISTRY_URL=https://model-catalog.apps.cluster.example.com
export RHOAI_MCP_MODEL_REGISTRY_DISCOVERY_MODE=manual
export RHOAI_MCP_MODEL_REGISTRY_AUTH_MODE=oauth
# 3. Optional: Skip TLS verification for self-signed certificates (not recommended)
# export RHOAI_MCP_MODEL_REGISTRY_SKIP_TLS_VERIFY=true端口转发替代方案
如果没有可用的外部路由,您可以使用端口转发:
# Set up port-forwarding to the Model Registry service
kubectl port-forward -n rhoai-model-registries svc/model-catalog 8080:8443
# Configure the MCP server to use localhost
export RHOAI_MCP_MODEL_REGISTRY_URL=http://localhost:8080
export RHOAI_MCP_MODEL_REGISTRY_DISCOVERY_MODE=manual所有模型注册表设置
| 变量 | 描述 | 默认值 |
|---|---|---|
RHOAI_MCP_MODEL_REGISTRY_ENABLED | 启用模型注册表集成 | true |
RHOAI_MCP_MODEL_REGISTRY_URL | 模型注册表服务URL | 自动发现 |
RHOAI_MCP_MODEL_REGISTRY_DISCOVERY_MODE | auto 或 manual | auto |
RHOAI_MCP_MODEL_REGISTRY_AUTH_MODE | none, oauth,或 token | none |
RHOAI_MCP_MODEL_REGISTRY_TOKEN | 显式承载令牌(当auth_mode=令牌时) | 无 |
RHOAI_MCP_MODEL_REGISTRY_TIMEOUT | 请求超时(秒) | 30 |
RHOAI_MCP_MODEL_REGISTRY_SKIP_TLS_VERIFY | 跳过TLS证书验证 | false |
使用Claude代码
添加到您的项目 .mcp.json 文件:
{
"mcpServers": {
"rhoai": {
"command": "uvx",
"args": ["--from", "git+https://github.com/opendatahub-io/rhoai-mcp", "rhoai-mcp"],
"env": {
"RHOAI_MCP_KUBECONFIG_PATH": "/home/user/.kube/config"
}
}
}
}使用Claude Desktop
添加到您的Claude Desktop配置(~/.config/claude/claude_desktop_config.json):
{
"mcpServers": {
"rhoai": {
"command": "uvx",
"args": ["--from", "git+https://github.com/opendatahub-io/rhoai-mcp", "rhoai-mcp"],
"env": {
"RHOAI_MCP_KUBECONFIG_PATH": "/home/user/.kube/config"
}
}
}
}本地开发
对于使用本地克隆的贡献者:
{
"mcpServers": {
"rhoai": {
"command": "uv",
"args": ["run", "--directory", "/path/to/rhoai-mcp", "rhoai-mcp"],
"env": {
"RHOAI_MCP_KUBECONFIG_PATH": "/home/user/.kube/config"
}
}
}
}使用容器镜像(Podman/Docker)
首先,构建容器映像:
make build然后使用容器配置Claude Desktop:
子程序 :
{
"mcpServers": {
"rhoai": {
"command": "podman",
"args": [
"run", "-i", "--rm",
"--userns=keep-id",
"-v", "${HOME}/.kube/config:/opt/app-root/src/kubeconfig/config:ro",
"-e", "RHOAI_MCP_AUTH_MODE=kubeconfig",
"-e", "RHOAI_MCP_KUBECONFIG_PATH=/opt/app-root/src/kubeconfig/config",
"rhoai-mcp:latest"
]
}
}
}Docker:
{
"mcpServers": {
"rhoai": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "${HOME}/.kube/config:/opt/app-root/src/kubeconfig/config:ro",
"-e", "RHOAI_MCP_AUTH_MODE=kubeconfig",
"-e", "RHOAI_MCP_KUBECONFIG_PATH=/opt/app-root/src/kubeconfig/config",
"rhoai-mcp:latest"
]
}
}
}注:容器使用 stdio 默认情况下,这是Claude Desktop集成所必需的。
可用工具
项目管理(6个工具)
| 工具 | 说明 |
|---|---|
list_data_science_projects | 列出所有RHOAI项目 |
get_project_details | 获取包含资源摘要的项目 |
create_data_science_project | 创建新项目 |
delete_data_science_project | 删除项目(需要确认) |
get_project_status | 获取全面的项目状态 |
set_model_serving_mode | 设置单模式与多模式服务 |
工作台管理(8个工具)
| 工具 | 说明 |
|---|---|
list_workbenches | 列出项目中的工作台 |
get_workbench | 获取工作台详细信息 |
create_workbench | 创建新工作台 |
start_workbench | 启动已停止的工作台 |
stop_workbench | 停止正在运行的工作台 |
delete_workbench | 删除工作台 |
list_notebook_images | 列出可用图像 |
get_workbench_url | 获取受OAuth保护的URL |
模型服务(6个工具)
| 工具 | 说明 |
|---|---|
list_inference_services | 列出已部署的模型 |
get_inference_service | 获取模型详细信息 |
deploy_model | 创建推理服务 |
delete_inference_service | 删除已部署的模型 |
list_serving_runtimes | 列出可用运行时 |
get_model_endpoint | 获取推理端点URL |
数据连接(4个工具)
| 工具 | 说明 |
|---|---|
list_data_connections | 列出项目中的连接 |
get_data_connection | 获取连接详细信息(屏蔽) |
create_s3_data_connection | 创建S3连接 |
delete_data_connection | 删除连接 |
管道(3个工具)
| 工具 | 说明 |
|---|---|
get_pipeline_server | 获取DSPA状态 |
create_pipeline_server | 创建DSPA |
delete_pipeline_server | 删除DSPA |
存储(3个工具)
| 工具 | 说明 |
|---|---|
list_storage | 列出项目中的PVC |
create_storage | 创建PVC |
delete_storage | 删除PVC(需要确认) |
MCP资源
服务器还公开只读资源:
| 资源URI | 描述 |
|---|---|
rhoai://cluster/status | 集群健康和RHOAI状态 |
rhoai://cluster/components | DataSciencesCluster组件状态 |
rhoai://cluster/accelerators | 可用GPU配置文件 |
rhoai://projects/{name}/status | 项目资源汇总 |
rhoai://projects/{name}/workbenches | 工作台状态列表 |
rhoai://projects/{name}/models | 已部署的具有状态的模型 |
MCP提示
该服务器提供18个提示,指导AI代理完成多步工作流程。提示是提供分步说明的模板,并参考每个工作流阶段的适当工具。
培训工作流程(3个提示)
| 提示 | 描述 |
|---|---|
train-model | 使用LoRA/QLoRA指导对模型进行微调 |
monitor-training | 监控正在进行的培训工作并诊断问题 |
resume-training | 从检查点恢复暂停或失败的培训作业 |
集群探索(4个提示)
| 提示 | 描述 |
|---|---|
explore-cluster | 了解RHOAI集群中可用的内容 |
explore-project | 探索特定数据科学项目中的资源 |
find-gpus | 查找用于训练或推理的可用GPU资源 |
whats-running | 快速检查所有活动工作负载的状态 |
故障排除(4个提示)
| 提示 | 描述 |
|---|---|
troubleshoot-training | 诊断并解决培训工作中的问题 |
troubleshoot-workbench | 使用工作台诊断和修复问题 |
troubleshoot-model | 诊断并修复已部署模型的问题 |
analyze-oom | 分析并解决培训中的内存不足问题 |
项目设置(3个提示)
| 提示 | 描述 |
|---|---|
setup-training-project | 建立一个新的模型训练项目 |
setup-inference-project | 建立新的模型服务项目 |
add-data-connection | 向现有项目添加S3数据连接 |
模型部署(4个提示)
| 提示 | 描述 |
|---|---|
deploy-model | 部署推理服务模型 |
deploy-llm | 使用vLLM或TGIS部署大型语言模型 |
test-endpoint | 测试已部署的模型端点 |
scale-model | 向上或向下扩展模型部署 |
交互示例
创建数据科学项目
User: Create a new data science project called "fraud-detection" for my ML experiments
Agent: I'll create that project for you with a descriptive display name.
[Calls create_data_science_project with name="fraud-detection",
display_name="Fraud Detection ML", description="Machine learning experiments for fraud detection"]
Result: Project 'fraud-detection' created successfully部署模型
User: Deploy my trained fraud model from S3 to the fraud-detection project
Agent: I'll deploy your model. First, let me check available serving runtimes.
[Calls list_serving_runtimes with namespace="fraud-detection"]
[Calls deploy_model with name="fraud-model", namespace="fraud-detection",
runtime="ovms", model_format="onnx",
storage_uri="s3://models/fraud-detection/model.onnx"]
Result: Model 'fraud-model' deployment initiated. It may take a few minutes to become ready.检查项目状态
User: What's the status of my fraud-detection project?
Agent: [Calls get_project_status with namespace="fraud-detection"]
Result:
- Project: fraud-detection (Fraud Detection ML)
- Workbenches: 2 total, 1 running
- Models: 1 deployed, 1 ready
- Pipeline Server: Ready
- Data Connections: 1
- Storage: 3 PVCs发展
运行测试
# Install dev dependencies
uv sync --extra dev
# Run tests
uv run pytest
# Run with coverage
uv run pytest --cov=rhoai_mcp代码质量
# Format code
uv run ruff format
# Lint
uv run ruff check
# Type check
uv run mypy src/rhoai_mcp建筑
┌─────────────────────────────────────────────────────────────────┐
│ MCP Transport Layer (stdio/SSE/HTTP) │
├─────────────────────────────────────────────────────────────────┤
│ FastMCP Server (server.py) │
│ - Tool registration - Resource registration │
│ - Prompt registration - Lifecycle management │
├───────────────────┬─────────────────────┬───────────────────────┤
│ Tools Layer │ Resources Layer │ Prompts Layer │
│ - projects │ - cluster.py │ - training (3) │
│ - notebooks │ - projects.py │ - exploration (4) │
│ - inference │ │ - troubleshooting (4)│
│ - connections │ │ - project setup (3) │
│ - storage │ │ - deployment (4) │
│ - pipelines │ │ │
│ - training │ │ │
├───────────────────┴─────────────────────┴───────────────────────┤
│ Clients Layer (clients/) - Business Logic │
│ - base.py (K8sClient) - projects.py - notebooks.py │
│ - inference.py - connections.py - storage.py │
│ - pipelines.py - training.py │
├─────────────────────────────────────────────────────────────────┤
│ Models Layer (models/) - Pydantic Data Structures │
│ - common.py (shared) - Domain-specific models per resource │
├─────────────────────────────────────────────────────────────────┤
│ Infrastructure Layer │
│ - K8sClient: Kubernetes API abstraction (Core + CRDs) │
│ - Configuration: Environment-based settings │
│ - Plugin Manager: Pluggy-based plugin system │
└─────────────────────────────────────────────────────────────────┘目录结构
| 目录 | 目的 |
|---|---|
| 客户/ | 每种资源类型的Kubernetes客户端抽象 |
| 模型/ | 类型安全资源处理的Pydantic模型 |
| 工具/ | 包装客户端操作的MCP工具定义 |
| 资源/ | 只读数据访问的MCP资源定义 |
| utils/ | 注释、标签和错误的辅助函数 |
请求流
AI Agent Request → MCP Transport → Tool Handler → Domain Client
↓
AI Agent Response ← Pydantic Model ← K8s Response ← K8sClient → Kubernetes API支持的关键CRD
| 资源 | API组 | 用途 |
|---|---|---|
| 命名空间 | core/v1 | 数据科学项目 |
| 笔记本 | kubeflow.org/v1 | 工作台 |
| InferenceService | serving.kserve.io/v1beta1 | 模型服务 |
| ServingRuntime | serving.kserve.io/v1alpha1 | 模型服务器配置 |
| DataScience管道应用程序 | 数据科学管道应用程序.opendatahub.io/v1alph1 | 管道基础设施 |
| 加速器配置文件 | 仪表板.opendatahub.io/v1 | GPU配置文件 |
许可证
MIT许可证-请参阅 许可证 了解详情。
