Module: Pgbus::MCP

Defined in:
lib/pgbus/mcp.rb,
lib/pgbus/mcp/runner.rb,
lib/pgbus/mcp/server.rb,
lib/pgbus/mcp/rack_app.rb,
lib/pgbus/mcp/redactor.rb,
lib/pgbus/mcp/base_tool.rb,
lib/pgbus/mcp/tools/dlq_tool.rb,
lib/pgbus/mcp/health_analyzer.rb,
lib/pgbus/mcp/tools/jobs_tool.rb,
lib/pgbus/mcp/tools/locks_tool.rb,
lib/pgbus/mcp/tools/stats_tool.rb,
lib/pgbus/mcp/tools/health_tool.rb,
lib/pgbus/mcp/tools/queues_tool.rb,
lib/pgbus/mcp/tools/processes_tool.rb,
lib/pgbus/mcp/tools/recurring_tool.rb,
lib/pgbus/mcp/tools/dlq_detail_tool.rb,
lib/pgbus/mcp/tools/job_detail_tool.rb,
lib/pgbus/mcp/tools/throughput_tool.rb,
lib/pgbus/mcp/tools/queue_detail_tool.rb

Overview

Optional read-only MCP (Model Context Protocol) diagnostic server.

This namespace is deliberately kept out of pgbus’s Zeitwerk loader because its tool classes subclass ‘MCP::Tool` from the optional `mcp` gem. Referencing that gem at autoload time would force every pgbus user to install it. Instead the subsystem is loaded explicitly via MCP.load!, which is called by the `pgbus mcp` CLI command (and by specs).

Defined Under Namespace

Modules: Redactor, Runner, Server, Tools Classes: BaseTool, HealthAnalyzer, RackApp

Constant Summary collapse

REQUIRES =

Files in dependency order: the gem first, then the base classes the tools depend on, then the tools, then the server/runner.

%w[
  pgbus/mcp/redactor
  pgbus/mcp/base_tool
  pgbus/mcp/health_analyzer
  pgbus/mcp/tools/health_tool
  pgbus/mcp/tools/queues_tool
  pgbus/mcp/tools/queue_detail_tool
  pgbus/mcp/tools/processes_tool
  pgbus/mcp/tools/jobs_tool
  pgbus/mcp/tools/job_detail_tool
  pgbus/mcp/tools/dlq_tool
  pgbus/mcp/tools/dlq_detail_tool
  pgbus/mcp/tools/locks_tool
  pgbus/mcp/tools/throughput_tool
  pgbus/mcp/tools/stats_tool
  pgbus/mcp/tools/recurring_tool
  pgbus/mcp/server
  pgbus/mcp/runner
  pgbus/mcp/rack_app
].freeze

Class Method Summary collapse

Class Method Details

.load!Object

Require the ‘mcp` gem and the whole pgbus MCP subsystem. Idempotent. Raises Pgbus::Error with an actionable message if the gem is missing.

Only the ‘require “mcp”` is wrapped — a LoadError from an internal `pgbus/mcp/…` path (typo, missing file) propagates verbatim so the real broken require shows up in the message instead of being masked as “add gem `mcp`”.



44
45
46
47
48
49
50
51
52
53
# File 'lib/pgbus/mcp.rb', line 44

def load!
  begin
    require "mcp"
  rescue LoadError
    raise Pgbus::Error,
          "The pgbus MCP server requires the `mcp` gem. Add `gem \"mcp\"` to your Gemfile and run `bundle install`."
  end

  REQUIRES.each { |path| require path }
end

.rack_app(data_source: Pgbus::Web::DataSource.new, allow_payloads: false, token: nil, auth: nil) ⇒ Object

Build a gated Rack app serving the read-only diagnostic tools over HTTP. See RackApp for the parameters and deployment guidance.



93
94
95
# File 'lib/pgbus/mcp/rack_app.rb', line 93

def rack_app(data_source: Pgbus::Web::DataSource.new, allow_payloads: false, token: nil, auth: nil)
  RackApp.new(data_source: data_source, allow_payloads: allow_payloads, token: token, auth: auth)
end