diff --git a/src/ModelContextProtocol/Client/McpClient.cs b/src/ModelContextProtocol/Client/McpClient.cs
index 1ae358ef4..17eeb0f51 100644
--- a/src/ModelContextProtocol/Client/McpClient.cs
+++ b/src/ModelContextProtocol/Client/McpClient.cs
@@ -6,7 +6,6 @@
using ModelContextProtocol.Shared;
using ModelContextProtocol.Utils.Json;
using Microsoft.Extensions.Logging;
-using Microsoft.Extensions.Logging.Abstractions;
using System.Text.Json;
namespace ModelContextProtocol.Client;
@@ -126,11 +125,11 @@ private async Task InitializeAsync(CancellationToken cancellationToken)
new JsonRpcRequest
{
Method = "initialize",
- Params = new
+ Params = new InitializeRequestParams()
{
- protocolVersion = _options.ProtocolVersion,
- capabilities = _options.Capabilities ?? new ClientCapabilities(),
- clientInfo = _options.ClientInfo
+ ProtocolVersion = _options.ProtocolVersion,
+ Capabilities = _options.Capabilities ?? new ClientCapabilities(),
+ ClientInfo = _options.ClientInfo
}
},
initializationCts.Token).ConfigureAwait(false);
diff --git a/src/ModelContextProtocol/Configuration/McpServerBuilderExtensions.Tools.cs b/src/ModelContextProtocol/Configuration/McpServerBuilderExtensions.Tools.cs
index e11a4ab9c..75d2cb7da 100644
--- a/src/ModelContextProtocol/Configuration/McpServerBuilderExtensions.Tools.cs
+++ b/src/ModelContextProtocol/Configuration/McpServerBuilderExtensions.Tools.cs
@@ -12,7 +12,9 @@ namespace ModelContextProtocol;
///
public static partial class McpServerBuilderExtensions
{
- private const string RequiresUnreferencedCodeMessage = "This method requires dynamic lookup of method metadata and might not work in Native AOT.";
+ private const string WithToolsRequiresUnreferencedCodeMessage =
+ $"The non-generic {nameof(WithTools)} and {nameof(WithToolsFromAssembly)} methods require dynamic lookup of method metadata" +
+ $"and may not work in Native AOT. Use the generic {nameof(WithTools)} method instead.";
/// Adds instances to the service collection backing .
/// The tool type.
@@ -59,7 +61,7 @@ public static partial class McpServerBuilderExtensions
/// types, where the methods are attributed as , and adds an
/// instance for each. For instance methods, an instance will be constructed for each invocation of the tool.
///
- [RequiresUnreferencedCode(RequiresUnreferencedCodeMessage)]
+ [RequiresUnreferencedCode(WithToolsRequiresUnreferencedCodeMessage)]
public static IMcpServerBuilder WithTools(this IMcpServerBuilder builder, params IEnumerable toolTypes)
{
Throw.IfNull(builder);
@@ -95,7 +97,7 @@ public static IMcpServerBuilder WithTools(this IMcpServerBuilder builder, params
/// The builder instance.
/// The assembly to load the types from. Null to get the current assembly
/// is .
- [RequiresUnreferencedCode(RequiresUnreferencedCodeMessage)]
+ [RequiresUnreferencedCode(WithToolsRequiresUnreferencedCodeMessage)]
public static IMcpServerBuilder WithToolsFromAssembly(this IMcpServerBuilder builder, Assembly? toolAssembly = null)
{
Throw.IfNull(builder);
diff --git a/src/ModelContextProtocol/Protocol/Messages/JsonRpcMessage.cs b/src/ModelContextProtocol/Protocol/Messages/JsonRpcRequest.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/Messages/JsonRpcMessage.cs
rename to src/ModelContextProtocol/Protocol/Messages/JsonRpcRequest.cs
diff --git a/src/ModelContextProtocol/Server/McpServer.cs b/src/ModelContextProtocol/Server/McpServer.cs
index 7f425b1fb..50576a41e 100644
--- a/src/ModelContextProtocol/Server/McpServer.cs
+++ b/src/ModelContextProtocol/Server/McpServer.cs
@@ -1,5 +1,4 @@
using Microsoft.Extensions.Logging;
-using Microsoft.Extensions.Logging.Abstractions;
using ModelContextProtocol.Logging;
using ModelContextProtocol.Protocol.Messages;
using ModelContextProtocol.Protocol.Transport;
diff --git a/src/ModelContextProtocol/Utils/Json/McpJsonUtilities.cs b/src/ModelContextProtocol/Utils/Json/McpJsonUtilities.cs
index 71e9eb345..d8513ef85 100644
--- a/src/ModelContextProtocol/Utils/Json/McpJsonUtilities.cs
+++ b/src/ModelContextProtocol/Utils/Json/McpJsonUtilities.cs
@@ -105,21 +105,52 @@ internal static bool IsValidMcpToolSchema(JsonElement element)
UseStringEnumConverter = true,
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
NumberHandling = JsonNumberHandling.AllowReadingFromString)]
+
+ // JSON
[JsonSerializable(typeof(JsonDocument))]
[JsonSerializable(typeof(JsonElement))]
[JsonSerializable(typeof(JsonNode))]
+
+ // JSON-RPC
[JsonSerializable(typeof(IJsonRpcMessage))]
[JsonSerializable(typeof(JsonRpcRequest))]
[JsonSerializable(typeof(JsonRpcNotification))]
[JsonSerializable(typeof(JsonRpcResponse))]
[JsonSerializable(typeof(JsonRpcError))]
- [JsonSerializable(typeof(ServerCapabilities))]
- [JsonSerializable(typeof(ClientCapabilities))]
- [JsonSerializable(typeof(Implementation))]
+
+ // MCP Request Params / Results
+ [JsonSerializable(typeof(CallToolRequestParams))]
+ [JsonSerializable(typeof(CallToolResponse))]
+ [JsonSerializable(typeof(CompleteRequestParams))]
+ [JsonSerializable(typeof(CompleteResult))]
+ [JsonSerializable(typeof(CreateMessageRequestParams))]
[JsonSerializable(typeof(CreateMessageResult))]
- [JsonSerializable(typeof(ListRootsResult))]
+ [JsonSerializable(typeof(EmptyResult))]
+ [JsonSerializable(typeof(GetPromptRequestParams))]
+ [JsonSerializable(typeof(GetPromptResult))]
+ [JsonSerializable(typeof(InitializeRequestParams))]
[JsonSerializable(typeof(InitializeResult))]
- [JsonSerializable(typeof(CallToolResponse))]
+ [JsonSerializable(typeof(ListPromptsRequestParams))]
+ [JsonSerializable(typeof(ListPromptsResult))]
+ [JsonSerializable(typeof(ListResourcesRequestParams))]
+ [JsonSerializable(typeof(ListResourcesResult))]
+ [JsonSerializable(typeof(ListResourceTemplatesRequestParams))]
+ [JsonSerializable(typeof(ListResourceTemplatesResult))]
+ [JsonSerializable(typeof(ListRootsRequestParams))]
+ [JsonSerializable(typeof(ListRootsResult))]
+ [JsonSerializable(typeof(ListToolsRequestParams))]
+ [JsonSerializable(typeof(ListToolsResult))]
+ [JsonSerializable(typeof(LoggingMessageNotificationParams))]
+ [JsonSerializable(typeof(PingResult))]
+ [JsonSerializable(typeof(ReadResourceRequestParams))]
+ [JsonSerializable(typeof(ReadResourceResult))]
+ [JsonSerializable(typeof(ResourceUpdatedNotificationParams))]
+ [JsonSerializable(typeof(SetLevelRequestParams))]
+ [JsonSerializable(typeof(SubscribeRequestParams))]
+ [JsonSerializable(typeof(UnsubscribeFromResourceRequestParams))]
+ [JsonSerializable(typeof(UnsubscribeRequestParams))]
+
+ [ExcludeFromCodeCoverage]
internal sealed partial class JsonContext : JsonSerializerContext;
private static JsonElement ParseJsonElement(ReadOnlySpan utf8Json)
diff --git a/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs b/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs
index 1ce4b36cb..3f066dd5c 100644
--- a/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs
+++ b/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs
@@ -1,5 +1,4 @@
-using Microsoft.Extensions.AI;
-using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection;
using ModelContextProtocol.Protocol.Types;
using ModelContextProtocol.Server;
using Moq;
diff --git a/tests/ModelContextProtocol.Tests/Utils/InMemoryTestSseServer.cs b/tests/ModelContextProtocol.Tests/Utils/InMemoryTestSseServer.cs
index ce1c1beeb..453664b95 100644
--- a/tests/ModelContextProtocol.Tests/Utils/InMemoryTestSseServer.cs
+++ b/tests/ModelContextProtocol.Tests/Utils/InMemoryTestSseServer.cs
@@ -4,6 +4,7 @@
using ModelContextProtocol.Protocol.Messages;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
+using ModelContextProtocol.Protocol.Types;
namespace ModelContextProtocol.Tests.Utils;
@@ -288,19 +289,14 @@ private static async Task HandleInitializationRequest(HttpListenerResponse respo
var jsonRpcResponse = new JsonRpcResponse()
{
Id = jsonRpcRequest.Id,
- Result = new
+ Result = new InitializeResult()
{
- protocolVersion = "2024-11-05",
- capabilities = new
+ ProtocolVersion = "2024-11-05",
+ Capabilities = new(),
+ ServerInfo = new()
{
- experimental = (object?)null,
- roots = (object?)null,
- sampling = (object?)null
- },
- serverInfo = new
- {
- name = "ExampleServer",
- version = "1.0.0"
+ Name = "ExampleServer",
+ Version = "1.0.0"
}
}
};