Rails PG Extras MCP

Uma interface MCP para a gem rails-pg-extras, fornecendo metadados PostgreSQL e análise de desempenho através de prompts LLM.

Documentação

Rails PG Extras MCP Gem Version GH Actions

Interface MCP (Model Context Protocol) para a gem rails-pg-extras. Explore facilmente metadados do PostgreSQL e depure problemas de desempenho. Verifique inchaço de tabelas, consultas lentas, índices não utilizados e muito mais. Execute EXPLAIN ANALYZE em gargalos e obtenha insights claros com tecnologia LLM para otimizar seu banco de dados.

Use um usuário somente leitura com privilégios mínimos para eliminar o risco de modificação ou exposição de dados.

Confira este post para informações mais detalhadas sobre o projeto.

LLM interface

Instalação

bundle add rails-pg-extras-mcp

A biblioteca suporta o protocolo MCP via interface HTTP SSE.

config/routes.rb

mount RailsPgExtrasMcp::App.build, at: "pg_extras_mcp"

com autorização opcional:

opts = { auth_token: "secret" }
mount RailsPgExtrasMcp::App.build(opts), at: "pg_extras_mcp"

Consulte a documentação do fast-mcp para uma lista completa de opções suportadas (o hash opts é passado diretamente como está). Para implantações em produção, você provavelmente precisará de uma configuração semelhante:

opts = { allowed_origins: [ /.*./ ], allowed_ips: [ "*" ], auth_token: "secret", localhost_only: false }
mount RailsPgExtrasMcp::App.build(opts) at: "pg_extras_mcp"

Em seguida, instale o mcp-remote:

npm install -g mcp-remote

e no LLM de sua escolha:

{
  "mcpServers": {
    "pg-extras": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "http://localhost:3000/pg_extras_mcp/sse",
        "--header",
        "Authorization: secret"
      ]
    }
  }
}

Agora você pode fazer perguntas ao LLM sobre os metadados e as métricas de desempenho do seu banco de dados.

Suporte opcional a EXPLAIN ANALYZE

Os métodos calls e outliers retornam uma lista de consultas com gargalos. O LLM pode obter melhores insights sobre essas consultas realizando análises de EXPLAIN e EXPLAIN ANALYZE. O servidor MCP expõe dois métodos opcionais para esse fim: explain e explain_analyze.

Você pode habilitá-los definindo as seguintes variáveis ENV:

ENV['PG_EXTRAS_MCP_EXPLAIN_ENABLED'] = 'true' ENV['PG_EXTRAS_MCP_EXPLAIN_ANALYZE_ENABLED'] = 'true'

Habilitar esses recursos significa que um LLM pode executar consultas arbitrárias no seu banco de dados. O contexto de execução é envolvido em uma transação e revertido, portanto, em teoria, qualquer modificação de dados não deveria ser possível. Mas é recomendável configurar uma permissão somente leitura se você quiser usar esses recursos. Ao especificar ENV['RAILS_PG_EXTRAS_MCP_DATABASE_URL'], você pode substituir a conexão padrão do banco de dados do Rails ActiveRecord para restringir o escopo de acesso:

Menor responsabilidade

Se você não planeja usar os recursos de EXPLAIN ANALYZE, deve configurar um usuário com acesso somente leitura às tabelas de metadados:

CREATE ROLE extras_viewer NOLOGIN;
CREATE USER extras_user WITH PASSWORD 'your_password';
GRANT extras_viewer TO extras_user;

GRANT CONNECT ON DATABASE your_db_name TO extras_user;
GRANT USAGE ON SCHEMA public TO extras_user;

GRANT SELECT ON pg_stat_statements TO extras_user;
GRANT SELECT ON pg_stat_activity, pg_locks TO extras_user;
GRANT SELECT ON pg_stat_user_indexes, pg_index TO extras_user;
GRANT SELECT ON pg_stat_all_tables, pg_stat_database, pg_settings, pg_namespace TO extras_user;

GRANT EXECUTE ON FUNCTION pg_relation_size(regclass) TO extras_user;
GRANT EXECUTE ON FUNCTION pg_indexes_size(regclass) TO extras_user;
GRANT EXECUTE ON FUNCTION pg_table_size(regclass) TO extras_user;
GRANT EXECUTE ON FUNCTION pg_total_relation_size(regclass) TO extras_user;

Você pode pedir a um LLM para verificar com qual usuário do banco de dados ele está conectado usando a ferramenta connections.

Status

O projeto está em beta inicial, então prossiga com cautela.