Class: RailsAiBridge::Tools::GetContext

Inherits:
BaseTool
  • Object
show all
Defined in:
lib/rails_ai_bridge/tools/get_context.rb,
lib/rails_ai_bridge/tools/get_context/composer.rb,
lib/rails_ai_bridge/tools/get_context/resolver.rb,
lib/rails_ai_bridge/tools/get_context/related_tests.rb

Overview

In-process composite MCP tool: table + model + routes + controller + related tests.

Resolves a single model, controller, or feature name against cached introspector snapshots. Does not perform HTTP or call external providers.

Defined Under Namespace

Classes: Composer, RelatedTests, Resolver

Constant Summary collapse

MISSING_INPUT_MESSAGE =

Returned when model, controller, and feature are all blank.

'Provide at least one of `model`, `controller`, or `feature`.'

Class Method Summary collapse

Methods inherited from BaseTool

cached_context, cached_section, config, rails_app, reset_cache!, text_response

Class Method Details

.app_rootPathname, ...

Host application root used for cheap related-test path checks.

Returns:

  • (Pathname, String, nil)


99
100
101
# File 'lib/rails_ai_bridge/tools/get_context.rb', line 99

def self.app_root
  rails_app&.root
end

.call(model: nil, controller: nil, feature: nil, detail: 'summary', _server_context: nil) ⇒ MCP::Tool::Response

Returns a single markdown payload for the resolved model/controller/feature.

Parameters:

  • model (String, nil) (defaults to: nil)

    ActiveRecord class name

  • controller (String, nil) (defaults to: nil)

    controller class or path name

  • feature (String, nil) (defaults to: nil)

    inflection-normalized name used when model/controller are omitted

  • detail (String) (defaults to: 'summary')

    summary, standard, or full

  • _server_context (Object, nil) (defaults to: nil)

    reserved for MCP transport metadata (unused)

Returns:

  • (MCP::Tool::Response)

    composite markdown or a setup/not-found message



53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/rails_ai_bridge/tools/get_context.rb', line 53

def self.call(model: nil, controller: nil, feature: nil, detail: 'summary', _server_context: nil)
  return text_response(MISSING_INPUT_MESSAGE) if blank_name?(model) && blank_name?(controller) && blank_name?(feature)

  snapshots = build_snapshots
  resolution = Resolver.new(
    model: model,
    controller: controller,
    feature: feature,
    snapshots: snapshots,
    config: config
  ).call

  text_response(render(resolution:, snapshots:, detail: detail.to_s))
end