Model Context Protocol in OCaml

Fix resources/templates/list handling

- Add handle_resource_templates_list function for the resources/templates/list method
- Add resourceTemplates capability to the server
- Update server capabilities with resourceTemplates option

This fixes the 'Method not found: resources/templates/list' error when running the MCP server.

Changed files
+20
lib
+12
lib/mcp_sdk.ml
···
else
caps
in
+
let caps =
+
if with_resource_templates then
+
("resourceTemplates", `Assoc [
+
("listChanged", `Bool true)
+
]) :: caps
+
else if not with_resource_templates then
+
("resourceTemplates", `Assoc [
+
("listChanged", `Bool false)
+
]) :: caps
+
else
+
caps
+
in
let caps =
if with_prompts then
("prompts", `Assoc [
+8
lib/mcp_server.ml
···
let response = Mcp_rpc.ResourcesList.create_response ~id:req.id ~resources:resources_list () in
Some response
+
(* Process resources/templates/list request *)
+
let handle_resource_templates_list server (req:JSONRPCMessage.request) =
+
Log.debug "Processing resources/templates/list request";
+
let templates_list = ResourceTemplate.to_rpc_resource_templates_list (resource_templates server) in
+
let response = Mcp_rpc.ListResourceTemplatesResult.create_response ~id:req.id ~resource_templates:templates_list () in
+
Some response
+
(* Utility module for resource template matching *)
module Resource_matcher = struct
(* Define variants for resource handling result *)
···
| Method.PromptsList -> handle_prompts_list server req
| Method.ResourcesList -> handle_resources_list server req
| Method.ResourcesRead -> handle_resources_read server req
+
| Method.ResourceTemplatesList -> handle_resource_templates_list server req
| _ ->
Log.errorf "Unknown method received: %s" (Method.to_string req.meth);
Some (create_jsonrpc_error req.id ErrorCode.MethodNotFound ("Method not found: " ^ (Method.to_string req.meth)) ()))