MotherDuck MCP Server

oficial

Consulta y analiza datos con MotherDuck y DuckDB local.

Documentación

MotherDuck / DuckDB Local MCP Server

Servidor MCP Local de DuckDB / MotherDuck

Analítica SQL e ingeniería de datos para Asistentes de IA e IDEs.


Conecta asistentes de IA a tus datos usando el potente motor SQL analítico de DuckDB. Soporta conexión a archivos DuckDB locales, bases de datos en memoria, bases de datos alojadas en S3 y MotherDuck. Permite ejecutar consultas SQL de lectura y escritura, explorar catálogos de bases de datos y cambiar entre diferentes conexiones de base de datos sobre la marcha.

¿Buscas un servidor MCP remoto completamente gestionado para MotherDuck?Ir a la documentación de MotherDuck Remote MCP

MCP Remoto vs Local

MCP RemotoMCP Local (este repositorio)
AlojamientoAlojado por MotherDuckSe ejecuta localmente/autoalojado
ConfiguraciónSin configuraciónRequiere instalación local
AccesoLectura-escritura soportadaLectura-escritura soportada
Sistema de archivos local-Consulta entre bases de datos locales y remotas, ingesta de datos desde / exportación de datos al sistema de archivos local

📝 ¿Migrando desde v0.x?

  • Solo lectura por defecto: El servidor ahora se ejecuta en modo solo lectura por defecto. Añade --read-write para habilitar acceso de escritura. Consulta Asegurando para Producción.
  • Base de datos por defecto cambiada: El valor por defecto de --db-path cambió de md: a :memory:. Añade --db-path md: explícitamente para MotherDuck.
  • Solo lectura en MotherDuck requiere token de escalado de lectura: Las conexiones a MotherDuck en modo solo lectura requieren un token de escalado de lectura. Los tokens regulares requieren --read-write.

Inicio Rápido

Prerrequisitos: Instalar uv vía pip install uv o brew install uv

Conectando a DuckDB en Memoria (Modo Desarrollo)

{
  "mcpServers": {
    "DuckDB (in-memory, r/w)": {
      "command": "uvx",
      "args": ["mcp-server-motherduck", "--db-path", ":memory:", "--read-write", "--allow-switch-databases"]
    }
  }
}

Flexibilidad total sin restricciones — acceso de lectura-escritura y la capacidad de cambiar a cualquier base de datos (archivos locales, S3 o MotherDuck) en tiempo de ejecución.

Conectando a un Archivo DuckDB Local en Modo Solo Lectura

{
  "mcpServers": {
    "DuckDB (read-only)": {
      "command": "uvx",
      "args": ["mcp-server-motherduck", "--db-path", "/absolute/path/to/your.duckdb"]
    }
  }
}

Se conecta a un archivo DuckDB específico en modo solo lectura. No retendrá el bloqueo del archivo, por lo que es conveniente usarlo junto con una conexión de escritura al mismo archivo DuckDB. También puedes conectarte a archivos DuckDB remotos en S3 usando s3://bucket/path.duckdb — consulta Variables de Entorno para la autenticación de S3. Si estás considerando acceso de terceros al MCP, consulta Asegurando para Producción.

Conectando a MotherDuck en Modo Lectura-Escritura

{
  "mcpServers": {
    "MotherDuck (local, r/w)": {
      "command": "uvx",
      "args": ["mcp-server-motherduck", "--db-path", "md:", "--read-write"],
      "env": {
        "motherduck_token": "<YOUR_MOTHERDUCK_TOKEN>"
      }
    }
  }
}

Consulta Parámetros de Línea de Comandos para más opciones, Asegurando para Producción para guía de despliegue, y Solución de Problemas si encuentras inconvenientes.

Configuración del Cliente

ClienteUbicación de ConfiguraciónInstalación en Un Clic
Claude DesktopAjustes → Desarrollador → Editar Configuración.mcpb (MCP Bundle)
Claude CodeUsa los comandos CLI abajo-
Codex CLIUsa los comandos CLI abajo o ~/.codex/config.toml-
Gemini CLIUsa los comandos CLI abajo o ~/.gemini/settings.json-
CursorAjustes → MCP → Añadir nuevo servidor MCP globalInstall in Cursor
VS CodeCtrl+Shift+P → "Preferencias: Abrir Configuración de Usuario (JSON)"Install with UV in VS Code
Kiro~/.kiro/settings/mcp.json (global) o .kiro/settings/mcp.json (proyecto)Add to Kiro

Cualquier cliente compatible con MCP puede usar este servidor. Añade la configuración JSON de Inicio Rápido al archivo de configuración MCP de tu cliente. Consulta la documentación de tu cliente para la ubicación del archivo de configuración.

Comandos CLI de Claude Code

DuckDB en Memoria (Modo Desarrollo):

claude mcp add --scope user duckdb --transport stdio -- uvx mcp-server-motherduck --db-path :memory: --read-write --allow-switch-databases

DuckDB Local (Solo Lectura):

claude mcp add --scope user duckdb --transport stdio -- uvx mcp-server-motherduck --db-path /absolute/path/to/db.duckdb

MotherDuck (Lectura-Escritura):

claude mcp add --scope user motherduck --transport stdio --env motherduck_token=YOUR_TOKEN -- uvx mcp-server-motherduck --db-path md: --read-write
Comandos CLI de Codex

DuckDB en Memoria (Modo Desarrollo):

codex mcp add duckdb -- uvx mcp-server-motherduck --db-path :memory: --read-write --allow-switch-databases

DuckDB Local (Solo Lectura):

codex mcp add duckdb -- uvx mcp-server-motherduck --db-path /absolute/path/to/db.duckdb

MotherDuck (Lectura-Escritura):

codex mcp add motherduck --env motherduck_token=YOUR_TOKEN -- uvx mcp-server-motherduck --db-path md: --read-write
Comandos CLI de Gemini

DuckDB en Memoria (Modo Desarrollo):

gemini mcp add -s user duckdb uvx mcp-server-motherduck --db-path :memory: --read-write --allow-switch-databases

DuckDB Local (Solo Lectura):

gemini mcp add -s user duckdb uvx mcp-server-motherduck --db-path /absolute/path/to/db.duckdb

MotherDuck (Lectura-Escritura):

gemini mcp add -s user -e motherduck_token=YOUR_TOKEN motherduck uvx mcp-server-motherduck --db-path md: --read-write
Configuración manual JSON de Kiro

Añade lo siguiente a tu archivo de configuración MCP de Kiro (~/.kiro/settings/mcp.json para global, o .kiro/settings/mcp.json para ámbito de proyecto). Consulta la documentación de Kiro MCP para más detalles.

DuckDB en Memoria (Modo Desarrollo):

{
  "mcpServers": {
    "DuckDB (in-memory, r/w)": {
      "command": "uvx",
      "args": ["mcp-server-motherduck", "--db-path", ":memory:", "--read-write", "--allow-switch-databases"]
    }
  }
}

MotherDuck (Lectura-Escritura):

{
  "mcpServers": {
    "MotherDuck (local, r/w)": {
      "command": "uvx",
      "args": ["mcp-server-motherduck", "--db-path", "md:", "--read-write"],
      "env": {
        "motherduck_token": "<YOUR_MOTHERDUCK_TOKEN>"
      }
    }
  }
}

Herramientas

HerramientaDescripciónEntradas RequeridasEntradas Opcionales
execute_queryEjecutar consulta SQL (dialecto DuckDB)sql-
list_databasesListar todas las bases de datos (útil para MotherDuck o múltiples DBs adjuntas)--
list_tablesListar tablas y vistas-database, schema
list_columnsListar columnas de una tabla/vistatabledatabase, schema
switch_database_connection*Cambiar a una base de datos diferentepathcreate_if_not_exists

*Requiere la bandera --allow-switch-databases

Todas las herramientas devuelven JSON. Los resultados están limitados a 1024 filas / 50,000 caracteres por defecto (configurable vía --max-rows, --max-chars).

Asegurando para Producción

Al dar acceso a terceros a un servidor MCP autoalojado, el modo solo lectura por sí solo no es suficiente — aún permite el acceso al sistema de archivos local, cambiar configuraciones de DuckDB y otras operaciones potencialmente sensibles.

Para despliegues en producción con acceso de terceros, recomendamos MotherDuck Remote MCP — sin configuración, con capacidad de lectura-escritura y alojado por MotherDuck.

Autoalojando MotherDuck MCP: Haz un fork de este repositorio y personalízalo según sea necesario. Usa una cuenta de servicio con tokens de escalado de lectura y habilita el modo SaaS para restringir el acceso a archivos locales.

Autoalojando DuckDB MCP: Usa --init-sql para aplicar configuraciones de seguridad. Consulta la guía de Asegurando DuckDB para las opciones disponibles.

Parámetros de Línea de Comandos

ParámetroPor DefectoDescripción
--db-path:memory:Ruta de la base de datos: archivo local (absoluta), md: (MotherDuck), o URL s3://
--motherduck-tokenvariable de entorno motherduck_tokenToken de acceso de MotherDuck
--read-writeFalseHabilitar acceso de escritura
--motherduck-saas-modeFalseModo SaaS de MotherDuck (restringe el acceso local)
--allow-switch-databasesFalseHabilitar la herramienta switch_database_connection
--max-rows1024Máximo de filas devueltas
--max-chars50000Máximo de caracteres devueltos
--query-timeout-1Tiempo de espera de consulta en segundos (-1 = deshabilitado)
--init-sqlNoneSQL a ejecutar al inicio
--motherduck-connection-parameterssession_hint=mcp&
dbinstance_inactivity_ttl=0s
Parámetros adicionales de cadena de conexión de MotherDuck (pares key=value separados por &)
--ephemeral-connectionsTrueUsar conexiones temporales para archivos locales de solo lectura
--transportstdioTipo de transporte: stdio o http
--stateless-httpFalseSolo para compatibilidad de protocolo (ej. con AWS Bedrock AgentCore Runtime). El servidor aún mantiene estado global a través del DatabaseClient compartido.
--port8000Puerto para transporte HTTP
--host127.0.0.1Host para transporte HTTP

Variables de Entorno

VariableDescripción
motherduck_token o MOTHERDUCK_TOKENToken de acceso de MotherDuck (alternativa a --motherduck-token)
HOMEUsado por DuckDB para extensiones y configuración. Sobrescribir con --home-dir si no está configurado.
AWS_ACCESS_KEY_IDClave de acceso AWS para conexiones de base de datos S3
AWS_SECRET_ACCESS_KEYClave secreta AWS para conexiones de base de datos S3
AWS_SESSION_TOKENToken de sesión AWS para credenciales temporales (roles IAM, SSO, perfiles de instancia EC2)
AWS_DEFAULT_REGIONRegión AWS para conexiones S3
AWS_ENDPOINTEndpoint AWS para conexiones S3

Solución de Problemas

  • spawn uvx ENOENT: Especifica la ruta completa a uvx (ejecuta which uvx para encontrarlo)
  • Archivo bloqueado: Asegúrate de que --ephemeral-connections esté activado (por defecto: true) y de que no estés conectado en modo lectura-escritura

Recursos

Desarrollo

Para ejecutar desde el código fuente:

{
  "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>"
      }
    }
  }
}

Proceso de Lanzamiento

  1. Ejecuta la GitHub Action Release New Version
  2. Ingresa la versión en formato MAJOR.MINOR.PATCH
  3. El flujo de trabajo incrementa la versión, publica en PyPI/registro MCP y crea el lanzamiento en GitHub con el paquete MCPB

Licencia

Licencia MIT - consulta el archivo LICENSE.

mcp-name: io.github.motherduckdb/mcp-server-motherduck