Module: RailsAiContext::Resources
- Defined in:
- lib/rails_ai_context/resources.rb
Overview
Registers MCP resources and resource templates that expose static introspection data AI clients can read directly.
Constant Summary collapse
- STATIC_RESOURCES =
{ "rails://schema" => { name: "Database Schema", description: "Full database schema including tables, columns, indexes, and foreign keys", mime_type: "application/json", key: :schema }, "rails://routes" => { name: "Application Routes", description: "All routes with HTTP verbs, paths, and controller actions", mime_type: "application/json", key: :routes }, "rails://conventions" => { name: "Conventions & Patterns", description: "Detected architecture patterns, conventions, and directory structure", mime_type: "application/json", key: :conventions }, "rails://gems" => { name: "Notable Gems", description: "Gem dependencies categorized by function with explanations", mime_type: "application/json", key: :gems }, "rails://controllers" => { name: "Controllers", description: "All controllers with actions, filters, strong params, and concerns", mime_type: "application/json", key: :controllers }, "rails://config" => { name: "Application Config", description: "Application configuration including cache, sessions, middleware, and initializers", mime_type: "application/json", key: :config }, "rails://tests" => { name: "Test Infrastructure", description: "Test framework, factories, fixtures, CI, and coverage configuration", mime_type: "application/json", key: :tests }, "rails://migrations" => { name: "Migrations", description: "Migration history, pending migrations, and migration statistics", mime_type: "application/json", key: :migrations }, "rails://engines" => { name: "Mounted Engines", description: "Mounted Rails engines and Rack apps with paths and descriptions", mime_type: "application/json", key: :engines } }.freeze
- MODEL_TEMPLATE =
MCP::ResourceTemplate.new( uri_template: "rails://models/{name}", name: "Model Details", description: "Detailed information about a specific ActiveRecord model", mime_type: "application/json" ).freeze
- CONTROLLER_TEMPLATE =
MCP::ResourceTemplate.new( uri_template: "rails-ai-context://controllers/{name}", name: "Controller Details", description: "Controller with actions, filters, strong params, and schema hints", mime_type: "application/json" ).freeze
- CONTROLLER_ACTION_TEMPLATE =
MCP::ResourceTemplate.new( uri_template: "rails-ai-context://controllers/{name}/{action}", name: "Controller Action", description: "Source code and metadata for a specific controller action", mime_type: "application/json" ).freeze
- VIEW_TEMPLATE =
MCP::ResourceTemplate.new( uri_template: "rails-ai-context://views/{path}", name: "View Template", description: "View template content for a specific path relative to app/views", mime_type: "text/html" ).freeze
- ROUTES_TEMPLATE =
MCP::ResourceTemplate.new( uri_template: "rails-ai-context://routes/{controller}", name: "Live Routes", description: "Application routes introspected fresh on each request, optionally filtered by controller name", mime_type: "application/json" ).freeze
Class Method Summary collapse
Class Method Details
.register(server) ⇒ Object
117 118 119 120 121 122 123 124 125 |
# File 'lib/rails_ai_context/resources.rb', line 117 def register(server) require "json" server.resources = static_resources server.resources_read_handler do |params| handle_read(params) end end |
.resource_templates ⇒ Object
113 114 115 |
# File 'lib/rails_ai_context/resources.rb', line 113 def resource_templates [ MODEL_TEMPLATE, CONTROLLER_TEMPLATE, CONTROLLER_ACTION_TEMPLATE, VIEW_TEMPLATE, ROUTES_TEMPLATE ] end |
.static_resources ⇒ Object
102 103 104 105 106 107 108 109 110 111 |
# File 'lib/rails_ai_context/resources.rb', line 102 def static_resources STATIC_RESOURCES.map do |uri, | MCP::Resource.new( uri: uri, name: [:name], description: [:description], mime_type: [:mime_type] ) end end |