关于 DuckDB MCP Server
DuckDB MCP Server 是一个 MCP 服务,让 AI 助手可以通过纯 SQL 访问 DuckDB,查询本地文件、S3 存储桶和内存数据。适合需要用 AI 辅助分析数据的用户。该项目提供只读模式和 S3 凭证配置等选项。
主要功能
- 01通过 SQL 查询本地 CSV、Parquet 和 JSON 文件
- 02直接查询或缓存 S3 / GCS 存储桶数据
- 03统计字段类型、行数、数值与日期范围
- 04根据列类型给出图表类型与查询建议
- 05提供 DuckDB SQL 扩展的文档资源
适用场景
- 01让 AI 助手对本地销售数据文件做汇总分析
- 02将 S3 中的 Parquet 数据缓存为本地表后进行查询
- 03在共享数据库上以只读模式供 AI 助手访问
MCP 相关
该项目是 MCP 服务,向 Claude Desktop、Cursor、VS Code 等 MCP 客户端暴露 query、analyze_schema、analyze_data、suggest_visualizations 和 create_session 等工具,以及三个文档资源。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
DuckDB MCP 服务
一个 Model Context Protocol (MCP) 服务,可让 AI 助手全面访问 DuckDB——使用纯 SQL 查询本地文件、S3 存储桶和内存数据。
🌟 什么是 DuckDB MCP Server?
功能
此服务可向任何兼容 MCP 的客户端(Claude Desktop、Cursor、VS Code 等)开放 DuckDB。助手可以:
- 对本地 CSV、Parquet 和 JSON 文件运行任意 SQL
- 直接查询 S3 / GCS 存储桶,或将其缓存为本地表
- 检查架构、计算统计数据并推荐可视化图表
- 使用 DuckDB 的分析型 SQL 扩展(窗口函数、
GROUP BY ALL、SELECT * EXCLUDE等)
工具
| 工具 | 说明 |
|---|---|
query | 执行任意 SQL 查询。结果最多返回 10 000 行。 |
analyze_schema | 描述文件或表的列和类型。 |
analyze_data | 行数、数值统计信息(最小值/最大值/平均值/中位数)、日期范围、最常见的分类值。 |
suggest_visualizations | 根据列类型推荐图表类型和可直接运行的 SQL 查询。 |
create_session | 创建或重置会话,以跟踪跨调用上下文。 |
资源
助手始终可以使用 3 个内置的 XML 文档资源:
| 资源 URI | 内容 |
|---|---|
duckdb-ref://friendly-sql | DuckDB SQL 扩展(GROUP BY ALL、SELECT * EXCLUDE/REPLACE、FROM-first 语法等) |
duckdb-ref://data-import | 加载 CSV、Parquet、JSON 和 S3/GCS 数据;glob 模式;读取多个文件 |
duckdb-ref://visualization | 时间序列图、柱状图、散点图和热力图的图表模式与查询模板 |
要求
- Python 3.10+
- 兼容 MCP 的客户端
安装
pip install duckdb-mcp-server
从源代码安装:
git clone https://github.com/mustafahasankhan/duckdb-mcp-server.git
cd duckdb-mcp-server
pip install -e .
配置
duckdb-mcp-server --db-path <path> [options]
| 标志 | 必需 | 说明 |
|---|---|---|
--db-path | 是 | DuckDB 文件的路径。如果文件不存在,则自动创建。 |
--readonly | 否 | 以只读模式打开数据库。如果文件不存在,则报错。 |
--s3-region | 否 | AWS 区域。默认使用 AWS_DEFAULT_REGION 环境变量,其次使用 us-east-1。 |
--s3-profile | 否 | AWS 配置文件名称。默认使用 AWS_PROFILE 环境变量,其次使用 default。 |
--creds-from-env | 否 | 从环境中读取 AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY。 |
客户端设置
Claude Desktop
编辑 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或 %APPDATA%\Claude\claude_desktop_config.json(Windows):
{
"mcpServers": {
"duckdb": {
"command": "duckdb-mcp-server",
"args": ["--db-path", "~/claude-duckdb/data.db"]
}
}
}
使用 S3 访问权限
{
"mcpServers": {
"duckdb": {
"command": "duckdb-mcp-server",
"args": [
"--db-path", "~/claude-duckdb/data.db",
"--s3-region", "us-east-1",
"--creds-from-env"
],
"env": {
"AWS_ACCESS_KEY_ID": "YOUR_KEY",
"AWS_SECRET_ACCESS_KEY": "YOUR_SECRET"
}
}
}
}
只读模式
适用于数据库由多人共享或单独管理的情况:
{
"mcpServers": {
"duckdb": {
"command": "duckdb-mcp-server",
"args": ["--db-path", "/shared/analytics.db", "--readonly"]
}
}
}
对话示例
查询本地文件
“加载 sales.csv,并显示收入最高的 5 种产品。”
SELECT
product_name,
SUM(quantity * price) AS revenue
FROM read_csv('sales.csv')
GROUP BY ALL
ORDER BY revenue DESC
LIMIT 5;
使用 S3 数据
“缓存本月来自 S3 的注册数据,并按天汇总。”
-- Step 1: cache the remote data locally
CREATE TABLE signups AS
SELECT * FROM read_parquet('s3://my-bucket/signups/2026-03/*.parquet',
union_by_name = true);
-- Step 2: query the cached table
SELECT
date_trunc('day', signup_at) AS day,
COUNT(*) AS signups
FROM signups
GROUP BY ALL
ORDER BY day DESC;
统计分析
“为 orders 表提供统计摘要。”
助手会调用 analyze_data("orders"),返回行数、每列的数值统计信息、日期范围和最常见的分类值——无需你编写 SQL。
AWS 凭证解析顺序
- 环境变量(
--creds-from-env):AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY - 命名配置文件(
--s3-profile):读取~/.aws/credentials - 凭证链:环境变量 → 共享凭证文件 → 实例配置文件(EC2/ECS)
开发
git clone https://github.com/mustafahasankhan/duckdb-mcp-server.git
cd duckdb-mcp-server
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest
许可证
欢迎贡献!请随时提交 Pull Request。 MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。