ClickHouse自然语言查询代理

一个基于AI的代理,通过自然语言查询与ClickHouse数据库交互,支持表管理、数据查询和文件导入等功能。

  • by git-aditya-star
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 git-aditya-star/clickhouse-mcp-agent

使用说明

ClickHouse MCP代理

一个AI驱动的代理,使用自然语言查询与ClickHouse数据库进行交互。使用模型上下文协议(MCP)和Claude AI构建。

概述

该项目由两个主要部分组成:

  1. ClickHouse MCP服务器 (clickhouse_mcp_server.py)-将ClickHouse数据库操作作为工具公开的MCP服务器
  2. MCP客户端 (mcp_client.py)-使用Claude AI处理自然语言查询并自动执行适当ClickHouse操作的智能客户端

特性

ClickHouse MCP服务器工具

  • 获取表格:列出ClickHouse数据库中的所有表
  • 执行查询:运行任何ClickHouse SQL查询并获取结果
  • 文件管理:在ClickHouse用户文件目录中列出CSV和Parquet文件
  • 导入数据:将CSV/Parquet文件复制到ClickHouse用户文件目录
  • 创建表格:直接从CSV文件创建ClickHouse表
  • 放下桌子:从数据库中删除表

MCP客户端功能

  • 基于Claude AI的自然语言查询处理
  • 自动工具选择和执行
  • 多步骤工具调用处理
  • 用于成本控制的API调用限制
  • 交互式聊天界面
  • 详细的执行日志记录

先决条件

  • Python 3.10+
  • ClickHouse服务器在本地运行或可通过网络访问
  • Anthropic API密钥(用于Claude AI)
  • 必需的Python包(请参阅安装)

安装

  1. 克隆存储库:
git clone <repository-url>
cd clickhouse-agent
  1. 安装依赖项:
pip install anthropic python-dotenv mcp clickhouse-connect
  1. 创建一个 .env 文件,并添加您的Anthropic API密钥:
ANTHROPIC_API_KEY=your_api_key_here
  1. 配置ClickHouse连接:
    • 更新中的连接参数 clickhouse_mcp_server.py (第10-11行)以匹配您的ClickHouse设置
    • 如果需要,更新服务器中的用户文件目录路径

用法

启动客户端

运行MCP客户端以启动交互式会话:

python mcp_client.py

客户将:

  1. 连接到ClickHouse MCP服务器
  2. 加载可用工具
  3. 启动交互式聊天循环

查询示例

客户端运行后,您可以问自然语言问题:

Query: What tables are available in the database?

Query: Show me the first 10 rows from the orders table

Query: Find all orders where the shipping city is different from the billing city

Query: Create a table called customer_data from the customers.csv file

Query: What are the top 5 products by total order amount?

运作原理

  1. 您输入自然语言查询
  2. 客户端将您的查询与可用的MCP工具一起发送给Claude AI
  3. Claude分析查询并确定使用哪些工具
  4. 客户端在ClickHouse MCP服务器上执行所选工具
  5. 结果将发送回Claude进行处理
  6. Claude为结果提供了自然语言响应

API调用限制

客户端有一个内置的API调用限制(默认:每个会话20个调用)来控制成本。您可以在中修改此内容 mcp_client.py 通过改变 max_total_api_calls 参数。

配置

ClickHouse连接

编辑 clickhouse_mcp_server.py 要配置ClickHouse连接,请执行以下操作:

clickhouse_client = clickhouse_connect.get_client(
    host='your_host',
    port=your_port,
    username='your_username',
    password='your_password'  # if required
)

MCP服务器选择

默认情况下, mcp_client.py 连接到 clickhouse_mcp_server.py。您可以通过修改以下内容来更改服务器:

SERVER_SCRIPT_PATH = "clickhouse_mcp_server.py"

项目结构

clickhouse-agent/
├── clickhouse_mcp_server.py   # MCP server with ClickHouse tools
├── mcp_client.py               # AI-powered MCP client
├── .env                        # Environment variables (API keys)
├── README.md                   # This file
└── csv_files/                  # Sample CSV files (if any)

建筑

┌─────────────────┐
│   User Query    │
│  (Natural Lang) │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│   MCP Client    │
│  (mcp_client)   │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│   Claude API    │
│  (Anthropic)    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│   MCP Server    │
│  (clickhouse)   │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│   ClickHouse    │
│    Database     │
└─────────────────┘

错误处理

客户端包括全面的错误处理:

  • API调用限制强制执行
  • 连接错误管理
  • 工具执行错误报告
  • 调试详细日志记录

发展

添加新工具

要向ClickHouse MCP服务器添加新工具,请执行以下操作:

  1. 打开 clickhouse_mcp_server.py
  2. 添加一个新功能,用 @mcp.tool():
@mcp.tool()
async def your_new_tool(param1: str, param2: int) -> dict[str, Any]:
    """Description of what your tool does"""
    try:
        # Your implementation
        return {
            "status": "success",
            "data": result
        }
    except Exception as e:
        return {
            "status": "error",
            "message": f"Error: {e}"
        }
  1. 重新启动客户端以加载新工具

局限性

  • Claude API调用需要活动的互联网连接
  • API费用适用于每个Claude API调用
  • 必须可以从运行MCP服务器的计算机访问ClickHouse服务器
  • 文件操作采用特定的目录结构(可配置)

贡献

欢迎投稿!请随时提交拉取请求。

致谢

支持

对于问题、疑问或贡献,请在GitHub上打开问题。