Connects Claude to MySQL, PostgreSQL, MongoDB, and SQLite databases with optional SSH tunneling for secure remote access. Each server instance handles one database and exposes read-only operations by default (query, describe, list tables/collections) with optional read-write mode for INSERT, UPDATE, and DELETE. The SSH tunnel support is especially handy for production databases behind bastion hosts. SQLite over SSH downloads the database file via SFTP and syncs changes back on shutdown. MongoDB gets aggregation pipelines with safety guards against write stages in read-only mode. Install with uvx and configure through environment variables. Run multiple instances to work with different databases simultaneously.
MCP server for MySQL, PostgreSQL, MongoDB, and SQLite databases. One instance per database, no Docker required.
uvx db-mcp-server
Configure via environment variables. Each instance connects to a single database.
| Variable | Required | Default | Description |
|---|---|---|---|
DB_TYPE | Yes | — | mysql |
DB_DATABASE | Yes | — | Database name |
DB_PASSWORD | Yes | — | Password |
DB_HOST | No | localhost | Host |
DB_PORT | No | 3306 | Port |
DB_USER | No | root | User |
DB_MODE | No | read-only | read-only or read-write |
| Variable | Required | Default | Description |
|---|---|---|---|
DB_TYPE | Yes | — | postgresql |
DB_DATABASE | Yes | — | Database name |
DB_PASSWORD | Yes | — | Password |
DB_HOST | No | localhost | Host |
DB_PORT | No | 5432 | Port |
DB_USER | No | postgres | User |
DB_MODE | No | read-only | read-only or read-write |
| Variable | Required | Default | Description |
|---|---|---|---|
DB_TYPE | Yes | — | mongodb |
DB_DATABASE | Yes | — | Database name |
DB_URL | Yes | — | Connection URL (mongodb://...) |
DB_MODE | No | read-only | read-only or read-write |
| Variable | Required | Default | Description |
|---|---|---|---|
DB_TYPE | Yes | — | sqlite |
DB_PATH | Yes | — | Path to .db file (local or remote with SSH) |
DB_DATABASE | No | filename | Display name |
DB_MODE | No | read-only | read-only or read-write |
Optionally connect through an SSH bastion host. Set SSH_HOST to activate.
For SQLite over SSH, the remote .db file is downloaded via SFTP before querying. In read-write mode, changes are uploaded back on shutdown.
| Variable | Required | Default | Description |
|---|---|---|---|
SSH_HOST | No | — | SSH bastion host (activates tunneling) |
SSH_PORT | No | 22 | SSH port |
SSH_USER | No | Current OS user | SSH username |
SSH_KEY | No | — | Path to private key (~/.ssh/id_rsa) |
SSH_PASSWORD | No | — | SSH password (if no key) |
At least one of SSH_KEY or SSH_PASSWORD is required when SSH_HOST is set. SSH tunneling is not supported for MongoDB.
{
"mcpServers": {
"db-local": {
"command": "uvx",
"args": ["db-mcp-server"],
"env": {
"DB_TYPE": "sqlite",
"DB_PATH": "/path/to/database.db"
}
}
}
}
{
"mcpServers": {
"db-remote": {
"command": "uvx",
"args": ["db-mcp-server"],
"env": {
"DB_TYPE": "sqlite",
"DB_PATH": "/remote/path/to/database.db",
"SSH_HOST": "server.example.com",
"SSH_USER": "deploy",
"SSH_KEY": "~/.ssh/id_rsa"
}
}
}
}
{
"mcpServers": {
"db-prod": {
"command": "uvx",
"args": ["db-mcp-server"],
"env": {
"DB_TYPE": "mysql",
"DB_MODE": "read-only",
"DB_HOST": "db.example.com",
"DB_PORT": "3306",
"DB_USER": "root",
"DB_PASSWORD": "secret",
"DB_DATABASE": "myapp"
}
}
}
}
{
"mcpServers": {
"db-behind-bastion": {
"command": "uvx",
"args": ["db-mcp-server"],
"env": {
"DB_TYPE": "postgresql",
"DB_HOST": "10.0.0.5",
"DB_PORT": "5432",
"DB_USER": "postgres",
"DB_PASSWORD": "secret",
"DB_DATABASE": "myapp",
"SSH_HOST": "bastion.example.com",
"SSH_USER": "deploy",
"SSH_KEY": "~/.ssh/id_rsa"
}
}
}
}
For multiple databases, add multiple instances:
{
"mcpServers": {
"db-prod": {
"command": "uvx",
"args": ["db-mcp-server"],
"env": { "DB_TYPE": "mysql", "DB_DATABASE": "prod", "..." : "..." }
},
"db-analytics": {
"command": "uvx",
"args": ["db-mcp-server"],
"env": { "DB_TYPE": "postgresql", "DB_DATABASE": "analytics", "..." : "..." }
},
"db-staging": {
"command": "uvx",
"args": ["db-mcp-server"],
"env": { "DB_TYPE": "mongodb", "DB_DATABASE": "staging", "..." : "..." }
}
}
}
DB_MODE=read-writeDB_MODE=read-writeDB_MODE=read-writeMIT
DB_TYPE*Database type
DB_DATABASE*Database name
DB_MODEdefault: read-onlyAccess mode
DB_HOSTdefault: localhostDatabase host (MySQL/PostgreSQL)
DB_PORTDatabase port (MySQL: 3306, PostgreSQL: 5432)
DB_USERDatabase user (MySQL default: root, PostgreSQL default: postgres)
DB_PASSWORDsecretDatabase password (MySQL/PostgreSQL, optional)
DB_URLsecretMongoDB connection URL (required for MongoDB, e.g. mongodb://...)
SSH_HOSTSSH bastion host for tunneling (MySQL/PostgreSQL only)
SSH_PORTdefault: 22SSH port
SSH_USERSSH username (default: current OS user)
SSH_KEYPath to SSH private key (e.g. ~/.ssh/id_rsa)
SSH_PASSWORDsecretSSH password (if no key provided)
hovecapital/read-only-local-postgres-mcp-server
cocaxcode/database-mcp
io.github.infoinlet-marketplace/mcp-mysql
io.github.cybeleri/database-admin
io.github.yash-0620/postgres-mcp-secured