Skip to main content
Glama

boc-mcp

博云 BeyondContainer 容器云平台的 MCP (Model Context Protocol) Server,让大语言模型可以通过统一的工具接口查询容器云平台的集群、节点、分区、工作负载、镜像版本、监控、安全扫描等资源。

特性

  • 全能力查询覆盖:共 58 个工具,覆盖集群、节点、分区、应用/服务/任务、Pod、容器、Service、Secret、网络、服务树、监控、镜像版本、安全扫描 11 个领域。

  • Streamable HTTP 传输:默认监听 0.0.0.0:8000,支持任意 MCP 客户端(Claude Desktop、Codex CLI、Cursor 等)通过 HTTP 接入。

  • 自动登录 + Token 缓存:启动后自动完成博云三步登录流程(取 clientId → 换取 code → 换 token),Token 缓存在内存中;遇到 401 或平台返回 token 失效消息时自动重新登录并重试一次。

  • HTTP 请求适配器BocHttpClient 封装 aiohttp,统一注入 token/refreshToken/systemId Header、错误映射、超时、重试;通过 BocApiClient Protocol 解耦,单元测试使用 Fake 客户端零网络开销。

  • Pydantic 模型 + 蛇形/驼峰兼容:所有领域模型自动驼峰别名,可直接反序列化博云接口返回。

  • 结构化日志:JSON 生产模式,开发模式彩色输出,自动脱敏密码/Token。

  • 健康检查/healthz(存活)和 /healthz/ready(就绪)端点,就绪检查会验证 Token 是否可用。

  • TDD 严格保证:测试覆盖率阈值 80%,所有工具注册、参数、描述均有测试兜底。

Related MCP server: k8scortex-mcp

快速开始

1. 安装依赖

项目使用 Python ≥ 3.12,推荐使用 uvpip

# 用 uv(推荐)
uv venv && uv pip install -e ".[dev]"

# 或用 pip
python -m venv .venv
.venv\Scripts\activate      # Windows
# source .venv/bin/activate # Linux/macOS
pip install -e ".[dev]"

2. 配置

支持两种配置方式,环境变量优先级高于 YAML 文件

  • 环境变量(推荐生产使用):BOC_BASE_URLBOC_USERNAMEBOC_PASSWORD 等;

  • YAML 配置文件:自动查找 ./config.yaml~/.boc-mcp/config.yaml,或通过 BOC_CONFIG_FILE 指定。

最小配置(环境变量):

export BOC_BASE_URL="https://your-boc-platform.com"
export BOC_USERNAME="admin"
export BOC_PASSWORD="your-password"
# 可选
export BOC_SYSTEM_ID="1"
export BOC_VERIFY_SSL="true"
export BOC_MCP__PORT="8000"

或使用 YAML:复制 config/config.example.yamlconfig.yaml 并修改。

所有配置项:

环境变量

YAML 键

默认值

说明

BOC_BASE_URL

base_url

—(必填)

博云平台根地址,不要带尾斜杠

BOC_USERNAME

username

—(必填)

登录用户名

BOC_PASSWORD

password

—(必填)

登录密码

BOC_SYSTEM_ID

system_id

"1"

业务系统 ID,默认 1

BOC_VERIFY_SSL

verify_ssl

true

是否校验 HTTPS 证书

BOC_REQUEST_TIMEOUT

request_timeout

30

单次 HTTP 请求超时(秒)

BOC_MAX_RETRIES

max_retries

3

网络错误重试次数

BOC_LOG_LEVEL

log_level

"INFO"

日志级别(DEBUG/INFO/WARNING/ERROR)

BOC_CONFIG_FILE

指定 YAML 配置文件路径

BOC_MCP__HOST

mcp.host

"0.0.0.0"

MCP HTTP 监听地址

BOC_MCP__PORT

mcp.port

8000

MCP HTTP 监听端口

3. 启动服务

python -m boc_mcp
# 或开发模式(彩色日志)
$env:BOC_DEV=1; python -m boc_mcp   # PowerShell
# BOC_DEV=1 python -m boc_mcp       # bash

服务启动后会:

  1. 加载配置 → 2. 初始化日志 → 3. 登录博云平台获取 Token → 4. 监听 http://0.0.0.0:8000/mcp

健康检查:GET http://localhost:8000/healthz(存活)、GET http://localhost:8000/healthz/ready(就绪,含 Token 检查)。

4. 接入 MCP 客户端

Claude Desktop / Codex CLI 配置示例(添加到各自的 MCP 配置文件):

{
  "mcpServers": {
    "boc-mcp": {
      "url": "http://localhost:8000/mcp",
      "env": {
        "BOC_BASE_URL": "https://your-boc-platform.com",
        "BOC_USERNAME": "admin",
        "BOC_PASSWORD": "your-password"
      }
    }
  }
}

若需要 stdio 模式,可使用命令方式:

{
  "mcpServers": {
    "boc-mcp": {
      "command": "python",
      "args": ["-m", "boc_mcp"],
      "env": {
        "BOC_BASE_URL": "https://your-boc-platform.com",
        "BOC_USERNAME": "admin",
        "BOC_PASSWORD": "your-password"
      }
    }
  }
}

工具列表(58 个,全部只读)

所有工具以 boc_ 开头。列表类工具统一支持 page/page_size(最大 100)分页参数。

认证(auth)

  • boc_auth_status — 查询登录状态、当前用户、Token 过期时间

  • boc_auth_refresh — 强制重新登录博云平台

应用(application)

  • boc_app_get — 按应用 ID 查询应用详情

  • boc_app_list — 分页查询应用列表,可按集群/名称过滤

集群(cluster)

  • boc_cluster_list — 集群列表(分页,关键字过滤)

  • boc_cluster_all — 所有集群(不分页,简表)

  • boc_cluster_base_info — 集群基本信息(类型/名称/版本过滤)

  • boc_cluster_monitor — 指定集群监控信息

  • boc_cluster_state — 指定集群运行状态

  • boc_cluster_nodes — 集群下节点列表

  • boc_cluster_partitions — 集群下分区列表

  • boc_cluster_partition_resource — 指定 hostId 分区 CPU/内存资源使用

  • boc_cluster_by_env — 指定租户下集群列表

  • boc_cluster_available_partitions — 当前租户可用分区

服务树(service_tree)

  • boc_service_tree — 服务树节点查询(支持父类型/父 ID/节点类型筛选)

安全扫描(scan)

  • boc_scan_list_strategies — 安全扫描策略列表

  • boc_scan_get_report — 扫描报告详情

  • boc_scan_list_reports — 扫描报告列表

配置/密钥(config_secret)

  • boc_secret_list — 指定集群/命名空间下 Secret 列表

网络(network)

  • boc_network_list_by_name — 按名称/IP 查询网络分区

  • boc_network_available — 可用(未分配)网络列表

  • boc_network_by_env — 按租户查询网络列表

分区(partition)

  • boc_partition_list — 分页查询分区列表

  • boc_partition_get_default — 集群默认分区

  • boc_partition_get_meta — 按条件查询分区元数据

  • boc_partition_list_default — 默认分区列表(不分页)

  • boc_partition_list_nodes — 分区节点列表

  • boc_partition_list_all_hosts — 所有主机节点列表

  • boc_partition_all_info — 主机全量信息(集群/租户/IP/名称过滤)

  • boc_partition_detail — 分区详情

  • boc_partition_list_available — 当前租户可用分区

监控(monitor)

  • boc_monitor_get_project_status — 单个应用实时监控状态

  • boc_monitor_batch_project — 批量项目监控数据

  • boc_monitor_batch_project_status — 批量项目状态监控

  • boc_monitor_get_app — 单个服务监控数据

  • boc_monitor_batch_app — 批量应用监控数据

  • boc_monitor_get_pod — Pod 监控数据

  • boc_monitor_batch_container — 批量容器监控数据

  • boc_monitor_batch_pod — 批量 Pod 监控数据

版本/镜像(version)

  • boc_version_list — 版本列表

  • boc_version_get_id_by_name — 按名称查版本 ID

  • boc_version_list_image_groups — 版本镜像组列表

  • boc_version_list_dispatched_clusters — 版本已发布集群列表

  • boc_version_list_undispatched_clusters — 版本未发布集群列表

  • boc_version_get_image_group — 镜像组信息

  • boc_version_get_yaml — 指定 K8s 资源 YAML

工作负载(workload)

  • boc_workload_project_list — 应用(Project)列表

  • boc_workload_app_list — 应用+服务列表

  • boc_workload_application_list — 服务/任务(Application)列表

  • boc_workload_service_network — 指定服务下网络信息

  • boc_workload_container_list — 容器列表

  • boc_workload_pod_list — 实例(Pod)列表

  • boc_workload_kubectl_pods — kubectl 可访问的 Pod 列表

  • boc_workload_check_internal_service — 检查命名空间下内部服务是否存在

  • boc_workload_get_internal_load — 内部负载详情

  • boc_workload_list_internal_loads — 指定服务下内部负载列表

  • boc_workload_internal_service_list — 内部负载列表(分页)

  • boc_workload_internal_service_detail — 内部负载通用查询

架构

┌───────────── MCP Client (Claude/Codex/Cursor) ─────────────┐
                    │  Streamable HTTP (/mcp)
┌───────────────────▼────────────────────────────────────────┐
│  FastMCP (tool layer)                                      │
│   └─ @mcp.tool / @wrap_tool_errors                         │
├────────────────────────────────────────────────────────────┤
│  Service layer (11 domain services)                        │
│   ├─ auth / application / cluster / workload               │
│   ├─ partition / network / config_secret / service_tree    │
│   ├─ monitor / version / scan                              │
│   └─ Pydantic models + _parse_list() 分页统一解析            │
├────────────────────────────────────────────────────────────┤
│  Client layer                                              │
│   ├─ BocApiClient (Protocol)                               │
│   ├─ BocHttpClient (aiohttp 真实实现,注入 header/重试)      │
│   ├─ TokenManager (三步登录 + 内存缓存 + asyncio.Lock)      │
│   └─ paginate() 通用分页迭代器                              │
├────────────────────────────────────────────────────────────┤
│  Cross-cutting                                             │
│   ├─ middleware.wrap_tool_errors (BocMcpError → MCP 错误)   │
│   ├─ logging_setup (JSON/开发模式 + 敏感字段脱敏)            │
│   └─ health (liveness/readiness)                           │
└────────────────────────────────────────────────────────────┘

关键设计:

  • 认证流程:博云三步登录 — GET /upmstreeapi/bocPortal/getMenus 提取 clientIdPOST /upmstreeapi/login 换取 codeGET /upmstreeapi/accessToken 获取 token/refreshToken/expiredTime,之后每次请求在 Header 携带 tokenrefreshTokensystemId

  • Token 失效处理:业务请求返回 401 或匹配平台 token 失效消息时,调用 token_mgr.invalidate() 清空缓存并重走登录(clientId 已缓存),原请求自动重试一次。

  • 两种响应信封:博云接口同时存在 {state,code,data,message,entity}{success,currPageNum,pageSize,totalCount,pageCount,rows} 两种结构,BocHttpClient 与各 Service 的 _parse_list() 统一解析。

  • 错误分层BocMcpError 有明确子类(认证、网络、业务、配置),wrap_tool_errors 中间件将其转为 MCP JSON-RPC 标准错误码。

开发

# 运行单元测试(默认)
python -m pytest

# 运行全部测试含覆盖率阈值 80%
python -m pytest --cov=boc_mcp --cov-fail-under=80

# 运行 E2E 测试(需要启动服务)
python -m pytest -m e2e

# 代码检查
ruff check src tests
ruff format --check src tests
mypy src/boc_mcp

目录结构:

src/boc_mcp/
├── __main__.py           # python -m boc_mcp 入口
├── server.py             # create_app / run,MCP 装配
├── config.py             # 配置加载(env + yaml)
├── logging_setup.py      # 日志 + 敏感字段脱敏
├── middleware.py         # 错误转 MCP 错误
├── health.py             # /healthz, /healthz/ready
├── auth/
│   ├── models.py         # TokenSet
│   └── token_manager.py  # 三步登录 + 缓存 + 失效重登
├── client/
│   ├── boc_client.py     # BocApiClient Protocol + BocHttpClient
│   ├── errors.py         # BocMcpError 体系
│   └── pagination.py     # 通用分页 async generator
├── models/
│   └── common.py         # ListResult[T], ActionResult
└── services/
    ├── base.py           # BaseService (_get/_post/_list ...)
    ├── auth/ application/ cluster/ config_secret/
    ├── monitor/ network/ partition/ scan/
    ├── service_tree/ version/ workload/
    │   ├── models.py     # Pydantic 领域模型
    │   ├── service.py    # 业务逻辑
    │   └── tools.py      # @mcp.tool 注册

文档

  • docs/usage-guide.md:安装、配置、启动、客户端接入、常见查询场景、排错指南

  • docs/api-reference.md:全部 58 个工具的接口文档(参数、类型、必填、返回值)

  • docs/test-cases.md:自动化测试索引 + 连接真实平台的手工测试用例 + CI 说明

  • docs/api-inventory.md:接口清单(博云 API 路径与工具映射)

Kubernetes 部署

部署清单位于 \deploy/k8s/\,使用 kustomize 一键部署。详见 \deploy/k8s/README.md\。

\ash

1. 构建并推送镜像

docker build -t registry.your-company.com/boc-mcp/boc-mcp:0.1.0 . docker push registry.your-company.com/boc-mcp/boc-mcp:0.1.0

2. 修改 deploy/k8s/01-config.yaml 中的 BOC_BASE_URL 和账号密码

3. 一键部署

kubectl apply -k deploy/k8s ## Docker

docker build -t boc-mcp:0.1.0 .
docker run -d -p 8000:8000 \
  -e BOC_BASE_URL=https://your-boc-platform.com \
  -e BOC_USERNAME=admin \
  -e BOC_PASSWORD=your-password \
  --name boc-mcp boc-mcp:0.1.0

许可证

内部使用,遵循团队规范。

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    A production-grade MCP server providing a secure, natural-language interface to Kubernetes for developers and AI agents, with multi-cluster routing, OIDC authentication, RBAC, and audit logging.
    75
    27 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for Podman and Docker container runtimes, enabling management of containers, images, networks, and volumes via AI assistants.
    81
    Apache 2.0