@@ -22,7 +22,7 @@ public static Task PingAsync(this IMcpClient client, CancellationToken cancellat
22
22
Throw . IfNull ( client ) ;
23
23
24
24
return client . SendRequestAsync (
25
- RequestMethods . Ping ,
25
+ RequestMethods . Ping ,
26
26
parameters : null ,
27
27
McpJsonUtilities . JsonContext . Default . Object ! ,
28
28
McpJsonUtilities . JsonContext . Default . Object ,
@@ -51,9 +51,9 @@ public static async Task<IList<McpClientTool>> ListToolsAsync(
51
51
do
52
52
{
53
53
var toolResults = await client . SendRequestAsync (
54
- RequestMethods . ToolsList ,
55
- CreateCursorDictionary ( cursor ) ! ,
56
- McpJsonUtilities . JsonContext . Default . DictionaryStringObject ,
54
+ RequestMethods . ToolsList ,
55
+ new ( ) { Cursor = cursor } ,
56
+ McpJsonUtilities . JsonContext . Default . ListToolsRequestParams ,
57
57
McpJsonUtilities . JsonContext . Default . ListToolsResult ,
58
58
cancellationToken : cancellationToken ) . ConfigureAwait ( false ) ;
59
59
@@ -95,9 +95,9 @@ public static async IAsyncEnumerable<McpClientTool> EnumerateToolsAsync(
95
95
do
96
96
{
97
97
var toolResults = await client . SendRequestAsync (
98
- RequestMethods . ToolsList ,
99
- CreateCursorDictionary ( cursor ) ! ,
100
- McpJsonUtilities . JsonContext . Default . DictionaryStringObject ,
98
+ RequestMethods . ToolsList ,
99
+ new ( ) { Cursor = cursor } ,
100
+ McpJsonUtilities . JsonContext . Default . ListToolsRequestParams ,
101
101
McpJsonUtilities . JsonContext . Default . ListToolsResult ,
102
102
cancellationToken : cancellationToken ) . ConfigureAwait ( false ) ;
103
103
@@ -127,9 +127,9 @@ public static async Task<IList<McpClientPrompt>> ListPromptsAsync(
127
127
do
128
128
{
129
129
var promptResults = await client . SendRequestAsync (
130
- RequestMethods . PromptsList ,
131
- CreateCursorDictionary ( cursor ) ! ,
132
- McpJsonUtilities . JsonContext . Default . DictionaryStringObject ,
130
+ RequestMethods . PromptsList ,
131
+ new ( ) { Cursor = cursor } ,
132
+ McpJsonUtilities . JsonContext . Default . ListPromptsRequestParams ,
133
133
McpJsonUtilities . JsonContext . Default . ListPromptsResult ,
134
134
cancellationToken : cancellationToken ) . ConfigureAwait ( false ) ;
135
135
@@ -166,8 +166,8 @@ public static async IAsyncEnumerable<Prompt> EnumeratePromptsAsync(
166
166
{
167
167
var promptResults = await client . SendRequestAsync (
168
168
RequestMethods . PromptsList ,
169
- CreateCursorDictionary ( cursor ) ! ,
170
- McpJsonUtilities . JsonContext . Default . DictionaryStringObject ,
169
+ new ( ) { Cursor = cursor } ,
170
+ McpJsonUtilities . JsonContext . Default . ListPromptsRequestParams ,
171
171
McpJsonUtilities . JsonContext . Default . ListPromptsResult ,
172
172
cancellationToken : cancellationToken ) . ConfigureAwait ( false ) ;
173
173
@@ -202,12 +202,10 @@ public static Task<GetPromptResult> GetPromptAsync(
202
202
serializerOptions ??= McpJsonUtilities . DefaultOptions ;
203
203
serializerOptions . MakeReadOnly ( ) ;
204
204
205
- var parametersTypeInfo = serializerOptions . GetTypeInfo < IReadOnlyDictionary < string , object ? > > ( ) ;
206
-
207
205
return client . SendRequestAsync (
208
206
RequestMethods . PromptsGet ,
209
- CreateParametersDictionary ( name , arguments ) ,
210
- parametersTypeInfo ,
207
+ new ( ) { Name = name , Arguments = ToArgumentsDictionary ( arguments , serializerOptions ) } ,
208
+ McpJsonUtilities . JsonContext . Default . GetPromptRequestParams ,
211
209
McpJsonUtilities . JsonContext . Default . GetPromptResult ,
212
210
cancellationToken : cancellationToken ) ;
213
211
}
@@ -229,9 +227,9 @@ public static async Task<IList<ResourceTemplate>> ListResourceTemplatesAsync(
229
227
do
230
228
{
231
229
var templateResults = await client . SendRequestAsync (
232
- RequestMethods . ResourcesTemplatesList ,
233
- CreateCursorDictionary ( cursor ) ! ,
234
- McpJsonUtilities . JsonContext . Default . DictionaryStringObject ,
230
+ RequestMethods . ResourcesTemplatesList ,
231
+ new ( ) { Cursor = cursor } ,
232
+ McpJsonUtilities . JsonContext . Default . ListResourceTemplatesRequestParams ,
235
233
McpJsonUtilities . JsonContext . Default . ListResourceTemplatesResult ,
236
234
cancellationToken : cancellationToken ) . ConfigureAwait ( false ) ;
237
235
@@ -270,9 +268,9 @@ public static async IAsyncEnumerable<ResourceTemplate> EnumerateResourceTemplate
270
268
do
271
269
{
272
270
var templateResults = await client . SendRequestAsync (
273
- RequestMethods . ResourcesTemplatesList ,
274
- CreateCursorDictionary ( cursor ) ! ,
275
- McpJsonUtilities . JsonContext . Default . DictionaryStringObject ,
271
+ RequestMethods . ResourcesTemplatesList ,
272
+ new ( ) { Cursor = cursor } ,
273
+ McpJsonUtilities . JsonContext . Default . ListResourceTemplatesRequestParams ,
276
274
McpJsonUtilities . JsonContext . Default . ListResourceTemplatesResult ,
277
275
cancellationToken : cancellationToken ) . ConfigureAwait ( false ) ;
278
276
@@ -303,9 +301,9 @@ public static async Task<IList<Resource>> ListResourcesAsync(
303
301
do
304
302
{
305
303
var resourceResults = await client . SendRequestAsync (
306
- RequestMethods . ResourcesList ,
307
- CreateCursorDictionary ( cursor ) ! ,
308
- McpJsonUtilities . JsonContext . Default . DictionaryStringObject ,
304
+ RequestMethods . ResourcesList ,
305
+ new ( ) { Cursor = cursor } ,
306
+ McpJsonUtilities . JsonContext . Default . ListResourcesRequestParams ,
309
307
McpJsonUtilities . JsonContext . Default . ListResourcesResult ,
310
308
cancellationToken : cancellationToken ) . ConfigureAwait ( false ) ;
311
309
@@ -344,9 +342,9 @@ public static async IAsyncEnumerable<Resource> EnumerateResourcesAsync(
344
342
do
345
343
{
346
344
var resourceResults = await client . SendRequestAsync (
347
- RequestMethods . ResourcesList ,
348
- CreateCursorDictionary ( cursor ) ! ,
349
- McpJsonUtilities . JsonContext . Default . DictionaryStringObject ,
345
+ RequestMethods . ResourcesList ,
346
+ new ( ) { Cursor = cursor } ,
347
+ McpJsonUtilities . JsonContext . Default . ListResourcesRequestParams ,
350
348
McpJsonUtilities . JsonContext . Default . ListResourcesResult ,
351
349
cancellationToken : cancellationToken ) . ConfigureAwait ( false ) ;
352
350
@@ -373,9 +371,9 @@ public static Task<ReadResourceResult> ReadResourceAsync(
373
371
Throw . IfNullOrWhiteSpace ( uri ) ;
374
372
375
373
return client . SendRequestAsync (
376
- RequestMethods . ResourcesRead ,
377
- new Dictionary < string , object > { [ "uri" ] = uri } ,
378
- McpJsonUtilities . JsonContext . Default . DictionaryStringObject ,
374
+ RequestMethods . ResourcesRead ,
375
+ new ( ) { Uri = uri } ,
376
+ McpJsonUtilities . JsonContext . Default . ReadResourceRequestParams ,
379
377
McpJsonUtilities . JsonContext . Default . ReadResourceResult ,
380
378
cancellationToken : cancellationToken ) ;
381
379
}
@@ -400,13 +398,13 @@ public static Task<CompleteResult> GetCompletionAsync(this IMcpClient client, Re
400
398
}
401
399
402
400
return client . SendRequestAsync (
403
- RequestMethods . CompletionComplete ,
404
- new Dictionary < string , object >
401
+ RequestMethods . CompletionComplete ,
402
+ new ( )
405
403
{
406
- [ "ref" ] = reference ,
407
- [ "argument" ] = new Argument { Name = argumentName , Value = argumentValue }
404
+ Ref = reference ,
405
+ Argument = new Argument { Name = argumentName , Value = argumentValue }
408
406
} ,
409
- McpJsonUtilities . JsonContext . Default . DictionaryStringObject ,
407
+ McpJsonUtilities . JsonContext . Default . CompleteRequestParams ,
410
408
McpJsonUtilities . JsonContext . Default . CompleteResult ,
411
409
cancellationToken : cancellationToken ) ;
412
410
}
@@ -423,9 +421,9 @@ public static Task SubscribeToResourceAsync(this IMcpClient client, string uri,
423
421
Throw . IfNullOrWhiteSpace ( uri ) ;
424
422
425
423
return client . SendRequestAsync (
426
- RequestMethods . ResourcesSubscribe ,
427
- new Dictionary < string , object > { [ "uri" ] = uri } ,
428
- McpJsonUtilities . JsonContext . Default . DictionaryStringObject ,
424
+ RequestMethods . ResourcesSubscribe ,
425
+ new ( ) { Uri = uri } ,
426
+ McpJsonUtilities . JsonContext . Default . SubscribeRequestParams ,
429
427
McpJsonUtilities . JsonContext . Default . EmptyResult ,
430
428
cancellationToken : cancellationToken ) ;
431
429
}
@@ -443,8 +441,8 @@ public static Task UnsubscribeFromResourceAsync(this IMcpClient client, string u
443
441
444
442
return client . SendRequestAsync (
445
443
RequestMethods . ResourcesUnsubscribe ,
446
- new Dictionary < string , object > { [ "uri" ] = uri } ,
447
- McpJsonUtilities . JsonContext . Default . DictionaryStringObject ,
444
+ new ( ) { Uri = uri } ,
445
+ McpJsonUtilities . JsonContext . Default . UnsubscribeRequestParams ,
448
446
McpJsonUtilities . JsonContext . Default . EmptyResult ,
449
447
cancellationToken : cancellationToken ) ;
450
448
}
@@ -470,12 +468,10 @@ public static Task<CallToolResponse> CallToolAsync(
470
468
serializerOptions ??= McpJsonUtilities . DefaultOptions ;
471
469
serializerOptions . MakeReadOnly ( ) ;
472
470
473
- var parametersTypeInfo = serializerOptions . GetTypeInfo < IReadOnlyDictionary < string , object ? > > ( ) ;
474
-
475
471
return client . SendRequestAsync (
476
- RequestMethods . ToolsCall ,
477
- CreateParametersDictionary ( toolName , arguments ) ,
478
- parametersTypeInfo ,
472
+ RequestMethods . ToolsCall ,
473
+ new ( ) { Name = toolName , Arguments = ToArgumentsDictionary ( arguments , serializerOptions ) } ,
474
+ McpJsonUtilities . JsonContext . Default . CallToolRequestParams ,
479
475
McpJsonUtilities . JsonContext . Default . CallToolResponse ,
480
476
cancellationToken : cancellationToken ) ;
481
477
}
@@ -629,28 +625,28 @@ public static Task SetLoggingLevel(this IMcpClient client, LoggingLevel level, C
629
625
630
626
return client . SendRequestAsync (
631
627
RequestMethods . LoggingSetLevel ,
632
- new Dictionary < string , object > { [ "level" ] = level } ,
633
- McpJsonUtilities . JsonContext . Default . DictionaryStringObject ,
628
+ new ( ) { Level = level } ,
629
+ McpJsonUtilities . JsonContext . Default . SetLevelRequestParams ,
634
630
McpJsonUtilities . JsonContext . Default . EmptyResult ,
635
631
cancellationToken : cancellationToken ) ;
636
632
}
637
633
638
- private static Dictionary < string , object ? > ? CreateCursorDictionary ( string ? cursor ) =>
639
- cursor != null ? new ( ) { [ "cursor" ] = cursor } : null ;
640
-
641
- private static Dictionary < string , object ? > CreateParametersDictionary (
642
- string nameParameter , IReadOnlyDictionary < string , object ? > ? arguments )
634
+ /// <summary>Convers a dictionary with <see cref="object"/> values to a dictionary with <see cref="JsonElement"/> values.</summary>
635
+ private static IReadOnlyDictionary < string , JsonElement > ? ToArgumentsDictionary (
636
+ IReadOnlyDictionary < string , object ? > ? arguments , JsonSerializerOptions options )
643
637
{
644
- Dictionary < string , object ? > parameters = new ( )
645
- {
646
- [ "name" ] = nameParameter
647
- } ;
638
+ var typeInfo = options . GetTypeInfo < object ? > ( ) ;
648
639
649
- if ( arguments != null )
640
+ Dictionary < string , JsonElement > ? result = null ;
641
+ if ( arguments is not null )
650
642
{
651
- parameters [ "arguments" ] = arguments ;
643
+ result = new ( arguments . Count ) ;
644
+ foreach ( var kvp in arguments )
645
+ {
646
+ result . Add ( kvp . Key , kvp . Value is JsonElement je ? je : JsonSerializer . SerializeToElement ( kvp . Value , typeInfo ) ) ;
647
+ }
652
648
}
653
649
654
- return parameters ;
650
+ return result ;
655
651
}
656
652
}
0 commit comments