项目简介

这是一个基于模型上下文协议(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' 工具来获取信息。可能会建议将数据缓存到本地临时表以提高后续查询性能。

信息

分类

数据库与文件