# Autopilot MCP
#### 简介
MCP（Model Context Protocol）是由 Anthropic 于 2024 年 11 月提出的开放协议标准，旨在解决大型语言模型与外部系统（如数据库、API）交互的碎片化问题。通过标准化接口，让 LLM 动态理解工具功能并执行操作，降低集成成本。
DWS Autopilot MCP Server 是 DWS AI 诊断体系中的关键组件，为 Skill 提供集群监控指标查询的工具接口。Skill 通过 MCP Server 获取集群的 CPU、内存、I/O 等实时监控数据，作为诊断的事实依据。
```
用户 → AI 对话窗口 → Skill（诊断逻辑）→ MCP Server（指标查询）→ DWS Autopilot API → 集群监控数据
```
单击[github地址](https://github.com/huaweicloud/dws_ai_native/tree/dws_autopilot_mcp_server/hwcloud_dws_mcp_mag)获取。
#### 功能介绍
#### 工具
DWS Autopilot MCP Server 提供以下工具：
1. **dws_autopilot_get_clusters** 查询 DWS 集群列表，无需参数。
2. **dws_autopilot_get_hosts** 查询 DWS 集群节点信息，支持过滤、分页、排序。
   - 必填：cluster_id（字符串）--- 集群 ID
   
   - 可选过滤：filter（host_name / work_ip）、value、sub_filter、sub_value
   
   - 可选分页：page_size（默认 10，最大 2000）、page_num（默认 1）、offset（默认 0）、limit（默认 512）
   
   - 可选排序：order_by（cpu_usage、mem_usage、disk_usage_avg、disk_io、tcp_resend_rate、net_io）、sort_by（ASC / DESC，默认 DESC）
    
3. **dws_autopilot_get_metric** 查询 DWS 集群指标时序数据。
   - 必填：cluster_id（字符串）、metric_name（字符串）、from_ts（13 位 Unix 时间戳，毫秒）、to_ts（13 位 Unix 时间戳，毫秒）
   
   - 支持的指标：cpu_usage、mem_usage、disk_usage_avg、tcp_resend_rate、disk_io、net_io、cpu_io_diagnose_detail（返回包含 query_id 和 query 字段的逐查询详情）
   
   - 可选：offset（默认 0）、limit（最大 1000，默认 50）、order_by、sort_by（ASC / DESC）
    
 
#### 认证方式
采用 AK/SK 签名认证：
- **AK/SK 签名模式**：使用华为云 Access Key（AK）和 Secret Key（SK）对每个 API 请求进行签名，签名后自动添加 Authorization 和 X-Sdk-Date 请求头完成认证。
- 如果配置了 project_id，会自动添加 X-Project-Id 请求头，用于多项目场景。
 
#### 配置加密
敏感字段（AK、SK）支持 AES-256-GCM 加密存储：
- 启动 MCP Server 时自动检测明文并加密
- 基于机器指纹的密钥保护，绑定当前机器环境
- 主密钥双重保护：crypter（存储在 yaml）+ cryptComponent（存储在 crypt.json）
 
#### 安装与配置
#### 环境准备
- Python 3.10 及以上
- pip 包管理器
 
#### 安装
```
# 克隆源码
git clone <repo_url>
cd dws_autopilot_mcp
# 安装依赖
pip install .
```
#### 配置说明
配置文件位于 conf/dws_config.yaml，首次使用需填写配置：
```
region_id: "cn-north-7"
ak: "your_access_key"
sk: "your_secret_key"
project_id: "your_project_id"
http_proxy: "http://proxy.example.com:8080"
https_proxy: "http://proxy.example.com:8080"
proxy_username: "your_proxy_user"
proxy_password: "your_proxy_password"
```
表1**参数说明** 
| 参数           | 说明                                                           | 示例                               |
|:---|:---|:---|
| region_id     | 华为云区域 ID，用于自动生成 API 端点                                       | cn-north-7                       |
| ak            | 华为云 Access Key（明文输入，启动后自动加密）                                 | ---                           |
| sk            | 华为云 Secret Key（明文输入，启动后自动加密）                                | ---                              |
| project_id       | 项目 ID，用于多项目场景的 X-Project-Id 请求头                            | ---                            |
| http_proxy    | HTTP 代理地址（可直接包含认证信息，也可通过 proxy_username/proxy_password 单独配置） | http://proxy.example.com:8080 |
| https_proxy    | HTTPS 代理地址                                                  | http://proxy.example.com:8080    |
| proxy_username | 代理认证用户名（自动注入代理 URL，密码自动 percent-encoding）                  | ---                            |
| proxy_password  | 代理认证密码（自动 percent-encoding 并注入代理 URL）                       | ---                             |
   
region_id 会自动生成 DMS_MONITORING_BASE_URL（https://dws.{region_id}.myhuaweicloud.com），无需手动配置。
#### 配置管理 CLI
安装后提供 dws-mcp-config 命令行工具，需在项目根目录（dws_autopilot_mcp/）下执行：
**init - 初始化/更新配置**
init 命令用于设置配置参数：
```
python -m dws_autopilot_mcp.config_cli init --region_id cn-north-7 --ak your_ak --sk your_sk --project_id your_project_id
```
init 命令支持部分更新，仅更新指定的参数，未指定的参数保持不变。例如只更新 AK：python -m dws_autopilot_mcp.config_cli init --ak new_ak。
更新配置后，重启 MCP Server 即可自动加密敏感字段（AK、SK）。
**其他命令**
```
# 手动触发加密（将明文敏感字段加密，启动 MCP Server 时也会自动执行）
python -m dws_autopilot_mcp.config_cli encrypt
# 查看配置状态（敏感信息以 ****** 显示，不会泄露）
python -m dws_autopilot_mcp.config_cli show
# 重置配置为空模板（清空所有参数，删除 crypt.json）
python -m dws_autopilot_mcp.config_cli reset
```
encrypt、show、reset 命令无需额外参数。
#### 客户端配置
以 OpenCode 为例，在 MCP Servers 配置中添加：
```
{
  "dws_autopilot_mcp": {
    "type": "local",
    "command": [
      "/path/to/python.exe",
      "-m",
      "dws_autopilot_mcp.server"
    ],
    "environment": {
      "PYTHONPATH": "/path/to/dws_autopilot_mcp/src"
    }
  }
}
```
将 /path/to/python.exe 替换为本机 Python 可执行文件路径，/path/to/dws_autopilot_mcp/src 替换为本项目 src 目录的绝对路径。Windows 下 PYTHONPATH 使用 ; 分隔，Linux/macOS 使用 : 分隔。
也可通过环境变量 DWS_MCP_CONFIG 指定配置文件路径。
#### 开始体验
完成配置后，即可在客户端中通过自然语言与 DWS 集群交互，例如：
- "查询 XXXX 集群节点信息"
- "查看 XXXX 集群最近 1 小时的 CPU 使用率"
- "我的 DWS 集群 CPU 使用率很高，帮忙诊断一下"
- "检查这条 SQL 的语法：SELECT \* FROM t1"
 
#### MCP Server 在 AI 诊断中的角色
在 DWS AI 诊断体系中，MCP Server 承担以下角色：
表2MCP Server 在 AI 诊断中的角色 
| 角色    | 说明                                                                                                                         |
|:---|:---|
| 数据通道  | 作为 Skill 获取集群监控指标的通道                                                                                                       |
| 参数补全 | I/O 诊断中，当用户未提供 project_id/region_id 时，自动从 MCP Server 配置文件中读取                                                                |
| 指标查询   | 提供 dws_autopilot_get_metric 工具，支持 CpuStat、MemStat、IOStat、InstanceMemory、cpu_io_diagnose_detail、memory_diagnose_detail 等指标查询 |
   
