Command Palette

Search for a command to run...

UnylyUnyly
Весь каталог

Boc

БесплатноНе проверен

MCP server for BeyondContainer platform, enabling LLMs to query clusters, nodes, workloads, images, monitoring, and security scans via 58 tools.

GitHubEmbed

Описание

MCP server for BeyondContainer platform, enabling LLMs to query clusters, nodes, workloads, images, monitoring, and security scans via 58 tools.

README

博云 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%,所有工具注册、参数、描述均有测试兜底。

快速开始

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

许可证

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

from github.com/zhanghan5/boc-mcp

Установка Boc

У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.

▸ github.com/zhanghan5/boc-mcp

FAQ

Boc MCP бесплатный?

Да, Boc MCP бесплатный — установка в пару кликов через Unyly без оплаты.

Нужен ли API-ключ для Boc?

Нет, Boc работает без API-ключей и переменных окружения.

Boc — hosted или self-hosted?

Доступен hosted-вариант: Unyly запускает сервер в облаке, локальная установка не обязательна.

Как установить Boc в Claude Desktop, Claude Code или Cursor?

Открой Boc на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.

Похожие MCP

Compare Boc with

Не уверен что выбрать?

Найди свой стек за 60 секунд

Автор?

Embed-бейдж для README

Похожее

Все в категории development