
# 基于DWS MCP Server搭建数据分析Agent
在企业数据分析和运营决策过程中，业务人员常需从数据仓库提取数据并生成分析报告。传统模式下，业务人员需将数据需求提交给开发人员，由开发人员编写SQL语句查询数据，再将结果反馈给业务人员。这一流程通常耗时数天，频繁的沟通迭代进一步拖慢了决策效率。
随着大语言模型（LLM）技术的成熟，是否存在一种方式能让业务人员直接使用自然语言与数据库交互，无需编写SQL即可完成数据查询与分析？
**DWS MCP Server** 正是为解决这一需求而生的方案。它基于**MCP（Model Context Protocol）协议**，将DWS数据库的元数据查询、SQL执行等能力以标准化工具接口暴露给大模型，使LLM能够自动理解数据库结构、生成SQL语句并执行查询，最终将查询结果进行业务解读与可视化呈现。
通过本实践，您可以快速搭建一个以**DWS + MCP + LLM** 为核心的数据分析Agent，实现"**自然语言提问 \> 自动生成SQL \> 查询执行 \> 分析报告**"的一键式数据服务。
#### 基本概念
在开始配置之前，了解以下核心概念有助于您更好地理解本文档的操作背景。
- **MCP（Model Context Protocol）**：由Anthropic于2024年11月提出的开放协议标准，旨在解决大语言模型与外部系统（如数据库、API）交互的碎片化问题。MCP通过标准化接口，让LLM动态理解工具功能并执行操作，降低集成成本。类比理解：MCP之于AI应用，相当于USB之于外设------提供统一的标准接口，让不同系统可以即插即用。
- **MCP Server**：实现了MCP协议的服务端程序，负责将特定系统（如数据库）的能力以Tools和Resources的形式暴露给支持MCP协议的客户端。本文中的DWS MCP Server即是一个将DWS数据库能力暴露给LLM的服务端。
- **MCP Client**：支持MCP协议的客户端应用，负责与MCP Server通信并向LLM转发工具调用请求。常见的MCP客户端包括Cline（VS Code插件）、Claude Desktop等。
- **Agent（智能体）**：基于LLM构建的自动化系统，能够根据用户输入的自然语言指令，自主规划任务步骤、调用外部工具并完成复杂工作流。本文搭建的数据分析Agent即为一个能够自动查询数据库并生成分析报告的智能体。
- **uv**：一个高性能的Python包管理器和运行器，用Rust编写，可快速安装和运行Python项目。在本实践中用于启动DWS MCP Server。可通过pip install uv安装。
- **Psycopg2**：Python语言中最流行的PostgreSQL数据库适配器，DWS基于PostgreSQL内核，因此使用Psycopg2作为DWS MCP Server与数据库之间的连接驱动。
 
#### 功能介绍
DWS MCP Server目前支持元数据查询、语句执行、监控信息查询等基本功能，以MCP协议中的工具（Tools）和资源（Resource）两种形式向支持MCP协议的客户端暴露。相关工具和资源参见[表1]和[表2]。
 表1数据库管理工具（Tools） 
| 名称                 | 描述                               |
|:---|:---|
| **list_databases** | 列出所有数据库。                         |
| **get_activity**   | 从 pgxc_stat_activity视图获取最近的查询活动。 |
| **execute_query**  | 执行 SQL 查询。                       |
| **list_schemas**   | 列出当前数据库中的所有模式。                   |
| **list_tables**    | 列出指定模式下的所有表。                     |
| **list_views**     | 列出指定模式下的所有视图。                    |
| **get_table_info** | 获取表/视图的定义。                       |
| **get_comment**    | 获取模式/表的注释。                       |
   
 表2可用资源（Resources） 
| 资源URI                                  | 功能说明              |
|:---|:---|
| gaussdb:///{schema}/tables             | 列出指定模式下的所有表       |
| gaussdb:///{schema}/views              | 列出指定模式下的所有视图      |
| gaussdb:///{schema}/{table}/attributes | 列出指定表/视图所有的列      |
| system:///{system_path}                | 系统信息（例如 /version） |
   
#### 前提条件
- 已创建DWS集群，且集群状态为"可用"。如需创建集群，请参见[创建DWS存算分离集群](https://support.huaweicloud.com/mgtg-dws/dws_01_0219.html) 。
- 已获取DWS集群的连接信息（主机IP、端口号、数据库名、用户名及密码）。参见[获取DWS集群连接地址](https://support.huaweicloud.com/mgtg-dws/dws_01_0033.html)。
- 客户端所在环境与DWS集群之间网络连通。如果集群为内网访问，需确保客户端与集群在同一VPC下；如需公网访问，请先绑定弹性公网IP。
- Python版本为3.10及以上。可通过命令python --version或python3 --version查看当前版本。
- uv版本为0.6.7及以上。可通过命令uv --version查看当前版本；如未安装，执行pip install uv安装。
- 已安装VS Code编辑器并安装Cline插件。如使用其他MCP客户端（如Claude Desktop），需确保客户端支持MCP协议的stdio传输方式。
 
#### 步骤一：搭建Agent和配置Server
以下使用Cline作为客户端演示如何配置使用DWS MCP Server。您也可根据需求选择其他支持MCP协议的客户端（如Claude Desktop等），配置方式类似。
1. 从GitHub下载DWS MCP Server源码到本地环境。 
   1. 打开VS Code，按下Ctrl + \`（反引号，即键盘左上角Esc下方的按键）打开终端面板。也可通过菜单栏**终端 → 新建终端**打开。
   
   2. 在终端中执行以下命令下载或更新uv。
      如果已安装uv可跳过此步骤。
      ```
      pip install uv
      ```
      
   
   3. 在终端中执行以下命令克隆源码仓库：
      ```
      git clone https://github.com/HuaweiCloudDeveloper/mcp-server.git
      ```
      注意源码默认下载到**huaweicloud_dws_mcp_inner**目录下，请在后续Cline配置步骤中进行设置。例如，若在/home/user/下执行clone，则该目录路径为/home/user/mcp-server/huaweicloud_dws_mcp_inner。
      ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002662913763.png "点击放大")
      
      
   
   
   
   
2. 为Cline配置大模型访问凭证，使其能够调用LLM进行自然语言推理与工具调用。 
   1. 单击Cline对话面板右上角的**齿轮图标**（设置按钮），进入Cline设置界面。
   
   2. 在设置界面的**API Configuration** 区域，根据自身使用情况填入以下信息：
      - **API Provider**：选择您使用的大模型服务商（如OpenAI、Anthropic等）。
      
      - **OpenAI Compatible API Key**：填入对应的API密钥。
       
   
   3. 填写完成后，设置会自动保存。
   
   
   ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002632761222.png "点击放大")
   
   
3. **配置MCP Server** 。将DWS MCP Server注册到Cline客户端，使其能够发现并调用DWS数据库工具。
   
   1. 单击Cline对话面板右上角的MCP图标，进入MCP配置界面。
   
   2. 单击**Installed** 页签，在下方单击**Configure MCP Servers**按钮，此时会打开一个JSON配置文件。
   
   3. 在配置文件中填入以下DWS MCP Server配置，各参数说明参见[表3]。
      ```
      {
        "mcpServers": {
          "DWS": {
            "disabled": false,
            "timeout": 60,
            "type": "stdio",
            "command": "uv",
            "args": [
              "--directory",
              "/path/to/huaweicloud_dws_mcp_inner",
              "run",
              "server.py"
            ],
            "env": {
              "DB_HOST": "192.168.0.1",
              "DB_PORT": "8000",
              "DB_NAME": "gaussdb",
              "DB_USER": "dbadmin",
              "DB_PWD": "password"
            }
          }
        }
      }
      ```
      
       表3Cline参数说明 
      | 参数名称                               | 描述                | 示例                                  |
      |:---|:---|:---|
      | /path/to/huaweicloud_dws_mcp_inner | MCP Server源码所在目录。 | 替换为huaweicloud_dws_mcp_inner目录所在路径。 |
      | host_ip                            | DWS集群IP地址。        | 192.168.0.1                         |
      | port_no                            | DWS集群端口号。         | 8000                                |
      | database                           | DWS数据库名称。         | gaussdb                             |
      | username                           | DWS数据库用户名称。       | dbadmin                             |
      | password                           | DWS数据库用户密码。       | -                                   |
         
      
   
   
   
   
4. 如果因网络问题无法使用uv，可以**通过python启动server** ，步骤如下。
   
   1. 在源码目录下通过pip安装dws-mcp-server。
      ```
      pip install .
      ```
      
   
   2. 将Cline的MCP Server配置更换为如下参数。注意，/path/to/huaweicloud_dws_mcp_inner/src/server.py 替换为 DWS MCP Server 源码中server.py的完整路径。
      ```
      {
        "mcpServers": {
          "DWS": {
            "disabled": false,
            "timeout": 60,
            "type": "stdio",
            "command": "python",
            "args": [
              "/path/to/huaweicloud_dws_mcp_inner/src/server.py",
            ],
            "env": {
              "DB_HOST": "host_ip",
              "DB_PORT": "port_no",
              "DB_NAME": "database",
              "DB_USER": "username",
              "DB_PWD": "password"
            }
          }
        }
      }
      ```
      保存配置信息后，观察Cline MCP页面是否成功加载DWS MCP Server，如能够加载DWS Server并显示对应工具及资源，说明配置成功。
      ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002663092027.png "点击放大")
      
      
   
   
   
   
5. DWS MCP Server通过 Psycopg2 连接集群，需要放通DWS安全组网络。 
   1. 进入[DWS控制台](https://console.huaweicloud.com/dws)，左侧导航栏单击"集群 \> 集群列表"，单击集群名称进入DWS集群详情。
   
   2. 单击安全组名称。
      图1DWS安全组   
      ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002632879052.png "点击放大") 
   
   3. 选择"入方向规则 "，检查是否已放通端口为8000的所有IP。如下图，如果没有则手动添加一条规则。
      ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002633038974.png "点击放大")
      
      
   
   
   
   
 
#### 步骤二：使用自然语言完成SQL查询并生成报表
完成客户端及集群相关配置后，即可开始使用数据分析Agent。以下以Cline为客户端，基于TPC-DS数据集进行演示。
**演示场景**：根据TPC-DS相关表的数据，对1998\~2002年间的销售情况进行分析并提出洞察与建议，最终交付数据分析报告。
DWS MCP Server为LLM提供了准确的数据来源，依赖模型的推理和分析能力，您可以在无需手动编写SQL查询语句的情况下获取数据，用自然语言一键式完成查询，并进一步借助LLM对数据进行初步的分析和洞察。
1. 在Cline的对话框中输入需要完成的数据分析任务的Prompt。例如： 
   "请根据数据库中的TPC-DS数据，分析1998年至2002年间的销售趋势，包括年度销售额变化、热销品类排名、季节性波动等，并给出业务建议。"
   ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002663354395.png "点击放大")
   
   
2. 发送任务后，Cline会调用模型并依据推理结果发起一系列tools或resource的调用请求(如下显示)。 
   大部分无需干预，您只需要观察请求主体并**选择同意** （可以按需开启自动同意执行）。
   - **解析任务并生成执行计划** 。模型理解用户意图，拆解分析任务为多个子步骤。
     ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002663275149.png "点击放大")
     ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002633036014.png "点击放大")
     
   
   - **调用工具获取元数据** 。模型自动调用list_tables、get_table_info等工具（参见[表1]），了解数据库中有哪些表以及表结构。
     ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002633036050.png "点击放大")
     ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002663275381.png "点击放大")
     
   
   - **生成SQL并执行查询** 。根据元数据信息，模型推理并生成查询SQL，调用execute_query工具获取具体数据。
     ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002632877448.png "点击放大")
     
   
   - **生成分析报告** 。模型将查询结果整理为结构化的分析报告，包含数据表格和业务解读。
     ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002633042282.png "点击放大")
     ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002632883028.png "点击放大")
     ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002663282581.png "点击放大")
     ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002633043676.png "点击放大")
     
   
   - **输出总结** 。模型给出关键洞察和业务建议。
     ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002663283327.png "点击放大")
     
    
   
   
 
#### 总结
通过搭建DWS MCP Server，企业与数据分析团队可以将自然语言对话与DWS数据仓库无缝衔接，实现"一键查询、自动化报表、动态分析"的全链路数据服务。按本实践步骤完成配置后，LLM将直接识别MCP工具接口（如list_databases、execute_query等），在安全约束内调用接口进行SQL生成与执行。元数据查询（schema、tables、views）与业务查询结果无缝串联，随后模型可立即进行业务解读、可视化图表与洞察报告的自动生成。该方案不仅显著降低了传统SQL开发的门槛和运维成本，还提升了数据迭代的响应速度，为数据驱动决策提供了高度可靠且易扩展的技术平台。
