Class: PostgresToolBuilder
- Inherits:
-
Object
- Object
- PostgresToolBuilder
- Defined in:
- app/mcp/postgres_tool_builder.rb
Overview
Builds MCP tool classes for direct PostgreSQL database access.
Creates tools for each configured database connection (app_db, versions).
All queries are executed READ-ONLY. No DDL or DML mutations allowed.
Tools are namespaced by database:
app_db_list_schemas
app_db_execute_sql
postgres_versions_list_schemas
etc.
Access control: each tool checks Thread.current[:mcp_auth_result]
for the appropriate service key (app_db, postgres_versions).
Connection management: every tool block uses
connection_pool.with_connection { |conn| … }. The MCP HTTP transport is
stateless across requests, so a sticky lease (.lease_connection) would
pin a pool slot until thread teardown. with_connection releases it the
moment the block returns.
Constant Summary collapse
- DATABASES =
Databases.
{ 'app_db' => { label: 'App DB', connection_class: 'ActiveRecord::Base', description: 'Application database (read-only)' }, 'postgres_versions' => { label: 'Versions', connection_class: 'RecordVersionBase', description: 'Audit trail / versions database (read-only)' } }.freeze
Class Method Summary collapse
-
.build(tool_service_map) ⇒ Array<Class>
Build all PostgreSQL tool classes for all configured databases.
Class Method Details
.build(tool_service_map) ⇒ Array<Class>
Build all PostgreSQL tool classes for all configured databases.
43 44 45 46 47 48 49 50 51 52 53 |
# File 'app/mcp/postgres_tool_builder.rb', line 43 def self.build(tool_service_map) tools = [] DATABASES.each do |service_key, config| db_tools = build_for_database(service_key, config) db_tools.each { |t| tool_service_map[t.tool_name] = service_key } tools.concat(db_tools) end tools end |