Skip to main content
Glama
LucasSiqueiraSurreco

Database Bridge MCP Server

mcp-db-bridge

English | PortuguΓͺs


English

Version

MCP (Model Context Protocol) server for MySQL, PostgreSQL & SQLite with granular permissions, multi-DB support, and cloud-ready SSL/TLS. Built with adapter pattern for extensibility.

Features

  • πŸ”Œ Multi-Database: MySQL, PostgreSQL, SQLite

  • πŸ—οΈ Adapter Pattern: Clean and extensible architecture

  • ☁️ Cloud-Ready: SSL/TLS for AWS RDS, Google Cloud SQL, Azure Database

  • πŸ”’ Security First: Read-only mode + granular schema permissions

  • 🌐 Multi-DB Mode: Simultaneous access to multiple schemas/databases

  • πŸ”„ Transactions: Automatic BEGIN/COMMIT/ROLLBACK

  • πŸš€ HTTP Mode: Optional remote HTTP server (Express)

Installation

npm install mcp-db-bridge
# or
pnpm add mcp-db-bridge

Quick Start

MySQL (Local)

# .env
DB_TYPE=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=root
DB_PASS=password
DB_NAME=mydb

PostgreSQL (Local)

# .env
DB_TYPE=postgresql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_USER=postgres
DB_PASS=password
DB_NAME=mydb

SQLite (In-Memory)

# .env
DB_TYPE=sqlite
SQLITE_DB=:memory:

Run

pnpm build
pnpm start
# or
node dist/index.js

Configuration

Database Types

DB_TYPE=mysql          # MySQL
DB_TYPE=postgresql     # PostgreSQL
DB_TYPE=sqlite         # SQLite

Connection Settings

Generic (All Databases)

DB_HOST=127.0.0.1
DB_PORT=3306           # MySQL: 3306, PostgreSQL: 5432
DB_USER=root
DB_PASS=password
DB_NAME=mydb           # Leave empty for multi-DB mode
DB_CONNECTION_LIMIT=10

MySQL-Specific (Backward Compatibility)

MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASS=password
MYSQL_DB=mydb
MYSQL_SOCKET_PATH=/tmp/mysql.sock  # Unix socket (priority over host/port)

PostgreSQL-Specific

POSTGRESQL_HOST=127.0.0.1
POSTGRESQL_PORT=5432
POSTGRESQL_DB=mydb

SQLite-Specific

SQLITE_DB=:memory:              # In-memory database
SQLITE_DB=/var/lib/app/data.db  # File-based database

Security & Permissions

Read-Only Mode

Blocks all write operations at application level:

DB_READ_ONLY_MODE=true

Global Write Permissions

Fine-grained operation control by type (applied globally):

ALLOW_INSERT_OPERATION=true   # Allow INSERT
ALLOW_UPDATE_OPERATION=true   # Allow UPDATE
ALLOW_DELETE_OPERATION=false  # Block DELETE
ALLOW_DDL_OPERATION=false     # Block CREATE/ALTER/DROP/TRUNCATE

Schema-Specific Permissions

Override global permissions for specific schemas:

# Format: "schema1:true,schema2:false,schema3:true"
SCHEMA_INSERT_PERMISSIONS=prod_db:false,test_db:true,staging_db:true
SCHEMA_UPDATE_PERMISSIONS=prod_db:false,test_db:true,staging_db:true
SCHEMA_DELETE_PERMISSIONS=prod_db:false,test_db:false,staging_db:false
SCHEMA_DDL_PERMISSIONS=prod_db:false,test_db:true,staging_db:false

How it works:

  • If schema has specific permission β†’ use it

  • Otherwise β†’ use global flag

Example:

# Global: INSERT blocked
ALLOW_INSERT_OPERATION=false

# test_db can insert, prod_db cannot
SCHEMA_INSERT_PERMISSIONS=test_db:true,prod_db:false

# Result:
# - INSERT on test_db: βœ… allowed (schema permission)
# - INSERT on prod_db: ❌ blocked (schema permission)
# - INSERT on other_db: ❌ blocked (global permission)

Multi-DB Mode

Access multiple databases/schemas through a single connection.

Activation

Leave DB_NAME empty (MySQL/PostgreSQL only):

DB_TYPE=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=root
DB_PASS=password
DB_NAME=                # Empty = multi-DB mode

Write Protection

By default, multi-DB mode is read-only for security. To allow writes:

MULTI_DB_WRITE_MODE=true  # ⚠️ Use with caution!

Recommendation: Use SCHEMA_*_PERMISSIONS for granular control instead of MULTI_DB_WRITE_MODE=true.

Complete Example

# Multi-DB with granular permissions
DB_TYPE=mysql
DB_NAME=                                    # Multi-DB mode
ALLOW_INSERT_OPERATION=false                # Global: blocked
SCHEMA_INSERT_PERMISSIONS=test_db:true      # Exception: test_db can insert
SCHEMA_UPDATE_PERMISSIONS=test_db:true      # Exception: test_db can update
SCHEMA_DELETE_PERMISSIONS=test_db:false     # test_db: DELETE blocked
SCHEMA_DDL_PERMISSIONS=test_db:true         # test_db: DDL allowed

SSL/TLS for Cloud Databases

AWS RDS (MySQL/PostgreSQL)

DB_TYPE=mysql
DB_HOST=myinstance.123456789012.us-east-1.rds.amazonaws.com
DB_PORT=3306
DB_SSL=true
DB_SSL_REJECT_UNAUTHORIZED=true
# Optional: DB_SSL_CA=/path/to/aws-rds-ca-cert.pem

Google Cloud SQL (PostgreSQL)

DB_TYPE=postgresql
DB_HOST=34.123.45.67
DB_PORT=5432
DB_SSL=true
DB_SSL_CA=/path/to/server-ca.pem
DB_SSL_CERT=/path/to/client-cert.pem
DB_SSL_KEY=/path/to/client-key.pem

Azure Database for MySQL

DB_TYPE=mysql
DB_HOST=myserver.mysql.database.azure.com
DB_PORT=3306
DB_SSL=true
DB_SSL_REJECT_UNAUTHORIZED=true

Remote MCP (HTTP Server)

Run MCP server via HTTP with authentication:

# .env
IS_REMOTE_MCP=true
REMOTE_SECRET_KEY=your-secret-key-here
PORT=3000

Endpoint: POST http://localhost:3000/mcp

Header: Authorization: Bearer your-secret-key-here

Architecture

src/
β”œβ”€β”€ db/
β”‚   β”œβ”€β”€ adapters/
β”‚   β”‚   β”œβ”€β”€ types.ts              # Interfaces and types
β”‚   β”‚   β”œβ”€β”€ factory.ts            # Factory pattern
β”‚   β”‚   β”œβ”€β”€ mysql.adapter.ts      # MySQL via mysql2
β”‚   β”‚   β”œβ”€β”€ postgresql.adapter.ts # PostgreSQL via pg
β”‚   β”‚   └── sqlite.adapter.ts     # SQLite via better-sqlite3
β”‚   β”œβ”€β”€ index.ts                  # Core query handlers
β”‚   β”œβ”€β”€ utils.ts                  # SQL parsing (node-sql-parser)
β”‚   └── permissions.ts            # Schema permission checks
β”œβ”€β”€ config/
β”‚   └── index.ts                  # Environment configuration
β”œβ”€β”€ utils/
β”‚   └── index.ts                  # Logging & utilities
└── types/
    └── index.ts                  # Type definitions

Adapter Pattern

Each adapter implements the DatabaseAdapter interface:

export interface DatabaseAdapter {
  readonly type: DatabaseType;
  createPool(config: ConnectionConfig): Promise<DatabasePool>;
  executeQuery<T>(pool: DatabasePool, sql: string, params?: any[]): Promise<T>;
  setReadOnly(connection: DatabaseConnection): Promise<void>;
  unsetReadOnly(connection: DatabaseConnection): Promise<void>;
  normalizeResult(result: any): NormalizedResult;
  supportsReadOnlyMode(): boolean;
}

Transaction Flows

Read Operations:

BEGIN β†’ SET TRANSACTION READ ONLY β†’ QUERY β†’ ROLLBACK β†’ RESET TO READ WRITE

Write Operations:

BEGIN β†’ QUERY β†’ COMMIT (or ROLLBACK on error)

Examples

MySQL with Unix Socket

DB_TYPE=mysql
MYSQL_SOCKET_PATH=/tmp/mysql.sock
DB_USER=root
DB_PASS=password
DB_NAME=mydb

PostgreSQL Multi-DB with Permissions

DB_TYPE=postgresql
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASS=password
DB_NAME=                                      # Multi-DB mode
SCHEMA_INSERT_PERMISSIONS=app_db:true         # app_db can insert
SCHEMA_UPDATE_PERMISSIONS=app_db:true         # app_db can update
SCHEMA_DELETE_PERMISSIONS=app_db:false        # app_db: DELETE blocked

SQLite Read-Only

DB_TYPE=sqlite
SQLITE_DB=/var/lib/data/production.db
DB_READ_ONLY_MODE=true

AWS RDS MySQL with SSL

DB_TYPE=mysql
DB_HOST=prod.abc123.us-east-1.rds.amazonaws.com
DB_PORT=3306
DB_USER=admin
DB_PASS=secure_password
DB_NAME=production
DB_SSL=true
DB_SSL_REJECT_UNAUTHORIZED=true
ALLOW_INSERT_OPERATION=false
ALLOW_UPDATE_OPERATION=false
ALLOW_DELETE_OPERATION=false
ALLOW_DDL_OPERATION=false

Development

pnpm dev              # Run in dev mode (tsx)
pnpm build            # Compile TypeScript
pnpm watch            # Watch mode
pnpm exec             # Build + run with .env

Testing

pnpm test              # Run all tests (setup + vitest run)
pnpm test:watch        # Watch mode
pnpm test:unit         # Unit tests only
pnpm test:integration  # Integration tests (MySQL, socket, permissions)
pnpm test:e2e          # End-to-end tests
pnpm test:coverage     # Coverage report

Test Structure:

tests/
β”œβ”€β”€ unit/           # Isolated functions (query parsing, utils)
β”œβ”€β”€ integration/    # Real database operations
└── e2e/           # Complete MCP server workflows

Performance Tuning

Connection Pool

DB_CONNECTION_LIMIT=20  # Default: 10

Disable Read-Only Transactions (MySQL)

⚠️ Not recommended - reduces security:

MYSQL_DISABLE_READ_ONLY_TRANSACTIONS=true

Environment Variables Reference

Core Database Settings

Variable

Description

Default

Example

DB_TYPE

Database type

mysql

mysql, postgresql, sqlite

DB_HOST

Database host

127.0.0.1

localhost, db.example.com

DB_PORT

Database port

3306

3306 (MySQL), 5432 (PostgreSQL)

DB_USER

Database user

root

admin, postgres

DB_PASS

Database password

""

secure_password

DB_NAME

Database name

undefined

mydb, "" (multi-DB)

DB_CONNECTION_LIMIT

Pool size

10

20

Security Settings

Variable

Description

Default

Values

DB_READ_ONLY_MODE

Global read-only mode

false

true, false

ALLOW_INSERT_OPERATION

Global INSERT permission

false

true, false

ALLOW_UPDATE_OPERATION

Global UPDATE permission

false

true, false

ALLOW_DELETE_OPERATION

Global DELETE permission

false

true, false

ALLOW_DDL_OPERATION

Global DDL permission

false

true, false

MULTI_DB_WRITE_MODE

Allow writes in multi-DB

false

true, false

Schema Permissions

Variable

Format

Example

SCHEMA_INSERT_PERMISSIONS

schema:bool,schema:bool

test_db:true,prod_db:false

SCHEMA_UPDATE_PERMISSIONS

schema:bool,schema:bool

test_db:true,prod_db:false

SCHEMA_DELETE_PERMISSIONS

schema:bool,schema:bool

test_db:false,prod_db:false

SCHEMA_DDL_PERMISSIONS

schema:bool,schema:bool

test_db:true,prod_db:false

SSL/TLS Settings

Variable

Description

Required

Example

DB_SSL

Enable SSL/TLS

Cloud DBs

true, false

DB_SSL_REJECT_UNAUTHORIZED

Strict SSL validation

Production

true, false

DB_SSL_CA

CA certificate path

Cloud SQL

/path/to/ca.pem

DB_SSL_CERT

Client certificate

Cloud SQL

/path/to/cert.pem

DB_SSL_KEY

Client key

Cloud SQL

/path/to/key.pem

Remote MCP Settings

Variable

Description

Required

Example

IS_REMOTE_MCP

Enable HTTP mode

No

true, false

REMOTE_SECRET_KEY

Auth token

If remote

your-secret-key

PORT

HTTP server port

No

3000

Troubleshooting

Connection Errors

MySQL socket not found:

# Check socket path
sudo mysql -u root -p -e "SELECT @@socket;"

# Set in .env
MYSQL_SOCKET_PATH=/var/run/mysqld/mysqld.sock

PostgreSQL connection refused:

# Check if PostgreSQL is running
sudo systemctl status postgresql

# Check port
sudo netstat -tulpn | grep 5432

Permission Errors

"Operation not allowed in read-only mode":

# Check global read-only mode
DB_READ_ONLY_MODE=false

# Check multi-DB mode
MULTI_DB_WRITE_MODE=true  # If needed

# Or use schema permissions
SCHEMA_INSERT_PERMISSIONS=mydb:true

"INSERT not allowed for schema 'mydb'":

# Check global permission
ALLOW_INSERT_OPERATION=true

# Or add schema exception
SCHEMA_INSERT_PERMISSIONS=mydb:true

License

MIT

Credits


Related MCP server: Bollard MCP

PortuguΓͺs

Version

Servidor MCP (Model Context Protocol) para MySQL, PostgreSQL e SQLite com permissΓ΅es granulares, suporte multi-DB e SSL/TLS pronto para nuvem. ConstruΓ­do com adapter pattern para extensibilidade.

Funcionalidades

  • πŸ”Œ Multi-Database: MySQL, PostgreSQL, SQLite

  • πŸ—οΈ Adapter Pattern: Arquitetura limpa e extensΓ­vel

  • ☁️ Cloud-Ready: SSL/TLS para AWS RDS, Google Cloud SQL, Azure Database

  • πŸ”’ Security First: Modo read-only + permissΓ΅es granulares por schema

  • 🌐 Multi-DB Mode: Acesso simultΓ’neo a mΓΊltiplos schemas/databases

  • πŸ”„ TransaΓ§Γ΅es: BEGIN/COMMIT/ROLLBACK automΓ‘tico

  • πŸš€ Modo HTTP: Servidor HTTP remoto opcional (Express)

InstalaΓ§Γ£o

npm install mcp-db-bridge
# ou
pnpm add mcp-db-bridge

InΓ­cio RΓ‘pido

MySQL (Local)

# .env
DB_TYPE=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=root
DB_PASS=password
DB_NAME=mydb

PostgreSQL (Local)

# .env
DB_TYPE=postgresql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_USER=postgres
DB_PASS=password
DB_NAME=mydb

SQLite (In-Memory)

# .env
DB_TYPE=sqlite
SQLITE_DB=:memory:

Executar

pnpm build
pnpm start
# ou
node dist/index.js

ConfiguraΓ§Γ£o

Tipos de Banco de Dados

DB_TYPE=mysql          # MySQL
DB_TYPE=postgresql     # PostgreSQL
DB_TYPE=sqlite         # SQLite

ConfiguraΓ§Γ΅es de ConexΓ£o

GenΓ©ricas (Todos os Bancos)

DB_HOST=127.0.0.1
DB_PORT=3306           # MySQL: 3306, PostgreSQL: 5432
DB_USER=root
DB_PASS=password
DB_NAME=mydb           # Deixe vazio para modo multi-DB
DB_CONNECTION_LIMIT=10

EspecΓ­ficas do MySQL (Compatibilidade)

MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASS=password
MYSQL_DB=mydb
MYSQL_SOCKET_PATH=/tmp/mysql.sock  # Unix socket (prioridade sobre host/port)

EspecΓ­ficas do PostgreSQL

POSTGRESQL_HOST=127.0.0.1
POSTGRESQL_PORT=5432
POSTGRESQL_DB=mydb

EspecΓ­ficas do SQLite

SQLITE_DB=:memory:              # Database em memΓ³ria
SQLITE_DB=/var/lib/app/data.db  # Database em arquivo

SeguranΓ§a & PermissΓ΅es

Modo Read-Only

Bloqueia todas as operaΓ§Γ΅es de escrita em nΓ­vel de aplicaΓ§Γ£o:

DB_READ_ONLY_MODE=true

PermissΓ΅es Globais de Escrita

Controle fino de operaΓ§Γ΅es por tipo (aplicado globalmente):

ALLOW_INSERT_OPERATION=true   # Permite INSERT
ALLOW_UPDATE_OPERATION=true   # Permite UPDATE
ALLOW_DELETE_OPERATION=false  # Bloqueia DELETE
ALLOW_DDL_OPERATION=false     # Bloqueia CREATE/ALTER/DROP/TRUNCATE

PermissΓ΅es EspecΓ­ficas por Schema

Sobrescreve permissΓ΅es globais para schemas especΓ­ficos:

# Formato: "schema1:true,schema2:false,schema3:true"
SCHEMA_INSERT_PERMISSIONS=prod_db:false,test_db:true,staging_db:true
SCHEMA_UPDATE_PERMISSIONS=prod_db:false,test_db:true,staging_db:true
SCHEMA_DELETE_PERMISSIONS=prod_db:false,test_db:false,staging_db:false
SCHEMA_DDL_PERMISSIONS=prod_db:false,test_db:true,staging_db:false

Como funciona:

  • Se schema tem permissΓ£o especΓ­fica β†’ usa ela

  • Caso contrΓ‘rio β†’ usa flag global

Exemplo:

# Global: INSERT bloqueado
ALLOW_INSERT_OPERATION=false

# test_db pode inserir, prod_db nΓ£o pode
SCHEMA_INSERT_PERMISSIONS=test_db:true,prod_db:false

# Resultado:
# - INSERT em test_db: βœ… permitido (permissΓ£o do schema)
# - INSERT em prod_db: ❌ bloqueado (permissão do schema)
# - INSERT em other_db: ❌ bloqueado (permissão global)

Modo Multi-DB

Acessa mΓΊltiplos databases/schemas atravΓ©s de uma ΓΊnica conexΓ£o.

AtivaΓ§Γ£o

Deixe DB_NAME vazio (MySQL/PostgreSQL apenas):

DB_TYPE=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=root
DB_PASS=password
DB_NAME=                # Vazio = modo multi-DB

ProteΓ§Γ£o de Escrita

Por padrΓ£o, modo multi-DB Γ© read-only por seguranΓ§a. Para permitir escritas:

MULTI_DB_WRITE_MODE=true  # ⚠️ Use com cautela!

RecomendaΓ§Γ£o: Use SCHEMA_*_PERMISSIONS para controle granular ao invΓ©s de MULTI_DB_WRITE_MODE=true.

Exemplo Completo

# Multi-DB com permissΓ΅es granulares
DB_TYPE=mysql
DB_NAME=                                    # Modo multi-DB
ALLOW_INSERT_OPERATION=false                # Global: bloqueado
SCHEMA_INSERT_PERMISSIONS=test_db:true      # ExceΓ§Γ£o: test_db pode inserir
SCHEMA_UPDATE_PERMISSIONS=test_db:true      # ExceΓ§Γ£o: test_db pode atualizar
SCHEMA_DELETE_PERMISSIONS=test_db:false     # test_db: DELETE bloqueado
SCHEMA_DDL_PERMISSIONS=test_db:true         # test_db: DDL permitido

SSL/TLS para Bancos na Nuvem

AWS RDS (MySQL/PostgreSQL)

DB_TYPE=mysql
DB_HOST=myinstance.123456789012.us-east-1.rds.amazonaws.com
DB_PORT=3306
DB_SSL=true
DB_SSL_REJECT_UNAUTHORIZED=true
# Opcional: DB_SSL_CA=/path/to/aws-rds-ca-cert.pem

Google Cloud SQL (PostgreSQL)

DB_TYPE=postgresql
DB_HOST=34.123.45.67
DB_PORT=5432
DB_SSL=true
DB_SSL_CA=/path/to/server-ca.pem
DB_SSL_CERT=/path/to/client-cert.pem
DB_SSL_KEY=/path/to/client-key.pem

Azure Database for MySQL

DB_TYPE=mysql
DB_HOST=myserver.mysql.database.azure.com
DB_PORT=3306
DB_SSL=true
DB_SSL_REJECT_UNAUTHORIZED=true

MCP Remoto (Servidor HTTP)

Execute o servidor MCP via HTTP com autenticaΓ§Γ£o:

# .env
IS_REMOTE_MCP=true
REMOTE_SECRET_KEY=your-secret-key-here
PORT=3000

Endpoint: POST http://localhost:3000/mcp

Header: Authorization: Bearer your-secret-key-here

Arquitetura

src/
β”œβ”€β”€ db/
β”‚   β”œβ”€β”€ adapters/
β”‚   β”‚   β”œβ”€β”€ types.ts              # Interfaces e tipos
β”‚   β”‚   β”œβ”€β”€ factory.ts            # Factory pattern
β”‚   β”‚   β”œβ”€β”€ mysql.adapter.ts      # MySQL via mysql2
β”‚   β”‚   β”œβ”€β”€ postgresql.adapter.ts # PostgreSQL via pg
β”‚   β”‚   └── sqlite.adapter.ts     # SQLite via better-sqlite3
β”‚   β”œβ”€β”€ index.ts                  # Core query handlers
β”‚   β”œβ”€β”€ utils.ts                  # SQL parsing (node-sql-parser)
β”‚   └── permissions.ts            # Schema permission checks
β”œβ”€β”€ config/
β”‚   └── index.ts                  # ConfiguraΓ§Γ£o de ambiente
β”œβ”€β”€ utils/
β”‚   └── index.ts                  # Logging & utilitΓ‘rios
└── types/
    └── index.ts                  # DefiniΓ§Γ΅es de tipos

Adapter Pattern

Cada adapter implementa a interface DatabaseAdapter:

export interface DatabaseAdapter {
  readonly type: DatabaseType;
  createPool(config: ConnectionConfig): Promise<DatabasePool>;
  executeQuery<T>(pool: DatabasePool, sql: string, params?: any[]): Promise<T>;
  setReadOnly(connection: DatabaseConnection): Promise<void>;
  unsetReadOnly(connection: DatabaseConnection): Promise<void>;
  normalizeResult(result: any): NormalizedResult;
  supportsReadOnlyMode(): boolean;
}

Fluxos de TransaΓ§Γ£o

OperaΓ§Γ΅es de Leitura:

BEGIN β†’ SET TRANSACTION READ ONLY β†’ QUERY β†’ ROLLBACK β†’ RESET TO READ WRITE

OperaΓ§Γ΅es de Escrita:

BEGIN β†’ QUERY β†’ COMMIT (ou ROLLBACK em caso de erro)

Exemplos

MySQL com Unix Socket

DB_TYPE=mysql
MYSQL_SOCKET_PATH=/tmp/mysql.sock
DB_USER=root
DB_PASS=password
DB_NAME=mydb

PostgreSQL Multi-DB com PermissΓ΅es

DB_TYPE=postgresql
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASS=password
DB_NAME=                                      # Modo multi-DB
SCHEMA_INSERT_PERMISSIONS=app_db:true         # app_db pode inserir
SCHEMA_UPDATE_PERMISSIONS=app_db:true         # app_db pode atualizar
SCHEMA_DELETE_PERMISSIONS=app_db:false        # app_db: DELETE bloqueado

SQLite Read-Only

DB_TYPE=sqlite
SQLITE_DB=/var/lib/data/production.db
DB_READ_ONLY_MODE=true

AWS RDS MySQL com SSL

DB_TYPE=mysql
DB_HOST=prod.abc123.us-east-1.rds.amazonaws.com
DB_PORT=3306
DB_USER=admin
DB_PASS=secure_password
DB_NAME=production
DB_SSL=true
DB_SSL_REJECT_UNAUTHORIZED=true
ALLOW_INSERT_OPERATION=false
ALLOW_UPDATE_OPERATION=false
ALLOW_DELETE_OPERATION=false
ALLOW_DDL_OPERATION=false

Desenvolvimento

pnpm dev              # Executar em modo dev (tsx)
pnpm build            # Compilar TypeScript
pnpm watch            # Modo watch
pnpm exec             # Build + executar com .env

Testes

pnpm test              # Executar todos os testes (setup + vitest run)
pnpm test:watch        # Modo watch
pnpm test:unit         # Apenas testes unitΓ‘rios
pnpm test:integration  # Testes de integraΓ§Γ£o (MySQL, socket, permissΓ΅es)
pnpm test:e2e          # Testes end-to-end
pnpm test:coverage     # RelatΓ³rio de cobertura

Estrutura de Testes:

tests/
β”œβ”€β”€ unit/           # FunΓ§Γ΅es isoladas (parsing de queries, utils)
β”œβ”€β”€ integration/    # OperaΓ§Γ΅es reais de banco de dados
└── e2e/           # Fluxos completos do servidor MCP

Ajustes de Performance

Connection Pool

DB_CONNECTION_LIMIT=20  # PadrΓ£o: 10

Desabilitar TransaΓ§Γ΅es Read-Only (MySQL)

⚠️ Não recomendado - reduz segurança:

MYSQL_DISABLE_READ_ONLY_TRANSACTIONS=true

ReferΓͺncia de VariΓ‘veis de Ambiente

ConfiguraΓ§Γ΅es Principais do Banco

VariΓ‘vel

DescriΓ§Γ£o

PadrΓ£o

Exemplo

DB_TYPE

Tipo de banco

mysql

mysql, postgresql, sqlite

DB_HOST

Host do banco

127.0.0.1

localhost, db.example.com

DB_PORT

Porta do banco

3306

3306 (MySQL), 5432 (PostgreSQL)

DB_USER

UsuΓ‘rio do banco

root

admin, postgres

DB_PASS

Senha do banco

""

secure_password

DB_NAME

Nome do banco

undefined

mydb, "" (multi-DB)

DB_CONNECTION_LIMIT

Tamanho do pool

10

20

ConfiguraΓ§Γ΅es de SeguranΓ§a

VariΓ‘vel

DescriΓ§Γ£o

PadrΓ£o

Valores

DB_READ_ONLY_MODE

Modo global read-only

false

true, false

ALLOW_INSERT_OPERATION

PermissΓ£o global de INSERT

false

true, false

ALLOW_UPDATE_OPERATION

PermissΓ£o global de UPDATE

false

true, false

ALLOW_DELETE_OPERATION

PermissΓ£o global de DELETE

false

true, false

ALLOW_DDL_OPERATION

PermissΓ£o global de DDL

false

true, false

MULTI_DB_WRITE_MODE

Permitir escritas em multi-DB

false

true, false

PermissΓ΅es por Schema

VariΓ‘vel

Formato

Exemplo

SCHEMA_INSERT_PERMISSIONS

schema:bool,schema:bool

test_db:true,prod_db:false

SCHEMA_UPDATE_PERMISSIONS

schema:bool,schema:bool

test_db:true,prod_db:false

SCHEMA_DELETE_PERMISSIONS

schema:bool,schema:bool

test_db:false,prod_db:false

SCHEMA_DDL_PERMISSIONS

schema:bool,schema:bool

test_db:true,prod_db:false

ConfiguraΓ§Γ΅es SSL/TLS

VariΓ‘vel

DescriΓ§Γ£o

NecessΓ‘ria

Exemplo

DB_SSL

Habilitar SSL/TLS

Bancos Cloud

true, false

DB_SSL_REJECT_UNAUTHORIZED

ValidaΓ§Γ£o SSL estrita

ProduΓ§Γ£o

true, false

DB_SSL_CA

Caminho do certificado CA

Cloud SQL

/path/to/ca.pem

DB_SSL_CERT

Certificado do cliente

Cloud SQL

/path/to/cert.pem

DB_SSL_KEY

Chave do cliente

Cloud SQL

/path/to/key.pem

ConfiguraΓ§Γ΅es MCP Remoto

VariΓ‘vel

DescriΓ§Γ£o

NecessΓ‘ria

Exemplo

IS_REMOTE_MCP

Habilitar modo HTTP

NΓ£o

true, false

REMOTE_SECRET_KEY

Token de autenticaΓ§Γ£o

Se remoto

your-secret-key

PORT

Porta do servidor HTTP

NΓ£o

3000

SoluΓ§Γ£o de Problemas

Erros de ConexΓ£o

Socket MySQL nΓ£o encontrado:

# Verificar caminho do socket
sudo mysql -u root -p -e "SELECT @@socket;"

# Configurar no .env
MYSQL_SOCKET_PATH=/var/run/mysqld/mysqld.sock

ConexΓ£o PostgreSQL recusada:

# Verificar se PostgreSQL estΓ‘ rodando
sudo systemctl status postgresql

# Verificar porta
sudo netstat -tulpn | grep 5432

Erros de PermissΓ£o

"Operation not allowed in read-only mode":

# Verificar modo global read-only
DB_READ_ONLY_MODE=false

# Verificar modo multi-DB
MULTI_DB_WRITE_MODE=true  # Se necessΓ‘rio

# Ou usar permissΓ΅es de schema
SCHEMA_INSERT_PERMISSIONS=mydb:true

"INSERT not allowed for schema 'mydb'":

# Verificar permissΓ£o global
ALLOW_INSERT_OPERATION=true

# Ou adicionar exceΓ§Γ£o de schema
SCHEMA_INSERT_PERMISSIONS=mydb:true

LicenΓ§a

MIT

CrΓ©ditos

A
license - permissive license
-
quality - not tested
D
maintenance

Maintenance

–Maintainers
–Response time
0dRelease cycle
2Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    -
    quality
    D
    maintenance
    Enables secure interaction with multiple SQL database engines (MySQL, PostgreSQL, SQLite, SQL Server) through a standardized interface. Supports schema inspection, safe query execution, and controlled write operations with built-in security restrictions.
    5
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables safe, AI-driven database interactions with schema discovery, intent validation, and session memory, supporting multiple databases.
    14
    2
    AGPL 3.0
  • A
    license
    -
    quality
    C
    maintenance
    Enables AI agents to securely interact with multiple databases (MySQL, PostgreSQL) via natural language queries, with cross-database querying and enterprise-grade security.
    20
    MIT
  • A
    license
    -
    quality
    D
    maintenance
    Enables interaction with multiple databases (MySQL, PostgreSQL, SQLite, Supabase) through a unified interface with security features like SQL injection detection and rate limiting.
    70
    MIT

View all related MCP servers

Related MCP Connectors

  • Query PostgreSQL databases in plain English β€” LLM-generated, safety-validated SQL.

  • The agent-native cloud: database, functions, AI, storage, computers. 50 tools, one API key.

  • Connect to PlanetScale databases, branches, schema, query insights, and execute SQL

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/LucasSiqueiraSurreco/mcp-db-bridge'

If you have feedback or need assistance with the MCP directory API, please join our Discord server