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

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.

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.