@@ -19,17 +19,15 @@ class CompletableField {
19
19
const CompletableField ({required this .def, this .underlyingType = String });
20
20
}
21
21
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
+ });
27
26
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
+ );
33
31
34
32
class PromptArgumentDefinition {
35
33
final String ? description;
@@ -45,28 +43,26 @@ class PromptArgumentDefinition {
45
43
});
46
44
}
47
45
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
+ });
54
51
55
- typedef ListResourcesCallback =
56
- FutureOr < ListResourcesResult > Function ( RequestHandlerExtra extra);
52
+ typedef ListResourcesCallback = FutureOr < ListResourcesResult > Function (
53
+ RequestHandlerExtra extra);
57
54
58
- typedef ReadResourceCallback =
59
- FutureOr < ReadResourceResult > Function ( Uri uri, RequestHandlerExtra extra);
55
+ typedef ReadResourceCallback = FutureOr < ReadResourceResult > Function (
56
+ Uri uri, RequestHandlerExtra extra);
60
57
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
+ );
67
63
68
- typedef CompleteResourceTemplateCallback =
69
- FutureOr < List < String >> Function ( String currentValue);
64
+ typedef CompleteResourceTemplateCallback = FutureOr < List < String >> Function (
65
+ String currentValue);
70
66
71
67
class ResourceTemplateRegistration {
72
68
final UriTemplateExpander uriTemplate;
@@ -113,14 +109,13 @@ class _RegisteredPrompt<Args> {
113
109
});
114
110
115
111
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 ();
124
119
return Prompt (name: name, description: description, arguments: promptArgs);
125
120
}
126
121
}
@@ -264,13 +259,13 @@ class McpServer {
264
259
"completion/complete" ,
265
260
(request, extra) async => switch (request.completeParams.ref) {
266
261
ResourceReference r => _handleResourceCompletion (
267
- r,
268
- request.completeParams.argument,
269
- ),
262
+ r,
263
+ request.completeParams.argument,
264
+ ),
270
265
PromptReference p => _handlePromptCompletion (
271
- p,
272
- request.completeParams.argument,
273
- ),
266
+ p,
267
+ request.completeParams.argument,
268
+ ),
274
269
},
275
270
(id, params, meta) => JsonRpcCompleteRequest .fromJson ({
276
271
'id' : id,
@@ -305,12 +300,10 @@ class McpServer {
305
300
) async {
306
301
final templateEntry = _registeredResourceTemplates.entries.firstWhere (
307
302
(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
+ ),
314
307
);
315
308
final completer = templateEntry.value.resourceTemplate
316
309
.getCompletionCallback (argInfo.name);
@@ -337,36 +330,35 @@ class McpServer {
337
330
server.setRequestHandler <JsonRpcListResourcesRequest >(
338
331
"resources/list" ,
339
332
(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 ();
344
336
final templateFutures = _registeredResourceTemplates.values
345
337
.where ((t) => t.resourceTemplate.listCallback != null )
346
338
.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
+ });
370
362
final templateLists = await Future .wait (templateFutures);
371
363
final templates = templateLists.expand ((list) => list).toList ();
372
364
return ListResourcesResult (resources: [...fixed, ...templates]);
@@ -381,10 +373,9 @@ class McpServer {
381
373
server.setRequestHandler <JsonRpcListResourceTemplatesRequest >(
382
374
"resources/templates/list" ,
383
375
(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 (),
388
379
),
389
380
(id, params, meta) => JsonRpcListResourceTemplatesRequest .fromJson ({
390
381
'id' : id,
@@ -443,10 +434,9 @@ class McpServer {
443
434
server.setRequestHandler <JsonRpcListPromptsRequest >(
444
435
"prompts/list" ,
445
436
(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 (),
450
440
),
451
441
(id, params, meta) => JsonRpcListPromptsRequest .fromJson ({
452
442
'id' : id,
@@ -511,9 +501,8 @@ class McpServer {
511
501
if (value == null ) {
512
502
if (def.required ) errors.add ("Missing required '$name '" );
513
503
} 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 ));
517
506
if (! typeOk) {
518
507
errors.add (
519
508
"Invalid type for '$name '. Expected ${def .type }, got ${value .runtimeType }" ,
@@ -617,6 +606,6 @@ class McpServer {
617
606
}
618
607
619
608
CompleteResult _emptyCompletionResult () => CompleteResult (
620
- completion: CompletionResultData (values: [], hasMore: false ),
621
- );
609
+ completion: CompletionResultData (values: [], hasMore: false ),
610
+ );
622
611
}
0 commit comments