使用说明
ClickHouse MCP代理
一个AI驱动的代理,使用自然语言查询与ClickHouse数据库进行交互。使用模型上下文协议(MCP)和Claude AI构建。
概述
该项目由两个主要部分组成:
- ClickHouse MCP服务器 (
clickhouse_mcp_server.py)-将ClickHouse数据库操作作为工具公开的MCP服务器 - 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包(请参阅安装)
安装
- 克隆存储库:
git clone <repository-url>
cd clickhouse-agent
- 安装依赖项:
pip install anthropic python-dotenv mcp clickhouse-connect
- 创建一个
.env文件,并添加您的Anthropic API密钥:
ANTHROPIC_API_KEY=your_api_key_here
- 配置ClickHouse连接:
- 更新中的连接参数
clickhouse_mcp_server.py(第10-11行)以匹配您的ClickHouse设置 - 如果需要,更新服务器中的用户文件目录路径
- 更新中的连接参数
用法
启动客户端
运行MCP客户端以启动交互式会话:
python mcp_client.py
客户将:
- 连接到ClickHouse MCP服务器
- 加载可用工具
- 启动交互式聊天循环
查询示例
客户端运行后,您可以问自然语言问题:
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?
运作原理
- 您输入自然语言查询
- 客户端将您的查询与可用的MCP工具一起发送给Claude AI
- Claude分析查询并确定使用哪些工具
- 客户端在ClickHouse MCP服务器上执行所选工具
- 结果将发送回Claude进行处理
- 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服务器添加新工具,请执行以下操作:
- 打开
clickhouse_mcp_server.py - 添加一个新功能,用
@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}"
}
- 重新启动客户端以加载新工具
局限性
- Claude API调用需要活动的互联网连接
- API费用适用于每个Claude API调用
- 必须可以从运行MCP服务器的计算机访问ClickHouse服务器
- 文件操作采用特定的目录结构(可配置)
贡献
欢迎投稿!请随时提交拉取请求。
致谢
- 内置于 模型上下文协议(MCP)
- 由...驱动 克劳德·艾 来自Anthropic
- 用途 ClickHouse 用于数据存储和查询
支持
对于问题、疑问或贡献,请在GitHub上打开问题。
