CMDB助手

专为Sangfor CMDB工作流设计的轻量级服务,提供域名查询/创建工具及相关资源支持,使LLM客户端能够处理CMDB数据。

  • by a5006
  • Python
  • 本地部署
  • 更新于

使用说明

FastMCP CMDB助手

专为Sangfor CMDB工作流设计的最小FastMCP服务器。它只暴露了 域查找/创建工具以及支持资源(产品线、Zeus 用户目录),因此LLM客户端可以在没有任何演示的情况下对CMDB数据进行推理 城市提示或回声助手等功能。

项目布局

.
├─ app.py              # Builds the FastMCP instance and runs the server
├─ config.py           # ProjectConfig with CMDB + Zeus endpoint helpers
├─ logging_config.py   # Rich console + file logging setup
├─ resources/          # CMDB product lines + Zeus users @resource definitions
├─ tools/              # CMDB domain tools (list + create)
├─ fastmcp.json        # FastMCP CLI config (transport / host / port)
├─ pyproject.toml
├─ requirements.txt
└─ README.md

设置

python -m venv .venv
.\.venv\Scripts\activate
pip install -e ".[dev]"
fastmcp dev                # uses fastmcp.json (HTTP + SSE)

集 CMDB_COOKIE 在你的壳或 .env 因此,工具和资源都可以调用 Sangfor终点。

配置

ProjectConfig 定义:

  • cmdb_base_url:默认为 https://rudder.sangfor.com/cmdb/api/v1.
  • cmdb_cookie:已从 CMDB_COOKIE.
  • product_lines_url, user_directory_url, list_children_url, post_domain_url:派生助手,因此每个模块都使用一致的URL。

工具(tools/cmdb.py)

  • exist_cmdb-domain_list –获取 /deploy/tree/root/children/list
    • 参数: page, rows (默认值为10000), productId, childrenType.
    • 退货 { query, total, domains[], raw }.
    • domains[] 字段包括:
      • addr: unique domain/addr string (主键,用于匹配/去重).
      • domainId/id, productId, productName, teamId, teamName.
      • 联络: devBy, opsBy, useBy.
      • 网络元数据: domainType, domainTypeName, serveType, recordType, reflectAddr, regionId, regionName.
      • 审核信息: createdAt, updatedAt, createBy, updateBy.
  • create_cmdbdomain –帖子 /deploy/domain
    • Payload反映CMDB UI字段(addr, productId, teamId, serveType, domainType, status, regionId、联系人、描述)。
    • 响应返回 { request, result } 为了可追溯性。

这两个工具都验证了这一点 cmdb_cookie 在发出请求之前设置。

资源(resources/__init__.py)

  • cmdb://product-lines
    • 呼叫 product_lines_url.
    • 答复: { rows: 1000, products[], raw }.
    • products[] 领域: product_id, product_name, business_id, business_dept.显示器 product_name,但发送 product_id CMDB API。
  • zeus://users{?rows}
    • 呼叫 user_directory_url 可配置 rows (默认值为1000)。
    • 答复: { rows, users[], raw }.
    • users[] 领域: id, name 账户 display_name, full_name (优先使用), group, role.

日志记录

logging_config.py 将富日志路由到控制台 logs/fastmcp.log. 在工具/资源范围内,使用 ctx.info/ctx.error 因此MCP客户端接收 操作运行时的进度更新。

中文速览

  • 该项目仅保留 CMDB 相关能力:exist_cmdb_domain_list / create_cmdb_domain 工具,以及 cmdb://product-lines、zeus://users 资源。
  • addr 是域名查询结果的唯一键,LLM 去重或匹配时务必按 addr 判断。
  • product_name 适合给用户展示,但在 POST/GET 参数中必须传 product_id。
  • full_name(姓名+工号)是 Zeus 用户目录的首选匹配字段。
  • 启动前在环境变量或 .env 中设置 CMDB_COOKIE,再运行 fastmcp dev 即可通过 MCP 客户端调用以上能力。