Class: PostgresToolBuilder

Inherits:
Object
  • Object
show all
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).

Constant Summary collapse

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

Class Method Details

.build(tool_service_map) ⇒ Array<Class>

Build all PostgreSQL tool classes for all configured databases.

Parameters:

  • tool_service_map (Hash)

    Map to register tool names to service keys

Returns:

  • (Array<Class>)

    Array of MCP::Tool subclasses



36
37
38
39
40
41
42
43
44
45
46
# File 'app/mcp/postgres_tool_builder.rb', line 36

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