MotherDuck
oficialConsulta y analiza datos con MotherDuck y DuckDB local.
¿Qué puedes hacer con MotherDuck MCP?
-
Ejecutar análisis SQL — Pídele a tu asistente que consulte archivos DuckDB locales, bases de datos en memoria o MotherDuck usando
execute_querycon soporte completo del dialecto SQL de DuckDB. -
Explorar la estructura de la base de datos — Haz que tu asistente liste bases de datos, tablas y columnas usando
list_databases,list_tablesylist_columnspara comprender el esquema de tus datos. -
Cambiar conexiones de base de datos — Indícale a tu asistente que cambie entre archivos locales, bases de datos alojadas en S3 o MotherDuck sobre la marcha mediante
switch_database_connection(requiere la bandera--allow-switch-databases). -
Escribir y modificar datos — Habilita el modo de lectura-escritura para permitir que tu asistente inserte, actualice o elimine registros directamente en las bases de datos conectadas.
-
Ingerir y exportar datos — Usa el servidor para consultar bases de datos locales y remotas, ingiriendo datos desde o exportándolos a tu sistema de archivos local.
Servidor MCP alojado
npx add-mcp 'https://api.motherduck.com/mcp'Se instala en Claude Code, Codex, Cursor y más
Documentación
DuckDB / MotherDuck Local MCP Server
Analítica SQL y 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. Admite 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 bases de datos sobre la marcha.
¿Buscas un servidor MCP remoto totalmente gestionado para MotherDuck? → Ir a la documentación de MotherDuck Remote MCP
MCP remoto vs local
| MCP remoto | MCP local (este repositorio) | |
|---|---|---|
| Alojamiento | Alojado por MotherDuck | Se ejecuta localmente/autoalojado |
| Configuración | Sin configuración | Requiere instalación local |
| Acceso | Lectura-escritura compatible | Lectura-escritura compatible |
| Sistema de archivos local | - | Consulta entre bases de datos locales y remotas, ingiere datos desde / exporta datos al sistema de archivos local |
Inicio rápido
Requisitos previos: Instala uv mediante pip install uv o brew install uv
Conexión a DuckDB en memoria (modo de 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.
Conexión a un archivo DuckDB local en modo de 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 de solo lectura. No mantiene 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.
Conexión a MotherDuck en modo de 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 implementación y Solución de problemas si encuentras problemas.
Configuración del cliente
| Cliente | Ubicación de configuración | Instalación con un clic |
|---|---|---|
| Claude Desktop | Configuración → Desarrollador → Editar configuración | .mcpb (MCP Bundle) |
| Claude Code | Usa los comandos CLI a continuación | - |
| Codex CLI | Usa los comandos CLI a continuación o ~/.codex/config.toml | - |
| Gemini CLI | Usa los comandos CLI a continuación o ~/.gemini/settings.json | - |
| Cursor | Configuración → MCP → Añadir nuevo servidor MCP global | |
| VS Code | Ctrl+Shift+P → "Preferencias: Abrir configuración de usuario (JSON)" | |
| Kiro | ~/.kiro/settings/mcp.json (global) o .kiro/settings/mcp.json (proyecto) |
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 de 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 de 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 de 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 JSON manual 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 MCP de Kiro para más detalles.
DuckDB en memoria (modo de 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
| Herramienta | Descripción | Entradas requeridas | Entradas opcionales |
|---|---|---|---|
execute_query | Ejecuta consultas SQL (dialecto DuckDB) | sql | - |
list_databases | Lista todas las bases de datos (útil para MotherDuck o múltiples BD adjuntas) | - | - |
list_tables | Lista tablas y vistas | - | database, schema |
list_columns | Lista columnas de una tabla/vista | table | database, schema |
switch_database_connection* | Cambia a una base de datos diferente | path | create_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 mediante --max-rows, --max-chars).
Asegurando para producción
Al dar acceso a terceros a un servidor MCP autoalojado, el modo de solo lectura por sí solo no es suficiente — aún permite acceso al sistema de archivos local, cambiar la configuración de DuckDB y otras operaciones potencialmente sensibles.
Para implementaciones de producción con acceso de terceros, recomendamos MotherDuck Remote MCP — sin configuración, compatible con lectura-escritura y alojado por MotherDuck.
Autoalojamiento de 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.
Autoalojamiento de DuckDB MCP: Usa --init-sql para aplicar configuraciones de seguridad. Consulta la guía de aseguramiento de DuckDB para las opciones disponibles.
Docker
Construye y ejecuta el servidor con Streamable HTTP en el puerto 8000 (por defecto usa DuckDB en memoria):
docker build -t mcp-server-motherduck .
docker run --rm -p 8000:8000 mcp-server-motherduck
Conéctate a MotherDuck pasando un token y sobrescribiendo el comando:
docker run --rm -p 8000:8000 \
-e motherduck_token="$MOTHERDUCK_TOKEN" \
mcp-server-motherduck --transport http --db-path md:
El endpoint MCP está disponible en http://localhost:8000/mcp. Las banderas CLI y las variables de entorno a continuación siguen aplicándose.
Parámetros de línea de comandos
| Parámetro | Predeterminado | Descripción |
|---|---|---|
--db-path | :memory: | Ruta de la base de datos: archivo local (absoluto), md: (MotherDuck) o URL s3:// |
--motherduck-token | variable de entorno motherduck_token | Token de acceso de MotherDuck |
--read-write | False | Habilita acceso de escritura |
--motherduck-saas-mode | False | Modo SaaS de MotherDuck (restringe acceso local) |
--allow-switch-databases | False | Habilita la herramienta switch_database_connection |
--max-rows | 1024 | Máximo de filas devueltas |
--max-chars | 50000 | Máximo de caracteres devueltos |
--query-timeout | -1 | Tiempo de espera de consulta en segundos (-1 = deshabilitado) |
--init-sql | None | SQL para ejecutar al inicio |
--motherduck-connection-parameters | session_hint=mcp&dbinstance_inactivity_ttl=0s | Parámetros adicionales de la cadena de conexión de MotherDuck (pares key=value separados por &) |
--ephemeral-connections | True | Usa conexiones temporales para archivos locales de solo lectura |
--transport | stdio | Tipo de transporte: stdio o http |
--stateless-http | False | Solo para compatibilidad de protocolo (p. ej., con AWS Bedrock AgentCore Runtime). El servidor aún mantiene estado global mediante el DatabaseClient compartido. |
--port | 8000 | Puerto para transporte HTTP |
--host | 127.0.0.1 | Host para transporte HTTP |
Variables de entorno
| Variable | Descripción |
|---|---|
motherduck_token o MOTHERDUCK_TOKEN | Token de acceso de MotherDuck (alternativa a --motherduck-token) |
HOME | Usado por DuckDB para extensiones y configuración. Sobrescribe con --home-dir si no está configurado. |
AWS_ACCESS_KEY_ID | Clave de acceso de AWS para conexiones de bases de datos S3 |
AWS_SECRET_ACCESS_KEY | Clave secreta de AWS para conexiones de bases de datos S3 |
AWS_SESSION_TOKEN | Token de sesión de AWS para credenciales temporales (roles IAM, SSO, perfiles de instancia EC2) |
AWS_DEFAULT_REGION | Región de AWS para conexiones S3 |
AWS_ENDPOINT | Endpoint de AWS para conexiones S3 |
Solución de problemas
spawn uvx ENOENT: Especifica la ruta completa auvx(ejecutawhich uvxpara encontrarlo)- Archivo bloqueado: Asegúrate de que
--ephemeral-connectionsesté activado (predeterminado: true) y que no estés conectado en modo de lectura-escritura
Recursos
- Documentación de MotherDuck MCP
- Cierra el ciclo: Pipelines de datos más rápidos con MCP, DuckDB e IA (Blog)
- Pipelines de datos más rápidos con MCP y DuckDB (YouTube)
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
- Ejecuta la acción de GitHub
Release New Version - Ingresa la versión en formato
MAJOR.MINOR.PATCH - El flujo de trabajo incrementa la versión, publica en PyPI/registro MCP y crea el lanzamiento de GitHub con el paquete MCPB
Licencia
Licencia MIT - consulta el archivo LICENSE.
mcp-name: io.github.motherduckdb/mcp-server-motherduck