@@ -70,6 +70,7 @@ function M.register(opts)
7070 end
7171
7272 local async = require (" plenary.async" )
73+ local chat_functions = require (" CopilotChat.functions" )
7374 local shared = require (" mcphub.extensions.shared" )
7475
7576 -- Cleanup existing mcphub functions
@@ -208,6 +209,7 @@ function M.register(opts)
208209 for safe_server_name , data in pairs (server_data ) do
209210 local server_name = data .server_name
210211 local resources = data .resources
212+ local resource_templates = data .resource_templates
211213
212214 -- Handle regular resources
213215 for _ , resource in ipairs (resources ) do
@@ -250,28 +252,46 @@ function M.register(opts)
250252 end
251253 end
252254
253- -- TODO: Handle resource templates
254- -- local resource_templates = data.resource_templates
255- -- for _, template in ipairs(resource_templates) do
256- -- local template_name = template.name or extract_name_from_uri(template.uriTemplate)
257- -- local function_name = create_function_name(safe_server_name, template_name, opts)
258- --
259- -- -- Check for function name conflicts
260- -- if chat.config.functions[function_name] then
261- -- table.insert(skipped_functions, function_name)
262- -- else
263- -- chat.config.functions[function_name] = {
264- -- _mcphub = true,
265- -- uri = template.uriTemplate,
266- -- description = template.description or "No description provided",
267- -- resolve = function()
268- -- -- Resource templates need URI parameters filled in
269- -- -- This would require additional UI for parameter collection
270- -- error("Resource templates not yet supported")
271- -- end,
272- -- }
273- -- end
274- -- end
255+ -- Handle resource templates
256+ for _ , template in ipairs (resource_templates ) do
257+ local template_name = template .name or extract_name_from_uri (template .uriTemplate )
258+ local function_name = create_function_name (safe_server_name , template_name , opts )
259+
260+ -- Check for function name conflicts
261+ if chat .config .functions [function_name ] then
262+ table.insert (skipped_functions , function_name )
263+ else
264+ chat .config .functions [function_name ] = {
265+ _mcphub = true ,
266+ uri = template .uriTemplate ,
267+ description = template .description or " No description provided" ,
268+ resolve = function (input )
269+ local url = chat_functions .uri_to_url (template .uriTemplate , input or {})
270+ local res , err = access_resource (server_name , url )
271+ if err then
272+ error (err )
273+ end
274+
275+ res = res or {}
276+ local result_data = res .result or {}
277+ local content = result_data .contents or {}
278+ local out = {}
279+
280+ for _ , message in ipairs (content ) do
281+ if message .text then
282+ table.insert (out , {
283+ uri = message .uri ,
284+ data = message .text ,
285+ mimetype = message .mimeType ,
286+ })
287+ end
288+ end
289+
290+ return out
291+ end ,
292+ }
293+ end
294+ end
275295 end
276296 end
277297
0 commit comments