dsh-databases
Connects to MySQL/MariaDB databases to explore databases, tables, columns, indexes and foreign keys, and run read-only queries (plus EXPLAIN/SHOW/DESCRIBE), returning bounded JSON results.
Connects to MySQL databases to explore databases, tables, columns, indexes and foreign keys, and run read-only queries (plus EXPLAIN/SHOW/DESCRIBE), returning bounded JSON results.
Connects to PostgreSQL databases to explore databases, tables, columns, indexes and foreign keys, and run read-only queries (plus EXPLAIN/SHOW/DESCRIBE), returning bounded JSON results.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@dsh-databasesshow me the columns and indexes of the facturas table in core-mysql"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
dsh-databases — MCP de bases de datos para DSH
Servidor Model Context Protocol para DeepSeek Harness que expone SQL Server, MySQL/MariaDB y PostgreSQL al agente. Permite elegir con qué conexión trabajar (por nombre) y qué motor usar, explorar bases, tablas y columnas, y ejecutar consultas devolviendo JSON acotado.
Transporte: stdio (lo lanza DSH como subproceso).
Drivers:
mssql,mysql2ypg— JavaScript puro, sin ODBC ni DLLs.Múltiples conexiones con nombre, con motor propio cada una.
Modo: lectura + escritura opcional (
MSSQL_ALLOW_WRITE);run_querysiempre es de solo lectura.
Tres formas de elegir base de datos y motor
Forma | Para qué sirve | Dónde |
| Conexión única rápida ("default") | variables |
| Lista fija de conexiones por nombre y motor | archivo JSON versionable (sin secretos) |
| El agente guarda conexiones nuevas en caliente |
|
Además, cualquier herramienta acepta connection (nombre) y engine
(mssql | mysql | postgres) en la misma llamada.
Related MCP server: MariaDB MCP Server
Herramientas MCP
Con serverName: db DSH las expone como mcp__db__<nombre>:
Herramienta | Qué hace |
| Motores disponibles y conexiones configuradas (sin contraseñas). |
| Crea o reemplaza una conexión con nombre (motor, host, puerto, base, usuario, contraseña, opciones). |
| Elimina una conexión guardada con |
| Conecta y devuelve versión/host/usuario reales, o el error exacto. |
| Bases accesibles con estado y tamaño. |
| Tablas y/o vistas con filas aproximadas. |
| Columnas, tipos, índices y claves foráneas. |
| Una sentencia de lectura ( |
| Versión, host, usuario y arranque del servidor. |
| Escritura/DDL, solo con |
Instalación
npm install
npm run build
Copy-Item .env.example .env # credenciales
Copy-Item configs/connections.example.json configs/connections.jsonConfiguración (.env)
Variable | Por defecto | Descripción |
|
| Motor de la conexión por defecto: |
|
| Host y puerto. |
|
| Base por defecto. |
| — | Credenciales de la conexión por defecto. |
|
| TLS para SQL Server. |
|
| Habilita |
| vacío | Lista blanca de bases separada por comas. |
|
| Filas por consulta (tope 5000). |
|
| Timeouts. |
|
| Archivo de conexiones declaradas. |
| — | Conexión usada cuando la herramienta no indica ninguna. |
|
| Dónde se guardan las conexiones creadas con |
|
|
|
Conexiones declaradas (configs/connections.json)
{
"connections": [
{
"name": "farmaluz",
"engine": "mssql",
"host": "localhost",
"port": 1433,
"database": "FarmaluzAdminDb",
"user": "mcp_sql",
"password": "tu-clave",
"options": { "encrypt": true, "trustServerCertificate": true }
},
{
"name": "core-mysql",
"engine": "mysql",
"host": "10.0.0.5",
"port": 3306,
"database": "erp",
"user": "consulta",
"password": "tu-clave",
"options": { "ssl": false }
}
]
}configs/connections.json está en .gitignore (contiene contraseñas); versiona
connections.example.json como plantilla. Alternativa sin secretos en el repo: dejar password
vacío aquí y guardarlo con save_connection, que escribe en ~/.dsh-mcp-sql/connections.json.
Ejemplos de uso desde el agente
list_connections
test_connection {"connection": "farmaluz"}
list_tables {"connection": "core-mysql", "kind": "tables"}
describe_table {"connection": "core-mysql", "table": "facturas"}
run_query {"connection": "farmaluz", "sql": "SELECT TOP 10 * FROM SAPROD"}
save_connection {"name": "pg-test", "engine": "postgres", "host": "localhost",
"database": "postgres", "user": "postgres", "password": "..."}Registro en DSH
Como plugin instalado (recomendado)
El paquete declara dsh.bundle.patch (cordis.patch.yml), así que DSH lo gestiona como bundle:
aparece en Plugins del sidebar y se puede instalar desde el índice del market.
Como fila del perfil (sin empaquetar)
En %USERPROFILE%\.dsh\profiles\desktop\cordis.patch.yml, sustituyendo <RUTA> por la carpeta
donde clonaste este repo:
- insert:
- id: mcp-databases
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: db
transport: stdio
command: 'node'
args:
- '<RUTA>/dist/index.js'
cwd: '<RUTA>'
toolCallTimeoutMs: 120000Importante: la entrada va dentro de un
insert:. El loader de DSH solo aplica parches por id existente; una entrada nueva suelta se descarta conpatch: entry "mcp-databases" not found.
Instalar desde el market
Plugins → Discover → Add index source con la URL del índice publicado
(https://nvznc.github.io/dsh-databases/index.json), busca Databases e instala. DSH clona el
repositorio en el commit listado y monta el bundle; tras instalar, define las credenciales (.env
o save_connection) y reinicia para que el servidor MCP arranque.
Índice del plugin market (GitHub)
El índice sigue el formato 1 de DSH (@deepseek-ai/dsh-plugin-market-index): JSON válido, versiones
fijadas a un commit de Git en https://, y engines.dsh.
npm run index -- --repo https://github.com/nvznc/dsh-databases --commit <sha40> --version 1.0.0
npm run index:check # valida el índice contra las reglas del formato
git add site && git commit -m "market: index" && git pushCada vez que publiques una versión nueva: cambia version en package.json, compila, súbelo, y
regenera el índice con el nuevo commit (git rev-parse HEAD).
Publicación en GitHub Pages (Settings → Pages → Deploy from a branch → main / /site).
Una vez publicada, en DSH: Plugins → Discover → Add index source con
https://nvznc.github.io/dsh-databases/index.json.
Seguridad
run_querypasa por una guarda de solo lectura (src/guard.ts): enmascara comentarios, literales y identificadores citados, exige una sola sentencia, empieza porSELECT/WITH(EXPLAIN/SHOWsolo en mysql/postgres) y rechaza palabras clave de escritura,COPY,pg_sleep,xp_cmdshell…Los permisos reales los decide el motor: usa logins de solo lectura (
sql/create-mcp-login.sqlcrea uno para SQL Server).Las contraseñas nunca se imprimen en los logs ni en
list_connections;configs/connections.jsonestá ignorado por git.execute_sqlsolo existe conMSSQL_ALLOW_WRITE=true.
Scripts
npm run build # compila TypeScript a dist/
npm start # arranca el servidor (normalmente lo lanza DSH)
npm run verify # comprobaciones reales contra cada conexión (incluye rollback de escritura)
npm run smoke -- farmaluz "SELECT 1 AS ok"
npm run index # genera site/index.json para el plugin market
npm run index:check # valida el índiceSolución de problemas
Síntoma | Causa / solución |
| Credenciales desincronizadas; revisa |
| Puerto/TCP del motor: |
| Completa |
Las tools no aparecen en DSH | Usa |
Las conexiones nuevas no aparecen | Editar |
Estructura
src/
config.ts # .env, rutas de datos y validación de variables
guard.ts # guarda de solo lectura (cualquier motor)
tools.ts # definición de herramientas MCP
index.ts # arranque stdio y apagado ordenado
engines/
types.ts # contratos EngineAdapter / ConnectionProfile
registry.ts # resolución de conexiones y guardado
mssql.ts # SQL Server (pool por base)
mysql.ts # MySQL / MariaDB
postgres.ts # PostgreSQL
scripts/ # smoke, verify, generador y validador del índice
sql/ # creación/borrado del login de solo lectura en SQL Server
site/ # índice publicable del plugin market (GitHub Pages)This server cannot be deployed
Maintenance
Related MCP Connectors
PostgreSQL, MySQL, OpenAPI/Swagger, and shared Agent Memory with scoped access.
Query Postgres, MySQL, SQL Server, Oracle, BigQuery, ClickHouse and Redshift from your AI client.
- dataOAuthco.thinair
PostgreSQL, MySQL, and SQL Server in one session. 26 read-only MCP tools for AI agents.
Query your CSVs and Google Sheets from any agent: filter, group and total with exact results.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables LLMs and agents to interact with relational databases (SQL Server, MySQL, PostgreSQL) through MCP tools. Supports executing queries, inserting records, listing tables, and exposing database schemas with secure credential management.-
- AlicenseBqualityCmaintenanceEnables AI assistants to securely interact with MariaDB and MySQL databases using granular per-connection read/write permissions and transaction support. It allows users to manage multiple database connections, explore schemas, and execute controlled SQL queries through a standardized interface.621 npm5MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to query and explore databases including SQLite, PostgreSQL, MySQL, and SQL Server through a secure, read-only workflow. It provides tools for listing connections, inspecting table schemas, and executing SELECT statements directly within VS Code.1-
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to query and modify MySQL and MariaDB databases over MCP, with each connection independently permitting selects, inserts, updates, deletes, and DDL while defaulting to read-only and rejecting anything outside the allowed operations. Connections are configured in JSON, result sets are capped and truncated, and passwords stay server-side.MIT