From 587dbb739d245e2859b3969ec106f92706633d09 Mon Sep 17 00:00:00 2001 From: David Soria Parra Date: Wed, 27 Nov 2024 23:01:11 +0000 Subject: [PATCH] Add handler for resource templates We missed to have a handler for resource templates. We add this now. One caveat is still that the `uriTemplate` in `ResourceTemplate` is not a pydantic type. --- src/mcp/server/__init__.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/mcp/server/__init__.py b/src/mcp/server/__init__.py index aaf581435..a0dd033d6 100644 --- a/src/mcp/server/__init__.py +++ b/src/mcp/server/__init__.py @@ -30,6 +30,10 @@ async def handle_call_tool( ) -> list[types.TextContent | types.ImageContent | types.EmbeddedResource]: # Implementation + @server.list_resource_templates() + async def handle_list_resource_templates() -> list[types.ResourceTemplate]: + # Implementation + 3. Define notification handlers if needed: @server.progress_notification() async def handle_progress( @@ -227,6 +231,21 @@ async def handler(_: Any): return decorator + def list_resource_templates(self): + def decorator(func: Callable[[], Awaitable[list[types.ResourceTemplate]]]): + logger.debug("Registering handler for ListResourceTemplatesRequest") + + async def handler(_: Any): + templates = await func() + return types.ServerResult( + types.ListResourceTemplatesResult(resourceTemplates=templates) + ) + + self.request_handlers[types.ListResourceTemplatesRequest] = handler + return func + + return decorator + def read_resource(self): def decorator(func: Callable[[AnyUrl], Awaitable[str | bytes]]): logger.debug("Registering handler for ReadResourceRequest")