DBeaver MCP Server
Se integra con DBeaver para proporcionar a los asistentes de IA acceso a más de 200 tipos de bases de datos utilizando conexiones existentes.
Documentación
OmniSQL MCP
Servidor MCP universal de bases de datos: brinda a los asistentes de IA acceso de lectura/escritura a tus bases de datos utilizando conexiones ya guardadas en el espacio de trabajo de tu cliente de base de datos local (compatible con DBeaver).
Soporte de bases de datos
Compatibilidad nativa (controlador directo, rápido):
- PostgreSQL (a través de
pg) - MySQL / MariaDB (a través de
mysql2) - SQL Server / MSSQL (a través de
mssql) - SQLite (a través de la CLI de
sqlite3)
Compatible con Postgres (enrutado automáticamente a través del controlador pg):
- CockroachDB, TimescaleDB, Amazon Redshift, YugabyteDB, AlloyDB, Supabase, Neon, Citus
Otras bases de datos: Se recurre a una CLI externa configurada mediante OMNISQL_CLI_PATH. Los resultados varían según la CLI.
Controladores personalizados que envuelven cualquiera de los anteriores se detectan automáticamente; consulta Controladores personalizados y autenticados con IAM.
Características
- Reutiliza conexiones ya configuradas en el espacio de trabajo de tu cliente de base de datos local; sin configuración duplicada
- Ejecución nativa de consultas para PostgreSQL, MySQL/MariaDB, SQLite, SQL Server
- Autenticación IAM de AWS RDS, incluidos controladores personalizados basados en AWS Advanced JDBC Wrapper
- Agrupación de conexiones con tamaño de grupo y tiempos de espera configurables
- Soporte de transacciones (BEGIN/COMMIT/ROLLBACK)
- Análisis del plan de ejecución de consultas (EXPLAIN)
- Comparación de esquemas entre conexiones con generación de scripts de migración
- Modo de solo lectura con SELECT obligatorio en
execute_query - Lista blanca de conexiones para restringir qué bases de datos son accesibles
- Filtrado de herramientas para deshabilitar operaciones específicas
- Validación de consultas para bloquear operaciones peligrosas (DROP DATABASE, TRUNCATE, DELETE/UPDATE sin WHERE)
- Exportación de datos a CSV/JSON
- Apagado elegante con limpieza del grupo de conexiones
Requisitos
- Node.js 18+
- Un cliente de base de datos local (compatible con DBeaver) con al menos una conexión configurada
Instalación
npm install -g omnisql-mcp
Configuración
Claude Desktop
Agrega a ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"omnisql": {
"command": "omnisql-mcp"
}
}
}
Claude Code
Agrega a ~/.claude/settings.json:
{
"mcpServers": {
"omnisql": {
"command": "omnisql-mcp"
}
}
}
Cursor
Agrega en Cursor Settings > MCP Servers:
{
"mcpServers": {
"omnisql": {
"command": "omnisql-mcp"
}
}
}
Variables de entorno
| Variable | Descripción | Predeterminado |
|---|---|---|
OMNISQL_CLI_PATH | Ruta a la CLI del cliente de base de datos externo (se usa para el respaldo de controladores no compatibles) | Sin definir |
OMNISQL_WORKSPACE | Ruta al directorio del espacio de trabajo del cliente de base de datos local | Predeterminado del sistema operativo |
OMNISQL_PROJECT | Nombre de la carpeta del proyecto/espacio de trabajo del cliente de base de datos (p. ej., proyecto DBeaver con nombre personalizado) | General |
OMNISQL_TIMEOUT | Tiempo de espera de consulta (ms) | 30000 |
OMNISQL_DEBUG | Habilitar registro de depuración | false |
OMNISQL_READ_ONLY | Deshabilitar todas las operaciones de escritura | false |
OMNISQL_ALLOWED_CONNECTIONS | Lista blanca separada por comas de IDs o nombres de conexión | Todas |
OMNISQL_DISABLED_TOOLS | Herramientas separadas por comas para deshabilitar | Ninguna |
OMNISQL_POOL_MIN | Conexiones mínimas por grupo | 2 |
OMNISQL_POOL_MAX | Conexiones máximas por grupo | 10 |
OMNISQL_POOL_IDLE_TIMEOUT | Tiempo de espera de conexión inactiva (ms) | 30000 |
OMNISQL_POOL_ACQUIRE_TIMEOUT | Tiempo de espera de adquisición de conexión (ms) | 10000 |
OMNISQL_AWS_CLI_PATH | Ruta a la CLI de AWS (se usa para la autenticación IAM de RDS) | aws |
OMNISQL_IAM_TOKEN_TIMEOUT | Tiempo de espera para generar un token de autenticación IAM de RDS (ms) | 20000 |
OMNISQL_SSH_KNOWN_HOSTS | Archivo known_hosts utilizado para verificar los hosts de túneles SSH | ~/.ssh/known_hosts |
OMNISQL_SSH_STRICT_HOST_KEY | Rechazar hosts de túneles SSH sin entrada known_hosts | false |
Modo de solo lectura
Bloquea todas las operaciones de escritura. La herramienta execute_query solo permite sentencias SELECT, EXPLAIN, SHOW y DESCRIBE. Las herramientas de transacciones están completamente deshabilitadas.
{
"mcpServers": {
"omnisql": {
"command": "omnisql-mcp",
"env": {
"OMNISQL_READ_ONLY": "true"
}
}
}
}
Lista blanca de conexiones
Restringe qué conexiones del espacio de trabajo son visibles. Acepta IDs de conexión o nombres para mostrar, separados por comas:
{
"mcpServers": {
"omnisql": {
"command": "omnisql-mcp",
"env": {
"OMNISQL_ALLOWED_CONNECTIONS": "dev-postgres,staging-mysql"
}
}
}
}
Deshabilitar herramientas específicas
{
"mcpServers": {
"omnisql": {
"command": "omnisql-mcp",
"env": {
"OMNISQL_DISABLED_TOOLS": "drop_table,alter_table,write_query"
}
}
}
}
Herramientas disponibles
Gestión de conexiones
list_connections- Listar todas las conexiones de bases de datosget_connection_info- Obtener detalles de la conexióntest_connection- Probar conectividad
Operaciones de datos
execute_query- Ejecutar consultas de solo lectura (solo SELECT, EXPLAIN, SHOW, DESCRIBE)write_query- Ejecutar INSERT/UPDATE/DELETEexport_data- Exportar a CSV/JSON
Gestión de esquemas
list_tables- Listar tablas y vistasget_table_schema- Obtener estructura de tablacreate_table- Crear tablasalter_table- Modificar tablasdrop_table- Eliminar tablas (requiere confirmación)
Transacciones
begin_transaction- Iniciar una nueva transacciónexecute_in_transaction- Ejecutar consulta dentro de una transaccióncommit_transaction- Confirmar una transacciónrollback_transaction- Revertir una transacción
Análisis de consultas
explain_query- Analizar el plan de ejecución de consultascompare_schemas- Comparar esquemas entre dos conexionesget_pool_stats- Obtener estadísticas del grupo de conexiones
Otros
get_database_stats- Estadísticas de la base de datosappend_insight- Guardar notas de análisislist_insights- Recuperar notas guardadas
Seguridad
- Cumplimiento de solo lectura:
execute_querysolo acepta sentencias de solo lectura (SELECT, EXPLAIN, SHOW, DESCRIBE, PRAGMA). Las operaciones de escritura deben usarwrite_query. - Validación de consultas: Bloquea DROP DATABASE, DROP SCHEMA, TRUNCATE, DELETE/UPDATE sin WHERE, GRANT, REVOKE y sentencias de gestión de usuarios.
- Lista blanca de conexiones: Restringe qué conexiones se exponen a través de
OMNISQL_ALLOWED_CONNECTIONS. - Filtrado de herramientas: Deshabilita cualquier herramienta mediante
OMNISQL_DISABLED_TOOLS. - Saneamiento de entradas: Los IDs de conexión e identificadores SQL se sanean para prevenir inyecciones.
- Recomendación: Para uso en producción, también usa un usuario de solo lectura a nivel de base de datos para defensa en profundidad.
Soporte de formatos de espacio de trabajo
Admite ambos formatos de configuración escritos por clientes de base de datos compatibles con DBeaver:
- Heredado: Configuración XML en
.metadata/.plugins/org.jkiss.dbeaver.core/ - Moderno: Configuración JSON en
General/.dbeaver/
El nombre de la carpeta del proyecto/espacio de trabajo (General por defecto) es configurable mediante OMNISQL_PROJECT,
por lo que los espacios de trabajo que usan un proyecto DBeaver personalizado o renombrado (p. ej., DataPlatform) se descubren
sin necesidad de renombrar el proyecto ni crear un enlace simbólico a la carpeta.
Modos de conexión
Las conexiones de DBeaver se configuran manualmente (campos de host, puerto, base de datos) o por
URL (una URL JDBC). Ambos funcionan. En modo URL, DBeaver deja los campos de host/puerto en valores
de marcador de posición, generalmente localhost, y solo lee la URL, por lo que la URL es lo que se usa aquí también.
Túneles SSH
Las conexiones que DBeaver alcanza a través de un túnel SSH también se tunelizan aquí. El túnel se abre en el primer uso y se reutiliza durante toda la vida del servidor, con un reenvío local solo de bucle invertido, y el host/puerto de la conexión se tratan como DBeaver los trata: como la base de datos vista desde el servidor SSH.
- Se admiten autenticación por agente, contraseña y clave pública, tomadas de la pestaña SSH de la conexión. Las credenciales guardadas en el espacio de trabajo (incluidas las del propio túnel, almacenadas por separado de las credenciales de la base de datos) se descifran y se usan.
- La autenticación por agente necesita
SSH_AUTH_SOCKconfigurado en el entorno del servidor MCP. Los clientes MCP generalmente no heredan tu shell, así que configúralo explícitamente en la configuración del servidor del cliente si usas un agente. - La clave de host SSH se verifica contra
known_hosts. Un host registrado allí debe coincidir, o el túnel se rechaza; un host que no está registrado se acepta, a menos queOMNISQL_SSH_STRICT_HOST_KEY=true. - Si no se puede abrir un túnel, la conexión falla con ese motivo. Nunca recurre a conectarse directamente al host registrado, lo que alcanzaría una base de datos local no relacionada.
Consultar otra base de datos en el mismo servidor
Un ID de conexión puede llevar una anulación de base de datos — my-connection/analytics — para ejecutar contra una
base de datos diferente en el mismo servidor sin agregar una segunda conexión en DBeaver. Esto no
aplica a motores respaldados por archivos como SQLite, donde la "base de datos" es una ruta de archivo.
Con OMNISQL_ALLOWED_CONNECTIONS configurado, incluir en la lista blanca una conexión permite las bases de datos que sus
credenciales pueden alcanzar. Para fijarla a bases de datos específicas, lista entradas connection/database
en lugar de la conexión simple.
Las credenciales se descifran automáticamente desde el credentials-config.json del espacio de trabajo.
Controladores personalizados y autenticados con IAM
Controladores personalizados
El enrutamiento nativo normalmente se basa en el ID del controlador (postgres-jdbc, mysql8). Los controladores personalizados a menudo usan un
ID opaco en su lugar — un UUID, por ejemplo — que no nombra ningún motor. Esas conexiones se resuelven recurriendo
al provider de la conexión (postgresql, mysql, …) y luego al subprotocolo de la URL JDBC,
incluidos los envueltos como jdbc:aws-wrapper:postgresql://…. Por lo tanto, un controlador personalizado que envuelve un
motor compatible funciona sin configuración adicional.
Si aún no se puede identificar un motor, el error resultante nombra tanto el ID del controlador como el proveedor para que puedas ver qué faltaba.
Autenticación IAM de AWS RDS
Las conexiones que se autentican con un token IAM de RDS en lugar de una contraseña almacenada se detectan y manejan automáticamente. Se reconocen ambas formas:
- Controladores AWS Advanced JDBC Wrapper, que registran
wrapperPlugins: "iam"junto conawsProfileyiamRegion. - Los modelos de autenticación IAM de AWS propios del cliente de base de datos.
Para estas conexiones, OmniSQL:
- Genera un token con
aws rds generate-db-auth-token(a través de la CLI de AWS, por lo que los perfiles SSO y de roles encadenados funcionan según lo configurado) y lo usa como contraseña. - Almacena en caché cada token durante 13 minutos, dentro de su vida útil de 15 minutos, y lo regenera por conexión física para que los grupos de larga duración sigan funcionando.
- Fuerza TLS, que RDS requiere para tokens IAM.
- Resuelve el nombre de usuario de la base de datos desde la conexión cuando está presente. Cuando está ausente, el nombre de usuario se
deriva de tu identidad de AWS: ya sea el nombre del rol por desarrollador (
<profile>-<user>) o el nombre de sesión SSO asumido.
Requisitos: la CLI de AWS en PATH (o OMNISQL_AWS_CLI_PATH), una sesión válida para el
perfil de la conexión (aws sso login --profile <profile>) y accesibilidad de red al endpoint.
Una sesión SSO caducada produce un error que nombra el perfil para reautenticar.
Desarrollo
git clone https://github.com/srthkdev/omnisql-mcp.git
cd omnisql-mcp
npm install
npm run build
npm test
npm run lint
Licencia
MIT