Rails PG Extras MCP

Una interfaz MCP para la gema rails-pg-extras, que proporciona metadatos de PostgreSQL y análisis de rendimiento a través de indicaciones de LLM.

Documentación

Rails PG Extras MCP Gem Version GH Actions

Interfaz MCP (Model Context Protocol) para la gema rails-pg-extras. Explora fácilmente los metadatos de PostgreSQL y depura problemas de rendimiento. Verifica la hinchazón de tablas, consultas lentas, índices no utilizados y más. Ejecuta EXPLAIN ANALYZE en los cuellos de botella y obtén información clara y potenciada por LLM para optimizar tu base de datos.

Usa un usuario de solo lectura con privilegios mínimos para eliminar el riesgo de modificación o exposición de datos.

Consulta esta publicación para obtener información más detallada sobre el proyecto.

LLM interface

Instalación

bundle add rails-pg-extras-mcp

La biblioteca admite el protocolo MCP a través de la interfaz HTTP SSE.

config/routes.rb

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

con autorización opcional:

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

Consulta la documentación de fast-mcp para obtener una lista completa de opciones admitidas (el hash opts se pasa directamente tal cual). Para implementaciones en producción, probablemente necesites una configuración similar:

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

A continuación, instala mcp-remote:

npm install -g mcp-remote

y en el LLM de tu elección:

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

Ahora puedes hacer preguntas al LLM sobre los metadatos y las métricas de rendimiento de tu base de datos.

Soporte opcional de EXPLAIN ANALYZE

Los métodos calls y outliers devuelven una lista de consultas de cuello de botella. El LLM puede obtener mejores conocimientos sobre estas consultas realizando análisis EXPLAIN y EXPLAIN ANALYZE. El servidor MCP expone dos métodos opcionales para este propósito: explain y explain_analyze.

Puedes habilitarlos configurando las siguientes variables ENV:

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

Habilitar estas funciones significa que un LLM puede ejecutar consultas arbitrarias en tu base de datos. El contexto de ejecución se envuelve en una transacción y se revierte, por lo que, en teoría, cualquier modificación de datos no debería ser posible. Pero se recomienda configurar un permiso de solo lectura si deseas usar estas funciones. Al especificar ENV['RAILS_PG_EXTRAS_MCP_DATABASE_URL'] puedes sobrescribir la conexión predeterminada de la base de datos de Rails ActiveRecord para restringir el alcance del acceso:

Mínima responsabilidad

Si no planeas usar las funciones EXPLAIN ANALYZE, debes configurar un usuario con acceso de solo lectura a las tablas de metadatos:

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;

Puedes pedirle a un LLM que verifique con qué usuario de base de datos está conectado usando la herramienta connections.

Estado

El proyecto está en una beta temprana, así que procede con precaución.