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

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    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
    D
    maintenance
    Enables safe, AI-driven database interactions with schema discovery, intent validation, and session memory, supporting multiple databases.
    14
    26 PyPI
    2
    AGPL 3.0
  • A
    license
    Not graded
    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.
    8 npm
    MIT
  • A
    license
    Not graded
    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.
    69 npm
    MIT