MotherDuck
官方使用 MotherDuck 和本地 DuckDB 查询和分析数据
你可以用 MotherDuck MCP 做什么?
-
运行 SQL 分析 — 让您的助手使用
execute_query查询本地 DuckDB 文件、内存数据库或 MotherDuck,支持完整的 DuckDB SQL 方言。 -
探索数据库结构 — 让您的助手使用
list_databases、list_tables和list_columns列出数据库、表和列,以了解您的数据模式。 -
切换数据库连接 — 指示您的助手通过
switch_database_connection在本地文件、S3 托管的数据库或 MotherDuck 之间即时切换(需要--allow-switch-databases标志)。 -
写入和修改数据 — 启用读写模式,让您的助手直接在已连接的数据库中插入、更新或删除记录。
-
摄取和导出数据 — 使用服务器在本地和远程数据库之间进行查询,从您的本地文件系统摄取数据或导出数据到本地文件系统。
托管 MCP 服务器
npx add-mcp 'https://api.motherduck.com/mcp'可安装到 Claude Code、Codex、Cursor 等客户端
文档
DuckDB / MotherDuck 本地 MCP 服务器
面向 AI 助手和 IDE 的 SQL 分析与数据工程。
使用 DuckDB 强大的分析型 SQL 引擎,将 AI 助手连接到您的数据。支持连接本地 DuckDB 文件、内存数据库、S3 托管的数据库以及 MotherDuck。允许执行 SQL 读写查询、浏览数据库目录,并可在不同数据库连接之间即时切换。
正在寻找适用于 MotherDuck 的完全托管远程 MCP 服务器? → 前往 MotherDuck 远程 MCP 文档
远程 MCP 与本地 MCP 对比
| 远程 MCP | 本地 MCP(本仓库) | |
|---|---|---|
| 托管方式 | 由 MotherDuck 托管 | 本地运行/自行托管 |
| 设置 | 零设置 | 需要本地安装 |
| 访问权限 | 支持读写 | 支持读写 |
| 本地文件系统 | - | 可跨本地和远程数据库查询,从本地文件系统导入数据 / 导出数据到本地文件系统 |
快速开始
前置条件:通过 pip install uv 或 brew install uv 安装 uv
连接到内存 DuckDB(开发模式)
{
"mcpServers": {
"DuckDB (in-memory, r/w)": {
"command": "uvx",
"args": ["mcp-server-motherduck", "--db-path", ":memory:", "--read-write", "--allow-switch-databases"]
}
}
}
完全灵活,无任何限制——支持读写访问,并可在运行时切换到任何数据库(本地文件、S3 或 MotherDuck)。
以只读模式连接到本地 DuckDB 文件
{
"mcpServers": {
"DuckDB (read-only)": {
"command": "uvx",
"args": ["mcp-server-motherduck", "--db-path", "/absolute/path/to/your.duckdb"]
}
}
}
以只读模式连接到特定的 DuckDB 文件。不会持有文件锁,因此可以方便地与对同一 DuckDB 文件的写入连接同时使用。您还可以使用 s3://bucket/path.duckdb 连接到 S3 上的远程 DuckDB 文件——有关 S3 身份验证,请参阅 环境变量。如果您考虑让第三方访问 MCP,请参阅 生产环境安全加固。
以读写模式连接到 MotherDuck
{
"mcpServers": {
"MotherDuck (local, r/w)": {
"command": "uvx",
"args": ["mcp-server-motherduck", "--db-path", "md:", "--read-write"],
"env": {
"motherduck_token": "<YOUR_MOTHERDUCK_TOKEN>"
}
}
}
}
有关更多选项,请参阅 命令行参数;有关部署指南,请参阅 生产环境安全加固;如果遇到问题,请参阅 故障排除。
客户端设置
| 客户端 | 配置位置 | 一键安装 |
|---|---|---|
| Claude Desktop | 设置 → 开发者 → 编辑配置 | .mcpb(MCP 捆绑包) |
| Claude Code | 使用下面的 CLI 命令 | - |
| Codex CLI | 使用下面的 CLI 命令或 ~/.codex/config.toml | - |
| Gemini CLI | 使用下面的 CLI 命令或 ~/.gemini/settings.json | - |
| Cursor | 设置 → MCP → 添加新的全局 MCP 服务器 | |
| VS Code | Ctrl+Shift+P → “首选项:打开用户设置(JSON)” | |
| Kiro | ~/.kiro/settings/mcp.json(全局)或 .kiro/settings/mcp.json(项目) |
任何兼容 MCP 的客户端都可以使用此服务器。将 快速开始 中的 JSON 配置添加到您客户端的 MCP 配置文件中。有关配置文件的位置,请查阅您客户端的文档。
Claude Code CLI 命令
内存 DuckDB(开发模式):
claude mcp add --scope user duckdb --transport stdio -- uvx mcp-server-motherduck --db-path :memory: --read-write --allow-switch-databases
本地 DuckDB(只读):
claude mcp add --scope user duckdb --transport stdio -- uvx mcp-server-motherduck --db-path /absolute/path/to/db.duckdb
MotherDuck(读写):
claude mcp add --scope user motherduck --transport stdio --env motherduck_token=YOUR_TOKEN -- uvx mcp-server-motherduck --db-path md: --read-write
Codex CLI 命令
内存 DuckDB(开发模式):
codex mcp add duckdb -- uvx mcp-server-motherduck --db-path :memory: --read-write --allow-switch-databases
本地 DuckDB(只读):
codex mcp add duckdb -- uvx mcp-server-motherduck --db-path /absolute/path/to/db.duckdb
MotherDuck(读写):
codex mcp add motherduck --env motherduck_token=YOUR_TOKEN -- uvx mcp-server-motherduck --db-path md: --read-write
Gemini CLI 命令
内存 DuckDB(开发模式):
gemini mcp add -s user duckdb uvx mcp-server-motherduck --db-path :memory: --read-write --allow-switch-databases
本地 DuckDB(只读):
gemini mcp add -s user duckdb uvx mcp-server-motherduck --db-path /absolute/path/to/db.duckdb
MotherDuck(读写):
gemini mcp add -s user -e motherduck_token=YOUR_TOKEN motherduck uvx mcp-server-motherduck --db-path md: --read-write
Kiro 手动 JSON 配置
将以下内容添加到您的 Kiro MCP 配置文件中(~/.kiro/settings/mcp.json 用于全局,或 .kiro/settings/mcp.json 用于项目级)。有关更多详细信息,请参阅 Kiro MCP 文档。
内存 DuckDB(开发模式):
{
"mcpServers": {
"DuckDB (in-memory, r/w)": {
"command": "uvx",
"args": ["mcp-server-motherduck", "--db-path", ":memory:", "--read-write", "--allow-switch-databases"]
}
}
}
MotherDuck(读写):
{
"mcpServers": {
"MotherDuck (local, r/w)": {
"command": "uvx",
"args": ["mcp-server-motherduck", "--db-path", "md:", "--read-write"],
"env": {
"motherduck_token": "<YOUR_MOTHERDUCK_TOKEN>"
}
}
}
}
工具
| 工具 | 描述 | 必需输入 | 可选输入 |
|---|---|---|---|
execute_query | 执行 SQL 查询(DuckDB 方言) | sql | - |
list_databases | 列出所有数据库(适用于 MotherDuck 或多个附加数据库) | - | - |
list_tables | 列出表和视图 | - | database, schema |
list_columns | 列出表/视图的列 | table | database, schema |
switch_database_connection* | 切换到不同的数据库 | path | create_if_not_exists |
*需要 --allow-switch-databases 标志
所有工具均返回 JSON。结果默认限制为 1024 行 / 50,000 个字符(可通过 --max-rows、--max-chars 配置)。
生产环境安全加固
当允许第三方访问自托管的 MCP 服务器时,仅只读模式是不够的——它仍然允许访问本地文件系统、更改 DuckDB 设置以及其他潜在敏感的操作。
对于需要第三方访问的生产部署,我们推荐 MotherDuck 远程 MCP——零设置、支持读写、由 MotherDuck 托管。
自行托管 MotherDuck MCP: 分叉此仓库并根据需要进行自定义。使用带有 读取扩展令牌 的 服务账户,并启用 SaaS 模式 以限制本地文件访问。
自行托管 DuckDB MCP: 使用 --init-sql 应用安全设置。有关可用选项,请参阅 保护 DuckDB 指南。
Docker
构建并运行服务器,使用 Streamable HTTP 在端口 8000 上运行(默认为内存 DuckDB):
docker build -t mcp-server-motherduck .
docker run --rm -p 8000:8000 mcp-server-motherduck
通过传递令牌并覆盖命令来连接到 MotherDuck:
docker run --rm -p 8000:8000 \
-e motherduck_token="$MOTHERDUCK_TOKEN" \
mcp-server-motherduck --transport http --db-path md:
MCP 端点可在 http://localhost:8000/mcp 处访问。下面的 CLI 标志和环境变量仍然适用。
命令行参数
| 参数 | 默认值 | 描述 |
|---|---|---|
--db-path | :memory: | 数据库路径:本地文件(绝对路径)、md:(MotherDuck)或 s3:// URL |
--motherduck-token | motherduck_token 环境变量 | MotherDuck 访问令牌 |
--read-write | False | 启用写入访问 |
--motherduck-saas-mode | False | MotherDuck SaaS 模式(限制本地访问) |
--allow-switch-databases | False | 启用 switch_database_connection 工具 |
--max-rows | 1024 | 返回的最大行数 |
--max-chars | 50000 | 返回的最大字符数 |
--query-timeout | -1 | 查询超时时间(秒)(-1 = 禁用) |
--init-sql | None | 启动时执行的 SQL |
--motherduck-connection-parameters | session_hint=mcp&dbinstance_inactivity_ttl=0s | 额外的 MotherDuck 连接字符串参数(key=value 对,以 & 分隔) |
--ephemeral-connections | True | 对只读本地文件使用临时连接 |
--transport | stdio | 传输类型:stdio 或 http |
--stateless-http | False | 仅用于协议兼容性(例如与 AWS Bedrock AgentCore Runtime 配合使用)。服务器仍通过共享的 DatabaseClient 维护全局状态。 |
--port | 8000 | HTTP 传输的端口 |
--host | 127.0.0.1 | HTTP 传输的主机 |
环境变量
| 变量 | 描述 |
|---|---|
motherduck_token 或 MOTHERDUCK_TOKEN | MotherDuck 访问令牌(--motherduck-token 的替代方案) |
HOME | DuckDB 用于扩展和配置。如果未设置,请使用 --home-dir 覆盖。 |
AWS_ACCESS_KEY_ID | 用于 S3 数据库连接的 AWS 访问密钥 |
AWS_SECRET_ACCESS_KEY | 用于 S3 数据库连接的 AWS 密钥 |
AWS_SESSION_TOKEN | 用于临时凭证的 AWS 会话令牌(IAM 角色、SSO、EC2 实例配置文件) |
AWS_DEFAULT_REGION | 用于 S3 连接的 AWS 区域 |
AWS_ENDPOINT | 用于 S3 连接的 AWS 端点 |
故障排除
spawn uvx ENOENT:指定uvx的完整路径(运行which uvx以找到它)- 文件被锁定:确保
--ephemeral-connections已开启(默认:true),并且您没有以读写模式连接
资源
开发
要从源代码运行:
{
"mcpServers": {
"Local DuckDB (Dev)": {
"command": "uv",
"args": ["--directory", "/path/to/mcp-server-motherduck", "run", "mcp-server-motherduck", "--db-path", "md:"],
"env": {
"motherduck_token": "<YOUR_MOTHERDUCK_TOKEN>"
}
}
}
}
发布流程
- 运行
Release New VersionGitHub Action - 以
MAJOR.MINOR.PATCH格式输入版本号 - 工作流会升级版本、发布到 PyPI/MCP 注册表,并创建包含 MCPB 包的 GitHub 发布
许可证
MIT 许可证——请参阅 LICENSE 文件。
mcp-name: io.github.motherduckdb/mcp-server-motherduck