Skip to content

Commit d5ec9f6

Browse files
committed
Add and use a default ListResourceTemplatesHandler
If no ListResourceTemplatesHandler is specified, use a default one that returns an empty result.
1 parent 62e0eb9 commit d5ec9f6

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

src/ModelContextProtocol/Server/McpServer.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,13 +152,14 @@ private void SetResourcesHandler(McpServerOptions options)
152152
throw new McpServerException("Resources capability was enabled, but ListResources and/or ReadResource handlers were not specified.");
153153
}
154154

155-
if (resourcesCapability.ListResourceTemplatesHandler is { } listResourceTemplatesHandler)
156-
{
157-
SetRequestHandler<ListResourceTemplatesRequestParams, ListResourceTemplatesResult>("resources/templates/list", (request, ct) => listResourceTemplatesHandler(new(this, request), ct));
158-
}
159155
SetRequestHandler<ListResourcesRequestParams, ListResourcesResult>("resources/list", (request, ct) => listResourcesHandler(new(this, request), ct));
160156
SetRequestHandler<ReadResourceRequestParams, ReadResourceResult>("resources/read", (request, ct) => readResourceHandler(new(this, request), ct));
161157

158+
// Set the list resource templates handler, or use the default if not specified
159+
var listResourceTemplatesHandler = resourcesCapability.ListResourceTemplatesHandler
160+
?? McpServerHandlers.Defaults.ListResourceTemplatesHandler;
161+
SetRequestHandler<ListResourceTemplatesRequestParams, ListResourceTemplatesResult>("resources/templates/list", (request, ct) => listResourceTemplatesHandler(new(this, request), ct));
162+
162163
if (resourcesCapability.Subscribe is not true)
163164
{
164165
return;

src/ModelContextProtocol/Server/McpServerHandlers.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,17 @@ options.Capabilities with
141141

142142
options.GetCompletionHandler = GetCompletionHandler ?? options.GetCompletionHandler;
143143
}
144+
145+
/// <summary>
146+
/// Default handlers for capabilities.
147+
/// </summary>
148+
public static class Defaults
149+
{
150+
/// <summary>
151+
/// Gets or sets the handler for list resource templates requests.
152+
/// </summary>
153+
public static Func<RequestContext<ListResourceTemplatesRequestParams>, CancellationToken, Task<ListResourceTemplatesResult>> ListResourceTemplatesHandler
154+
=> (context, token) => Task.FromResult(new ListResourceTemplatesResult());
155+
156+
}
144157
}

0 commit comments

Comments
 (0)