项目简介
这是一个基于模型上下文协议(MCP)实现的服务器,旨在让兼容MCP的LLM客户端(如某些AI助手)能够直接与高性能的分析型数据库DuckDB进行交互。通过该服务器,LLM可以利用DuckDB强大的SQL能力来查询、分析本地文件、云存储(如S3)中的各种数据格式(如CSV、Parquet、JSON等)。
主要功能点
- SQL查询工具: LLM可以直接向DuckDB发送SQL查询并获取结果。
- 多源数据访问: 支持直接查询本地文件和云存储(如AWS S3)中的数据,无需预先加载。
- 数据分析工具: 提供分析文件或表中数据的模式(Schema)和统计信息的能力。
- 可视化建议: 基于数据内容,服务器可以建议适合的图表类型和对应的查询。
- 内置文档资源: 提供DuckDB SQL语法、数据导入方法、可视化指南等文档供LLM查阅。
- 会话管理: 支持管理多个交互会话,保持上下文。
- 自动连接/配置: 自动处理DuckDB数据库文件创建和连接管理,支持S3凭证配置。
安装步骤
确保您已安装 Python 3.10 或更高版本。然后可以使用 pip 安装:
pip install duckdb-mcp-server
或者从源码安装:
git clone https://github.com/mustafahasankhan/duckdb-mcp-server.git cd duckdb-mcp-server pip install -e .
服务器配置
此服务器通过命令行参数进行配置。MCP客户端需要知道如何启动这个服务器。典型的配置是在MCP客户端(如Claude Desktop)的配置文件中添加如下的 JSON 条目:
"mcpServers": { "duckdb": { "command": "duckdb-mcp-server", "args": [ "--db-path", "~/path/to/your/duckdb.db", "--readonly", // 可选:如果只需要读取现有数据 "--s3-region", // 可选:指定S3区域 "your-s3-region", "--s3-profile", // 可选:指定AWS配置档案名称 "your-aws-profile" // ... 其他参数 ] } }
参数说明:
- 'command': 'duckdb-mcp-server' (启动服务器的可执行命令)
- 'args': 一个数组,包含传递给服务器的命令行参数。
- '--db-path <路径>': 必需。指定DuckDB数据库文件的路径。如果文件不存在且非只读模式,将自动创建。支持使用 '~/' 表示用户主目录。
- '--readonly': 可选。以只读模式运行服务器。如果数据库文件不存在,只读模式下会报错。
- '--s3-region <区域>': 可选。指定AWS S3区域。默认尝试使用 'AWS_DEFAULT_REGION' 环境变量。
- '--s3-profile <档案名>': 可选。指定用于S3凭证的AWS配置档案名称。默认尝试使用 'AWS_PROFILE' 环境变量或 'default' 档案。
- '--creds-from-env': 可选。强制从环境变量加载AWS凭证。
基本使用方法
配置完成后,通过兼容的MCP客户端与LLM进行交互。您可以直接用自然语言指示LLM进行数据分析。LLM会根据您的指示,利用可用的MCP工具(查询、分析模式等)和资源(文档),生成并执行相应的DuckDB操作。
示例对话:
-
用户: "加载 'sales.csv' 文件并展示按收入排名的前5个产品。"
- LLM可能会先请求 'duckdb-ref://data-import' 资源查阅如何加载CSV,然后生成类似 'SELECT product_name, SUM(quantity * price) AS revenue FROM read_csv('sales.csv') GROUP BY product_name ORDER BY revenue DESC LIMIT 5;' 的SQL查询,并通过MCP的 'callTool' 方法发送给服务器执行,最后将结果返回给您。
-
用户: "分析S3存储桶 's3://my-data-bucket/analytics/*.parquet' 中用户签到的数据模式和统计信息。"
- LLM可能会先请求 'duckdb-ref://data-import' 查阅S3和Parquet导入方法,然后使用 'analyze_schema' 和 'analyze_data' 工具来获取信息。可能会建议将数据缓存到本地临时表以提高后续查询性能。
信息
分类
数据库与文件