PostgreSQL Full Access MCP Server
Um servidor PostgreSQL de acesso completo para MCP com capacidades de leitura/escrita e metadados de esquema aprimorados.
Documentação
PostgreSQL Full Access MCP Server
Um poderoso servidor Model Context Protocol que fornece acesso total de leitura e escrita a bancos de dados PostgreSQL. Diferente do servidor MCP PostgreSQL oficial somente leitura, esta implementação aprimorada permite que Modelos de Linguagem de Grande Porte (LLMs) consultem e modifiquem o conteúdo do banco de dados com gerenciamento adequado de transações e controles de segurança.
Sumário
- Recursos
- Ferramentas
- Recursos
- Usando com o Claude Desktop
- Variáveis de Ambiente
- Usando Acesso Total ao Banco de Dados com o Claude
- Considerações de Segurança
- Docker
- Licença
- Comparação com o Servidor MCP PostgreSQL Oficial
🌟 Recursos
Acesso Total de Leitura e Escrita
- Execute operações DML com segurança (INSERT, UPDATE, DELETE)
- Crie, altere e gerencie objetos de banco de dados com DDL
- Gerenciamento de transações com commit explícito
- Timeouts de segurança e proteção com rollback automático
Informações Ricas de Esquema
- Metadados detalhados de colunas (tipos de dados, descrições, comprimento máximo, anulabilidade)
- Identificação de chaves primárias
- Relacionamentos de chaves estrangeiras
- Informações de índices com tipo e flags de exclusividade
- Estimativas de contagem de linhas das tabelas
- Descrições de tabelas e colunas (quando disponíveis)
Controles Avançados de Segurança
- Classificação de consultas SQL (DQL, DML, DDL, DCL, TCL)
- Execução somente leitura obrigatória para consultas seguras
- Todas as operações são executadas em transações isoladas
- Monitoramento automático de timeout de transação
- Limites de segurança configuráveis
- Processo de commit de transação em duas etapas com confirmação explícita do usuário
🔧 Ferramentas
-
execute_query
- Execute consultas SQL somente leitura (declarações SELECT)
- Entrada:
sql(string): A consulta SQL a ser executada - Todas as consultas são executadas dentro de uma transação READ ONLY
- Os resultados incluem métricas de tempo de execução e informações de campos
-
execute_dml_ddl_dcl_tcl
- Execute operações de modificação de dados (INSERT, UPDATE, DELETE) ou alterações de esquema (CREATE, ALTER, DROP)
- Entrada:
sql(string): A declaração SQL a ser executada - Automaticamente envolvida em uma transação com timeout configurável
- Retorna um ID de transação para commit explícito
- Recurso de segurança importante: A conversa terminará após a execução, permitindo que o usuário revise os resultados antes de decidir commitar ou reverter
-
execute_maintenance
- Execute comandos de manutenção como VACUUM, ANALYZE ou CREATE DATABASE fora de transações
- Entrada:
sql(string): A declaração SQL a ser executada - deve ser VACUUM, ANALYZE ou CREATE DATABASE - Retorna um objeto de resultado com métricas de tempo de execução
-
execute_commit
- Comite explicitamente uma transação pelo seu ID
- Entrada:
transaction_id(string): ID da transação a ser commitada - Lida com segurança com a limpeza após commit ou rollback
- Aplica permanentemente as alterações ao banco de dados
-
execute_rollback
- Reverta explicitamente uma transação pelo seu ID
- Entrada:
transaction_id(string): ID da transação a ser revertida - Descarta com segurança todas as alterações e limpa recursos
- Útil ao revisar alterações e decidir não aplicá-las
-
list_tables
- Obtenha uma lista abrangente de todas as tabelas no banco de dados
- Inclui contagem de colunas e descrições de tabelas
- Nenhum parâmetro de entrada necessário
-
describe_table
- Obtenha informações detalhadas sobre a estrutura de uma tabela específica
- Entrada:
table_name(string): Nome da tabela a ser descrita - Retorna informações completas de esquema, incluindo chaves primárias, chaves estrangeiras, índices e detalhes de colunas
📊 Recursos
O servidor fornece informações aprimoradas de esquema para tabelas de banco de dados:
- Esquemas de Tabelas (
postgres://<host>/<table>/schema)- Informações detalhadas de esquema JSON para cada tabela
- Inclui metadados completos de colunas, chaves primárias e restrições
- Descobertas automaticamente a partir dos metadados do banco de dados
🚀 Usando com o Claude Desktop
Integração com o Claude Desktop
Para usar este servidor com o Claude Desktop, siga estas etapas:
-
Primeiro, certifique-se de que o Node.js esteja instalado no seu sistema
-
Instale o pacote usando npx ou adicione-o ao seu projeto
-
Configure o Claude Desktop editando
claude_desktop_config.json(tipicamente encontrado em~/Library/Application Support/Claude/no macOS):
{
"mcpServers": {
"postgres-full": {
"command": "npx",
"args": [
"-y",
"mcp-postgres-full-access",
"postgresql://username:password@localhost:5432/database"
],
"env": {
"TRANSACTION_TIMEOUT_MS": "60000",
"MAX_CONCURRENT_TRANSACTIONS": "5",
"PG_STATEMENT_TIMEOUT_MS": "30000"
}
}
}
}
- Substitua a string de conexão do banco de dados pela sua string de conexão PostgreSQL real
- Reinicie completamente o Claude Desktop
Importante: Usando "Permitir uma vez" por Segurança
Quando o Claude tentar commitar alterações no seu banco de dados, o Claude Desktop solicitará sua aprovação:

Sempre revise cuidadosamente as alterações SQL antes de aprová-las!
Boas práticas de segurança:
- Sempre clique em "Permitir uma vez" (e não "Sempre permitir") para operações de commit
- Revise cuidadosamente o SQL da transação antes de aprovar
- Considere usar um usuário de banco de dados com permissões limitadas
- Use um banco de dados de teste, se possível, ao experimentar este servidor pela primeira vez
Essa abordagem de "Permitir uma vez" dá a você controle total para evitar alterações indesejadas no seu banco de dados, enquanto ainda permite que o Claude ajude com tarefas de gerenciamento de dados quando necessário.
⚙️ Variáveis de Ambiente
Você pode personalizar o comportamento do servidor com variáveis de ambiente na sua configuração do Claude Desktop:
"env": {
"TRANSACTION_TIMEOUT_MS": "60000",
"MAX_CONCURRENT_TRANSACTIONS": "5"
}
Principais variáveis de ambiente:
-
TRANSACTION_TIMEOUT_MS: Timeout de transação em milissegundos (padrão: 15000)- Aumente se suas transações precisarem de mais tempo
- Transações que excederem esse tempo serão revertidas automaticamente por segurança
-
MAX_CONCURRENT_TRANSACTIONS: Máximo de transações simultâneas (padrão: 10)- Reduza este número para uma operação mais conservadora
- Valores mais altos permitem mais operações de escrita simultâneas
-
ENABLE_TRANSACTION_MONITOR: Ativar/desativar o monitor de transações ("true" ou "false", padrão: "true")- Monitora e reverte automaticamente transações abandonadas
- Raramente precisa ser desativado
-
PG_STATEMENT_TIMEOUT_MS: Timeout de execução de consultas SQL em ms (padrão: 30000)- Limita por quanto tempo qualquer declaração SQL individual pode ser executada
- Recurso de segurança importante para evitar consultas fora de controle
-
PG_MAX_CONNECTIONS: Máximo de conexões PostgreSQL (padrão: 20)- Importante permanecer dentro dos limites de conexão do seu banco de dados
-
MONITOR_INTERVAL_MS: Com que frequência verificar transações travadas (padrão: 5000)- Geralmente não precisa de ajuste
🔄 Usando Acesso Total ao Banco de Dados com o Claude
Este servidor permite que o Claude leia e escreva no seu banco de dados PostgreSQL com a sua aprovação. Aqui estão alguns exemplos de fluxos de conversa:
Exemplo: Criando uma Nova Tabela e Adicionando Dados
Você: "Preciso de uma nova tabela de produtos com colunas para id, nome, preço e inventário"
Claude: Analisa seu banco de dados e cria uma consulta
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL,
inventory INTEGER DEFAULT 0
);
O Claude Desktop solicitará que você aprove esta operação
Você: Revise e clique em "Permitir uma vez"
Claude: "Criei a tabela de produtos. Gostaria que eu adicionasse alguns dados de exemplo?"
Você: "Sim, por favor adicione 5 produtos de exemplo"
Claude: Cria declarações INSERT e solicita aprovação Você revisa e aprova com "Permitir uma vez"
Exemplo: Análise de Dados com Consultas Seguras
Você: "Quais são meus 3 principais produtos por preço?"
Claude: Executa uma consulta somente leitura automaticamente Mostra os resultados para você
Fluxo de Trabalho de Segurança
O principal recurso de segurança é a abordagem em duas etapas para qualquer operação que modifique seu banco de dados:
- Claude analisa sua solicitação e prepara o SQL
- Para operações somente leitura (SELECT), Claude executa automaticamente
- Para operações de escrita (INSERT, UPDATE, DELETE, CREATE, etc.):
- Claude executa o SQL em uma transação e encerra a conversa
- Você revisa os resultados
- Em uma nova conversa, você responde com "Sim" para commitar ou "Não" para reverter
- O Claude Desktop mostra exatamente o que será alterado e pede permissão
- Você clica em "Permitir uma vez" para permitir a operação específica
- Claude executa a operação e retorna os resultados
Isso oferece múltiplas oportunidades para verificar alterações antes que sejam aplicadas permanentemente ao banco de dados.
⚠️ Considerações de Segurança
Ao conectar o Claude ao seu banco de dados com acesso de escrita:
Permissões do Usuário do Banco de Dados
IMPORTANTE: Crie um usuário de banco de dados dedicado com permissões apropriadas:
-- Example of creating a restricted user (adjust as needed)
CREATE USER claude_user WITH PASSWORD 'secure_password';
GRANT SELECT ON ALL TABLES IN SCHEMA public TO claude_user;
GRANT INSERT, UPDATE, DELETE ON TABLE table1, table2 TO claude_user;
-- Only grant specific permissions as needed
Boas Práticas para Uso Seguro
-
Sempre use "Permitir uma vez" para revisar cada operação de escrita
- Nunca selecione "Sempre permitir" para modificações no banco de dados
- Reserve um tempo para revisar cuidadosamente o SQL
-
Conecte-se a um banco de dados de teste ao explorar esta ferramenta pela primeira vez
- Considere usar uma cópia/backup do banco de dados para testes iniciais
-
Limite as permissões do usuário do banco de dados apenas ao que for necessário
- Evite usar uma conta de superusuário ou administrador
- Conceda permissões específicas por tabela quando possível
-
Implemente backups do banco de dados antes do uso extensivo
-
Nunca compartilhe dados sensíveis que não devam ser expostos a LLMs
-
Verifique todas as operações SQL antes de aprová-las
- Verifique os nomes das tabelas
- Verifique nomes de colunas e dados
- Confirme que as cláusulas WHERE são apropriadas
- Verifique o gerenciamento adequado de transações
Docker
O servidor pode ser facilmente executado em um contêiner Docker:
# Build the Docker image
docker build -t mcp-postgres-full-access .
# Run the container
docker run -i --rm mcp-postgres-full-access "postgresql://username:password@host:5432/database"
Para Docker no macOS, use host.docker.internal para conectar-se à rede do host:
docker run -i --rm mcp-postgres-full-access "postgresql://username:password@host.docker.internal:5432/database"
📄 Licença
Este servidor MCP é licenciado sob a Licença MIT.
💡 Comparação com o Servidor MCP PostgreSQL Oficial
| Recurso | Este Servidor | Servidor MCP PostgreSQL Oficial |
|---|---|---|
| Acesso de Leitura | ✅ | ✅ |
| Acesso de Escrita | ✅ | ❌ |
| Detalhes do Esquema | Aprimorados | Básicos |
| Suporte a Transações | Explícito com timeouts | Somente leitura |
| Informações de Índices | ✅ | ❌ |
| Detalhes de Chave Estrangeira | ✅ | ❌ |
| Estimativas de Contagem de Linhas | ✅ | ❌ |
| Descrições de Tabelas | ✅ | ❌ |
Autor
Criado por Syahiid Nur Kamil (@syahiidkamil)
Copyright © 2024 Syahiid Nur Kamil. Todos os direitos reservados.