@@ -19,17 +19,15 @@ class CompletableField {
1919 const CompletableField ({required this .def, this .underlyingType = String });
2020}
2121
22- typedef ToolCallback =
23- FutureOr <CallToolResult > Function ({
24- Map <String , dynamic >? args,
25- RequestHandlerExtra ? extra,
26- });
22+ typedef ToolCallback = FutureOr <CallToolResult > Function ({
23+ Map <String , dynamic >? args,
24+ RequestHandlerExtra ? extra,
25+ });
2726
28- typedef PromptCallback =
29- FutureOr <GetPromptResult > Function (
30- Map <String , dynamic >? args,
31- RequestHandlerExtra ? extra,
32- );
27+ typedef PromptCallback = FutureOr <GetPromptResult > Function (
28+ Map <String , dynamic >? args,
29+ RequestHandlerExtra ? extra,
30+ );
3331
3432class PromptArgumentDefinition {
3533 final String ? description;
@@ -45,28 +43,26 @@ class PromptArgumentDefinition {
4543 });
4644}
4745
48- typedef ResourceMetadata =
49- ({
50- String ? description,
51- String ? mimeType,
52- Map <String , dynamic > additionalProperties,
53- });
46+ typedef ResourceMetadata = ({
47+ String ? description,
48+ String ? mimeType,
49+ Map <String , dynamic > additionalProperties,
50+ });
5451
55- typedef ListResourcesCallback =
56- FutureOr < ListResourcesResult > Function ( RequestHandlerExtra extra);
52+ typedef ListResourcesCallback = FutureOr < ListResourcesResult > Function (
53+ RequestHandlerExtra extra);
5754
58- typedef ReadResourceCallback =
59- FutureOr < ReadResourceResult > Function ( Uri uri, RequestHandlerExtra extra);
55+ typedef ReadResourceCallback = FutureOr < ReadResourceResult > Function (
56+ Uri uri, RequestHandlerExtra extra);
6057
61- typedef ReadResourceTemplateCallback =
62- FutureOr <ReadResourceResult > Function (
63- Uri uri,
64- TemplateVariables variables,
65- RequestHandlerExtra extra,
66- );
58+ typedef ReadResourceTemplateCallback = FutureOr <ReadResourceResult > Function (
59+ Uri uri,
60+ TemplateVariables variables,
61+ RequestHandlerExtra extra,
62+ );
6763
68- typedef CompleteResourceTemplateCallback =
69- FutureOr < List < String >> Function ( String currentValue);
64+ typedef CompleteResourceTemplateCallback = FutureOr < List < String >> Function (
65+ String currentValue);
7066
7167class ResourceTemplateRegistration {
7268 final UriTemplateExpander uriTemplate;
@@ -113,14 +109,13 @@ class _RegisteredPrompt<Args> {
113109 });
114110
115111 Prompt toPrompt (String name) {
116- final promptArgs =
117- argsSchemaDefinition? .entries.map ((entry) {
118- return PromptArgument (
119- name: entry.key,
120- description: entry.value.description,
121- required : entry.value.required ,
122- );
123- }).toList ();
112+ final promptArgs = argsSchemaDefinition? .entries.map ((entry) {
113+ return PromptArgument (
114+ name: entry.key,
115+ description: entry.value.description,
116+ required : entry.value.required ,
117+ );
118+ }).toList ();
124119 return Prompt (name: name, description: description, arguments: promptArgs);
125120 }
126121}
@@ -264,13 +259,13 @@ class McpServer {
264259 "completion/complete" ,
265260 (request, extra) async => switch (request.completeParams.ref) {
266261 ResourceReference r => _handleResourceCompletion (
267- r,
268- request.completeParams.argument,
269- ),
262+ r,
263+ request.completeParams.argument,
264+ ),
270265 PromptReference p => _handlePromptCompletion (
271- p,
272- request.completeParams.argument,
273- ),
266+ p,
267+ request.completeParams.argument,
268+ ),
274269 },
275270 (id, params, meta) => JsonRpcCompleteRequest .fromJson ({
276271 'id' : id,
@@ -305,12 +300,10 @@ class McpServer {
305300 ) async {
306301 final templateEntry = _registeredResourceTemplates.entries.firstWhere (
307302 (e) => e.value.resourceTemplate.uriTemplate.toString () == ref.uri,
308- orElse:
309- () =>
310- throw McpError (
311- ErrorCode .invalidParams.value,
312- "Resource template URI '${ref .uri }' not found for completion" ,
313- ),
303+ orElse: () => throw McpError (
304+ ErrorCode .invalidParams.value,
305+ "Resource template URI '${ref .uri }' not found for completion" ,
306+ ),
314307 );
315308 final completer = templateEntry.value.resourceTemplate
316309 .getCompletionCallback (argInfo.name);
@@ -337,36 +330,35 @@ class McpServer {
337330 server.setRequestHandler <JsonRpcListResourcesRequest >(
338331 "resources/list" ,
339332 (request, extra) async {
340- final fixed =
341- _registeredResources.entries
342- .map ((e) => e.value.toResource (e.key))
343- .toList ();
333+ final fixed = _registeredResources.entries
334+ .map ((e) => e.value.toResource (e.key))
335+ .toList ();
344336 final templateFutures = _registeredResourceTemplates.values
345337 .where ((t) => t.resourceTemplate.listCallback != null )
346338 .map ((t) async {
347- try {
348- final result = await Future .value (
349- t.resourceTemplate.listCallback !(extra),
350- );
351- return result.resources
352- .map (
353- (r) => Resource (
354- uri: r.uri,
355- name: r.name,
356- description: r.description ?? t.metadata? .description,
357- mimeType: r.mimeType ?? t.metadata? .mimeType,
358- additionalProperties: {
359- ...? t.metadata? .additionalProperties,
360- ...r.additionalProperties,
361- },
362- ),
363- )
364- .toList ();
365- } catch (e) {
366- print ("Error listing resources for template: $e " );
367- return < Resource > [];
368- }
369- });
339+ try {
340+ final result = await Future .value (
341+ t.resourceTemplate.listCallback !(extra),
342+ );
343+ return result.resources
344+ .map (
345+ (r) => Resource (
346+ uri: r.uri,
347+ name: r.name,
348+ description: r.description ?? t.metadata? .description,
349+ mimeType: r.mimeType ?? t.metadata? .mimeType,
350+ additionalProperties: {
351+ ...? t.metadata? .additionalProperties,
352+ ...r.additionalProperties,
353+ },
354+ ),
355+ )
356+ .toList ();
357+ } catch (e) {
358+ print ("Error listing resources for template: $e " );
359+ return < Resource > [];
360+ }
361+ });
370362 final templateLists = await Future .wait (templateFutures);
371363 final templates = templateLists.expand ((list) => list).toList ();
372364 return ListResourcesResult (resources: [...fixed, ...templates]);
@@ -381,10 +373,9 @@ class McpServer {
381373 server.setRequestHandler <JsonRpcListResourceTemplatesRequest >(
382374 "resources/templates/list" ,
383375 (request, extra) async => ListResourceTemplatesResult (
384- resourceTemplates:
385- _registeredResourceTemplates.entries
386- .map ((e) => e.value.toResourceTemplate (e.key))
387- .toList (),
376+ resourceTemplates: _registeredResourceTemplates.entries
377+ .map ((e) => e.value.toResourceTemplate (e.key))
378+ .toList (),
388379 ),
389380 (id, params, meta) => JsonRpcListResourceTemplatesRequest .fromJson ({
390381 'id' : id,
@@ -443,10 +434,9 @@ class McpServer {
443434 server.setRequestHandler <JsonRpcListPromptsRequest >(
444435 "prompts/list" ,
445436 (request, extra) async => ListPromptsResult (
446- prompts:
447- _registeredPrompts.entries
448- .map ((e) => e.value.toPrompt (e.key))
449- .toList (),
437+ prompts: _registeredPrompts.entries
438+ .map ((e) => e.value.toPrompt (e.key))
439+ .toList (),
450440 ),
451441 (id, params, meta) => JsonRpcListPromptsRequest .fromJson ({
452442 'id' : id,
@@ -511,9 +501,8 @@ class McpServer {
511501 if (value == null ) {
512502 if (def.required ) errors.add ("Missing required '$name '" );
513503 } else {
514- bool typeOk =
515- (value.runtimeType == def.type ||
516- (def.type == num && value is num ));
504+ bool typeOk = (value.runtimeType == def.type ||
505+ (def.type == num && value is num ));
517506 if (! typeOk) {
518507 errors.add (
519508 "Invalid type for '$name '. Expected ${def .type }, got ${value .runtimeType }" ,
@@ -617,6 +606,6 @@ class McpServer {
617606 }
618607
619608 CompleteResult _emptyCompletionResult () => CompleteResult (
620- completion: CompletionResultData (values: [], hasMore: false ),
621- );
609+ completion: CompletionResultData (values: [], hasMore: false ),
610+ );
622611}
0 commit comments