Class: Woods::MCP::Renderers::ClaudeRenderer

Inherits:
MarkdownRenderer show all
Defined in:
lib/woods/mcp/renderers/claude_renderer.rb

Overview

Renders MCP tool responses as Markdown wrapped in XML boundary tags. Matches Anthropic’s recommended format: XML tags for section boundaries, Markdown for content.

Constant Summary

Constants inherited from ToolResponseRenderer

ToolResponseRenderer::VALID_FORMATS

Instance Method Summary collapse

Methods inherited from MarkdownRenderer

#render_domain_clusters, #structure_denominators_glossary

Methods inherited from ToolResponseRenderer

for, #render

Instance Method Details

#render_default(data) ⇒ Object



68
69
70
# File 'lib/woods/mcp/renderers/claude_renderer.rb', line 68

def render_default(data)
  wrap_xml('result', super)
end

#render_dependencies(data) ⇒ Object



28
29
30
31
32
# File 'lib/woods/mcp/renderers/claude_renderer.rb', line 28

def render_dependencies(data, **)
  content = super
  root = data[:root] || data['root']
  wrap_xml('dependencies', content, root: root)
end

#render_dependents(data) ⇒ Object



34
35
36
37
38
# File 'lib/woods/mcp/renderers/claude_renderer.rb', line 34

def render_dependents(data, **)
  content = super
  root = data[:root] || data['root']
  wrap_xml('dependents', content, root: root)
end

#render_framework(data) ⇒ Object



52
53
54
55
56
# File 'lib/woods/mcp/renderers/claude_renderer.rb', line 52

def render_framework(data, **)
  content = super
  keyword = data[:keyword] || data['keyword']
  wrap_xml('framework_results', content, keyword: keyword)
end

#render_graph_analysis(data) ⇒ Object



44
45
46
# File 'lib/woods/mcp/renderers/claude_renderer.rb', line 44

def render_graph_analysis(data, **)
  wrap_xml('graph_analysis', super)
end

#render_lookup(data) ⇒ String

Returns XML-wrapped Markdown.

Parameters:

  • data (Hash)

    Unit data

Returns:

  • (String)

    XML-wrapped Markdown



12
13
14
15
16
17
18
# File 'lib/woods/mcp/renderers/claude_renderer.rb', line 12

def render_lookup(data, **)
  return 'Unit not found' unless data.is_a?(Hash) && data['identifier']

  content = super
  wrap_xml('lookup_result', content,
           identifier: data['identifier'], type: data['type'])
end

#render_pagerank(data) ⇒ Object



48
49
50
# File 'lib/woods/mcp/renderers/claude_renderer.rb', line 48

def render_pagerank(data, **)
  wrap_xml('pagerank', super)
end

#render_recent_changes(data) ⇒ Object



58
59
60
# File 'lib/woods/mcp/renderers/claude_renderer.rb', line 58

def render_recent_changes(data, **)
  wrap_xml('recent_changes', super)
end

#render_search(data) ⇒ String

Returns XML-wrapped Markdown.

Parameters:

  • data (Hash)

    Search results

Returns:

  • (String)

    XML-wrapped Markdown



22
23
24
25
26
# File 'lib/woods/mcp/renderers/claude_renderer.rb', line 22

def render_search(data, **)
  content = super
  query = data[:query] || data['query']
  wrap_xml('search_results', content, query: query)
end

#render_structure(data) ⇒ Object



40
41
42
# File 'lib/woods/mcp/renderers/claude_renderer.rb', line 40

def render_structure(data, **)
  wrap_xml('structure', super)
end

#render_trace_flow(data) ⇒ Object



62
63
64
65
66
# File 'lib/woods/mcp/renderers/claude_renderer.rb', line 62

def render_trace_flow(data, **)
  content = super
  entry_point = data[:entry_point] || data['entry_point']
  wrap_xml('trace_flow', content, entry_point: entry_point)
end