63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
# File 'lib/archsight/mcp/query_tool.rb', line 63
def call(query:, output: "complete", limit: 50, offset: 0)
db = Archsight::MCP.db
begin
parsed_query = Archsight::Query.parse(query)
results = parsed_query.filter(db)
total = results.length
omit_kind = !parsed_query.kind_filter.nil?
if output == "count"
by_kind = results.group_by { |r| r.class.to_s.split("::").last }
.transform_values(&:length)
result = {
query: query,
total: total,
by_kind: by_kind
}
else
paginated = results.sort_by(&:name).drop(offset).take(limit)
resources = case output
when "brief"
paginated.map { |r| Archsight::MCP.brief_summary(r, omit_kind: omit_kind) }
else paginated.map { |r| Archsight::MCP.complete_summary(r, omit_kind: omit_kind) }
end
result = {
query: query,
total: total,
limit: limit,
offset: offset,
count: paginated.length,
resources: resources
}
end
JSON.pretty_generate(result)
rescue Archsight::Query::QueryError => e
JSON.pretty_generate({
error: "Query error",
message: e.message,
query: query
})
end
end
|