MCP-PostgreSQL-Ops
MCP-PostgreSQL-Ops é um servidor MCP profissional para operações, monitoramento e gerenciamento de banco de dados PostgreSQL. Suporta PostgreSQL 12-17 com análise abrangente de banco de dados, monitoramento de desempenho e recomendações inteligentes de manutenção por meio de consultas em linguagem natural.
Documentação
Servidor MCP para Operações e Monitoramento de PostgreSQL
Arquitetura e Internos (DeepWiki)
Visão Geral
MCP-PostgreSQL-Ops é um servidor MCP profissional para operações, monitoramento e gerenciamento de banco de dados PostgreSQL. Suporta PostgreSQL 12-18 com análise abrangente de banco de dados, monitoramento de desempenho e recomendações inteligentes de manutenção por meio de consultas em linguagem natural. A maioria dos recursos funciona de forma independente, mas os recursos avançados de análise de consultas são aprimorados quando as extensões pg_stat_statements e (opcionalmente) pg_stat_monitor estão instaladas.
Recursos
- ✅ Zero Configuração: Funciona com PostgreSQL 12-18 pronto para uso, com detecção automática de versão.
- ✅ Linguagem Natural: Faça perguntas como "Mostre-me consultas lentas" ou "Analise o inchaço da tabela."
- ✅ Seguro para Produção: Operações somente leitura, compatível com RDS/Aurora com permissões de usuário regulares.
- ✅ Aprimorado por Extensões:
pg_stat_statementsepg_stat_monitoropcionais para análises avançadas de consultas. - ✅ Monitoramento Abrangente de Banco de Dados: Análise de desempenho, detecção de inchaço e recomendações de manutenção.
- ✅ Análise Inteligente de Consultas: Identificação de consultas lentas com integração
pg_stat_statementsepg_stat_monitor. - ✅ Descoberta de Esquema e Relacionamentos: Exploração da estrutura do banco de dados com mapeamento detalhado de relacionamentos.
- ✅ Inteligência de VACUUM e Autovacuum: Monitoramento de manutenção em tempo real e análise de eficácia.
- ✅ Operações Multi-Banco de Dados: Análise e monitoramento contínuos entre bancos de dados.
- ✅ Pronto para Empresas: Operações seguras somente leitura com compatibilidade com RDS/Aurora.
- ✅ Amigável para Desenvolvedores: Base de código simples para fácil personalização e extensão de ferramentas.
🔧 Recursos Avançados
- Estatísticas de I/O cientes da versão (aprimoradas no PostgreSQL 16+, colunas de bytes no PG 18+).
- Monitoramento de conexões e bloqueios em tempo real.
- Análise de processos em segundo plano e checkpoints.
- Status de replicação e monitoramento de WAL.
- Análise de capacidade e inchaço do banco de dados.
- Catálogo de eventos de espera com descrições (PG 17+).
- Monitoramento do resumidor de WAL para backups incrementais (PG 17+).
- Monitoramento do subsistema de I/O assíncrono (PG 18+).
- Estatísticas de I/O e WAL por backend (PG 18+).
Exemplos de Uso de Ferramentas
📸 Mais Exemplos com Capturas de Tela →


⭐ Início Rápido (5 minutos)
Nota: O contêiner
postgresqlincluído emdocker-compose.ymldestina-se apenas a fins de teste de início rápido. Você pode se conectar à sua própria instância do PostgreSQL ajustando as variáveis de ambiente conforme necessário.
Se você quiser usar sua própria instância do PostgreSQL em vez do contêiner de teste integrado:
- Atualize as informações de conexão do PostgreSQL de destino no seu arquivo
.env(consulte POSTGRES_HOST, POSTGRES_PORT, POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB).- Em
docker-compose.yml, comente (desative) os contêinerespostgresepostgres-init-extensionspara evitar iniciar o banco de dados de teste integrado.
Diagrama de Fluxo do Início Rápido/Tutorial

1. Configuração do Ambiente
Nota: Embora os privilégios de superusuário forneçam acesso a todos os bancos de dados e informações do sistema, o servidor MCP também funciona com permissões de usuário regulares para tarefas básicas de monitoramento.
git clone https://github.com/call518/MCP-PostgreSQL-Ops.git
cd MCP-PostgreSQL-Ops
### Check and modify .env file
cp .env.example .env
vim .env
### No need to modify defaults, but if using your own PostgreSQL server, edit below:
POSTGRES_HOST=host.docker.internal
POSTGRES_PORT=15432 # External port for host access (mapped to internal 5432)
POSTGRES_USER=postgres
POSTGRES_PASSWORD=changeme!@34
POSTGRES_DB=ecommerce # Default connection DB. Superusers can access all DBs.
Nota:
PGDATA=/data/dbestá pré-configurado para a imagem Docker do Percona PostgreSQL, que requer esse caminho específico para permissões de gravação adequadas.
2. Iniciar Contêineres de Demonstração
# Start all containers including built-in PostgreSQL for testing
docker-compose up -d
# Alternative: If using your own PostgreSQL instance
# Comment out postgres and postgres-init-extensions services in docker-compose.yml
# Then use the custom configuration:
# docker-compose -f docker-compose.custom-db.yml up -d
⏰ Aguarde a Configuração do Ambiente: A configuração inicial do ambiente leva alguns minutos, pois os contêineres são iniciados em sequência:
- O contêiner PostgreSQL inicia primeiro com a inicialização do banco de dados
- O contêiner PostgreSQL Extensions instala extensões e cria dados de teste abrangentes (~83 mil registros)
- Os contêineres MCP Server e MCPO Proxy iniciam depois que o PostgreSQL está pronto
- O contêiner OpenWebUI inicia por último e pode levar mais tempo para carregar a interface web
💡 Dica: Aguarde 2-3 minutos após executar
docker-compose up -dantes de acessar o OpenWebUI para garantir que todos os serviços estejam totalmente inicializados.
🔍 Verificar o Status do Contêiner (Opcional):
# Monitor container startup progress
docker-compose logs -f
# Check if all containers are running
docker-compose ps
# Verify PostgreSQL is ready
docker-compose logs postgres | grep "ready to accept connections"
3. Acesso ao OpenWebUI
- A lista de recursos de ferramentas MCP fornecidos por
swaggerpode ser encontrada no URL da Documentação da API do MCPO.- ex:
http://localhost:8003/docs
- ex:
4. Registrando a Ferramenta no OpenWebUI
📌 Nota: As instruções de configuração da Web-UI são baseadas no OpenWebUI v0.6.22. Os locais de menu e as configurações podem diferir em versões mais recentes.
- Faça login no OpenWebUI com uma conta de administrador
- Vá para "Configurações" → "Ferramentas" no menu superior.
- Digite o endereço da Ferramenta
postgresql-ops(ex:http://localhost:8003/postgresql-ops) para conectar as Ferramentas MCP. - Configure o Ollama ou OpenAI.
5. Concluído!
Parabéns! Seu servidor MCP PostgreSQL Operations está pronto para uso. Você pode começar a explorar seus bancos de dados com consultas em linguagem natural.
🚀 Experimente Estas Consultas de Exemplo:
- "Mostre-me as conexões ativas atuais"
- "Quais são as consultas mais lentas do sistema?"
- "Analise o inchaço da tabela em todos os bancos de dados"
- "Mostre-me informações sobre o tamanho do banco de dados"
- "Quais tabelas precisam de manutenção VACUUM?"
📖 Próximos Passos:
- Navegue pela seção de Consultas de Exemplo abaixo para mais exemplos de consultas
- Confira Exemplos de Uso de Ferramentas com Capturas de Tela para guias visuais
- Explore a Matriz de Compatibilidade de Ferramentas para entender os recursos disponíveis
(NOTA) Visão Geral dos Dados de Teste de Exemplo
O script create-test-data.sql é executado pelo contêiner postgres-init-extensions (definido no docker-compose.yml) na primeira inicialização, gerando automaticamente bancos de dados de teste abrangentes para teste de ferramentas MCP:
| Banco de Dados | Finalidade | Esquema e Tabelas | Escala |
|---|---|---|---|
| ecommerce | Sistema de e-commerce | public: categories, products, customers, orders, order_items | 10 categorias, 500 produtos, 100 clientes, 200 pedidos, 400 itens de pedido |
| analytics | Análise e relatórios | public: page_views, sales_summary | 1.000 visualizações de página, 30 resumos de vendas |
| inventory | Gerenciamento de armazém | public: suppliers, inventory_items, purchase_orders | 10 fornecedores, 100 itens, 50 pedidos de compra |
| hr_system | Gerenciamento de RH | public: departments, employees, payroll | 5 departamentos, 50 funcionários, 150 registros de folha de pagamento |
Usuários de teste criados: app_readonly, app_readwrite, analytics_user, backup_user
Otimizado para testes: Inchaço intencional de tabela, vários índices (usados/não usados), dados de séries temporais, relacionamentos complexos
Matriz de Compatibilidade de Ferramentas
Adaptação Automática: Todas as ferramentas funcionam de forma transparente nas versões suportadas - nenhuma configuração necessária!
🟢 Ferramentas Independentes de Extensão (Nenhuma Extensão Necessária)
| Nome da Ferramenta | Extensões Necessárias | PG 12 | PG 13 | PG 14 | PG 15 | PG 16 | PG 17 | PG 18 | Visualizações/Tabelas do Sistema Usadas |
|---|---|---|---|---|---|---|---|---|---|
get_server_info | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | version(), pg_extension |
get_active_connections | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_activity |
get_postgresql_config | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_settings |
get_database_list | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_database |
get_table_list | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | information_schema.tables |
get_table_schema_info | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | information_schema.*, pg_indexes |
get_database_schema_info | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_namespace, pg_class, pg_proc |
get_table_relationships | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | information_schema.* (restrições) |
get_user_list | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_user, pg_roles |
get_index_usage_stats | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_user_indexes |
get_database_size_info | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_database_size() |
get_table_size_info | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_total_relation_size() |
get_vacuum_analyze_stats | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ Aprimorado | pg_stat_user_tables |
get_current_database_info | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_database, current_database() |
get_table_bloat_analysis | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_user_tables |
get_database_bloat_overview | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_user_tables |
get_autovacuum_status | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_user_tables |
get_autovacuum_activity | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_user_tables |
get_running_vacuum_operations | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_activity |
get_vacuum_effectiveness_analysis | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_user_tables |
get_lock_monitoring | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_locks, pg_stat_activity |
get_wal_status | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_current_wal_lsn() |
get_database_stats | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ Aprimorado | pg_stat_database |
get_table_io_stats | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_statio_user_tables |
get_index_io_stats | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_statio_user_indexes |
get_database_conflicts_stats | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_database_conflicts |
🚀 Ferramentas Cientes de Versão (Auto-Adaptáveis)
| Nome da Ferramenta | Extensões Necessárias | PG 12 | PG 13 | PG 14 | PG 15 | PG 16 | PG 17 | PG 18 | Recursos Especiais |
|---|---|---|---|---|---|---|---|---|---|
get_io_stats | ❌ Nenhuma | ✅ Básico | ✅ Básico | ✅ Básico | ✅ Básico | ✅ Aprimorado | ✅ Aprimorado | ✅ Aprimorado | PG16+: suporte pg_stat_io; PG18+: colunas de bytes |
get_bgwriter_stats | ❌ Nenhuma | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ Especial | ✅ Aprimorado | PG17: Estatísticas separadas do checkpointer; PG18+: num_done, slru_written |
get_replication_status | ❌ Nenhuma | ✅ Compatível | ✅ Aprimorado | ✅ Aprimorado | ✅ Aprimorado | ✅ Aprimorado | ✅ Aprimorado | ✅ Aprimorado | PG13+: wal_status, safe_wal_size; PG16+: receptor WAL aprimorado; PG17+: invalidation_reason, inactive_since |
get_all_tables_stats | ❌ Nenhuma | ✅ Compatível | ✅ Aprimorado | ✅ Aprimorado | ✅ Aprimorado | ✅ Aprimorado | ✅ Aprimorado | ✅ Aprimorado | PG13+: rastreamento n_ins_since_vacuum para otimização de manutenção de vacuum |
get_user_functions_stats | ⚙️ Config Necessária | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Requer track_functions=pl |
get_wait_events | ❌ Nenhuma | ✅ Fallback | ✅ Fallback | ✅ Fallback | ✅ Fallback | ✅ Fallback | ✅ Nativo | ✅ Nativo | PG17+: catálogo pg_wait_events; PG12-16: fallback para esperas atuais pg_stat_activity |
get_wal_summarizer_status | ❌ Nenhuma | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | PG17+: monitoramento do resumidor de WAL para backups incrementais |
get_async_io_status | ❌ Nenhuma | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | PG18+: monitoramento do subsistema de I/O assíncrono pg_aios |
get_per_backend_io_stats | ❌ Nenhuma | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | PG18+: estatísticas de I/O e WAL por backend |
🟡 Ferramentas Dependentes de Extensão (Extensões Necessárias)
| Nome da Ferramenta | Extensão Necessária | PG 12 | PG 13 | PG 14 | PG 15 | PG 16 | PG 17 | PG 18 | Notas |
|---|---|---|---|---|---|---|---|---|---|
get_pg_stat_statements_top_queries | pg_stat_statements | ✅ Compatível | ✅ Aprimorado | ✅ Aprimorado | ✅ Aprimorado | ✅ Aprimorado | ✅ Aprimorado | ✅ Aprimorado | PG12: total_time → total_exec_time; PG13+: total_exec_time nativo; PG17+: stats_since |
get_pg_stat_monitor_recent_queries | pg_stat_monitor | ✅ Compatível | ✅ Aprimorado | ✅ Aprimorado | ✅ Aprimorado | ✅ Aprimorado | ✅ Aprimorado | ✅ Aprimorado | PG12: total_time → total_exec_time; PG13+: total_exec_time nativo |
🆕 Recursos Específicos por Versão
PostgreSQL 17
- Visão
pg_wait_events: Catálogo nativo de eventos de espera com descrições (usado porget_wait_events) - WAL summarizer: Monitoramento para suporte a backup incremental (usado por
get_wal_summarizer_status) - Aprimoramentos de replication slot: Colunas
invalidation_reasoneinactive_since(usadas porget_replication_status) pg_stat_statementsstats_since: Rastrear quando as estatísticas foram redefinidas pela última vez (usado porget_pg_stat_statements_top_queries)- Progresso do VACUUM: Rastreamento de vacuum de índice em visualizações de progresso (aprimoramento futuro para
get_running_vacuum_operations)
PostgreSQL 18
- Visão
pg_aios: Monitoramento do subsistema de I/O assíncrono (usado porget_async_io_status) - Estatísticas de I/O por backend: Estatísticas individuais de I/O e WAL por backend (usadas por
get_per_backend_io_stats) - Colunas de tempo VACUUM/ANALYZE: Tempo cumulativo de
total_vacuum_time,total_autovacuum_time,total_analyze_time,total_autoanalyze_time(usado porget_vacuum_analyze_stats) - Colunas de bytes
pg_stat_io:read_bytes,write_bytes,extend_bytes(usadas porget_io_stats) - Estatísticas de trabalhadores paralelos:
parallel_workers_launched,parallel_workers_to_launch(usadas porget_database_stats) - Aprimoramentos do checkpointer: Colunas
num_done,slru_written(usadas porget_bgwriter_stats)
Exemplos de Uso
Integração com Claude Desktop
(Recomendado) Adicione ao seu arquivo de configuração do Claude Desktop:
{
"mcpServers": {
"mcp-postgresql-ops": {
"command": "uvx",
"args": ["--python", "3.12", "mcp-postgresql-ops"],
"env": {
"POSTGRES_HOST": "127.0.0.1",
"POSTGRES_PORT": "15432",
"POSTGRES_USER": "postgres",
"POSTGRES_PASSWORD": "changeme!@34",
"POSTGRES_DB": "ecommerce"
}
}
}
}
"Mostre todas as conexões ativas em um formato de tabela HTML claro e legível."

"Mostre todos os relacionamentos para a tabela customers no banco de dados ecommerce como um diagrama Mermaid."

Instalação
Via PyPI (Recomendado)
# Install the package
pip install mcp-postgresql-ops
# Or with uv (faster)
uv add mcp-postgresql-ops
# Verify installation
mcp-postgresql-ops --help
Via Código-Fonte
# Clone the repository
git clone https://github.com/call518/MCP-PostgreSQL-Ops.git
cd MCP-PostgreSQL-Ops
# Install with uv (recommended)
uv sync
uv run mcp-postgresql-ops --help
# Or with pip
pip install -e .
mcp-postgresql-ops --help
Configuração do MCP
Configuração do Claude Desktop
(Opcional) Executar com Código-Fonte Local:
{
"mcpServers": {
"mcp-postgresql-ops": {
"command": "uv",
"args": ["run", "python", "-m", "mcp_postgresql_ops"],
"env": {
"POSTGRES_HOST": "127.0.0.1",
"POSTGRES_PORT": "15432",
"POSTGRES_USER": "postgres",
"POSTGRES_PASSWORD": "changeme!@34",
"POSTGRES_DB": "ecommerce"
}
}
}
}
Executar o MCP-Server como Standalone
/w Pypi e uvx (Recomendado)
# Stdio mode
uvx --python 3.12 mcp-postgresql-ops \
--type stdio
# HTTP mode
uvx --python 3.12 mcp-postgresql-ops
--type streamable-http \
--host 127.0.0.1 \
--port 8000 \
--log-level DEBUG
(Opcional) Configurar Múltiplas Instâncias do PostgreSQL
{
"mcpServers": {
"Postgresql-A": {
"command": "uvx",
"args": ["--python", "3.12", "mcp-postgresql-ops"],
"env": {
"POSTGRES_HOST": "a.foo.com",
"POSTGRES_PORT": "5432",
"POSTGRES_USER": "postgres",
"POSTGRES_PASSWORD": "postgres",
"POSTGRES_DB": "postgres"
}
},
"Postgresql-B": {
"command": "uvx",
"args": ["--python", "3.12", "mcp-postgresql-ops"],
"env": {
"POSTGRES_HOST": "b.bar.com",
"POSTGRES_PORT": "5432",
"POSTGRES_USER": "postgres",
"POSTGRES_PASSWORD": "postgres",
"POSTGRES_DB": "postgres"
}
}
}
}
/w Código-Fonte Local
# Method 1: Module execution (for development, requires PYTHONPATH)
PYTHONPATH=/path/to/MCP-PostgreSQL-Ops/src
python -m mcp_postgresql_ops \
--type stdio
# Method 2: Direct script (after uv installation in project directory)
uv run mcp-postgresql-ops \
--type stdio
# Method 3: Installed package script (after pip/uv install)
mcp-postgresql-ops \
--type stdio
# HTTP mode examples:
# Development mode
PYTHONPATH=/path/to/MCP-PostgreSQL-Ops/src
python -m mcp_postgresql_ops \
--type streamable-http \
--host 127.0.0.1 \
--port 8000 \
--log-level DEBUG
# Production mode (after installation)
mcp-postgresql-ops \
--type streamable-http \
--host 127.0.0.1 \
--port 8000 \
--log-level DEBUG
Argumentos de CLI
--type: Tipo de transporte (stdiooustreamable-http) - Padrão:stdio--host: Endereço do host para transporte HTTP - Padrão:127.0.0.1--port: Número da porta para transporte HTTP - Padrão:8000--auth-enable: Habilitar autenticação por token Bearer para o modo streamable-http - Padrão:false--secret-key: Chave secreta para autenticação por token Bearer (obrigatória quando a autenticação está habilitada)--log-level: Nível de registro (DEBUG, INFO, WARNING, ERROR, CRITICAL) - Padrão:INFO
Variáveis de Ambiente
| Variável | Descrição | Padrão | Padrão do Projeto |
|---|---|---|---|
PYTHONPATH | Caminho de pesquisa do módulo Python (necessário apenas no modo de desenvolvimento) | - | /app/src |
MCP_LOG_LEVEL | Verbosidade do registro do servidor (DEBUG, INFO, WARNING, ERROR) | INFO | INFO |
FASTMCP_TYPE | Protocolo de transporte MCP (stdio para CLI, streamable-http para web) | stdio | streamable-http |
FASTMCP_HOST | Endereço de bind do servidor HTTP (0.0.0.0 para todas as interfaces) | 127.0.0.1 | 0.0.0.0 |
FASTMCP_PORT | Porta do servidor HTTP para comunicação MCP | 8000 | 8000 |
REMOTE_AUTH_ENABLE | Habilitar autenticação por token Bearer para o modo streamable-http (Padrão: false se indefinido/nulo/vazio) | false | false |
REMOTE_SECRET_KEY | Chave secreta para autenticação por token Bearer (obrigatória quando a autenticação está habilitada) | - | your-secret-key-here |
PGSQL_VERSION | Versão principal do PostgreSQL para seleção da imagem Docker | 17 | 17 |
PGDATA | Diretório de dados do PostgreSQL dentro do contêiner Docker (Não modificar) | /var/lib/postgresql/data | /data/db |
POSTGRES_HOST | Nome do host ou endereço IP do servidor PostgreSQL | 127.0.0.1 | host.docker.internal |
POSTGRES_PORT | Número da porta do servidor PostgreSQL | 5432 | 15432 |
POSTGRES_USER | Nome de usuário da conexão PostgreSQL (requer permissões de leitura) | postgres | postgres |
POSTGRES_PASSWORD | Senha do usuário PostgreSQL (suporta caracteres especiais) | changeme!@34 | changeme!@34 |
POSTGRES_DB | Nome padrão do banco de dados para conexões | testdb | ecommerce |
POSTGRES_MAX_CONNECTIONS | Parâmetro de configuração max_connections do PostgreSQL | 200 | 200 |
DOCKER_EXTERNAL_PORT_OPENWEBUI | Mapeamento de porta do host para o contêiner Open WebUI | 8080 | 3003 |
DOCKER_EXTERNAL_PORT_MCP_SERVER | Mapeamento de porta do host para o contêiner do servidor MCP | 8080 | 18003 |
DOCKER_EXTERNAL_PORT_MCPO_PROXY | Mapeamento de porta do host para o contêiner proxy MCPO | 8000 | 8003 |
DOCKER_INTERNAL_PORT_POSTGRESQL | Porta interna do contêiner PostgreSQL | 5432 | 5432 |
Nota: POSTGRES_DB serve como banco de dados alvo padrão para operações quando nenhum banco de dados específico é especificado. Em ambientes Docker, se definido com um nome não padrão, este banco de dados será criado automaticamente durante a inicialização inicial do PostgreSQL.
Configuração de Porta: O contêiner PostgreSQL integrado usa o mapeamento de porta 15432:5432 onde:
POSTGRES_PORT=15432: Porta externa para acesso do host e conexões do servidor MCPDOCKER_INTERNAL_PORT_POSTGRESQL=5432: Porta interna do contêiner (padrão do PostgreSQL)- Ao usar servidores PostgreSQL externos, defina
POSTGRES_PORTpara corresponder à porta real do seu servidor
Pré-requisitos
Extensões PostgreSQL Necessárias
Para mais detalhes, consulte a ## Matriz de Compatibilidade de Ferramentas
Nota: A maioria das ferramentas MCP funciona sem extensões PostgreSQL. Algumas ferramentas avançadas de análise de desempenho exigem as seguintes extensões:
-- Query performance statistics (required only for get_pg_stat_statements_top_queries)
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
-- Advanced monitoring (optional, used by get_pg_stat_monitor_recent_queries)
CREATE EXTENSION IF NOT EXISTS pg_stat_monitor;
Configuração Rápida: Para novas instalações do PostgreSQL, adicione ao postgresql.conf:
shared_preload_libraries = 'pg_stat_statements'
Em seguida, reinicie o PostgreSQL e execute os comandos CREATE EXTENSION acima.
pg_stat_statementsé necessária apenas para ferramentas de análise de consultas lentas.pg_stat_monitoré opcional e usada para monitoramento de consultas em tempo real.- Todas as outras ferramentas funcionam sem essas extensões.
Requisitos Mínimos
- PostgreSQL 12+ (testado com PostgreSQL 17 e 18)
- Python 3.12
- Acesso de rede ao servidor PostgreSQL
- Permissões de leitura nos catálogos do sistema
Configuração PostgreSQL Necessária
⚠️ Configurações de Coleta de Estatísticas: Algumas ferramentas MCP exigem parâmetros de configuração específicos do PostgreSQL para coletar estatísticas. Escolha um dos seguintes métodos de configuração:
Ferramentas afetadas por essas configurações:
- get_user_functions_stats: Requer
track_functions = ploutrack_functions = all - get_table_io_stats & get_index_io_stats: Temporização mais precisa com
track_io_timing = on - get_database_stats: Temporização de I/O aprimorada com
track_io_timing = on
Verificação: Após aplicar qualquer método, verifique as configurações:
SELECT name, setting, context FROM pg_settings WHERE name IN ('track_activities', 'track_counts', 'track_io_timing', 'track_functions') ORDER BY name;
name | setting | context
------------------+---------+-----------
track_activities | on | superuser
track_counts | on | superuser
track_functions | pl | superuser
track_io_timing | on | superuser
(4 rows)
Método 1: postgresql.conf (Recomendado para PostgreSQL Autogerenciado)
Adicione o seguinte ao seu postgresql.conf:
# Basic statistics collection (usually enabled by default)
track_activities = on
track_counts = on
# Required for function statistics tools
track_functions = pl # Enables PL/pgSQL function statistics collection
# Optional but recommended for accurate I/O timing
track_io_timing = on # Enables I/O timing statistics collection
Em seguida, reinicie o servidor PostgreSQL.
Método 2: Parâmetros de Inicialização do PostgreSQL
Para inicialização do PostgreSQL via Docker ou linha de comando:
# Docker example
docker run -d \
-e POSTGRES_PASSWORD=mypassword \
postgres:17 \
-c track_activities=on \
-c track_counts=on \
-c track_functions=pl \
-c track_io_timing=on
# Direct postgres command
postgres -D /data \
-c track_activities=on \
-c track_counts=on \
-c track_functions=pl \
-c track_io_timing=on
Método 3: Configuração Dinâmica (AWS RDS, Azure, GCP, Serviços Gerenciados)
Para serviços PostgreSQL gerenciados onde você não pode modificar o postgresql.conf, use comandos SQL para alterar as configurações dinamicamente:
-- Enable basic statistics collection (usually enabled by default)
ALTER SYSTEM SET track_activities = 'on';
ALTER SYSTEM SET track_counts = 'on';
-- Enable function statistics collection (requires superuser privileges)
ALTER SYSTEM SET track_functions = 'pl';
-- Enable I/O timing statistics (optional but recommended)
ALTER SYSTEM SET track_io_timing = 'on';
-- Reload configuration without restart (run separately)
SELECT pg_reload_conf();
Alternativa para teste em nível de sessão:
-- Set for current session only (temporary)
SET track_activities = 'on';
SET track_counts = 'on';
SET track_functions = 'pl';
SET track_io_timing = 'on';
Nota: Ao usar ferramentas de linha de comando, execute cada instrução SQL separadamente para evitar erros de bloco de transação.
Compatibilidade RDS/Aurora
- Este servidor é somente leitura e funciona com funções regulares no RDS/Aurora. Para análise avançada, habilite pg_stat_statements; pg_stat_monitor não está disponível em mecanismos gerenciados.
- No RDS/Aurora, prefira o Grupo de Parâmetros do Banco de Dados em vez de ALTER SYSTEM para configurações persistentes.
-- Verify preload setting SHOW shared_preload_libraries; -- Enable extension in target DB CREATE EXTENSION IF NOT EXISTS pg_stat_statements; -- Recommended visibility for monitoring GRANT pg_read_all_stats TO <app_user>;
Exemplos de Consultas
🟢 Ferramentas Independentes de Extensão (Sempre Disponíveis)
- get_server_info
- "Mostrar versão do servidor PostgreSQL e status das extensões."
- "Verificar se pg_stat_statements está instalado."
- get_active_connections
- "Mostrar todas as conexões ativas."
- "Listar sessões atuais com banco de dados e usuário."
- get_postgresql_config
- "Mostrar todos os parâmetros de configuração do PostgreSQL."
- "Encontrar todas as configurações relacionadas à memória."
- get_database_list
- "Listar todos os bancos de dados e seus tamanhos."
- "Mostrar lista de bancos de dados com informações do proprietário."
- get_table_list
- "Listar todas as tabelas no banco de dados ecommerce."
- "Mostrar tamanhos de tabelas no schema public."
- get_table_schema_info
- "Mostrar informações detalhadas do schema para a tabela customers no banco de dados ecommerce."
- "Obter detalhes de colunas e restrições para a tabela products no banco de dados ecommerce."
- "Analisar estrutura da tabela com índices e chaves estrangeiras para a tabela orders no schema sales do banco de dados ecommerce."
- "Mostrar visão geral do schema para todas as tabelas no schema public do banco de dados inventory."
- 📋 Recursos: Tipos de coluna, restrições, índices, chaves estrangeiras, metadados da tabela
- ⚠️ Obrigatório: o parâmetro
database_namedeve ser especificado
- get_database_schema_info
- "Mostrar todos os schemas no banco de dados ecommerce com seus conteúdos."
- "Obter informações detalhadas sobre o schema sales no banco de dados ecommerce."
- "Analisar estrutura do schema e permissões para o banco de dados inventory."
- "Mostrar visão geral do schema com contagens de tabelas e tamanhos para o banco de dados hr_system."
- 📋 Recursos: Proprietários de schema, permissões, contagens de objetos, tamanhos, conteúdos
- ⚠️ Obrigatório: o parâmetro
database_namedeve ser especificado
- get_table_relationships
- "Mostrar todos os relacionamentos para a tabela customers no banco de dados ecommerce."
- "Analisar relacionamentos de chave estrangeira para a tabela orders no schema sales do banco de dados ecommerce."
- "Obter visão geral de relacionamentos em todo o banco de dados ecommerce."
- "Encontrar todas as tabelas que referenciam a tabela products no banco de dados ecommerce."
- "Mostrar relacionamentos entre schemas no banco de dados inventory."
- 📋 Recursos: Relacionamentos de chave estrangeira (entrada/saída), dependências entre schemas, detalhes de restrições
- ⚠️ Obrigatório: o parâmetro
database_namedeve ser especificado - 💡 Uso: Deixe
table_namevazio para análise de relacionamentos em todo o banco de dados
- get_user_list
- "Listar todos os usuários do banco de dados e seus papéis."
- "Mostrar permissões de usuário para um banco de dados específico."
- get_index_usage_stats
- "Analisar eficiência de uso de índices."
- "Encontrar índices não utilizados no banco de dados atual."
- get_database_size_info
- "Mostrar análise de capacidade do banco de dados."
- "Encontrar os maiores bancos de dados por tamanho."
- get_table_size_info
- "Mostrar análise de tamanho de tabelas e índices."
- "Encontrar maiores tabelas em um schema específico."
- get_vacuum_analyze_stats
- "Mostrar operações recentes de VACUUM e ANALYZE."
- "Listar tabelas que precisam de VACUUM."
- get_current_database_info
- "A qual banco de dados estou conectado?"
- "Mostrar informações do banco de dados atual e detalhes de conexão."
- "Exibir informações de codificação, collation e tamanho do banco de dados."
- 📋 Recursos: Nome do banco de dados, codificação, collation, tamanho, limites de conexão
- 🔧 PostgreSQL 12-18: Totalmente compatível, sem extensões necessárias
- get_table_bloat_analysis
- "Analisar inchaço (bloat) de tabelas no banco de dados atual."
- "Mostrar proporções de tuplas mortas e estimativas de bloat para o padrão da tabela user_logs."
- "Encontrar tabelas com alto bloat que precisam de manutenção VACUUM."
- "Analisar bloat em schema específico com mínimo de 100 tuplas mortas."
- 📋 Recursos: Proporções de tuplas mortas, estimativas de tamanho de bloat, recomendações de VACUUM, filtro por padrão
- 🔧 PostgreSQL 12-18: Totalmente compatível, sem extensões necessárias
- 💡 Uso: Abordagem independente de extensão usando pg_stat_user_tables
- get_database_bloat_overview
- "Mostrar resumo de bloat em todo o banco de dados por schema."
- "Obter visão de alto nível da eficiência de armazenamento em todos os schemas."
- "Identificar schemas que requerem atenção de manutenção."
- 📋 Recursos: Agregação por schema, estimativas totais de bloat, status de manutenção
- 🔧 PostgreSQL 12-18: Totalmente compatível, sem extensões necessárias
- get_autovacuum_status
- "Verificar configuração do autovacuum e condições de disparo."
- "Mostrar tabelas que precisam de atenção imediata do autovacuum."
- "Analisar percentuais de limite do autovacuum para o schema public."
- "Encontrar tabelas se aproximando dos pontos de disparo do autovacuum."
- 📋 Recursos: Análise de limites de disparo, classificação de urgência, status de configuração
- 🔧 PostgreSQL 12-18: Totalmente compatível, sem extensões necessárias
- 💡 Uso: Monitoramento de autovacuum independente de extensão usando pg_stat_user_tables
- get_autovacuum_activity
- "Mostrar padrões de atividade do autovacuum nas últimas 48 horas."
- "Monitorar frequência e horário de execução do autovacuum."
- "Encontrar tabelas com padrões irregulares de autovacuum."
- "Analisar histórico recente de autovacuum e autoanalyze."
- 📋 Recursos: Padrões de atividade, frequência de execução, análise de horários
- 🔧 PostgreSQL 12-18: Totalmente compatível, sem extensões necessárias
- 💡 Uso: Análise histórica de padrões de autovacuum
- get_running_vacuum_operations
- "Mostrar operações VACUUM e ANALYZE atualmente em execução."
- "Monitorar operações de manutenção ativas e seu progresso."
- "Verificar se alguma operação VACUUM está bloqueando consultas."
- "Encontrar operações de manutenção de longa duração."
- 📋 Recursos: Status de operações em tempo real, tempo decorrido, nível de impacto, detalhes do processo
- 🔧 PostgreSQL 12-18: Totalmente compatível, sem extensões necessárias
- 💡 Uso: Monitoramento de manutenção em tempo real usando pg_stat_activity
- get_vacuum_effectiveness_analysis
- "Analisar eficácia do VACUUM e padrões de manutenção."
- "Comparar eficiência de VACUUM manual vs autovacuum."
- "Encontrar tabelas com padrões de manutenção abaixo do ideal."
- "Verificar frequência de VACUUM versus proporções de atividade da tabela."
- 📋 Recursos: Análise de padrões de manutenção, avaliação de eficácia, proporções DML-para-VACUUM
- 🔧 PostgreSQL 12-18: Totalmente compatível, sem extensões necessárias
- 💡 Uso: Análise estratégica de VACUUM usando estatísticas existentes
- get_lock_monitoring
- "Mostrar todos os locks atuais e sessões bloqueadas."
- "Mostrar apenas sessões bloqueadas com filtro granted=false."
- "Monitorar locks por usuário específico com filtro de nome de usuário."
- "Verificar locks exclusivos com filtro de modo."
- get_wal_status
- "Mostrar status do WAL e informações de arquivamento."
- "Monitorar geração de WAL e posição atual do LSN."
- get_replication_status
- "Verificar conexões de replicação e status de lag."
- "Monitorar slots de replicação e status do receptor WAL."
- get_database_stats
- "Mostrar métricas abrangentes de desempenho do banco de dados."
- "Analisar proporções de commit de transações e estatísticas de I/O."
- "Monitorar proporções de acerto do cache de buffer e uso de arquivos temporários."
- get_bgwriter_stats
- "Analisar desempenho e temporização de checkpoints."
- "Mostrar desempenho de checkpoint."
- "Mostrar estatísticas de eficiência do background writer."
- "Monitorar alocação de buffers e padrões de fsync."
- get_user_functions_stats
- "Analisar desempenho de funções definidas pelo usuário."
- "Mostrar contagens de chamadas de função e tempos de execução."
- "Identificar gargalos de desempenho em funções personalizadas."
- ⚠️ Requer:
track_functions = plno postgresql.conf
- get_table_io_stats
- "Analisar desempenho de I/O de tabelas e proporções de acerto de buffer."
- "Identificar tabelas com desempenho ruim de cache de buffer."
- "Monitorar estatísticas de I/O de tabelas TOAST."
- 💡 Aprimorado com:
track_io_timing = onpara temporização precisa
- get_index_io_stats
- "Mostrar desempenho de I/O de índices e eficiência de buffer."
- "Identificar índices que causam I/O excessivo em disco."
- "Monitorar padrões de amigabilidade de cache de índices."
- 💡 Aprimorado com:
track_io_timing = onpara temporização precisa
- get_database_conflicts_stats
- "Verificar conflitos de replicação em servidores standby."
- "Analisar tipos de conflito e estatísticas de resolução."
- "Monitorar padrões de cancelamento de consultas em servidores standby."
- "Monitorar geração de WAL e posição atual do LSN."
- get_replication_status
- "Verificar conexões de replicação e status de lag."
- "Monitorar slots de replicação e status do receptor WAL."
🚀 Ferramentas Cientes de Versão (Auto-Adaptáveis)
- get_io_stats (Novo!)
- "Mostrar estatísticas abrangentes de I/O." (PostgreSQL 16+ fornece detalhamento detalhado)
- "Analisar estatísticas de I/O."
- "Analisar eficiência do cache de buffer e temporização de I/O."
- "Monitorar padrões de I/O por tipo de backend e contexto."
- 📈 PG16+: pg_stat_io completo com temporização, tipos de backend e contextos
- 📊 PG12-15: Fallback básico de pg_statio_* com proporções de acerto de buffer
- get_bgwriter_stats (Aprimorado!)
- "Mostrar desempenho do background writer e checkpoint."
- 📈 PG17+: Estatísticas separadas de checkpointer e bgwriter via
pg_stat_checkpointer - 📊 PG12-16: Estatísticas combinadas de bgwriter (inclui dados de checkpointer)
- get_server_info (Aprimorado!)
- "Mostrar versão do servidor e recursos de compatibilidade."
- "Verificar compatibilidade do servidor."
- "Verificar quais ferramentas MCP estão disponíveis nesta versão do PostgreSQL."
- "Exibe matriz de disponibilidade de recursos e recomendações de upgrade."
- get_all_tables_stats (Aprimorado!)
- "Mostrar estatísticas abrangentes para todas as tabelas." (compatível com versões PG12-18)
- "Incluir tabelas do sistema com parâmetro include_system=true."
- "Analisar padrões de acesso a tabelas e necessidades de manutenção."
- 📈 PG13+: Rastreia inserções desde o vacuum (
n_ins_since_vacuum) para agendamento ideal de manutenção - 📊 PG12: Modo compatível com NULL para colunas não suportadas
- get_wait_events (Novo!)
- "Mostrar tipos e descrições de eventos de espera."
- "Quais eventos de espera estão disponíveis nesta versão do PostgreSQL?"
- 📈 PG17+: Catálogo nativo
pg_wait_eventscom descrições completas - 📊 PG12-16: Fallback para esperas atuais de
pg_stat_activityagrupadas por tipo
- get_wal_summarizer_status (Novo! PG 17+)
- "Mostrar status do summarizer WAL para backups incrementais."
- "Monitorar progresso da sumarização WAL."
- 📈 PG17+: Monitoramento do summarizer WAL via
pg_get_wal_summarizer_state() - ❌ PG12-16: Não disponível (retorna mensagem informativa)
- get_async_io_status (Novo! PG 18+)
- "Mostrar status do subsistema de I/O assíncrono."
- "Monitorar pg_aios para operações de I/O assíncrono."
- 📈 PG18+: Visão
pg_aiospara monitoramento de I/O assíncrono - ❌ PG12-17: Não disponível (retorna mensagem informativa)
- get_per_backend_io_stats (Novo! PG 18+)
- "Mostrar estatísticas de I/O e WAL por backend."
- "Analisar padrões de I/O por processo backend individual."
- 📈 PG18+: Estatísticas de I/O por backend com estatísticas WAL
- ❌ PG12-17: Não disponível (retorna mensagem informativa)
🟡 Ferramentas Dependentes de Extensão
- get_pg_stat_statements_top_queries (Requer
pg_stat_statements)- "Mostrar as 10 consultas mais lentas."
- "Analisar consultas lentas no banco de dados inventory."
- 📈 Compatível com versões: PG12 usa mapeamento
total_time→total_exec_time; PG13+ usa colunas nativas - 💡 Entre versões: Adapta automaticamente a estrutura da consulta para compatibilidade com PostgreSQL 12-18
- get_pg_stat_monitor_recent_queries (Opcional, usa
pg_stat_monitor)- "Mostrar consultas recentes em tempo real."
- "Monitorar atividade de consultas nos últimos 5 minutos."
- 📈 Compatível com versões: PG12 usa mapeamento
total_time→total_exec_time; PG13+ usa colunas nativas - 💡 Entre versões: Adapta automaticamente a estrutura da consulta para compatibilidade com PostgreSQL 12-18
💡 Dica Profissional: Todas as ferramentas suportam operações multi-banco de dados usando o parâmetro database_name. Isso permite que superusuários do PostgreSQL analisem e monitorem vários bancos de dados a partir de uma única instância do servidor MCP.
Solução de Problemas
Problemas de Conexão
- Verifique o status do servidor PostgreSQL
- Confirme os parâmetros de conexão no arquivo
.env - Garanta a conectividade de rede
- Verifique as permissões do usuário
Erros de Extensão
- Execute
get_server_infopara verificar o status das extensões - Instale as extensões ausentes:
CREATE EXTENSION pg_stat_statements; CREATE EXTENSION pg_stat_monitor; - Reinicie o PostgreSQL se necessário
Problemas de Configuração
-
"Nenhum dado encontrado" para estatísticas de funções: Verifique a configuração de
track_functionsSHOW track_functions; -- Should be 'pl' or 'all'Correção rápida para serviços gerenciados (AWS RDS, etc.):
ALTER SYSTEM SET track_functions = 'pl'; SELECT pg_reload_conf(); -
Dados de tempo de I/O ausentes: Habilite a coleta de timing
SHOW track_io_timing; -- Should be 'on'Correção rápida:
ALTER SYSTEM SET track_io_timing = 'on'; SELECT pg_reload_conf(); -
Aplique as alterações de configuração:
- Autogerenciado: Adicione as configurações ao
postgresql.confe reinicie o servidor - Serviços gerenciados: Use
ALTER SYSTEM SET+SELECT pg_reload_conf() - Teste temporário: Use
SET parameter = valuepara a sessão atual - Gere alguma atividade no banco de dados para popular as estatísticas
- Autogerenciado: Adicione as configurações ao
Problemas de Desempenho
- Use os parâmetros
limitpara reduzir o tamanho do resultado - Execute o monitoramento fora dos horários de pico
- Verifique a carga do banco de dados antes de executar a análise
Problemas de Compatibilidade de Versão
Para mais detalhes, consulte a ## Matriz de Compatibilidade de Ferramentas
-
Execute a verificação de compatibilidade primeiro:
# "Use get_server_info to check version and available features" -
Entendendo a disponibilidade de recursos:
- PostgreSQL 18: Todos os recursos, incluindo I/O assíncrono, timing de VACUUM, estatísticas por backend
- PostgreSQL 17: Estatísticas separadas de checkpointer, eventos de espera, resumidor de WAL
- PostgreSQL 16: Visão pg_stat_io
- PostgreSQL 14+: Rastreamento de consultas paralelas
- PostgreSQL 12-13: Apenas funcionalidade principal
-
Se uma ferramenta mostrar "Não disponível":
- O recurso requer uma versão mais recente do PostgreSQL
- A ferramenta usará automaticamente a melhor alternativa disponível
- Considere atualizar o PostgreSQL para monitoramento aprimorado
Desenvolvimento
Testes e Desenvolvimento
# Clone and setup for development
git clone https://github.com/call518/MCP-PostgreSQL-Ops.git
cd MCP-PostgreSQL-Ops
uv sync
# Test with MCP Inspector (loads .env automatically)
./run-mcp-inspector-local.sh
# Direct execution methods:
# 1. Using uv run (recommended for development)
uv run mcp-postgresql-ops --log-level DEBUG
# 2. Module execution (requires PYTHONPATH)
PYTHONPATH=src python -m mcp_postgresql_ops --log-level DEBUG
# 3. After installation
mcp-postgresql-ops --log-level DEBUG
# Test version compatibility (requires different PostgreSQL versions)
# Modify POSTGRES_HOST in .env to point to different versions
Executando Testes
Duas suítes de testes estão disponíveis:
| Suíte | Arquivo | Requer Docker |
|---|---|---|
| Testes unitários (lógica de compatibilidade de versão) | tests/test_version_compat.py | Não |
| Testes de integração (todas as ferramentas × PG 12–18) | tests/test_tools_integration.py | Sim |
uv run pytest inicia automaticamente os contêineres de teste Docker (PG 12–18), aguarda a inicialização completa, executa todos os testes e depois remove tudo.
# Run all tests (unit + integration) — Docker is managed automatically
uv run pytest -v
# Unit tests only (no Docker needed)
uv run pytest tests/test_version_compat.py -v
# Integration tests only
uv run pytest tests/test_tools_integration.py -v
Nota: O Docker deve estar em execução. A pilha de testes usa as portas 5412–5418 (PG 12–18).
Testes de Compatibilidade de Versão
O servidor MCP se adapta automaticamente às versões 12-18 do PostgreSQL. Para testar entre versões:
- Configure bancos de dados de teste: Diferentes versões do PostgreSQL (12, 14, 15, 16, 17, 18)
- Execute testes de compatibilidade: Aponte para cada versão e verifique o comportamento da ferramenta
- Verifique a detecção de recursos: Garanta a detecção correta de versão e a disponibilidade de recursos
- Verifique o comportamento de fallback: Confirme a degradação graciosa em versões mais antigas
Notas de Segurança
- Todas as ferramentas são somente leitura - sem capacidade de modificação de dados
- Informações sensíveis (senhas) são mascaradas nas saídas
- Sem execução direta de SQL - apenas consultas predefinidas
- Segue o princípio do menor privilégio
Contribuindo
🤝 Tem ideias? Encontrou bugs? Quer adicionar recursos legais?
Estamos sempre animados em receber novos colaboradores! Seja corrigindo um erro de digitação, adicionando uma nova ferramenta de monitoramento ou melhorando a documentação - cada contribuição torna este projeto melhor.
Formas de contribuir:
- 🐛 Relate problemas ou bugs
- 💡 Sugira novos recursos de monitoramento do PostgreSQL
- 📝 Melhore a documentação
- 🚀 Envie pull requests
- ⭐ Dê uma estrela no repositório se achar útil!
Dica profissional: O código foi projetado para ser super amigável para adicionar novas ferramentas. Confira as funções existentes @mcp.tool() em mcp_main.py.
Documentação Swagger do MCPO
[URL do Swagger do MCPO] http://localhost:8003/postgresql-ops/docs

🔐 Segurança e Autenticação
Autenticação com Token Bearer
Para o modo streamable-http, este servidor MCP suporta autenticação com token Bearer para proteger o acesso remoto. Isso é especialmente importante ao executar o servidor em ambientes de produção.
Política Padrão:
REMOTE_AUTH_ENABLEassume o valor padrãofalsese indefinido, nulo ou vazio. Isso garante compatibilidade retroativa e evita erros de inicialização quando a variável não está definida.
Configuração
Habilitar Autenticação:
# In .env file
REMOTE_AUTH_ENABLE=true
REMOTE_SECRET_KEY=my-test-secret-key-12345
Ou via CLI:
# Module method
python -m mcp_postgresql_ops --type streamable-http --auth-enable --secret-key my-test-secret-key-12345
# Script method
mcp-postgresql-ops --type streamable-http --auth-enable --secret-key my-test-secret-key-12345
Níveis de Segurança
- Modo stdio (Padrão): Acesso apenas local, sem necessidade de autenticação
- streamable-http + REMOTE_AUTH_ENABLE=false: Acesso remoto sem autenticação ⚠️ NÃO RECOMENDADO para produção
- streamable-http + REMOTE_AUTH_ENABLE=true: Acesso remoto com autenticação por token Bearer ✅ RECOMENDADO para produção
Configuração do Cliente
Quando a autenticação está habilitada, os clientes MCP devem incluir o token Bearer no cabeçalho Authorization:
{
"mcpServers": {
"mcp-postgresql-ops": {
"type": "streamable-http",
"url": "http://your-server:8000/mcp",
"headers": {
"Authorization": "Bearer my-test-secret-key-12345"
}
}
}
}
Boas Práticas de Segurança
- Sempre habilite a autenticação ao usar o modo streamable-http em produção
- Use chaves secretas fortes e geradas aleatoriamente (32+ caracteres recomendados)
- Use HTTPS quando possível (configure um proxy reverso com SSL/TLS)
- Restrinja o acesso à rede usando firewalls ou políticas de rede
- Rotacione as chaves secretas regularmente para maior segurança
- Monitore os logs de acesso para tentativas de acesso não autorizado
Tratamento de Erros
Quando a autenticação falha, o servidor retorna:
- 401 Não Autorizado para tokens ausentes ou inválidos
- Mensagens de erro detalhadas em formato JSON para depuração
🚀 Adicionando Ferramentas Personalizadas
Este servidor MCP foi projetado para fácil extensibilidade. Siga estes 4 passos simples para adicionar suas próprias ferramentas personalizadas:
Guia Passo a Passo
1. Adicione Funções Auxiliares (Opcional)
Adicione funções de dados reutilizáveis ao src/mcp_postgresql_ops/functions.py:
async def get_your_custom_data(target_database: str = None, limit: int = 20) -> List[Dict[str, Any]]:
"""Your custom data retrieval function."""
try:
# Example implementation - adapt to your PostgreSQL needs
query = """
SELECT
schemaname,
tablename,
attname as column_name,
n_distinct,
most_common_vals,
most_common_freqs
FROM pg_stats
WHERE schemaname NOT IN ('information_schema', 'pg_catalog')
ORDER BY schemaname, tablename, attname
LIMIT $1
"""
results = await execute_query(query, [limit], database=target_database)
return results
except Exception as e:
logger.error(f"Failed to get custom data: {e}")
raise
2. Crie Sua Ferramenta MCP
Adicione sua função de ferramenta ao src/mcp_postgresql_ops/mcp_main.py:
@mcp.tool()
async def get_your_custom_analysis(limit: int = 50, database_name: Optional[str] = None) -> str:
"""
[Tool Purpose]: Brief description of what your tool does
[Exact Functionality]:
- Feature 1: Data aggregation and analysis
- Feature 2: Database monitoring and insights
- Feature 3: Performance metrics and reporting
[Required Use Cases]:
- When user asks "your specific analysis request"
- Your PostgreSQL-specific monitoring needs
Args:
limit: Maximum results (1-100)
database_name: Target database name (optional, uses default if not specified)
Returns:
Formatted analysis results
"""
try:
# Always validate input limits
limit = max(1, min(limit, 100))
# Get your custom data
results = await get_your_custom_data(target_database=database_name, limit=limit)
if not results:
return "No data found for custom analysis."
# Format and return results
return format_table_data(results, f"Custom Analysis Results (Top {len(results)})")
except Exception as e:
logger.error(f"Failed to get custom analysis: {e}")
return f"Error: {str(e)}"
3. Atualize os Imports
Adicione sua função auxiliar à seção de imports em src/mcp_postgresql_ops/mcp_main.py (por volta da linha 30):
from .functions import (
execute_query,
execute_single_query,
format_table_data,
format_bytes,
format_duration,
get_server_version,
check_extension_exists,
get_pg_stat_statements_data,
get_pg_stat_monitor_data,
sanitize_connection_info,
read_prompt_template,
parse_prompt_sections,
get_current_database_name,
POSTGRES_CONFIG,
get_your_custom_data, # Add your new function here
)
4. Atualize o Modelo de Prompt (Recomendado)
Adicione a descrição da sua ferramenta ao src/mcp_postgresql_ops/prompt_template.md para melhor reconhecimento de linguagem natural:
### **Your Custom Analysis Tool**
### X. **get_your_custom_analysis**
**Purpose**: Brief description of what your tool does
**Usage**: "Show me your custom analysis" or "Get custom analysis for database_name"
**Features**: Data aggregation, database monitoring, performance metrics
**Optional**: `database_name` parameter for specific database analysis
**Limit**: Results limited to 1-100 records for performance
5. Teste Sua Ferramenta
# Local testing with MCP Inspector
./run-mcp-inspector-local.sh
# Or test with Docker stack
docker-compose up -d
docker-compose logs -f mcp-server
# Test with natural language queries:
# "Show me your custom analysis"
# "Get custom analysis for ecommerce database"
# "Analyze custom data with limit 25"
Notas Importantes
- Suporte a Múltiplos Bancos de Dados: Todas as ferramentas suportam o parâmetro opcional
database_namepara direcionar bancos de dados específicos - Validação de Entrada: Sempre valide os parâmetros
limitcommax(1, min(limit, 100)) - Tratamento de Erros: Retorne mensagens de erro amigáveis ao usuário em vez de lançar exceções
- Registro (Logging): Use
logger.error()para depuração enquanto retorna mensagens de erro limpas aos usuários - Compatibilidade com PostgreSQL: Suas consultas personalizadas devem funcionar em PostgreSQL 12-18
- Dependências de Extensão: Se sua ferramenta exigir extensões específicas, verifique a disponibilidade com
check_extension_exists()
Padrões Avançados
Para consultas cientes de versão ou recursos dependentes de extensão, veja ferramentas existentes como get_pg_stat_statements_top_queries para padrões de referência.
É isso! Sua ferramenta personalizada está pronta para uso com consultas em linguagem natural através de qualquer cliente MCP.
Licença
Use, modifique e distribua livremente sob a Licença MIT.
⭐ Outros Projetos
Outros servidores MCP do mesmo autor: