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

Model Context Protocol MIT License

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

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:

  1. Primeiro, certifique-se de que o Node.js esteja instalado no seu sistema

  2. Instale o pacote usando npx ou adicione-o ao seu projeto

  3. 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"
      }
    }
  }
}
  1. Substitua a string de conexão do banco de dados pela sua string de conexão PostgreSQL real
  2. 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:

Allow Once Dialog

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:

  1. Claude analisa sua solicitação e prepara o SQL
  2. Para operações somente leitura (SELECT), Claude executa automaticamente
  3. 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

  1. 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
  2. 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
  3. 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
  4. Implemente backups do banco de dados antes do uso extensivo

  5. Nunca compartilhe dados sensíveis que não devam ser expostos a LLMs

  6. 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

RecursoEste ServidorServidor MCP PostgreSQL Oficial
Acesso de Leitura
Acesso de Escrita
Detalhes do EsquemaAprimoradosBásicos
Suporte a TransaçõesExplícito com timeoutsSomente 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.