Class: Woods::MCP::ToolResponseRenderer
- Inherits:
-
Object
- Object
- Woods::MCP::ToolResponseRenderer
- Defined in:
- lib/woods/mcp/tool_response_renderer.rb
Overview
Base class for rendering MCP tool responses in different output formats.
Subclasses implement tool-specific render methods (render_lookup, render_search, etc.) and a render_default fallback. The dispatch uses convention: tool name maps to method name.
Direct Known Subclasses
Console::ConsoleResponseRenderer, Renderers::JsonRenderer, Renderers::MarkdownRenderer, Renderers::PlainRenderer
Constant Summary collapse
- VALID_FORMATS =
%i[claude markdown plain json].freeze
Class Method Summary collapse
-
.for(format) ⇒ ToolResponseRenderer
Factory method to build the appropriate renderer for a format.
Instance Method Summary collapse
-
#render(tool_name, data, **opts) ⇒ String
Render a tool response.
-
#render_default(data) ⇒ String
Default rendering — subclasses must implement.
Class Method Details
.for(format) ⇒ ToolResponseRenderer
Factory method to build the appropriate renderer for a format.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/woods/mcp/tool_response_renderer.rb', line 22 def self.for(format) require_relative 'renderers/markdown_renderer' require_relative 'renderers/claude_renderer' require_relative 'renderers/plain_renderer' require_relative 'renderers/json_renderer' case format when :claude then Renderers::ClaudeRenderer.new when :markdown then Renderers::MarkdownRenderer.new when :plain then Renderers::PlainRenderer.new when :json then Renderers::JsonRenderer.new else raise ArgumentError, "Unknown format: #{format.inspect}. Valid: #{VALID_FORMATS.inspect}" end end |
Instance Method Details
#render(tool_name, data, **opts) ⇒ String
Render a tool response. Dispatches to render_<tool_name> if defined, otherwise falls back to render_default.
44 45 46 47 48 49 50 51 |
# File 'lib/woods/mcp/tool_response_renderer.rb', line 44 def render(tool_name, data, **opts) method_name = :"render_#{tool_name}" if respond_to?(method_name, true) send(method_name, data, **opts) else render_default(data) end end |
#render_default(data) ⇒ String
Default rendering — subclasses must implement.
57 58 59 |
# File 'lib/woods/mcp/tool_response_renderer.rb', line 57 def render_default(data) raise NotImplementedError, "#{self.class}#render_default must be implemented" end |