MCP Directory

MotherDuck / DuckDB MCP Server

Official

Query local DuckDB files, in-memory DBs, S3, or MotherDuck cloud with read/write SQL.

Verified
stdio (local)
API key
Python

Add to your client

Copy the config for your MCP client and paste it into its config file.

Install / run
uvx mcp-server-motherduck --db-path md: --read-write

Paste into ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "motherduck-duckdb-mcp-server": {
      "command": "uvx",
      "args": [
        "mcp-server-motherduck",
        "--db-path",
        "md:"
      ],
      "env": {
        "motherduck_token": "<your-motherduck-token>"
      }
    }
  }
}

Requires `uv` (the Python package runner). Install it from https://docs.astral.sh/uv/ if `uvx` is not found.

Before you start

  • Python with the `uv`/`uvx` package manager installed (`pip install uv` or `brew install uv`)
  • A DuckDB target: nothing for `:memory:`, a path to a local `.duckdb` file, an S3 URL, or `md:` for MotherDuck
  • For MotherDuck connections: a MotherDuck access token from your MotherDuck account (app.motherduck.com), set as `MOTHERDUCK_TOKEN`
  • For S3 access: AWS credentials (access key / secret key, optional session token and region)

About MotherDuck / DuckDB MCP Server

The MotherDuck / DuckDB MCP Server gives AI assistants a full DuckDB SQL engine for analytics and data engineering. It can run queries against an in-memory database, a local .duckdb file, data sitting in S3, or a MotherDuck cloud account — all through the same SQL interface. Because it speaks DuckDB's dialect, it handles CSV/Parquet/JSON files, remote object storage, and cross-database joins natively.

The server runs read-only by default and only allows writes when you pass --read-write, which makes it reasonably safe to point at production data for exploration. It also supports switching the active database connection at runtime (behind the --allow-switch-databases flag), so one server instance can move between local files, S3 paths, and MotherDuck without restarting.

It is the official, MotherDuck-maintained server and is the canonical way to connect Claude, Cursor, VS Code, and other MCP clients to DuckDB-backed data. Distribution is via uvx (no manual clone needed) and it supports both stdio and HTTP transports.

Tools & capabilities (5)

execute_query

Run a SQL query in the DuckDB dialect against the active database (read-only unless --read-write is set)

list_databases

Enumerate all attached/available databases

list_tables

List tables and views, optionally scoped to a database/schema

list_columns

Show the columns of a given table or view

switch_database_connection

Change the active database connection at runtime (requires --allow-switch-databases)

When to use it

  • Use it when you want an AI assistant to explore and query local CSV/Parquet/JSON files via DuckDB SQL
  • Use it when you need to run analytical SQL over data in S3 without loading it into a warehouse
  • Use it when you want Claude or Cursor to query your MotherDuck cloud database
  • Use it when prototyping data pipelines in an in-memory DuckDB you can read and write to
  • Use it when you need quick schema discovery (databases, tables, columns) across multiple DuckDB sources

Quick setup

  1. 1Install `uv` (`pip install uv` or `brew install uv`) so `uvx` is available
  2. 2Add an `mcpServers` entry to your client running `uvx mcp-server-motherduck` with `--db-path` (e.g. `:memory:`, a file path, an S3 URL, or `md:`)
  3. 3For MotherDuck, add `MOTHERDUCK_TOKEN` to the config's `env`; for writes add `--read-write`
  4. 4Optionally add `--allow-switch-databases` to enable runtime connection switching
  5. 5Restart the MCP client and confirm the DuckDB tools (execute_query, list_tables, etc.) appear

Security notes

The server is read-only by default; only add --read-write when the agent genuinely needs to mutate data. The motherduck_token grants access to your cloud data, so keep it in env vars rather than command-line args.

MotherDuck / DuckDB MCP Server FAQ

Is it read-only by default?

Yes. The server runs in read-only mode unless you explicitly pass the `--read-write` flag, which then permits INSERT/UPDATE/DDL and other write operations.

How do I connect to MotherDuck instead of a local file?

Set `--db-path md:` and provide a `MOTHERDUCK_TOKEN` (env var or `--motherduck-token`). You can get the token from your MotherDuck account settings.

Can it query files in S3?

Yes. Point `--db-path` at an S3 URL (or attach one in SQL) and supply AWS credentials; DuckDB reads Parquet/CSV/JSON directly from the bucket.

Does it support remote/HTTP transport, not just stdio?

Yes. Stdio is the default, but you can pass `--transport http` (with `--host`/`--port`, default 127.0.0.1:8000) to run it as an HTTP server.

Why are my query results truncated?

Results are capped (around 1024 rows / 50,000 characters) to protect the context window; raise the limits with `--max-rows` and `--max-chars`.

Alternatives to MotherDuck / DuckDB MCP Server

Google's official MCP server with prebuilt BigQuery tools, querying datasets via Application Default Credentials.

Verified
stdio (local)
OAuth
Go
10 tools
Updated 11 days agoRepo

Read/write Postgres access plus index tuning, EXPLAIN plans, and database health analysis for AI agents.

Verified
stdio (local)
API key
Python
9 tools
Updated 3 months agoRepo

Official Supabase server: manage tables, run SQL, branches, configs and edge functions from your AI client.

Verified
HTTP (remote)
OAuth
TypeScript
12 tools
Updated 1 month agoRepo