diff --git a/samples/AspNetCoreSseServer/Program.cs b/samples/AspNetCoreSseServer/Program.cs
index 41f98ee..f24b6a1 100644
--- a/samples/AspNetCoreSseServer/Program.cs
+++ b/samples/AspNetCoreSseServer/Program.cs
@@ -1,7 +1,7 @@
-using TestServerWithHosting.Tools;
+using OpenTelemetry;
using OpenTelemetry.Metrics;
using OpenTelemetry.Trace;
-using OpenTelemetry;
+using TestServerWithHosting.Tools;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMcpServer()
diff --git a/samples/ChatWithTools/Program.cs b/samples/ChatWithTools/Program.cs
index 8c5ae82..ba597ae 100644
--- a/samples/ChatWithTools/Program.cs
+++ b/samples/ChatWithTools/Program.cs
@@ -1,13 +1,11 @@
-using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Transport;
-using Microsoft.Extensions.AI;
-using OpenAI;
-
-using OpenTelemetry;
-using OpenTelemetry.Trace;
+using Microsoft.Extensions.AI;
using Microsoft.Extensions.Logging;
+using ModelContextProtocol.Client;
+using OpenAI;
+using OpenTelemetry;
using OpenTelemetry.Logs;
using OpenTelemetry.Metrics;
+using OpenTelemetry.Trace;
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddHttpClientInstrumentation()
diff --git a/samples/EverythingServer/LoggingUpdateMessageSender.cs b/samples/EverythingServer/LoggingUpdateMessageSender.cs
index efd7114..844aa70 100644
--- a/samples/EverythingServer/LoggingUpdateMessageSender.cs
+++ b/samples/EverythingServer/LoggingUpdateMessageSender.cs
@@ -1,6 +1,6 @@
using Microsoft.Extensions.Hosting;
using ModelContextProtocol;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
namespace EverythingServer;
diff --git a/samples/EverythingServer/Program.cs b/samples/EverythingServer/Program.cs
index 22a290e..5041dc8 100644
--- a/samples/EverythingServer/Program.cs
+++ b/samples/EverythingServer/Program.cs
@@ -7,7 +7,7 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using ModelContextProtocol;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using OpenTelemetry;
using OpenTelemetry.Logs;
diff --git a/samples/EverythingServer/ResourceGenerator.cs b/samples/EverythingServer/ResourceGenerator.cs
index 7e81262..524f350 100644
--- a/samples/EverythingServer/ResourceGenerator.cs
+++ b/samples/EverythingServer/ResourceGenerator.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
namespace EverythingServer;
diff --git a/samples/EverythingServer/Resources/SimpleResourceType.cs b/samples/EverythingServer/Resources/SimpleResourceType.cs
index 045af2f..da18542 100644
--- a/samples/EverythingServer/Resources/SimpleResourceType.cs
+++ b/samples/EverythingServer/Resources/SimpleResourceType.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using System.ComponentModel;
diff --git a/samples/EverythingServer/Tools/AnnotatedMessageTool.cs b/samples/EverythingServer/Tools/AnnotatedMessageTool.cs
index 25027fa..f4c5d25 100644
--- a/samples/EverythingServer/Tools/AnnotatedMessageTool.cs
+++ b/samples/EverythingServer/Tools/AnnotatedMessageTool.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using System.ComponentModel;
diff --git a/samples/EverythingServer/Tools/LongRunningTool.cs b/samples/EverythingServer/Tools/LongRunningTool.cs
index 378cef6..8ba8b04 100644
--- a/samples/EverythingServer/Tools/LongRunningTool.cs
+++ b/samples/EverythingServer/Tools/LongRunningTool.cs
@@ -1,5 +1,5 @@
using ModelContextProtocol;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using System.ComponentModel;
diff --git a/samples/EverythingServer/Tools/SampleLlmTool.cs b/samples/EverythingServer/Tools/SampleLlmTool.cs
index 53ebfff..43e7e7b 100644
--- a/samples/EverythingServer/Tools/SampleLlmTool.cs
+++ b/samples/EverythingServer/Tools/SampleLlmTool.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using System.ComponentModel;
diff --git a/samples/QuickstartClient/Program.cs b/samples/QuickstartClient/Program.cs
index 99a218b..e3ee4fe 100644
--- a/samples/QuickstartClient/Program.cs
+++ b/samples/QuickstartClient/Program.cs
@@ -3,7 +3,6 @@ using Microsoft.Extensions.AI;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Transport;
var builder = Host.CreateApplicationBuilder(args);
diff --git a/samples/TestServerWithHosting/Tools/SampleLlmTool.cs b/samples/TestServerWithHosting/Tools/SampleLlmTool.cs
index 3539b4c..fc405d5 100644
--- a/samples/TestServerWithHosting/Tools/SampleLlmTool.cs
+++ b/samples/TestServerWithHosting/Tools/SampleLlmTool.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using System.ComponentModel;
diff --git a/src/Common/Polyfills/System/Collections/Generic/CollectionExtensions.cs b/src/Common/Polyfills/System/Collections/Generic/CollectionExtensions.cs
index 6a98008..ae4f697 100644
--- a/src/Common/Polyfills/System/Collections/Generic/CollectionExtensions.cs
+++ b/src/Common/Polyfills/System/Collections/Generic/CollectionExtensions.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Utils;
+using ModelContextProtocol;
namespace System.Collections.Generic;
diff --git a/src/Common/Polyfills/System/IO/StreamExtensions.cs b/src/Common/Polyfills/System/IO/StreamExtensions.cs
index c566a97..d58ffaf 100644
--- a/src/Common/Polyfills/System/IO/StreamExtensions.cs
+++ b/src/Common/Polyfills/System/IO/StreamExtensions.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Utils;
+using ModelContextProtocol;
using System.Buffers;
using System.Runtime.InteropServices;
diff --git a/src/Common/Polyfills/System/Net/Http/HttpClientExtensions.cs b/src/Common/Polyfills/System/Net/Http/HttpClientExtensions.cs
index 80a959a..85612b1 100644
--- a/src/Common/Polyfills/System/Net/Http/HttpClientExtensions.cs
+++ b/src/Common/Polyfills/System/Net/Http/HttpClientExtensions.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Utils;
+using ModelContextProtocol;
namespace System.Net.Http;
diff --git a/src/Common/Polyfills/System/Threading/CancellationTokenSourceExtensions.cs b/src/Common/Polyfills/System/Threading/CancellationTokenSourceExtensions.cs
index 3c485f1..95acac9 100644
--- a/src/Common/Polyfills/System/Threading/CancellationTokenSourceExtensions.cs
+++ b/src/Common/Polyfills/System/Threading/CancellationTokenSourceExtensions.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Utils;
+using ModelContextProtocol;
namespace System.Threading.Tasks;
diff --git a/src/Common/Polyfills/System/Threading/Tasks/TaskExtensions.cs b/src/Common/Polyfills/System/Threading/Tasks/TaskExtensions.cs
index 618cd36..bee89a2 100644
--- a/src/Common/Polyfills/System/Threading/Tasks/TaskExtensions.cs
+++ b/src/Common/Polyfills/System/Threading/Tasks/TaskExtensions.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Utils;
+using ModelContextProtocol;
namespace System.Threading.Tasks;
diff --git a/src/Common/Throw.cs b/src/Common/Throw.cs
index f2f6ffd..0c6927e 100644
--- a/src/Common/Throw.cs
+++ b/src/Common/Throw.cs
@@ -1,7 +1,7 @@
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
-namespace ModelContextProtocol.Utils;
+namespace ModelContextProtocol;
/// Provides helper methods for throwing exceptions.
internal static class Throw
diff --git a/src/ModelContextProtocol.AspNetCore/HttpMcpSession.cs b/src/ModelContextProtocol.AspNetCore/HttpMcpSession.cs
index 836dcc5..c34aba6 100644
--- a/src/ModelContextProtocol.AspNetCore/HttpMcpSession.cs
+++ b/src/ModelContextProtocol.AspNetCore/HttpMcpSession.cs
@@ -1,5 +1,5 @@
using ModelContextProtocol.AspNetCore.Stateless;
-using ModelContextProtocol.Protocol.Transport;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using System.Security.Claims;
diff --git a/src/ModelContextProtocol.AspNetCore/IdleTrackingBackgroundService.cs b/src/ModelContextProtocol.AspNetCore/IdleTrackingBackgroundService.cs
index bb50c91..26ffd44 100644
--- a/src/ModelContextProtocol.AspNetCore/IdleTrackingBackgroundService.cs
+++ b/src/ModelContextProtocol.AspNetCore/IdleTrackingBackgroundService.cs
@@ -1,7 +1,7 @@
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
-using ModelContextProtocol.Protocol.Transport;
+using ModelContextProtocol.Server;
namespace ModelContextProtocol.AspNetCore;
diff --git a/src/ModelContextProtocol.AspNetCore/McpEndpointRouteBuilderExtensions.cs b/src/ModelContextProtocol.AspNetCore/McpEndpointRouteBuilderExtensions.cs
index 1e60d2a..a65994c 100644
--- a/src/ModelContextProtocol.AspNetCore/McpEndpointRouteBuilderExtensions.cs
+++ b/src/ModelContextProtocol.AspNetCore/McpEndpointRouteBuilderExtensions.cs
@@ -3,7 +3,7 @@ using Microsoft.AspNetCore.Http.Metadata;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.DependencyInjection;
using ModelContextProtocol.AspNetCore;
-using ModelContextProtocol.Protocol.Messages;
+using ModelContextProtocol.Protocol;
using System.Diagnostics.CodeAnalysis;
namespace Microsoft.AspNetCore.Builder;
diff --git a/src/ModelContextProtocol.AspNetCore/SseHandler.cs b/src/ModelContextProtocol.AspNetCore/SseHandler.cs
index cea6817..251e3bf 100644
--- a/src/ModelContextProtocol.AspNetCore/SseHandler.cs
+++ b/src/ModelContextProtocol.AspNetCore/SseHandler.cs
@@ -2,10 +2,8 @@
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
-using ModelContextProtocol.Utils.Json;
using System.Collections.Concurrent;
using System.Diagnostics;
diff --git a/src/ModelContextProtocol.AspNetCore/Stateless/StatelessSessionId.cs b/src/ModelContextProtocol.AspNetCore/Stateless/StatelessSessionId.cs
index 09eec87..0257f6d 100644
--- a/src/ModelContextProtocol.AspNetCore/Stateless/StatelessSessionId.cs
+++ b/src/ModelContextProtocol.AspNetCore/Stateless/StatelessSessionId.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using System.Text.Json.Serialization;
namespace ModelContextProtocol.AspNetCore.Stateless;
diff --git a/src/ModelContextProtocol.AspNetCore/StreamableHttpHandler.cs b/src/ModelContextProtocol.AspNetCore/StreamableHttpHandler.cs
index 86ea6fb..ec545c9 100644
--- a/src/ModelContextProtocol.AspNetCore/StreamableHttpHandler.cs
+++ b/src/ModelContextProtocol.AspNetCore/StreamableHttpHandler.cs
@@ -6,11 +6,8 @@ using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Microsoft.Net.Http.Headers;
using ModelContextProtocol.AspNetCore.Stateless;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
-using ModelContextProtocol.Utils.Json;
using System.Collections.Concurrent;
using System.Diagnostics;
using System.IO.Pipelines;
diff --git a/src/ModelContextProtocol/AIContentExtensions.cs b/src/ModelContextProtocol/AIContentExtensions.cs
index 703e01b..b6d09a2 100644
--- a/src/ModelContextProtocol/AIContentExtensions.cs
+++ b/src/ModelContextProtocol/AIContentExtensions.cs
@@ -1,8 +1,8 @@
using Microsoft.Extensions.AI;
-using ModelContextProtocol.Protocol.Types;
-using ModelContextProtocol.Utils;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
+#if !NET
using System.Runtime.InteropServices;
+#endif
using System.Text.Json;
namespace ModelContextProtocol;
diff --git a/src/ModelContextProtocol/Protocol/Transport/IClientTransport.cs b/src/ModelContextProtocol/Client/IClientTransport.cs
similarity index 96%
rename from src/ModelContextProtocol/Protocol/Transport/IClientTransport.cs
rename to src/ModelContextProtocol/Client/IClientTransport.cs
index ab608ef..5251789 100644
--- a/src/ModelContextProtocol/Protocol/Transport/IClientTransport.cs
+++ b/src/ModelContextProtocol/Client/IClientTransport.cs
@@ -1,6 +1,6 @@
-using ModelContextProtocol.Client;
+using ModelContextProtocol.Protocol;
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Client;
///
/// Represents a transport mechanism for Model Context Protocol (MCP) client-to-server communication.
diff --git a/src/ModelContextProtocol/Client/IMcpClient.cs b/src/ModelContextProtocol/Client/IMcpClient.cs
index 9f377e4..68a92a2 100644
--- a/src/ModelContextProtocol/Client/IMcpClient.cs
+++ b/src/ModelContextProtocol/Client/IMcpClient.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
namespace ModelContextProtocol.Client;
diff --git a/src/ModelContextProtocol/Client/McpClient.cs b/src/ModelContextProtocol/Client/McpClient.cs
index e6f97e1..957eb73 100644
--- a/src/ModelContextProtocol/Client/McpClient.cs
+++ b/src/ModelContextProtocol/Client/McpClient.cs
@@ -1,9 +1,5 @@
using Microsoft.Extensions.Logging;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Protocol.Types;
-using ModelContextProtocol.Shared;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using System.Text.Json;
namespace ModelContextProtocol.Client;
diff --git a/src/ModelContextProtocol/Client/McpClientExtensions.cs b/src/ModelContextProtocol/Client/McpClientExtensions.cs
index c6c9844..70b382d 100644
--- a/src/ModelContextProtocol/Client/McpClientExtensions.cs
+++ b/src/ModelContextProtocol/Client/McpClientExtensions.cs
@@ -1,10 +1,7 @@
using Microsoft.Extensions.AI;
using Microsoft.Extensions.Logging;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
-using ModelContextProtocol.Utils;
-using ModelContextProtocol.Utils.Json;
using System.Runtime.CompilerServices;
using System.Text.Json;
diff --git a/src/ModelContextProtocol/Client/McpClientFactory.cs b/src/ModelContextProtocol/Client/McpClientFactory.cs
index 55c1343..30b3a94 100644
--- a/src/ModelContextProtocol/Client/McpClientFactory.cs
+++ b/src/ModelContextProtocol/Client/McpClientFactory.cs
@@ -1,5 +1,3 @@
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Utils;
using Microsoft.Extensions.Logging;
namespace ModelContextProtocol.Client;
diff --git a/src/ModelContextProtocol/Client/McpClientOptions.cs b/src/ModelContextProtocol/Client/McpClientOptions.cs
index 0b675df..2a5d2a8 100644
--- a/src/ModelContextProtocol/Client/McpClientOptions.cs
+++ b/src/ModelContextProtocol/Client/McpClientOptions.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
namespace ModelContextProtocol.Client;
diff --git a/src/ModelContextProtocol/Client/McpClientPrompt.cs b/src/ModelContextProtocol/Client/McpClientPrompt.cs
index 062aab8..d8c4e41 100644
--- a/src/ModelContextProtocol/Client/McpClientPrompt.cs
+++ b/src/ModelContextProtocol/Client/McpClientPrompt.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using System.Text.Json;
namespace ModelContextProtocol.Client;
diff --git a/src/ModelContextProtocol/Client/McpClientResource.cs b/src/ModelContextProtocol/Client/McpClientResource.cs
index 8faec5a..1fbb992 100644
--- a/src/ModelContextProtocol/Client/McpClientResource.cs
+++ b/src/ModelContextProtocol/Client/McpClientResource.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
namespace ModelContextProtocol.Client;
diff --git a/src/ModelContextProtocol/Client/McpClientResourceTemplate.cs b/src/ModelContextProtocol/Client/McpClientResourceTemplate.cs
index e764d55..fe02245 100644
--- a/src/ModelContextProtocol/Client/McpClientResourceTemplate.cs
+++ b/src/ModelContextProtocol/Client/McpClientResourceTemplate.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
namespace ModelContextProtocol.Client;
diff --git a/src/ModelContextProtocol/Client/McpClientTool.cs b/src/ModelContextProtocol/Client/McpClientTool.cs
index 2478f8c..11d72a8 100644
--- a/src/ModelContextProtocol/Client/McpClientTool.cs
+++ b/src/ModelContextProtocol/Client/McpClientTool.cs
@@ -1,7 +1,5 @@
using Microsoft.Extensions.AI;
-using ModelContextProtocol.Protocol.Types;
-using ModelContextProtocol.Utils;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using System.Collections.ObjectModel;
using System.Text.Json;
diff --git a/src/ModelContextProtocol/Protocol/Transport/SseClientSessionTransport.cs b/src/ModelContextProtocol/Client/SseClientSessionTransport.cs
similarity index 98%
rename from src/ModelContextProtocol/Protocol/Transport/SseClientSessionTransport.cs
rename to src/ModelContextProtocol/Client/SseClientSessionTransport.cs
index ccdfc75..78997b5 100644
--- a/src/ModelContextProtocol/Protocol/Transport/SseClientSessionTransport.cs
+++ b/src/ModelContextProtocol/Client/SseClientSessionTransport.cs
@@ -1,15 +1,13 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Utils;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using System.Diagnostics;
using System.Net.Http.Headers;
using System.Net.ServerSentEvents;
using System.Text;
using System.Text.Json;
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Client;
///
/// The ServerSideEvents client transport implementation
diff --git a/src/ModelContextProtocol/Protocol/Transport/SseClientTransport.cs b/src/ModelContextProtocol/Client/SseClientTransport.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Transport/SseClientTransport.cs
rename to src/ModelContextProtocol/Client/SseClientTransport.cs
index 1b28655..df1cdac 100644
--- a/src/ModelContextProtocol/Protocol/Transport/SseClientTransport.cs
+++ b/src/ModelContextProtocol/Client/SseClientTransport.cs
@@ -1,7 +1,7 @@
using Microsoft.Extensions.Logging;
-using ModelContextProtocol.Utils;
+using ModelContextProtocol.Protocol;
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Client;
///
/// Provides an over HTTP using the Server-Sent Events (SSE) protocol.
diff --git a/src/ModelContextProtocol/Protocol/Transport/SseClientTransportOptions.cs b/src/ModelContextProtocol/Client/SseClientTransportOptions.cs
similarity index 98%
rename from src/ModelContextProtocol/Protocol/Transport/SseClientTransportOptions.cs
rename to src/ModelContextProtocol/Client/SseClientTransportOptions.cs
index b83204a..f67f6f0 100644
--- a/src/ModelContextProtocol/Protocol/Transport/SseClientTransportOptions.cs
+++ b/src/ModelContextProtocol/Client/SseClientTransportOptions.cs
@@ -1,4 +1,4 @@
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Client;
///
/// Provides options for configuring instances.
diff --git a/src/ModelContextProtocol/Protocol/Transport/StdioClientSessionTransport.cs b/src/ModelContextProtocol/Client/StdioClientSessionTransport.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Transport/StdioClientSessionTransport.cs
rename to src/ModelContextProtocol/Client/StdioClientSessionTransport.cs
index d8ad6af..3c7210e 100644
--- a/src/ModelContextProtocol/Protocol/Transport/StdioClientSessionTransport.cs
+++ b/src/ModelContextProtocol/Client/StdioClientSessionTransport.cs
@@ -1,8 +1,8 @@
using Microsoft.Extensions.Logging;
-using ModelContextProtocol.Protocol.Messages;
+using ModelContextProtocol.Protocol;
using System.Diagnostics;
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Client;
/// Provides the client side of a stdio-based session transport.
internal sealed class StdioClientSessionTransport : StreamClientSessionTransport
diff --git a/src/ModelContextProtocol/Protocol/Transport/StdioClientTransport.cs b/src/ModelContextProtocol/Client/StdioClientTransport.cs
similarity index 99%
rename from src/ModelContextProtocol/Protocol/Transport/StdioClientTransport.cs
rename to src/ModelContextProtocol/Client/StdioClientTransport.cs
index c65ba5e..5a5d10f 100644
--- a/src/ModelContextProtocol/Protocol/Transport/StdioClientTransport.cs
+++ b/src/ModelContextProtocol/Client/StdioClientTransport.cs
@@ -1,6 +1,6 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
-using ModelContextProtocol.Utils;
+using ModelContextProtocol.Protocol;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;
@@ -8,7 +8,7 @@ using System.Text.RegularExpressions;
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Client;
///
/// Provides a implemented via "stdio" (standard input/output).
diff --git a/src/ModelContextProtocol/Protocol/Transport/StdioClientTransportOptions.cs b/src/ModelContextProtocol/Client/StdioClientTransportOptions.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Transport/StdioClientTransportOptions.cs
rename to src/ModelContextProtocol/Client/StdioClientTransportOptions.cs
index ce51beb..11a8285 100644
--- a/src/ModelContextProtocol/Protocol/Transport/StdioClientTransportOptions.cs
+++ b/src/ModelContextProtocol/Client/StdioClientTransportOptions.cs
@@ -1,4 +1,4 @@
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Client;
///
/// Provides options for configuring instances.
diff --git a/src/ModelContextProtocol/Protocol/Transport/StreamClientSessionTransport.cs b/src/ModelContextProtocol/Client/StreamClientSessionTransport.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Transport/StreamClientSessionTransport.cs
rename to src/ModelContextProtocol/Client/StreamClientSessionTransport.cs
index 07b78c7..3330f4d 100644
--- a/src/ModelContextProtocol/Protocol/Transport/StreamClientSessionTransport.cs
+++ b/src/ModelContextProtocol/Client/StreamClientSessionTransport.cs
@@ -1,10 +1,8 @@
using Microsoft.Extensions.Logging;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Utils;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using System.Text.Json;
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Client;
/// Provides the client side of a stream-based session transport.
internal class StreamClientSessionTransport : TransportBase
diff --git a/src/ModelContextProtocol/Protocol/Transport/StreamClientTransport.cs b/src/ModelContextProtocol/Client/StreamClientTransport.cs
similarity index 95%
rename from src/ModelContextProtocol/Protocol/Transport/StreamClientTransport.cs
rename to src/ModelContextProtocol/Client/StreamClientTransport.cs
index bd6ab12..30607e5 100644
--- a/src/ModelContextProtocol/Protocol/Transport/StreamClientTransport.cs
+++ b/src/ModelContextProtocol/Client/StreamClientTransport.cs
@@ -1,7 +1,7 @@
using Microsoft.Extensions.Logging;
-using ModelContextProtocol.Utils;
+using ModelContextProtocol.Client;
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Protocol;
///
/// Provides an implemented around a pair of input/output streams.
diff --git a/src/ModelContextProtocol/Protocol/Transport/StreamableHttpClientSessionTransport.cs b/src/ModelContextProtocol/Client/StreamableHttpClientSessionTransport.cs
similarity index 98%
rename from src/ModelContextProtocol/Protocol/Transport/StreamableHttpClientSessionTransport.cs
rename to src/ModelContextProtocol/Client/StreamableHttpClientSessionTransport.cs
index 080e90e..f903490 100644
--- a/src/ModelContextProtocol/Protocol/Transport/StreamableHttpClientSessionTransport.cs
+++ b/src/ModelContextProtocol/Client/StreamableHttpClientSessionTransport.cs
@@ -1,19 +1,16 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Utils;
-using ModelContextProtocol.Utils.Json;
using System.Net.Http.Headers;
using System.Net.ServerSentEvents;
using System.Text.Json;
-
+using ModelContextProtocol.Protocol;
#if NET
using System.Net.Http.Json;
#else
using System.Text;
#endif
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Client;
///
/// The Streamable HTTP client transport implementation
diff --git a/src/ModelContextProtocol/Configuration/DefaultMcpServerBuilder.cs b/src/ModelContextProtocol/Configuration/DefaultMcpServerBuilder.cs
index 7c235ca..d590091 100644
--- a/src/ModelContextProtocol/Configuration/DefaultMcpServerBuilder.cs
+++ b/src/ModelContextProtocol/Configuration/DefaultMcpServerBuilder.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Utils;
+using ModelContextProtocol;
namespace Microsoft.Extensions.DependencyInjection;
diff --git a/src/ModelContextProtocol/Configuration/McpServerBuilderExtensions.cs b/src/ModelContextProtocol/Configuration/McpServerBuilderExtensions.cs
index 3e8ca58..95da6b7 100644
--- a/src/ModelContextProtocol/Configuration/McpServerBuilderExtensions.cs
+++ b/src/ModelContextProtocol/Configuration/McpServerBuilderExtensions.cs
@@ -1,11 +1,9 @@
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
-using ModelContextProtocol.Hosting;
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
-using ModelContextProtocol.Utils;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
using System.Text.Json;
diff --git a/src/ModelContextProtocol/Configuration/McpServerOptionsSetup.cs b/src/ModelContextProtocol/Configuration/McpServerOptionsSetup.cs
index dc74010..7a85786 100644
--- a/src/ModelContextProtocol/Configuration/McpServerOptionsSetup.cs
+++ b/src/ModelContextProtocol/Configuration/McpServerOptionsSetup.cs
@@ -1,6 +1,6 @@
-using ModelContextProtocol.Server;
using Microsoft.Extensions.Options;
-using ModelContextProtocol.Utils;
+using ModelContextProtocol;
+using ModelContextProtocol.Server;
namespace Microsoft.Extensions.DependencyInjection;
diff --git a/src/ModelContextProtocol/Configuration/McpServerServiceCollectionExtensions.cs b/src/ModelContextProtocol/Configuration/McpServerServiceCollectionExtensions.cs
index f5c9d18..faf4a39 100644
--- a/src/ModelContextProtocol/Configuration/McpServerServiceCollectionExtensions.cs
+++ b/src/ModelContextProtocol/Configuration/McpServerServiceCollectionExtensions.cs
@@ -1,6 +1,6 @@
-using ModelContextProtocol.Server;
-using Microsoft.Extensions.Options;
using Microsoft.Extensions.DependencyInjection.Extensions;
+using Microsoft.Extensions.Options;
+using ModelContextProtocol.Server;
namespace Microsoft.Extensions.DependencyInjection;
diff --git a/src/ModelContextProtocol/CustomizableJsonStringEnumConverter.cs b/src/ModelContextProtocol/CustomizableJsonStringEnumConverter.cs
new file mode 100644
index 0000000..87bb430
--- /dev/null
+++ b/src/ModelContextProtocol/CustomizableJsonStringEnumConverter.cs
@@ -0,0 +1,100 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.ComponentModel;
+using System.Diagnostics.CodeAnalysis;
+#if !NET9_0_OR_GREATER
+using System.Reflection;
+using System.Text.Json;
+#endif
+using System.Text.Json.Serialization;
+#if !NET9_0_OR_GREATER
+using ModelContextProtocol;
+#endif
+
+// NOTE:
+// This is a workaround for lack of System.Text.Json's JsonStringEnumConverter
+// 9.x support for JsonStringEnumMemberNameAttribute. Once all builds use the System.Text.Json 9.x
+// version, this whole file can be removed. Note that the type is public so that external source
+// generators can use it, so removing it is a potential breaking change.
+
+namespace ModelContextProtocol
+{
+ ///
+ /// A JSON converter for enums that allows customizing the serialized string value of enum members
+ /// using the .
+ ///
+ /// The enum type to convert.
+ ///
+ /// This is a temporary workaround for lack of System.Text.Json's JsonStringEnumConverter<T>
+ /// 9.x support for custom enum member naming. It will be replaced by the built-in functionality
+ /// once .NET 9 is fully adopted.
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public sealed class CustomizableJsonStringEnumConverter<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] TEnum> :
+ JsonStringEnumConverter where TEnum : struct, Enum
+ {
+#if !NET9_0_OR_GREATER
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ /// The converter automatically detects any enum members decorated with
+ /// and uses those values during serialization and deserialization.
+ ///
+ public CustomizableJsonStringEnumConverter() :
+ base(namingPolicy: ResolveNamingPolicy())
+ {
+ }
+
+ private static JsonNamingPolicy? ResolveNamingPolicy()
+ {
+ var map = typeof(TEnum).GetFields(BindingFlags.Public | BindingFlags.Static)
+ .Select(f => (f.Name, AttributeName: f.GetCustomAttribute()?.Name))
+ .Where(pair => pair.AttributeName != null)
+ .ToDictionary(pair => pair.Name, pair => pair.AttributeName);
+
+ return map.Count > 0 ? new EnumMemberNamingPolicy(map!) : null;
+ }
+
+ private sealed class EnumMemberNamingPolicy(Dictionary map) : JsonNamingPolicy
+ {
+ public override string ConvertName(string name) =>
+ map.TryGetValue(name, out string? newName) ?
+ newName :
+ name;
+ }
+#endif
+ }
+}
+
+#if !NET9_0_OR_GREATER
+namespace System.Text.Json.Serialization
+{
+ ///
+ /// Determines the custom string value that should be used when serializing an enum member using JSON.
+ ///
+ ///
+ /// This attribute is a temporary workaround for lack of System.Text.Json's support for custom enum member naming
+ /// in versions prior to .NET 9. It works together with
+ /// to provide customized string representations of enum values during JSON serialization and deserialization.
+ ///
+ [AttributeUsage(AttributeTargets.Field, AllowMultiple = false)]
+ internal sealed class JsonStringEnumMemberNameAttribute : Attribute
+ {
+ ///
+ /// Creates new attribute instance with a specified enum member name.
+ ///
+ /// The name to apply to the current enum member when serialized to JSON.
+ public JsonStringEnumMemberNameAttribute(string name)
+ {
+ Name = name;
+ }
+
+ ///
+ /// Gets the custom JSON name of the enum member.
+ ///
+ public string Name { get; }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/src/ModelContextProtocol/Diagnostics.cs b/src/ModelContextProtocol/Diagnostics.cs
index d4d0ef5..9ee2d06 100644
--- a/src/ModelContextProtocol/Diagnostics.cs
+++ b/src/ModelContextProtocol/Diagnostics.cs
@@ -1,8 +1,8 @@
-using System.Diagnostics;
+using ModelContextProtocol.Protocol;
+using System.Diagnostics;
using System.Diagnostics.Metrics;
using System.Text.Json;
using System.Text.Json.Nodes;
-using ModelContextProtocol.Protocol.Messages;
namespace ModelContextProtocol;
diff --git a/src/ModelContextProtocol/IMcpEndpoint.cs b/src/ModelContextProtocol/IMcpEndpoint.cs
index f643136..a38b8c9 100644
--- a/src/ModelContextProtocol/IMcpEndpoint.cs
+++ b/src/ModelContextProtocol/IMcpEndpoint.cs
@@ -1,5 +1,5 @@
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Messages;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
namespace ModelContextProtocol;
diff --git a/src/ModelContextProtocol/Shared/McpEndpoint.cs b/src/ModelContextProtocol/McpEndpoint.cs
similarity index 96%
rename from src/ModelContextProtocol/Shared/McpEndpoint.cs
rename to src/ModelContextProtocol/McpEndpoint.cs
index 0e709d0..0d0ccbb 100644
--- a/src/ModelContextProtocol/Shared/McpEndpoint.cs
+++ b/src/ModelContextProtocol/McpEndpoint.cs
@@ -1,13 +1,11 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
-using ModelContextProtocol.Utils;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
-namespace ModelContextProtocol.Shared;
+namespace ModelContextProtocol;
///
/// Base class for an MCP JSON-RPC endpoint. This covers both MCP clients and servers.
diff --git a/src/ModelContextProtocol/McpEndpointExtensions.cs b/src/ModelContextProtocol/McpEndpointExtensions.cs
index d501d34..300433e 100644
--- a/src/ModelContextProtocol/McpEndpointExtensions.cs
+++ b/src/ModelContextProtocol/McpEndpointExtensions.cs
@@ -1,8 +1,6 @@
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Messages;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
-using ModelContextProtocol.Utils;
-using ModelContextProtocol.Utils.Json;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Text.Json.Serialization.Metadata;
diff --git a/src/ModelContextProtocol/Utils/Json/McpJsonUtilities.cs b/src/ModelContextProtocol/McpJsonUtilities.cs
similarity index 98%
rename from src/ModelContextProtocol/Utils/Json/McpJsonUtilities.cs
rename to src/ModelContextProtocol/McpJsonUtilities.cs
index 625b558..ca97484 100644
--- a/src/ModelContextProtocol/Utils/Json/McpJsonUtilities.cs
+++ b/src/ModelContextProtocol/McpJsonUtilities.cs
@@ -1,12 +1,11 @@
using Microsoft.Extensions.AI;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.Json.Serialization.Metadata;
-namespace ModelContextProtocol.Utils.Json;
+namespace ModelContextProtocol;
/// Provides a collection of utility methods for working with JSON data in the context of MCP.
public static partial class McpJsonUtilities
diff --git a/src/ModelContextProtocol/Shared/McpSession.cs b/src/ModelContextProtocol/McpSession.cs
similarity index 99%
rename from src/ModelContextProtocol/Shared/McpSession.cs
rename to src/ModelContextProtocol/McpSession.cs
index ab93efd..248538c 100644
--- a/src/ModelContextProtocol/Shared/McpSession.cs
+++ b/src/ModelContextProtocol/McpSession.cs
@@ -1,9 +1,8 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Utils;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Client;
+using ModelContextProtocol.Protocol;
+using ModelContextProtocol.Server;
using System.Collections.Concurrent;
using System.Diagnostics;
using System.Diagnostics.Metrics;
@@ -13,7 +12,7 @@ using System.Text.Json.Nodes;
using System.Threading.Channels;
#endif
-namespace ModelContextProtocol.Shared;
+namespace ModelContextProtocol;
///
/// Class for managing an MCP JSON-RPC session. This covers both MCP clients and servers.
diff --git a/src/ModelContextProtocol/ModelContextProtocol.csproj b/src/ModelContextProtocol/ModelContextProtocol.csproj
index c42d765..cdb48e1 100644
--- a/src/ModelContextProtocol/ModelContextProtocol.csproj
+++ b/src/ModelContextProtocol/ModelContextProtocol.csproj
@@ -15,7 +15,7 @@
-
+
diff --git a/src/ModelContextProtocol/Shared/NotificationHandlers.cs b/src/ModelContextProtocol/NotificationHandlers.cs
similarity index 99%
rename from src/ModelContextProtocol/Shared/NotificationHandlers.cs
rename to src/ModelContextProtocol/NotificationHandlers.cs
index 8e315ce..4b95207 100644
--- a/src/ModelContextProtocol/Shared/NotificationHandlers.cs
+++ b/src/ModelContextProtocol/NotificationHandlers.cs
@@ -1,7 +1,7 @@
-using ModelContextProtocol.Protocol.Messages;
+using ModelContextProtocol.Protocol;
using System.Diagnostics;
-namespace ModelContextProtocol.Shared;
+namespace ModelContextProtocol;
/// Provides thread-safe storage for notification handlers.
internal sealed class NotificationHandlers
diff --git a/src/ModelContextProtocol/Utils/ProcessHelper.cs b/src/ModelContextProtocol/ProcessHelper.cs
similarity index 99%
rename from src/ModelContextProtocol/Utils/ProcessHelper.cs
rename to src/ModelContextProtocol/ProcessHelper.cs
index 151292b..7bfe99a 100644
--- a/src/ModelContextProtocol/Utils/ProcessHelper.cs
+++ b/src/ModelContextProtocol/ProcessHelper.cs
@@ -1,7 +1,7 @@
using System.Diagnostics;
using System.Runtime.InteropServices;
-namespace ModelContextProtocol.Utils;
+namespace ModelContextProtocol;
///
/// Helper class for working with processes.
diff --git a/src/ModelContextProtocol/Protocol/Types/Annotations.cs b/src/ModelContextProtocol/Protocol/Annotations.cs
similarity index 95%
rename from src/ModelContextProtocol/Protocol/Types/Annotations.cs
rename to src/ModelContextProtocol/Protocol/Annotations.cs
index 646e871..1e8874e 100644
--- a/src/ModelContextProtocol/Protocol/Types/Annotations.cs
+++ b/src/ModelContextProtocol/Protocol/Annotations.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents annotations that can be attached to content, resources, and resource templates.
diff --git a/src/ModelContextProtocol/Protocol/Types/Argument.cs b/src/ModelContextProtocol/Protocol/Argument.cs
similarity index 95%
rename from src/ModelContextProtocol/Protocol/Types/Argument.cs
rename to src/ModelContextProtocol/Protocol/Argument.cs
index 4a7b2ba..ad003f4 100644
--- a/src/ModelContextProtocol/Protocol/Types/Argument.cs
+++ b/src/ModelContextProtocol/Protocol/Argument.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents an argument used in completion requests to provide context for auto-completion functionality.
diff --git a/src/ModelContextProtocol/Protocol/Types/BlobResourceContents.cs b/src/ModelContextProtocol/Protocol/BlobResourceContents.cs
similarity index 96%
rename from src/ModelContextProtocol/Protocol/Types/BlobResourceContents.cs
rename to src/ModelContextProtocol/Protocol/BlobResourceContents.cs
index ce0b91c..a15e0bd 100644
--- a/src/ModelContextProtocol/Protocol/Types/BlobResourceContents.cs
+++ b/src/ModelContextProtocol/Protocol/BlobResourceContents.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the binary contents of a resource in the Model Context Protocol.
diff --git a/src/ModelContextProtocol/Protocol/Types/CallToolRequestParams.cs b/src/ModelContextProtocol/Protocol/CallToolRequestParams.cs
similarity index 92%
rename from src/ModelContextProtocol/Protocol/Types/CallToolRequestParams.cs
rename to src/ModelContextProtocol/Protocol/CallToolRequestParams.cs
index ee6778e..81e8d4f 100644
--- a/src/ModelContextProtocol/Protocol/Types/CallToolRequestParams.cs
+++ b/src/ModelContextProtocol/Protocol/CallToolRequestParams.cs
@@ -1,8 +1,7 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the parameters used with a request from a client to invoke a tool provided by the server.
diff --git a/src/ModelContextProtocol/Protocol/Types/CallToolResponse.cs b/src/ModelContextProtocol/Protocol/CallToolResponse.cs
similarity index 94%
rename from src/ModelContextProtocol/Protocol/Types/CallToolResponse.cs
rename to src/ModelContextProtocol/Protocol/CallToolResponse.cs
index 265194c..0e83ef1 100644
--- a/src/ModelContextProtocol/Protocol/Types/CallToolResponse.cs
+++ b/src/ModelContextProtocol/Protocol/CallToolResponse.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the result of a request from a client to invoke a tool provided by the server.
diff --git a/src/ModelContextProtocol/Protocol/Messages/CancelledNotification.cs b/src/ModelContextProtocol/Protocol/CancelledNotification.cs
similarity index 95%
rename from src/ModelContextProtocol/Protocol/Messages/CancelledNotification.cs
rename to src/ModelContextProtocol/Protocol/CancelledNotification.cs
index 532c5fa..546e03a 100644
--- a/src/ModelContextProtocol/Protocol/Messages/CancelledNotification.cs
+++ b/src/ModelContextProtocol/Protocol/CancelledNotification.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Messages;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a notification indicating that a request has been cancelled by the client,
diff --git a/src/ModelContextProtocol/Protocol/Types/ClientCapabilities.cs b/src/ModelContextProtocol/Protocol/ClientCapabilities.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Types/ClientCapabilities.cs
rename to src/ModelContextProtocol/Protocol/ClientCapabilities.cs
index 3579232..050d133 100644
--- a/src/ModelContextProtocol/Protocol/Types/ClientCapabilities.cs
+++ b/src/ModelContextProtocol/Protocol/ClientCapabilities.cs
@@ -1,8 +1,7 @@
-using ModelContextProtocol.Protocol.Messages;
using ModelContextProtocol.Server;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the capabilities that a client may support.
diff --git a/src/ModelContextProtocol/Protocol/Types/CompleteRequestParams.cs b/src/ModelContextProtocol/Protocol/CompleteRequestParams.cs
similarity index 93%
rename from src/ModelContextProtocol/Protocol/Types/CompleteRequestParams.cs
rename to src/ModelContextProtocol/Protocol/CompleteRequestParams.cs
index 7ca991d..a64d2a5 100644
--- a/src/ModelContextProtocol/Protocol/Types/CompleteRequestParams.cs
+++ b/src/ModelContextProtocol/Protocol/CompleteRequestParams.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the parameters used with a request from
diff --git a/src/ModelContextProtocol/Protocol/Types/CompleteResult.cs b/src/ModelContextProtocol/Protocol/CompleteResult.cs
similarity index 94%
rename from src/ModelContextProtocol/Protocol/Types/CompleteResult.cs
rename to src/ModelContextProtocol/Protocol/CompleteResult.cs
index 4ac6f14..dd28de5 100644
--- a/src/ModelContextProtocol/Protocol/Types/CompleteResult.cs
+++ b/src/ModelContextProtocol/Protocol/CompleteResult.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the server's response to a request,
diff --git a/src/ModelContextProtocol/Protocol/Types/Completion.cs b/src/ModelContextProtocol/Protocol/Completion.cs
similarity index 93%
rename from src/ModelContextProtocol/Protocol/Types/Completion.cs
rename to src/ModelContextProtocol/Protocol/Completion.cs
index ecf927d..029dac3 100644
--- a/src/ModelContextProtocol/Protocol/Types/Completion.cs
+++ b/src/ModelContextProtocol/Protocol/Completion.cs
@@ -1,8 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
-
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a completion object in the server's response to a request.
diff --git a/src/ModelContextProtocol/Protocol/Types/CompletionsCapability.cs b/src/ModelContextProtocol/Protocol/CompletionsCapability.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Types/CompletionsCapability.cs
rename to src/ModelContextProtocol/Protocol/CompletionsCapability.cs
index 70dc460..4ba8a4c 100644
--- a/src/ModelContextProtocol/Protocol/Types/CompletionsCapability.cs
+++ b/src/ModelContextProtocol/Protocol/CompletionsCapability.cs
@@ -1,7 +1,7 @@
using ModelContextProtocol.Server;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the completions capability for providing auto-completion suggestions
diff --git a/src/ModelContextProtocol/Protocol/Types/Content.cs b/src/ModelContextProtocol/Protocol/Content.cs
similarity index 98%
rename from src/ModelContextProtocol/Protocol/Types/Content.cs
rename to src/ModelContextProtocol/Protocol/Content.cs
index 0ca1fbf..d0cdaaa 100644
--- a/src/ModelContextProtocol/Protocol/Types/Content.cs
+++ b/src/ModelContextProtocol/Protocol/Content.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents content within the Model Context Protocol (MCP) that can contain text, binary data, or references to resources.
diff --git a/src/ModelContextProtocol/Protocol/Types/ContextInclusion.cs b/src/ModelContextProtocol/Protocol/ContextInclusion.cs
similarity index 87%
rename from src/ModelContextProtocol/Protocol/Types/ContextInclusion.cs
rename to src/ModelContextProtocol/Protocol/ContextInclusion.cs
index e10791e..f6ec267 100644
--- a/src/ModelContextProtocol/Protocol/Types/ContextInclusion.cs
+++ b/src/ModelContextProtocol/Protocol/ContextInclusion.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Utils.Json;
-using System.Text.Json.Serialization;
+using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Specifies the context inclusion options for a request in the Model Context Protocol (MCP).
diff --git a/src/ModelContextProtocol/Protocol/Types/CreateMessageRequestParams.cs b/src/ModelContextProtocol/Protocol/CreateMessageRequestParams.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Types/CreateMessageRequestParams.cs
rename to src/ModelContextProtocol/Protocol/CreateMessageRequestParams.cs
index bb7cd8a..a2418e1 100644
--- a/src/ModelContextProtocol/Protocol/Types/CreateMessageRequestParams.cs
+++ b/src/ModelContextProtocol/Protocol/CreateMessageRequestParams.cs
@@ -1,8 +1,7 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the parameters used with a
diff --git a/src/ModelContextProtocol/Protocol/Types/CreateMessageResult.cs b/src/ModelContextProtocol/Protocol/CreateMessageResult.cs
similarity index 95%
rename from src/ModelContextProtocol/Protocol/Types/CreateMessageResult.cs
rename to src/ModelContextProtocol/Protocol/CreateMessageResult.cs
index 4ae6890..190c1dd 100644
--- a/src/ModelContextProtocol/Protocol/Types/CreateMessageResult.cs
+++ b/src/ModelContextProtocol/Protocol/CreateMessageResult.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a client's response to a from the server.
diff --git a/src/ModelContextProtocol/Protocol/Types/EmptyResult.cs b/src/ModelContextProtocol/Protocol/EmptyResult.cs
similarity index 87%
rename from src/ModelContextProtocol/Protocol/Types/EmptyResult.cs
rename to src/ModelContextProtocol/Protocol/EmptyResult.cs
index 402472b..2c9bfc0 100644
--- a/src/ModelContextProtocol/Protocol/Types/EmptyResult.cs
+++ b/src/ModelContextProtocol/Protocol/EmptyResult.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents an empty result object for operations that need to indicate successful completion
diff --git a/src/ModelContextProtocol/Protocol/Types/GetPromptRequestParams.cs b/src/ModelContextProtocol/Protocol/GetPromptRequestParams.cs
similarity index 93%
rename from src/ModelContextProtocol/Protocol/Types/GetPromptRequestParams.cs
rename to src/ModelContextProtocol/Protocol/GetPromptRequestParams.cs
index f1cb53a..52d8277 100644
--- a/src/ModelContextProtocol/Protocol/Types/GetPromptRequestParams.cs
+++ b/src/ModelContextProtocol/Protocol/GetPromptRequestParams.cs
@@ -1,8 +1,7 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the parameters used with a request from a client to get a prompt provided by a server.
diff --git a/src/ModelContextProtocol/Protocol/Types/GetPromptResult.cs b/src/ModelContextProtocol/Protocol/GetPromptResult.cs
similarity index 94%
rename from src/ModelContextProtocol/Protocol/Types/GetPromptResult.cs
rename to src/ModelContextProtocol/Protocol/GetPromptResult.cs
index 3a80290..bf6f75a 100644
--- a/src/ModelContextProtocol/Protocol/Types/GetPromptResult.cs
+++ b/src/ModelContextProtocol/Protocol/GetPromptResult.cs
@@ -1,8 +1,7 @@
-using ModelContextProtocol.Protocol.Messages;
using Microsoft.Extensions.AI;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a server's response to a request from the client.
diff --git a/src/ModelContextProtocol/Protocol/Transport/ITransport.cs b/src/ModelContextProtocol/Protocol/ITransport.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Transport/ITransport.cs
rename to src/ModelContextProtocol/Protocol/ITransport.cs
index b8cb7e3..4fc36e9 100644
--- a/src/ModelContextProtocol/Protocol/Transport/ITransport.cs
+++ b/src/ModelContextProtocol/Protocol/ITransport.cs
@@ -1,9 +1,8 @@
-using System.Threading.Channels;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Messages;
using ModelContextProtocol.Server;
+using System.Threading.Channels;
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a transport mechanism for MCP (Model Context Protocol) communication between clients and servers.
diff --git a/src/ModelContextProtocol/Protocol/Types/Implementation.cs b/src/ModelContextProtocol/Protocol/Implementation.cs
similarity index 96%
rename from src/ModelContextProtocol/Protocol/Types/Implementation.cs
rename to src/ModelContextProtocol/Protocol/Implementation.cs
index b1252a4..7ebec95 100644
--- a/src/ModelContextProtocol/Protocol/Types/Implementation.cs
+++ b/src/ModelContextProtocol/Protocol/Implementation.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Provides the name and version of an MCP implementation.
diff --git a/src/ModelContextProtocol/Protocol/Types/InitializeRequestParams.cs b/src/ModelContextProtocol/Protocol/InitializeRequestParams.cs
similarity index 96%
rename from src/ModelContextProtocol/Protocol/Types/InitializeRequestParams.cs
rename to src/ModelContextProtocol/Protocol/InitializeRequestParams.cs
index 436a1f4..5af4d07 100644
--- a/src/ModelContextProtocol/Protocol/Types/InitializeRequestParams.cs
+++ b/src/ModelContextProtocol/Protocol/InitializeRequestParams.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the parameters used with a request sent by a client to a server during the protocol handshake.
diff --git a/src/ModelContextProtocol/Protocol/Types/InitializeResult.cs b/src/ModelContextProtocol/Protocol/InitializeResult.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Types/InitializeResult.cs
rename to src/ModelContextProtocol/Protocol/InitializeResult.cs
index 14204c9..8427dee 100644
--- a/src/ModelContextProtocol/Protocol/Types/InitializeResult.cs
+++ b/src/ModelContextProtocol/Protocol/InitializeResult.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the result of a request sent to the server during connection establishment.
diff --git a/src/ModelContextProtocol/Protocol/Messages/JsonRpcError.cs b/src/ModelContextProtocol/Protocol/JsonRpcError.cs
similarity index 95%
rename from src/ModelContextProtocol/Protocol/Messages/JsonRpcError.cs
rename to src/ModelContextProtocol/Protocol/JsonRpcError.cs
index 1109e64..2229634 100644
--- a/src/ModelContextProtocol/Protocol/Messages/JsonRpcError.cs
+++ b/src/ModelContextProtocol/Protocol/JsonRpcError.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Messages;
+namespace ModelContextProtocol.Protocol;
///
/// Represents an error response message in the JSON-RPC protocol.
diff --git a/src/ModelContextProtocol/Protocol/Messages/JsonRpcErrorDetail.cs b/src/ModelContextProtocol/Protocol/JsonRpcErrorDetail.cs
similarity index 96%
rename from src/ModelContextProtocol/Protocol/Messages/JsonRpcErrorDetail.cs
rename to src/ModelContextProtocol/Protocol/JsonRpcErrorDetail.cs
index d9ac73d..e2ff0e6 100644
--- a/src/ModelContextProtocol/Protocol/Messages/JsonRpcErrorDetail.cs
+++ b/src/ModelContextProtocol/Protocol/JsonRpcErrorDetail.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Messages;
+namespace ModelContextProtocol.Protocol;
///
/// Represents detailed error information for JSON-RPC error responses.
diff --git a/src/ModelContextProtocol/Protocol/JsonRpcMessage.cs b/src/ModelContextProtocol/Protocol/JsonRpcMessage.cs
new file mode 100644
index 0000000..fde4150
--- /dev/null
+++ b/src/ModelContextProtocol/Protocol/JsonRpcMessage.cs
@@ -0,0 +1,139 @@
+using System.ComponentModel;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace ModelContextProtocol.Protocol;
+
+///
+/// Represents any JSON-RPC message used in the Model Context Protocol (MCP).
+///
+///
+/// This interface serves as the foundation for all message types in the JSON-RPC 2.0 protocol
+/// used by MCP, including requests, responses, notifications, and errors. JSON-RPC is a stateless,
+/// lightweight remote procedure call (RPC) protocol that uses JSON as its data format.
+///
+[JsonConverter(typeof(Converter))]
+public abstract class JsonRpcMessage
+{
+ ///
+ /// Gets the JSON-RPC protocol version used.
+ ///
+ ///
+ [JsonPropertyName("jsonrpc")]
+ public string JsonRpc { get; init; } = "2.0";
+
+ ///
+ /// Gets or sets the transport the was received on or should be sent over.
+ ///
+ ///
+ /// This is used to support the Streamable HTTP transport where the specification states that the server
+ /// SHOULD include JSON-RPC responses in the HTTP response body for the POST request containing
+ /// the corresponding JSON-RPC request. It may be for other transports.
+ ///
+ [JsonIgnore]
+ public ITransport? RelatedTransport { get; set; }
+
+ ///
+ /// Provides a for messages,
+ /// handling polymorphic deserialization of different message types.
+ ///
+ ///
+ ///
+ /// This converter is responsible for correctly deserializing JSON-RPC messages into their appropriate
+ /// concrete types based on the message structure. It analyzes the JSON payload and determines if it
+ /// represents a request, notification, successful response, or error response.
+ ///
+ ///
+ /// The type determination rules follow the JSON-RPC 2.0 specification:
+ ///
+ /// - Messages with "method" and "id" properties are deserialized as .
+ /// - Messages with "method" but no "id" property are deserialized as .
+ /// - Messages with "id" and "result" properties are deserialized as .
+ /// - Messages with "id" and "error" properties are deserialized as .
+ ///
+ ///
+ ///
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public sealed class Converter : JsonConverter
+ {
+ ///
+ public override JsonRpcMessage? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ if (reader.TokenType != JsonTokenType.StartObject)
+ {
+ throw new JsonException("Expected StartObject token");
+ }
+
+ using var doc = JsonDocument.ParseValue(ref reader);
+ var root = doc.RootElement;
+
+ // All JSON-RPC messages must have a jsonrpc property with value "2.0"
+ if (!root.TryGetProperty("jsonrpc", out var versionProperty) ||
+ versionProperty.GetString() != "2.0")
+ {
+ throw new JsonException("Invalid or missing jsonrpc version");
+ }
+
+ // Determine the message type based on the presence of id, method, and error properties
+ bool hasId = root.TryGetProperty("id", out _);
+ bool hasMethod = root.TryGetProperty("method", out _);
+ bool hasError = root.TryGetProperty("error", out _);
+
+ var rawText = root.GetRawText();
+
+ // Messages with an id but no method are responses
+ if (hasId && !hasMethod)
+ {
+ // Messages with an error property are error responses
+ if (hasError)
+ {
+ return JsonSerializer.Deserialize(rawText, options.GetTypeInfo());
+ }
+
+ // Messages with a result property are success responses
+ if (root.TryGetProperty("result", out _))
+ {
+ return JsonSerializer.Deserialize(rawText, options.GetTypeInfo());
+ }
+
+ throw new JsonException("Response must have either result or error");
+ }
+
+ // Messages with a method but no id are notifications
+ if (hasMethod && !hasId)
+ {
+ return JsonSerializer.Deserialize(rawText, options.GetTypeInfo());
+ }
+
+ // Messages with both method and id are requests
+ if (hasMethod && hasId)
+ {
+ return JsonSerializer.Deserialize(rawText, options.GetTypeInfo());
+ }
+
+ throw new JsonException("Invalid JSON-RPC message format");
+ }
+
+ ///
+ public override void Write(Utf8JsonWriter writer, JsonRpcMessage value, JsonSerializerOptions options)
+ {
+ switch (value)
+ {
+ case JsonRpcRequest request:
+ JsonSerializer.Serialize(writer, request, options.GetTypeInfo());
+ break;
+ case JsonRpcNotification notification:
+ JsonSerializer.Serialize(writer, notification, options.GetTypeInfo());
+ break;
+ case JsonRpcResponse response:
+ JsonSerializer.Serialize(writer, response, options.GetTypeInfo());
+ break;
+ case JsonRpcError error:
+ JsonSerializer.Serialize(writer, error, options.GetTypeInfo());
+ break;
+ default:
+ throw new JsonException($"Unknown JSON-RPC message type: {value.GetType()}");
+ }
+ }
+ }
+}
diff --git a/src/ModelContextProtocol/Protocol/Messages/JsonRpcMessageWithId.cs b/src/ModelContextProtocol/Protocol/JsonRpcMessageWithId.cs
similarity index 94%
rename from src/ModelContextProtocol/Protocol/Messages/JsonRpcMessageWithId.cs
rename to src/ModelContextProtocol/Protocol/JsonRpcMessageWithId.cs
index f095c50..b082619 100644
--- a/src/ModelContextProtocol/Protocol/Messages/JsonRpcMessageWithId.cs
+++ b/src/ModelContextProtocol/Protocol/JsonRpcMessageWithId.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Messages;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a JSON-RPC message used in the Model Context Protocol (MCP) and that includes an ID.
diff --git a/src/ModelContextProtocol/Protocol/Messages/JsonRpcNotification.cs b/src/ModelContextProtocol/Protocol/JsonRpcNotification.cs
similarity index 94%
rename from src/ModelContextProtocol/Protocol/Messages/JsonRpcNotification.cs
rename to src/ModelContextProtocol/Protocol/JsonRpcNotification.cs
index bdbd8d4..93d8f40 100644
--- a/src/ModelContextProtocol/Protocol/Messages/JsonRpcNotification.cs
+++ b/src/ModelContextProtocol/Protocol/JsonRpcNotification.cs
@@ -1,7 +1,7 @@
using System.Text.Json.Nodes;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Messages;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a notification message in the JSON-RPC protocol.
diff --git a/src/ModelContextProtocol/Protocol/Messages/JsonRpcRequest.cs b/src/ModelContextProtocol/Protocol/JsonRpcRequest.cs
similarity index 96%
rename from src/ModelContextProtocol/Protocol/Messages/JsonRpcRequest.cs
rename to src/ModelContextProtocol/Protocol/JsonRpcRequest.cs
index 6e356cf..70072de 100644
--- a/src/ModelContextProtocol/Protocol/Messages/JsonRpcRequest.cs
+++ b/src/ModelContextProtocol/Protocol/JsonRpcRequest.cs
@@ -1,7 +1,7 @@
using System.Text.Json.Nodes;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Messages;
+namespace ModelContextProtocol.Protocol;
///
/// A request message in the JSON-RPC protocol.
diff --git a/src/ModelContextProtocol/Protocol/Messages/JsonRpcResponse.cs b/src/ModelContextProtocol/Protocol/JsonRpcResponse.cs
similarity index 95%
rename from src/ModelContextProtocol/Protocol/Messages/JsonRpcResponse.cs
rename to src/ModelContextProtocol/Protocol/JsonRpcResponse.cs
index 01eef51..098db13 100644
--- a/src/ModelContextProtocol/Protocol/Messages/JsonRpcResponse.cs
+++ b/src/ModelContextProtocol/Protocol/JsonRpcResponse.cs
@@ -1,7 +1,7 @@
using System.Text.Json.Nodes;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Messages;
+namespace ModelContextProtocol.Protocol;
///
/// A successful response message in the JSON-RPC protocol.
diff --git a/src/ModelContextProtocol/Protocol/Types/ListPromptsRequestParams.cs b/src/ModelContextProtocol/Protocol/ListPromptsRequestParams.cs
similarity index 84%
rename from src/ModelContextProtocol/Protocol/Types/ListPromptsRequestParams.cs
rename to src/ModelContextProtocol/Protocol/ListPromptsRequestParams.cs
index dd259bf..7202ef2 100644
--- a/src/ModelContextProtocol/Protocol/Types/ListPromptsRequestParams.cs
+++ b/src/ModelContextProtocol/Protocol/ListPromptsRequestParams.cs
@@ -1,6 +1,4 @@
-using ModelContextProtocol.Protocol.Messages;
-
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the parameters used with a request from a client to request
diff --git a/src/ModelContextProtocol/Protocol/Types/ListPromptsResult.cs b/src/ModelContextProtocol/Protocol/ListPromptsResult.cs
similarity index 92%
rename from src/ModelContextProtocol/Protocol/Types/ListPromptsResult.cs
rename to src/ModelContextProtocol/Protocol/ListPromptsResult.cs
index ce31396..65b9e7c 100644
--- a/src/ModelContextProtocol/Protocol/Types/ListPromptsResult.cs
+++ b/src/ModelContextProtocol/Protocol/ListPromptsResult.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a server's response to a request from the client, containing available prompts.
diff --git a/src/ModelContextProtocol/Protocol/Types/ListResourceTemplatesRequestParams.cs b/src/ModelContextProtocol/Protocol/ListResourceTemplatesRequestParams.cs
similarity index 85%
rename from src/ModelContextProtocol/Protocol/Types/ListResourceTemplatesRequestParams.cs
rename to src/ModelContextProtocol/Protocol/ListResourceTemplatesRequestParams.cs
index 8a323c3..0418b8c 100644
--- a/src/ModelContextProtocol/Protocol/Types/ListResourceTemplatesRequestParams.cs
+++ b/src/ModelContextProtocol/Protocol/ListResourceTemplatesRequestParams.cs
@@ -1,6 +1,4 @@
-using ModelContextProtocol.Protocol.Messages;
-
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the parameters used with a request from a client to request
diff --git a/src/ModelContextProtocol/Protocol/Types/ListResourceTemplatesResult.cs b/src/ModelContextProtocol/Protocol/ListResourceTemplatesResult.cs
similarity index 94%
rename from src/ModelContextProtocol/Protocol/Types/ListResourceTemplatesResult.cs
rename to src/ModelContextProtocol/Protocol/ListResourceTemplatesResult.cs
index 820160f..9b2bce0 100644
--- a/src/ModelContextProtocol/Protocol/Types/ListResourceTemplatesResult.cs
+++ b/src/ModelContextProtocol/Protocol/ListResourceTemplatesResult.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a server's response to a request from the client,
diff --git a/src/ModelContextProtocol/Protocol/Types/ListResourcesRequestParams.cs b/src/ModelContextProtocol/Protocol/ListResourcesRequestParams.cs
similarity index 84%
rename from src/ModelContextProtocol/Protocol/Types/ListResourcesRequestParams.cs
rename to src/ModelContextProtocol/Protocol/ListResourcesRequestParams.cs
index b31a8b3..05e7fc2 100644
--- a/src/ModelContextProtocol/Protocol/Types/ListResourcesRequestParams.cs
+++ b/src/ModelContextProtocol/Protocol/ListResourcesRequestParams.cs
@@ -1,6 +1,4 @@
-using ModelContextProtocol.Protocol.Messages;
-
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the parameters used with a request from a client to request
diff --git a/src/ModelContextProtocol/Protocol/Types/ListResourcesResult.cs b/src/ModelContextProtocol/Protocol/ListResourcesResult.cs
similarity index 92%
rename from src/ModelContextProtocol/Protocol/Types/ListResourcesResult.cs
rename to src/ModelContextProtocol/Protocol/ListResourcesResult.cs
index f982e78..9e50b54 100644
--- a/src/ModelContextProtocol/Protocol/Types/ListResourcesResult.cs
+++ b/src/ModelContextProtocol/Protocol/ListResourcesResult.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a server's response to a request from the client, containing available resources.
diff --git a/src/ModelContextProtocol/Protocol/Types/ListRootsRequestParams.cs b/src/ModelContextProtocol/Protocol/ListRootsRequestParams.cs
similarity index 84%
rename from src/ModelContextProtocol/Protocol/Types/ListRootsRequestParams.cs
rename to src/ModelContextProtocol/Protocol/ListRootsRequestParams.cs
index 630eb31..b0911da 100644
--- a/src/ModelContextProtocol/Protocol/Types/ListRootsRequestParams.cs
+++ b/src/ModelContextProtocol/Protocol/ListRootsRequestParams.cs
@@ -1,6 +1,4 @@
-using ModelContextProtocol.Protocol.Messages;
-
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the parameters used with a request from a server to request
diff --git a/src/ModelContextProtocol/Protocol/Types/ListRootsResult.cs b/src/ModelContextProtocol/Protocol/ListRootsResult.cs
similarity index 93%
rename from src/ModelContextProtocol/Protocol/Types/ListRootsResult.cs
rename to src/ModelContextProtocol/Protocol/ListRootsResult.cs
index 8928954..aad315b 100644
--- a/src/ModelContextProtocol/Protocol/Types/ListRootsResult.cs
+++ b/src/ModelContextProtocol/Protocol/ListRootsResult.cs
@@ -1,8 +1,7 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a client's response to a request from the server,
diff --git a/src/ModelContextProtocol/Protocol/Types/ListToolsRequestParams.cs b/src/ModelContextProtocol/Protocol/ListToolsRequestParams.cs
similarity index 84%
rename from src/ModelContextProtocol/Protocol/Types/ListToolsRequestParams.cs
rename to src/ModelContextProtocol/Protocol/ListToolsRequestParams.cs
index 5acfb8a..0a32729 100644
--- a/src/ModelContextProtocol/Protocol/Types/ListToolsRequestParams.cs
+++ b/src/ModelContextProtocol/Protocol/ListToolsRequestParams.cs
@@ -1,6 +1,4 @@
-using ModelContextProtocol.Protocol.Messages;
-
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the parameters used with a request from a client to request
diff --git a/src/ModelContextProtocol/Protocol/Types/ListToolsResult.cs b/src/ModelContextProtocol/Protocol/ListToolsResult.cs
similarity index 92%
rename from src/ModelContextProtocol/Protocol/Types/ListToolsResult.cs
rename to src/ModelContextProtocol/Protocol/ListToolsResult.cs
index 35e5bb2..feef775 100644
--- a/src/ModelContextProtocol/Protocol/Types/ListToolsResult.cs
+++ b/src/ModelContextProtocol/Protocol/ListToolsResult.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a server's response to a request from the client, containing available tools.
diff --git a/src/ModelContextProtocol/Protocol/Types/LoggingCapability.cs b/src/ModelContextProtocol/Protocol/LoggingCapability.cs
similarity index 94%
rename from src/ModelContextProtocol/Protocol/Types/LoggingCapability.cs
rename to src/ModelContextProtocol/Protocol/LoggingCapability.cs
index a857401..9cf62b6 100644
--- a/src/ModelContextProtocol/Protocol/Types/LoggingCapability.cs
+++ b/src/ModelContextProtocol/Protocol/LoggingCapability.cs
@@ -1,7 +1,7 @@
using ModelContextProtocol.Server;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the logging capability configuration for a Model Context Protocol server.
diff --git a/src/ModelContextProtocol/Protocol/Types/LoggingLevel.cs b/src/ModelContextProtocol/Protocol/LoggingLevel.cs
similarity index 92%
rename from src/ModelContextProtocol/Protocol/Types/LoggingLevel.cs
rename to src/ModelContextProtocol/Protocol/LoggingLevel.cs
index 7bc4355..55d0b6e 100644
--- a/src/ModelContextProtocol/Protocol/Types/LoggingLevel.cs
+++ b/src/ModelContextProtocol/Protocol/LoggingLevel.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Utils.Json;
-using System.Text.Json.Serialization;
+using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Indicates the severity of a log message.
diff --git a/src/ModelContextProtocol/Protocol/Types/LoggingMessageNotificationParams.cs b/src/ModelContextProtocol/Protocol/LoggingMessageNotificationParams.cs
similarity index 95%
rename from src/ModelContextProtocol/Protocol/Types/LoggingMessageNotificationParams.cs
rename to src/ModelContextProtocol/Protocol/LoggingMessageNotificationParams.cs
index b46e77b..12b6006 100644
--- a/src/ModelContextProtocol/Protocol/Types/LoggingMessageNotificationParams.cs
+++ b/src/ModelContextProtocol/Protocol/LoggingMessageNotificationParams.cs
@@ -1,8 +1,7 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the parameters used with a
diff --git a/src/ModelContextProtocol/Protocol/Messages/JsonRpcMessage.cs b/src/ModelContextProtocol/Protocol/Messages/JsonRpcMessage.cs
deleted file mode 100644
index d307598..0000000
--- a/src/ModelContextProtocol/Protocol/Messages/JsonRpcMessage.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Utils.Json;
-using System.Text.Json.Serialization;
-
-namespace ModelContextProtocol.Protocol.Messages;
-
-///
-/// Represents any JSON-RPC message used in the Model Context Protocol (MCP).
-///
-///
-/// This interface serves as the foundation for all message types in the JSON-RPC 2.0 protocol
-/// used by MCP, including requests, responses, notifications, and errors. JSON-RPC is a stateless,
-/// lightweight remote procedure call (RPC) protocol that uses JSON as its data format.
-///
-[JsonConverter(typeof(JsonRpcMessageConverter))]
-public abstract class JsonRpcMessage
-{
- ///
- /// Gets the JSON-RPC protocol version used.
- ///
- ///
- [JsonPropertyName("jsonrpc")]
- public string JsonRpc { get; init; } = "2.0";
-
- ///
- /// Gets or sets the transport the was received on or should be sent over.
- ///
- ///
- /// This is used to support the Streamable HTTP transport where the specification states that the server
- /// SHOULD include JSON-RPC responses in the HTTP response body for the POST request containing
- /// the corresponding JSON-RPC request. It may be for other transports.
- ///
- [JsonIgnore]
- public ITransport? RelatedTransport { get; set; }
-}
diff --git a/src/ModelContextProtocol/Protocol/Types/ModelHint.cs b/src/ModelContextProtocol/Protocol/ModelHint.cs
similarity index 95%
rename from src/ModelContextProtocol/Protocol/Types/ModelHint.cs
rename to src/ModelContextProtocol/Protocol/ModelHint.cs
index 7fd239c..4ec929e 100644
--- a/src/ModelContextProtocol/Protocol/Types/ModelHint.cs
+++ b/src/ModelContextProtocol/Protocol/ModelHint.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Provides hints to use for model selection.
diff --git a/src/ModelContextProtocol/Protocol/Types/ModelPreferences.cs b/src/ModelContextProtocol/Protocol/ModelPreferences.cs
similarity index 98%
rename from src/ModelContextProtocol/Protocol/Types/ModelPreferences.cs
rename to src/ModelContextProtocol/Protocol/ModelPreferences.cs
index e569d81..a91b3da 100644
--- a/src/ModelContextProtocol/Protocol/Types/ModelPreferences.cs
+++ b/src/ModelContextProtocol/Protocol/ModelPreferences.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a server's preferences for model selection, requested of the client during sampling.
diff --git a/src/ModelContextProtocol/Protocol/Messages/NotificationMethods.cs b/src/ModelContextProtocol/Protocol/NotificationMethods.cs
similarity index 99%
rename from src/ModelContextProtocol/Protocol/Messages/NotificationMethods.cs
rename to src/ModelContextProtocol/Protocol/NotificationMethods.cs
index bfae67b..7069689 100644
--- a/src/ModelContextProtocol/Protocol/Messages/NotificationMethods.cs
+++ b/src/ModelContextProtocol/Protocol/NotificationMethods.cs
@@ -1,4 +1,4 @@
-namespace ModelContextProtocol.Protocol.Messages;
+namespace ModelContextProtocol.Protocol;
///
/// Provides constants with the names of common notification methods used in the MCP protocol.
diff --git a/src/ModelContextProtocol/Protocol/Types/PaginatedRequest.cs b/src/ModelContextProtocol/Protocol/PaginatedRequest.cs
similarity index 89%
rename from src/ModelContextProtocol/Protocol/Types/PaginatedRequest.cs
rename to src/ModelContextProtocol/Protocol/PaginatedRequest.cs
index a1a44d8..89b1739 100644
--- a/src/ModelContextProtocol/Protocol/Types/PaginatedRequest.cs
+++ b/src/ModelContextProtocol/Protocol/PaginatedRequest.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Provides a base class for paginated requests.
diff --git a/src/ModelContextProtocol/Protocol/Messages/PaginatedResult.cs b/src/ModelContextProtocol/Protocol/PaginatedResult.cs
similarity index 96%
rename from src/ModelContextProtocol/Protocol/Messages/PaginatedResult.cs
rename to src/ModelContextProtocol/Protocol/PaginatedResult.cs
index 6fa6065..b1eb67b 100644
--- a/src/ModelContextProtocol/Protocol/Messages/PaginatedResult.cs
+++ b/src/ModelContextProtocol/Protocol/PaginatedResult.cs
@@ -1,4 +1,4 @@
-namespace ModelContextProtocol.Protocol.Messages;
+namespace ModelContextProtocol.Protocol;
///
/// Provides a base class for result payloads that support cursor-based pagination.
diff --git a/src/ModelContextProtocol/Protocol/Types/PingResult.cs b/src/ModelContextProtocol/Protocol/PingResult.cs
similarity index 87%
rename from src/ModelContextProtocol/Protocol/Types/PingResult.cs
rename to src/ModelContextProtocol/Protocol/PingResult.cs
index 96bcfda..e00f125 100644
--- a/src/ModelContextProtocol/Protocol/Types/PingResult.cs
+++ b/src/ModelContextProtocol/Protocol/PingResult.cs
@@ -1,6 +1,4 @@
-using ModelContextProtocol.Protocol.Messages;
-
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the result of a request in the Model Context Protocol.
diff --git a/src/ModelContextProtocol/Protocol/Messages/ProgressNotification.cs b/src/ModelContextProtocol/Protocol/ProgressNotification.cs
similarity index 98%
rename from src/ModelContextProtocol/Protocol/Messages/ProgressNotification.cs
rename to src/ModelContextProtocol/Protocol/ProgressNotification.cs
index 988085f..59643e4 100644
--- a/src/ModelContextProtocol/Protocol/Messages/ProgressNotification.cs
+++ b/src/ModelContextProtocol/Protocol/ProgressNotification.cs
@@ -2,7 +2,7 @@ using System.ComponentModel;
using System.Text.Json;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Messages;
+namespace ModelContextProtocol.Protocol;
///
/// Represents an out-of-band notification used to inform the receiver of a progress update for a long-running request.
diff --git a/src/ModelContextProtocol/Protocol/Messages/ProgressToken.cs b/src/ModelContextProtocol/Protocol/ProgressToken.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Messages/ProgressToken.cs
rename to src/ModelContextProtocol/Protocol/ProgressToken.cs
index ac5ceb1..f980bdf 100644
--- a/src/ModelContextProtocol/Protocol/Messages/ProgressToken.cs
+++ b/src/ModelContextProtocol/Protocol/ProgressToken.cs
@@ -1,10 +1,9 @@
-using ModelContextProtocol.Utils;
using System.ComponentModel;
using System.Globalization;
using System.Text.Json;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Messages;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a progress token, which can be either a string or an integer.
diff --git a/src/ModelContextProtocol/Protocol/Types/Prompt.cs b/src/ModelContextProtocol/Protocol/Prompt.cs
similarity index 95%
rename from src/ModelContextProtocol/Protocol/Types/Prompt.cs
rename to src/ModelContextProtocol/Protocol/Prompt.cs
index c98b23d..8e2139f 100644
--- a/src/ModelContextProtocol/Protocol/Types/Prompt.cs
+++ b/src/ModelContextProtocol/Protocol/Prompt.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a prompt that the server offers.
diff --git a/src/ModelContextProtocol/Protocol/Types/PromptArgument.cs b/src/ModelContextProtocol/Protocol/PromptArgument.cs
similarity index 95%
rename from src/ModelContextProtocol/Protocol/Types/PromptArgument.cs
rename to src/ModelContextProtocol/Protocol/PromptArgument.cs
index c8f6165..a22bea9 100644
--- a/src/ModelContextProtocol/Protocol/Types/PromptArgument.cs
+++ b/src/ModelContextProtocol/Protocol/PromptArgument.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents an argument that a prompt can accept for templating and customization.
diff --git a/src/ModelContextProtocol/Protocol/Types/PromptMessage.cs b/src/ModelContextProtocol/Protocol/PromptMessage.cs
similarity index 98%
rename from src/ModelContextProtocol/Protocol/Types/PromptMessage.cs
rename to src/ModelContextProtocol/Protocol/PromptMessage.cs
index 30d02b1..c2dfd15 100644
--- a/src/ModelContextProtocol/Protocol/Types/PromptMessage.cs
+++ b/src/ModelContextProtocol/Protocol/PromptMessage.cs
@@ -1,7 +1,7 @@
using Microsoft.Extensions.AI;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a message within the Model Context Protocol (MCP) system, used for communication between clients and AI models.
diff --git a/src/ModelContextProtocol/Protocol/Types/PromptsCapability.cs b/src/ModelContextProtocol/Protocol/PromptsCapability.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Types/PromptsCapability.cs
rename to src/ModelContextProtocol/Protocol/PromptsCapability.cs
index 53aa804..79fe466 100644
--- a/src/ModelContextProtocol/Protocol/Types/PromptsCapability.cs
+++ b/src/ModelContextProtocol/Protocol/PromptsCapability.cs
@@ -1,8 +1,7 @@
-using ModelContextProtocol.Protocol.Messages;
using ModelContextProtocol.Server;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the server's capability to provide predefined prompt templates that clients can use.
diff --git a/src/ModelContextProtocol/Protocol/Types/ReadResourceRequestParams.cs b/src/ModelContextProtocol/Protocol/ReadResourceRequestParams.cs
similarity index 89%
rename from src/ModelContextProtocol/Protocol/Types/ReadResourceRequestParams.cs
rename to src/ModelContextProtocol/Protocol/ReadResourceRequestParams.cs
index 17475f8..8b1f194 100644
--- a/src/ModelContextProtocol/Protocol/Types/ReadResourceRequestParams.cs
+++ b/src/ModelContextProtocol/Protocol/ReadResourceRequestParams.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the parameters used with a request from a client to get a resource provided by a server.
diff --git a/src/ModelContextProtocol/Protocol/Types/ReadResourceResult.cs b/src/ModelContextProtocol/Protocol/ReadResourceResult.cs
similarity index 90%
rename from src/ModelContextProtocol/Protocol/Types/ReadResourceResult.cs
rename to src/ModelContextProtocol/Protocol/ReadResourceResult.cs
index 92989a6..e5ae44b 100644
--- a/src/ModelContextProtocol/Protocol/Types/ReadResourceResult.cs
+++ b/src/ModelContextProtocol/Protocol/ReadResourceResult.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a server's response to a request from the client.
diff --git a/src/ModelContextProtocol/Protocol/Types/Reference.cs b/src/ModelContextProtocol/Protocol/Reference.cs
similarity index 98%
rename from src/ModelContextProtocol/Protocol/Types/Reference.cs
rename to src/ModelContextProtocol/Protocol/Reference.cs
index 94d3006..4bbff1f 100644
--- a/src/ModelContextProtocol/Protocol/Types/Reference.cs
+++ b/src/ModelContextProtocol/Protocol/Reference.cs
@@ -1,8 +1,8 @@
+using ModelContextProtocol.Client;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
-using ModelContextProtocol.Client;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a reference to a resource or prompt in the Model Context Protocol.
diff --git a/src/ModelContextProtocol/Protocol/Messages/RequestId.cs b/src/ModelContextProtocol/Protocol/RequestId.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Messages/RequestId.cs
rename to src/ModelContextProtocol/Protocol/RequestId.cs
index f624e00..8d445de 100644
--- a/src/ModelContextProtocol/Protocol/Messages/RequestId.cs
+++ b/src/ModelContextProtocol/Protocol/RequestId.cs
@@ -1,10 +1,9 @@
-using ModelContextProtocol.Utils;
using System.ComponentModel;
using System.Globalization;
using System.Text.Json;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Messages;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a JSON-RPC request identifier, which can be either a string or an integer.
diff --git a/src/ModelContextProtocol/Protocol/Messages/RequestMethods.cs b/src/ModelContextProtocol/Protocol/RequestMethods.cs
similarity index 98%
rename from src/ModelContextProtocol/Protocol/Messages/RequestMethods.cs
rename to src/ModelContextProtocol/Protocol/RequestMethods.cs
index a0b094e..3b511ef 100644
--- a/src/ModelContextProtocol/Protocol/Messages/RequestMethods.cs
+++ b/src/ModelContextProtocol/Protocol/RequestMethods.cs
@@ -1,4 +1,4 @@
-namespace ModelContextProtocol.Protocol.Messages;
+namespace ModelContextProtocol.Protocol;
///
/// Provides constants with the names of common request methods used in the MCP protocol.
diff --git a/src/ModelContextProtocol/Protocol/Types/RequestParams.cs b/src/ModelContextProtocol/Protocol/RequestParams.cs
similarity index 93%
rename from src/ModelContextProtocol/Protocol/Types/RequestParams.cs
rename to src/ModelContextProtocol/Protocol/RequestParams.cs
index f4fb4c4..20884b7 100644
--- a/src/ModelContextProtocol/Protocol/Types/RequestParams.cs
+++ b/src/ModelContextProtocol/Protocol/RequestParams.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Provides a base class for all request parameters.
diff --git a/src/ModelContextProtocol/Protocol/Types/RequestParamsMetadata.cs b/src/ModelContextProtocol/Protocol/RequestParamsMetadata.cs
similarity index 88%
rename from src/ModelContextProtocol/Protocol/Types/RequestParamsMetadata.cs
rename to src/ModelContextProtocol/Protocol/RequestParamsMetadata.cs
index 6b56a91..90f5621 100644
--- a/src/ModelContextProtocol/Protocol/Types/RequestParamsMetadata.cs
+++ b/src/ModelContextProtocol/Protocol/RequestParamsMetadata.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Provides metadata related to the request that provides additional protocol-level information.
diff --git a/src/ModelContextProtocol/Protocol/Types/Resource.cs b/src/ModelContextProtocol/Protocol/Resource.cs
similarity index 98%
rename from src/ModelContextProtocol/Protocol/Types/Resource.cs
rename to src/ModelContextProtocol/Protocol/Resource.cs
index 3e25a11..d2c1f55 100644
--- a/src/ModelContextProtocol/Protocol/Types/Resource.cs
+++ b/src/ModelContextProtocol/Protocol/Resource.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a known resource that the server is capable of reading.
diff --git a/src/ModelContextProtocol/Protocol/Types/ResourceContents.cs b/src/ModelContextProtocol/Protocol/ResourceContents.cs
similarity index 99%
rename from src/ModelContextProtocol/Protocol/Types/ResourceContents.cs
rename to src/ModelContextProtocol/Protocol/ResourceContents.cs
index 0c392db..7991736 100644
--- a/src/ModelContextProtocol/Protocol/Types/ResourceContents.cs
+++ b/src/ModelContextProtocol/Protocol/ResourceContents.cs
@@ -3,7 +3,7 @@ using System.Diagnostics;
using System.Text.Json;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Provides a base class representing contents of a resource in the Model Context Protocol.
diff --git a/src/ModelContextProtocol/Protocol/Types/ResourceTemplate.cs b/src/ModelContextProtocol/Protocol/ResourceTemplate.cs
similarity index 98%
rename from src/ModelContextProtocol/Protocol/Types/ResourceTemplate.cs
rename to src/ModelContextProtocol/Protocol/ResourceTemplate.cs
index 8431857..94ef68c 100644
--- a/src/ModelContextProtocol/Protocol/Types/ResourceTemplate.cs
+++ b/src/ModelContextProtocol/Protocol/ResourceTemplate.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a known resource template that the server is capable of reading.
diff --git a/src/ModelContextProtocol/Protocol/Types/ResourceUpdatedNotificationParams.cs b/src/ModelContextProtocol/Protocol/ResourceUpdatedNotificationParams.cs
similarity index 92%
rename from src/ModelContextProtocol/Protocol/Types/ResourceUpdatedNotificationParams.cs
rename to src/ModelContextProtocol/Protocol/ResourceUpdatedNotificationParams.cs
index f4b1c62..09f1720 100644
--- a/src/ModelContextProtocol/Protocol/Types/ResourceUpdatedNotificationParams.cs
+++ b/src/ModelContextProtocol/Protocol/ResourceUpdatedNotificationParams.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the parameters used with a
diff --git a/src/ModelContextProtocol/Protocol/Types/ResourcesCapability.cs b/src/ModelContextProtocol/Protocol/ResourcesCapability.cs
similarity index 98%
rename from src/ModelContextProtocol/Protocol/Types/ResourcesCapability.cs
rename to src/ModelContextProtocol/Protocol/ResourcesCapability.cs
index e93b8d9..12343cc 100644
--- a/src/ModelContextProtocol/Protocol/Types/ResourcesCapability.cs
+++ b/src/ModelContextProtocol/Protocol/ResourcesCapability.cs
@@ -1,8 +1,7 @@
-using ModelContextProtocol.Protocol.Messages;
using ModelContextProtocol.Server;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the resources capability configuration.
diff --git a/src/ModelContextProtocol/Protocol/Types/Role.cs b/src/ModelContextProtocol/Protocol/Role.cs
similarity index 86%
rename from src/ModelContextProtocol/Protocol/Types/Role.cs
rename to src/ModelContextProtocol/Protocol/Role.cs
index 5b6ee9c..d633ce4 100644
--- a/src/ModelContextProtocol/Protocol/Types/Role.cs
+++ b/src/ModelContextProtocol/Protocol/Role.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Utils.Json;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the type of role in the Model Context Protocol conversation.
diff --git a/src/ModelContextProtocol/Protocol/Types/Root.cs b/src/ModelContextProtocol/Protocol/Root.cs
similarity index 96%
rename from src/ModelContextProtocol/Protocol/Types/Root.cs
rename to src/ModelContextProtocol/Protocol/Root.cs
index 1d42563..72604bd 100644
--- a/src/ModelContextProtocol/Protocol/Types/Root.cs
+++ b/src/ModelContextProtocol/Protocol/Root.cs
@@ -1,7 +1,7 @@
using System.Text.Json;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a root URI and its metadata in the Model Context Protocol.
diff --git a/src/ModelContextProtocol/Protocol/Types/RootsCapability.cs b/src/ModelContextProtocol/Protocol/RootsCapability.cs
similarity index 95%
rename from src/ModelContextProtocol/Protocol/Types/RootsCapability.cs
rename to src/ModelContextProtocol/Protocol/RootsCapability.cs
index d087cee..e63c19c 100644
--- a/src/ModelContextProtocol/Protocol/Types/RootsCapability.cs
+++ b/src/ModelContextProtocol/Protocol/RootsCapability.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a client capability that enables root resource discovery in the Model Context Protocol.
diff --git a/src/ModelContextProtocol/Protocol/Types/SamplingCapability.cs b/src/ModelContextProtocol/Protocol/SamplingCapability.cs
similarity index 94%
rename from src/ModelContextProtocol/Protocol/Types/SamplingCapability.cs
rename to src/ModelContextProtocol/Protocol/SamplingCapability.cs
index 96d9a64..2f5705c 100644
--- a/src/ModelContextProtocol/Protocol/Types/SamplingCapability.cs
+++ b/src/ModelContextProtocol/Protocol/SamplingCapability.cs
@@ -1,9 +1,8 @@
using Microsoft.Extensions.AI;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the capability for a client to generate text or other content using an AI model.
diff --git a/src/ModelContextProtocol/Protocol/Types/SamplingMessage.cs b/src/ModelContextProtocol/Protocol/SamplingMessage.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Types/SamplingMessage.cs
rename to src/ModelContextProtocol/Protocol/SamplingMessage.cs
index 77a29bf..0cbbb1c 100644
--- a/src/ModelContextProtocol/Protocol/Types/SamplingMessage.cs
+++ b/src/ModelContextProtocol/Protocol/SamplingMessage.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a message issued to or received from an LLM API within the Model Context Protocol.
diff --git a/src/ModelContextProtocol/Protocol/Types/ServerCapabilities.cs b/src/ModelContextProtocol/Protocol/ServerCapabilities.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Types/ServerCapabilities.cs
rename to src/ModelContextProtocol/Protocol/ServerCapabilities.cs
index 6406ea4..1548241 100644
--- a/src/ModelContextProtocol/Protocol/Types/ServerCapabilities.cs
+++ b/src/ModelContextProtocol/Protocol/ServerCapabilities.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the capabilities that a server may support.
diff --git a/src/ModelContextProtocol/Protocol/Types/SetLevelRequestParams.cs b/src/ModelContextProtocol/Protocol/SetLevelRequestParams.cs
similarity index 88%
rename from src/ModelContextProtocol/Protocol/Types/SetLevelRequestParams.cs
rename to src/ModelContextProtocol/Protocol/SetLevelRequestParams.cs
index fbf1f1d..e95360a 100644
--- a/src/ModelContextProtocol/Protocol/Types/SetLevelRequestParams.cs
+++ b/src/ModelContextProtocol/Protocol/SetLevelRequestParams.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the parameters used with a request from a client
diff --git a/src/ModelContextProtocol/Protocol/Types/SubscribeRequestParams.cs b/src/ModelContextProtocol/Protocol/SubscribeRequestParams.cs
similarity index 92%
rename from src/ModelContextProtocol/Protocol/Types/SubscribeRequestParams.cs
rename to src/ModelContextProtocol/Protocol/SubscribeRequestParams.cs
index e40c290..6716ba4 100644
--- a/src/ModelContextProtocol/Protocol/Types/SubscribeRequestParams.cs
+++ b/src/ModelContextProtocol/Protocol/SubscribeRequestParams.cs
@@ -1,7 +1,6 @@
-using ModelContextProtocol.Protocol.Messages;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the parameters used with a request from a client
diff --git a/src/ModelContextProtocol/Protocol/Types/TextResourceContents.cs b/src/ModelContextProtocol/Protocol/TextResourceContents.cs
similarity index 95%
rename from src/ModelContextProtocol/Protocol/Types/TextResourceContents.cs
rename to src/ModelContextProtocol/Protocol/TextResourceContents.cs
index 207b27f..754b8c2 100644
--- a/src/ModelContextProtocol/Protocol/Types/TextResourceContents.cs
+++ b/src/ModelContextProtocol/Protocol/TextResourceContents.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents text-based contents of a resource in the Model Context Protocol.
diff --git a/src/ModelContextProtocol/Protocol/Types/Tool.cs b/src/ModelContextProtocol/Protocol/Tool.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Types/Tool.cs
rename to src/ModelContextProtocol/Protocol/Tool.cs
index a4c7e60..71e1101 100644
--- a/src/ModelContextProtocol/Protocol/Types/Tool.cs
+++ b/src/ModelContextProtocol/Protocol/Tool.cs
@@ -1,8 +1,7 @@
-using ModelContextProtocol.Utils.Json;
using System.Text.Json;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents a tool that the server is capable of calling.
diff --git a/src/ModelContextProtocol/Protocol/Types/ToolAnnotations.cs b/src/ModelContextProtocol/Protocol/ToolAnnotations.cs
similarity index 98%
rename from src/ModelContextProtocol/Protocol/Types/ToolAnnotations.cs
rename to src/ModelContextProtocol/Protocol/ToolAnnotations.cs
index 417a366..fbbc6ab 100644
--- a/src/ModelContextProtocol/Protocol/Types/ToolAnnotations.cs
+++ b/src/ModelContextProtocol/Protocol/ToolAnnotations.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents additional properties describing a to clients.
diff --git a/src/ModelContextProtocol/Protocol/Types/ToolsCapability.cs b/src/ModelContextProtocol/Protocol/ToolsCapability.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Types/ToolsCapability.cs
rename to src/ModelContextProtocol/Protocol/ToolsCapability.cs
index 8755439..b5789de 100644
--- a/src/ModelContextProtocol/Protocol/Types/ToolsCapability.cs
+++ b/src/ModelContextProtocol/Protocol/ToolsCapability.cs
@@ -1,8 +1,7 @@
-using ModelContextProtocol.Protocol.Messages;
using ModelContextProtocol.Server;
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Represents the tools capability configuration.
diff --git a/src/ModelContextProtocol/Protocol/Transport/TransportBase.cs b/src/ModelContextProtocol/Protocol/TransportBase.cs
similarity index 98%
rename from src/ModelContextProtocol/Protocol/Transport/TransportBase.cs
rename to src/ModelContextProtocol/Protocol/TransportBase.cs
index 56e55a6..31b3b14 100644
--- a/src/ModelContextProtocol/Protocol/Transport/TransportBase.cs
+++ b/src/ModelContextProtocol/Protocol/TransportBase.cs
@@ -1,10 +1,9 @@
-using System.Diagnostics;
-using System.Threading.Channels;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
-using ModelContextProtocol.Protocol.Messages;
+using System.Diagnostics;
+using System.Threading.Channels;
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Protocol;
///
/// Provides a base class for implementing .
diff --git a/src/ModelContextProtocol/Protocol/Types/UnsubscribeRequestParams.cs b/src/ModelContextProtocol/Protocol/UnsubscribeRequestParams.cs
similarity index 95%
rename from src/ModelContextProtocol/Protocol/Types/UnsubscribeRequestParams.cs
rename to src/ModelContextProtocol/Protocol/UnsubscribeRequestParams.cs
index 0824f49..ac35412 100644
--- a/src/ModelContextProtocol/Protocol/Types/UnsubscribeRequestParams.cs
+++ b/src/ModelContextProtocol/Protocol/UnsubscribeRequestParams.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace ModelContextProtocol.Protocol.Types;
+namespace ModelContextProtocol.Protocol;
///
/// Sent from the client to cancel resource update notifications from the server for a specific resource.
diff --git a/src/ModelContextProtocol/Shared/RequestHandlers.cs b/src/ModelContextProtocol/RequestHandlers.cs
similarity index 93%
rename from src/ModelContextProtocol/Shared/RequestHandlers.cs
rename to src/ModelContextProtocol/RequestHandlers.cs
index 93a3dbb..854a4bd 100644
--- a/src/ModelContextProtocol/Shared/RequestHandlers.cs
+++ b/src/ModelContextProtocol/RequestHandlers.cs
@@ -1,11 +1,9 @@
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Utils;
+using ModelContextProtocol.Protocol;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Text.Json.Serialization.Metadata;
-namespace ModelContextProtocol.Shared;
+namespace ModelContextProtocol;
internal sealed class RequestHandlers : Dictionary>>
{
diff --git a/src/ModelContextProtocol/Utils/SemaphoreSlimExtensions.cs b/src/ModelContextProtocol/SemaphoreSlimExtensions.cs
similarity index 97%
rename from src/ModelContextProtocol/Utils/SemaphoreSlimExtensions.cs
rename to src/ModelContextProtocol/SemaphoreSlimExtensions.cs
index 459896e..6a78d32 100644
--- a/src/ModelContextProtocol/Utils/SemaphoreSlimExtensions.cs
+++ b/src/ModelContextProtocol/SemaphoreSlimExtensions.cs
@@ -1,4 +1,4 @@
-namespace ModelContextProtocol.Utils;
+namespace ModelContextProtocol;
internal static class SynchronizationExtensions
{
diff --git a/src/ModelContextProtocol/Server/AIFunctionMcpServerPrompt.cs b/src/ModelContextProtocol/Server/AIFunctionMcpServerPrompt.cs
index 2f7e1a1..9e1cdbc 100644
--- a/src/ModelContextProtocol/Server/AIFunctionMcpServerPrompt.cs
+++ b/src/ModelContextProtocol/Server/AIFunctionMcpServerPrompt.cs
@@ -1,8 +1,6 @@
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
-using ModelContextProtocol.Protocol.Types;
-using ModelContextProtocol.Utils;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using System.ComponentModel;
using System.Reflection;
using System.Text.Json;
diff --git a/src/ModelContextProtocol/Server/AIFunctionMcpServerResource.cs b/src/ModelContextProtocol/Server/AIFunctionMcpServerResource.cs
index 19eb499..f0d430e 100644
--- a/src/ModelContextProtocol/Server/AIFunctionMcpServerResource.cs
+++ b/src/ModelContextProtocol/Server/AIFunctionMcpServerResource.cs
@@ -1,8 +1,6 @@
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
-using ModelContextProtocol.Protocol.Types;
-using ModelContextProtocol.Utils;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using System.Collections.Concurrent;
using System.ComponentModel;
using System.Globalization;
diff --git a/src/ModelContextProtocol/Server/AIFunctionMcpServerTool.cs b/src/ModelContextProtocol/Server/AIFunctionMcpServerTool.cs
index cec6924..366eb23 100644
--- a/src/ModelContextProtocol/Server/AIFunctionMcpServerTool.cs
+++ b/src/ModelContextProtocol/Server/AIFunctionMcpServerTool.cs
@@ -1,8 +1,6 @@
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
-using ModelContextProtocol.Protocol.Types;
-using ModelContextProtocol.Utils;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
diff --git a/src/ModelContextProtocol/Server/DelegatingMcpServerPrompt.cs b/src/ModelContextProtocol/Server/DelegatingMcpServerPrompt.cs
index a209bea..b5e4900 100644
--- a/src/ModelContextProtocol/Server/DelegatingMcpServerPrompt.cs
+++ b/src/ModelContextProtocol/Server/DelegatingMcpServerPrompt.cs
@@ -1,5 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
-using ModelContextProtocol.Utils;
+using ModelContextProtocol.Protocol;
namespace ModelContextProtocol.Server;
diff --git a/src/ModelContextProtocol/Server/DelegatingMcpServerResource.cs b/src/ModelContextProtocol/Server/DelegatingMcpServerResource.cs
index 92f1ee4..ee32103 100644
--- a/src/ModelContextProtocol/Server/DelegatingMcpServerResource.cs
+++ b/src/ModelContextProtocol/Server/DelegatingMcpServerResource.cs
@@ -1,5 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
-using ModelContextProtocol.Utils;
+using ModelContextProtocol.Protocol;
namespace ModelContextProtocol.Server;
diff --git a/src/ModelContextProtocol/Server/DelegatingMcpServerTool.cs b/src/ModelContextProtocol/Server/DelegatingMcpServerTool.cs
index 2a4878a..a1f4be1 100644
--- a/src/ModelContextProtocol/Server/DelegatingMcpServerTool.cs
+++ b/src/ModelContextProtocol/Server/DelegatingMcpServerTool.cs
@@ -1,5 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
-using ModelContextProtocol.Utils;
+using ModelContextProtocol.Protocol;
namespace ModelContextProtocol.Server;
diff --git a/src/ModelContextProtocol/Server/DestinationBoundMcpServer.cs b/src/ModelContextProtocol/Server/DestinationBoundMcpServer.cs
index 0d86480..db594da 100644
--- a/src/ModelContextProtocol/Server/DestinationBoundMcpServer.cs
+++ b/src/ModelContextProtocol/Server/DestinationBoundMcpServer.cs
@@ -1,6 +1,4 @@
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using System.Diagnostics;
namespace ModelContextProtocol.Server;
diff --git a/src/ModelContextProtocol/Server/IMcpServer.cs b/src/ModelContextProtocol/Server/IMcpServer.cs
index 9b62217..ec2b87a 100644
--- a/src/ModelContextProtocol/Server/IMcpServer.cs
+++ b/src/ModelContextProtocol/Server/IMcpServer.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
namespace ModelContextProtocol.Server;
diff --git a/src/ModelContextProtocol/Server/McpServer.cs b/src/ModelContextProtocol/Server/McpServer.cs
index a6f8c36..338c631 100644
--- a/src/ModelContextProtocol/Server/McpServer.cs
+++ b/src/ModelContextProtocol/Server/McpServer.cs
@@ -1,11 +1,6 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Protocol.Types;
-using ModelContextProtocol.Shared;
-using ModelContextProtocol.Utils;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using System.Runtime.CompilerServices;
using System.Text.Json.Serialization.Metadata;
@@ -558,12 +553,12 @@ internal sealed class McpServer : McpEndpoint, IMcpServer
internal static LoggingLevel ToLoggingLevel(LogLevel level) =>
level switch
{
- LogLevel.Trace => Protocol.Types.LoggingLevel.Debug,
- LogLevel.Debug => Protocol.Types.LoggingLevel.Debug,
- LogLevel.Information => Protocol.Types.LoggingLevel.Info,
- LogLevel.Warning => Protocol.Types.LoggingLevel.Warning,
- LogLevel.Error => Protocol.Types.LoggingLevel.Error,
- LogLevel.Critical => Protocol.Types.LoggingLevel.Critical,
- _ => Protocol.Types.LoggingLevel.Emergency,
+ LogLevel.Trace => Protocol.LoggingLevel.Debug,
+ LogLevel.Debug => Protocol.LoggingLevel.Debug,
+ LogLevel.Information => Protocol.LoggingLevel.Info,
+ LogLevel.Warning => Protocol.LoggingLevel.Warning,
+ LogLevel.Error => Protocol.LoggingLevel.Error,
+ LogLevel.Critical => Protocol.LoggingLevel.Critical,
+ _ => Protocol.LoggingLevel.Emergency,
};
}
diff --git a/src/ModelContextProtocol/Server/McpServerExtensions.cs b/src/ModelContextProtocol/Server/McpServerExtensions.cs
index be43f6f..0736b86 100644
--- a/src/ModelContextProtocol/Server/McpServerExtensions.cs
+++ b/src/ModelContextProtocol/Server/McpServerExtensions.cs
@@ -1,9 +1,6 @@
using Microsoft.Extensions.AI;
using Microsoft.Extensions.Logging;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Types;
-using ModelContextProtocol.Utils;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using System.Runtime.CompilerServices;
using System.Text;
using System.Text.Json;
diff --git a/src/ModelContextProtocol/Server/McpServerFactory.cs b/src/ModelContextProtocol/Server/McpServerFactory.cs
index 89a6fd0..50d4188 100644
--- a/src/ModelContextProtocol/Server/McpServerFactory.cs
+++ b/src/ModelContextProtocol/Server/McpServerFactory.cs
@@ -1,6 +1,5 @@
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Utils;
using Microsoft.Extensions.Logging;
+using ModelContextProtocol.Protocol;
namespace ModelContextProtocol.Server;
diff --git a/src/ModelContextProtocol/Server/McpServerHandlers.cs b/src/ModelContextProtocol/Server/McpServerHandlers.cs
index b749ab0..83b7ad9 100644
--- a/src/ModelContextProtocol/Server/McpServerHandlers.cs
+++ b/src/ModelContextProtocol/Server/McpServerHandlers.cs
@@ -1,6 +1,5 @@
using Microsoft.Extensions.DependencyInjection;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
namespace ModelContextProtocol.Server;
diff --git a/src/ModelContextProtocol/Server/McpServerOptions.cs b/src/ModelContextProtocol/Server/McpServerOptions.cs
index bae26ca..3d6de61 100644
--- a/src/ModelContextProtocol/Server/McpServerOptions.cs
+++ b/src/ModelContextProtocol/Server/McpServerOptions.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
namespace ModelContextProtocol.Server;
diff --git a/src/ModelContextProtocol/Server/McpServerPrimitiveCollection.cs b/src/ModelContextProtocol/Server/McpServerPrimitiveCollection.cs
index 871f55a..7bfe023 100644
--- a/src/ModelContextProtocol/Server/McpServerPrimitiveCollection.cs
+++ b/src/ModelContextProtocol/Server/McpServerPrimitiveCollection.cs
@@ -1,4 +1,3 @@
-using ModelContextProtocol.Utils;
using System.Collections;
using System.Collections.Concurrent;
using System.Diagnostics.CodeAnalysis;
diff --git a/src/ModelContextProtocol/Server/McpServerPrompt.cs b/src/ModelContextProtocol/Server/McpServerPrompt.cs
index df2650c..2260617 100644
--- a/src/ModelContextProtocol/Server/McpServerPrompt.cs
+++ b/src/ModelContextProtocol/Server/McpServerPrompt.cs
@@ -1,8 +1,7 @@
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using System.Reflection;
using System.Text.Json;
diff --git a/src/ModelContextProtocol/Server/McpServerPromptAttribute.cs b/src/ModelContextProtocol/Server/McpServerPromptAttribute.cs
index ed66a41..d47b02c 100644
--- a/src/ModelContextProtocol/Server/McpServerPromptAttribute.cs
+++ b/src/ModelContextProtocol/Server/McpServerPromptAttribute.cs
@@ -1,7 +1,6 @@
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using System.Text.Json;
namespace ModelContextProtocol.Server;
diff --git a/src/ModelContextProtocol/Server/McpServerPromptCreateOptions.cs b/src/ModelContextProtocol/Server/McpServerPromptCreateOptions.cs
index 17f6dfd..77584c4 100644
--- a/src/ModelContextProtocol/Server/McpServerPromptCreateOptions.cs
+++ b/src/ModelContextProtocol/Server/McpServerPromptCreateOptions.cs
@@ -1,5 +1,4 @@
using Microsoft.Extensions.AI;
-using ModelContextProtocol.Utils.Json;
using System.ComponentModel;
using System.Text.Json;
diff --git a/src/ModelContextProtocol/Server/McpServerResource.cs b/src/ModelContextProtocol/Server/McpServerResource.cs
index b6ec15f..346c032 100644
--- a/src/ModelContextProtocol/Server/McpServerResource.cs
+++ b/src/ModelContextProtocol/Server/McpServerResource.cs
@@ -1,7 +1,6 @@
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using System.Reflection;
namespace ModelContextProtocol.Server;
diff --git a/src/ModelContextProtocol/Server/McpServerResourceAttribute.cs b/src/ModelContextProtocol/Server/McpServerResourceAttribute.cs
index c598923..9c5347c 100644
--- a/src/ModelContextProtocol/Server/McpServerResourceAttribute.cs
+++ b/src/ModelContextProtocol/Server/McpServerResourceAttribute.cs
@@ -1,7 +1,6 @@
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
namespace ModelContextProtocol.Server;
diff --git a/src/ModelContextProtocol/Server/McpServerTool.cs b/src/ModelContextProtocol/Server/McpServerTool.cs
index 67458ef..f2aa2d0 100644
--- a/src/ModelContextProtocol/Server/McpServerTool.cs
+++ b/src/ModelContextProtocol/Server/McpServerTool.cs
@@ -1,9 +1,7 @@
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Types;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using System.Reflection;
using System.Text.Json;
diff --git a/src/ModelContextProtocol/Server/McpServerToolAttribute.cs b/src/ModelContextProtocol/Server/McpServerToolAttribute.cs
index 8c7f70a..e096a15 100644
--- a/src/ModelContextProtocol/Server/McpServerToolAttribute.cs
+++ b/src/ModelContextProtocol/Server/McpServerToolAttribute.cs
@@ -1,8 +1,6 @@
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Types;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using System.Text.Json;
namespace ModelContextProtocol.Server;
diff --git a/src/ModelContextProtocol/Server/McpServerToolCreateOptions.cs b/src/ModelContextProtocol/Server/McpServerToolCreateOptions.cs
index 14fcb7c..80d6385 100644
--- a/src/ModelContextProtocol/Server/McpServerToolCreateOptions.cs
+++ b/src/ModelContextProtocol/Server/McpServerToolCreateOptions.cs
@@ -1,5 +1,4 @@
using Microsoft.Extensions.AI;
-using ModelContextProtocol.Utils.Json;
using System.ComponentModel;
using System.Text.Json;
diff --git a/src/ModelContextProtocol/Server/RequestContext.cs b/src/ModelContextProtocol/Server/RequestContext.cs
index 88f2d13..7437fae 100644
--- a/src/ModelContextProtocol/Server/RequestContext.cs
+++ b/src/ModelContextProtocol/Server/RequestContext.cs
@@ -1,5 +1,4 @@
using Microsoft.Extensions.DependencyInjection;
-using ModelContextProtocol.Utils;
namespace ModelContextProtocol.Server;
diff --git a/src/ModelContextProtocol/Hosting/SingleSessionMcpServerHostedService.cs b/src/ModelContextProtocol/Server/SingleSessionMcpServerHostedService.cs
similarity index 91%
rename from src/ModelContextProtocol/Hosting/SingleSessionMcpServerHostedService.cs
rename to src/ModelContextProtocol/Server/SingleSessionMcpServerHostedService.cs
index 7079127..6f266ec 100644
--- a/src/ModelContextProtocol/Hosting/SingleSessionMcpServerHostedService.cs
+++ b/src/ModelContextProtocol/Server/SingleSessionMcpServerHostedService.cs
@@ -1,7 +1,6 @@
using Microsoft.Extensions.Hosting;
-using ModelContextProtocol.Server;
-namespace ModelContextProtocol.Hosting;
+namespace ModelContextProtocol.Server;
///
/// Hosted service for a single-session (e.g. stdio) MCP server.
diff --git a/src/ModelContextProtocol/Protocol/Transport/SseResponseStreamTransport.cs b/src/ModelContextProtocol/Server/SseResponseStreamTransport.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Transport/SseResponseStreamTransport.cs
rename to src/ModelContextProtocol/Server/SseResponseStreamTransport.cs
index f830862..82562d9 100644
--- a/src/ModelContextProtocol/Protocol/Transport/SseResponseStreamTransport.cs
+++ b/src/ModelContextProtocol/Server/SseResponseStreamTransport.cs
@@ -1,8 +1,7 @@
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Utils;
+using ModelContextProtocol.Protocol;
using System.Threading.Channels;
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Server;
///
/// Provides an implementation using Server-Sent Events (SSE) for server-to-client communication.
diff --git a/src/ModelContextProtocol/Protocol/Transport/SseWriter.cs b/src/ModelContextProtocol/Server/SseWriter.cs
similarity index 96%
rename from src/ModelContextProtocol/Protocol/Transport/SseWriter.cs
rename to src/ModelContextProtocol/Server/SseWriter.cs
index c2cce9f..18571e2 100644
--- a/src/ModelContextProtocol/Protocol/Transport/SseWriter.cs
+++ b/src/ModelContextProtocol/Server/SseWriter.cs
@@ -1,13 +1,11 @@
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Utils;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using System.Buffers;
using System.Net.ServerSentEvents;
using System.Text;
using System.Text.Json;
using System.Threading.Channels;
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Server;
internal sealed class SseWriter(string? messageEndpoint = null, BoundedChannelOptions? channelOptions = null) : IAsyncDisposable
{
diff --git a/src/ModelContextProtocol/Protocol/Transport/StdioServerTransport.cs b/src/ModelContextProtocol/Server/StdioServerTransport.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Transport/StdioServerTransport.cs
rename to src/ModelContextProtocol/Server/StdioServerTransport.cs
index 00b5884..df7b008 100644
--- a/src/ModelContextProtocol/Protocol/Transport/StdioServerTransport.cs
+++ b/src/ModelContextProtocol/Server/StdioServerTransport.cs
@@ -1,9 +1,8 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
-using ModelContextProtocol.Server;
-using ModelContextProtocol.Utils;
+using ModelContextProtocol.Protocol;
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Server;
///
/// Provides an implemented via "stdio" (standard input/output).
diff --git a/src/ModelContextProtocol/Protocol/Transport/StreamServerTransport.cs b/src/ModelContextProtocol/Server/StreamServerTransport.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Transport/StreamServerTransport.cs
rename to src/ModelContextProtocol/Server/StreamServerTransport.cs
index a2b9fd4..9528e4f 100644
--- a/src/ModelContextProtocol/Protocol/Transport/StreamServerTransport.cs
+++ b/src/ModelContextProtocol/Server/StreamServerTransport.cs
@@ -1,12 +1,10 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Utils;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using System.Text;
using System.Text.Json;
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Server;
///
/// Provides an implemented using a pair of input and output streams.
diff --git a/src/ModelContextProtocol/Protocol/Transport/StreamableHttpPostTransport.cs b/src/ModelContextProtocol/Server/StreamableHttpPostTransport.cs
similarity index 96%
rename from src/ModelContextProtocol/Protocol/Transport/StreamableHttpPostTransport.cs
rename to src/ModelContextProtocol/Server/StreamableHttpPostTransport.cs
index ce6e33c..27b8ccd 100644
--- a/src/ModelContextProtocol/Protocol/Transport/StreamableHttpPostTransport.cs
+++ b/src/ModelContextProtocol/Server/StreamableHttpPostTransport.cs
@@ -1,12 +1,11 @@
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using System.IO.Pipelines;
using System.Net.ServerSentEvents;
using System.Runtime.CompilerServices;
using System.Text.Json;
using System.Threading.Channels;
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Server;
///
/// Handles processing the request/response body pairs for the Streamable HTTP transport.
diff --git a/src/ModelContextProtocol/Protocol/Transport/StreamableHttpServerTransport.cs b/src/ModelContextProtocol/Server/StreamableHttpServerTransport.cs
similarity index 97%
rename from src/ModelContextProtocol/Protocol/Transport/StreamableHttpServerTransport.cs
rename to src/ModelContextProtocol/Server/StreamableHttpServerTransport.cs
index 9ec8045..6b024ff 100644
--- a/src/ModelContextProtocol/Protocol/Transport/StreamableHttpServerTransport.cs
+++ b/src/ModelContextProtocol/Server/StreamableHttpServerTransport.cs
@@ -1,9 +1,8 @@
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using System.IO.Pipelines;
using System.Threading.Channels;
-namespace ModelContextProtocol.Protocol.Transport;
+namespace ModelContextProtocol.Server;
///
/// Provides an implementation using Server-Sent Events (SSE) for server-to-client communication.
diff --git a/src/ModelContextProtocol/TokenProgress.cs b/src/ModelContextProtocol/TokenProgress.cs
index 62834e7..f222fbf 100644
--- a/src/ModelContextProtocol/TokenProgress.cs
+++ b/src/ModelContextProtocol/TokenProgress.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Messages;
+using ModelContextProtocol.Protocol;
namespace ModelContextProtocol;
diff --git a/src/ModelContextProtocol/UriTemplate.cs b/src/ModelContextProtocol/UriTemplate.cs
index b224706..bc6b70c 100644
--- a/src/ModelContextProtocol/UriTemplate.cs
+++ b/src/ModelContextProtocol/UriTemplate.cs
@@ -1,5 +1,4 @@
-using ModelContextProtocol.Utils;
-#if NET
+#if NET
using System.Buffers;
#endif
using System.Diagnostics;
diff --git a/src/ModelContextProtocol/Utils/Json/CustomizableJsonStringEnumConverter.cs b/src/ModelContextProtocol/Utils/Json/CustomizableJsonStringEnumConverter.cs
deleted file mode 100644
index 37888c2..0000000
--- a/src/ModelContextProtocol/Utils/Json/CustomizableJsonStringEnumConverter.cs
+++ /dev/null
@@ -1,91 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-using System.ComponentModel;
-using System.Diagnostics.CodeAnalysis;
-using System.Reflection;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-// NOTE:
-// This is a workaround for lack of System.Text.Json's JsonStringEnumConverter
-// 9.x support for JsonStringEnumMemberNameAttribute. Once all builds use the System.Text.Json 9.x
-// version, this whole file can be removed. Note that the type is public so that external source
-// generators can use it, so removing it is a potential breaking change.
-
-namespace ModelContextProtocol.Utils.Json;
-
-///
-/// A JSON converter for enums that allows customizing the serialized string value of enum members
-/// using the .
-///
-/// The enum type to convert.
-///
-/// This is a temporary workaround for lack of System.Text.Json's JsonStringEnumConverter<T>
-/// 9.x support for custom enum member naming. It will be replaced by the built-in functionality
-/// once .NET 9 is fully adopted.
-///
-[EditorBrowsable(EditorBrowsableState.Never)]
-public sealed class CustomizableJsonStringEnumConverter<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] TEnum> :
- JsonStringEnumConverter where TEnum : struct, Enum
-{
-#if !NET9_0_OR_GREATER
- ///
- /// Initializes a new instance of the class.
- ///
- ///
- /// The converter automatically detects any enum members decorated with
- /// and uses those values during serialization and deserialization.
- ///
- public CustomizableJsonStringEnumConverter() :
- base(namingPolicy: ResolveNamingPolicy())
- {
- }
-
- private static JsonNamingPolicy? ResolveNamingPolicy()
- {
- var map = typeof(TEnum).GetFields(BindingFlags.Public | BindingFlags.Static)
- .Select(f => (f.Name, AttributeName: f.GetCustomAttribute()?.Name))
- .Where(pair => pair.AttributeName != null)
- .ToDictionary(pair => pair.Name, pair => pair.AttributeName);
-
- return map.Count > 0 ? new EnumMemberNamingPolicy(map!) : null;
- }
-
- private sealed class EnumMemberNamingPolicy(Dictionary map) : JsonNamingPolicy
- {
- public override string ConvertName(string name) =>
- map.TryGetValue(name, out string? newName) ?
- newName :
- name;
- }
-#endif
-}
-
-#if !NET9_0_OR_GREATER
-///
-/// Determines the custom string value that should be used when serializing an enum member using JSON.
-///
-///
-/// This attribute is a temporary workaround for lack of System.Text.Json's support for custom enum member naming
-/// in versions prior to .NET 9. It works together with
-/// to provide customized string representations of enum values during JSON serialization and deserialization.
-///
-[AttributeUsage(AttributeTargets.Field, AllowMultiple = false)]
-internal sealed class JsonStringEnumMemberNameAttribute : Attribute
-{
- ///
- /// Creates new attribute instance with a specified enum member name.
- ///
- /// The name to apply to the current enum member when serialized to JSON.
- public JsonStringEnumMemberNameAttribute(string name)
- {
- Name = name;
- }
-
- ///
- /// Gets the custom JSON name of the enum member.
- ///
- public string Name { get; }
-}
-#endif
\ No newline at end of file
diff --git a/src/ModelContextProtocol/Utils/Json/JsonRpcMessageConverter.cs b/src/ModelContextProtocol/Utils/Json/JsonRpcMessageConverter.cs
deleted file mode 100644
index 146185c..0000000
--- a/src/ModelContextProtocol/Utils/Json/JsonRpcMessageConverter.cs
+++ /dev/null
@@ -1,110 +0,0 @@
-using ModelContextProtocol.Protocol.Messages;
-using System.ComponentModel;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-namespace ModelContextProtocol.Utils.Json;
-
-///
-/// Provides a for messages,
-/// handling polymorphic deserialization of different message types.
-///
-///
-///
-/// This converter is responsible for correctly deserializing JSON-RPC messages into their appropriate
-/// concrete types based on the message structure. It analyzes the JSON payload and determines if it
-/// represents a request, notification, successful response, or error response.
-///
-///
-/// The type determination rules follow the JSON-RPC 2.0 specification:
-///
-/// - Messages with "method" and "id" properties are deserialized as .
-/// - Messages with "method" but no "id" property are deserialized as .
-/// - Messages with "id" and "result" properties are deserialized as .
-/// - Messages with "id" and "error" properties are deserialized as .
-///
-///
-///
-[EditorBrowsable(EditorBrowsableState.Never)]
-public sealed class JsonRpcMessageConverter : JsonConverter
-{
- ///
- public override JsonRpcMessage? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
- {
- if (reader.TokenType != JsonTokenType.StartObject)
- {
- throw new JsonException("Expected StartObject token");
- }
-
- using var doc = JsonDocument.ParseValue(ref reader);
- var root = doc.RootElement;
-
- // All JSON-RPC messages must have a jsonrpc property with value "2.0"
- if (!root.TryGetProperty("jsonrpc", out var versionProperty) ||
- versionProperty.GetString() != "2.0")
- {
- throw new JsonException("Invalid or missing jsonrpc version");
- }
-
- // Determine the message type based on the presence of id, method, and error properties
- bool hasId = root.TryGetProperty("id", out _);
- bool hasMethod = root.TryGetProperty("method", out _);
- bool hasError = root.TryGetProperty("error", out _);
-
- var rawText = root.GetRawText();
-
- // Messages with an id but no method are responses
- if (hasId && !hasMethod)
- {
- // Messages with an error property are error responses
- if (hasError)
- {
- return JsonSerializer.Deserialize(rawText, options.GetTypeInfo());
- }
-
- // Messages with a result property are success responses
- if (root.TryGetProperty("result", out _))
- {
- return JsonSerializer.Deserialize(rawText, options.GetTypeInfo());
- }
-
- throw new JsonException("Response must have either result or error");
- }
-
- // Messages with a method but no id are notifications
- if (hasMethod && !hasId)
- {
- return JsonSerializer.Deserialize(rawText, options.GetTypeInfo());
- }
-
- // Messages with both method and id are requests
- if (hasMethod && hasId)
- {
- return JsonSerializer.Deserialize(rawText, options.GetTypeInfo());
- }
-
- throw new JsonException("Invalid JSON-RPC message format");
- }
-
- ///
- public override void Write(Utf8JsonWriter writer, JsonRpcMessage value, JsonSerializerOptions options)
- {
- switch (value)
- {
- case JsonRpcRequest request:
- JsonSerializer.Serialize(writer, request, options.GetTypeInfo());
- break;
- case JsonRpcNotification notification:
- JsonSerializer.Serialize(writer, notification, options.GetTypeInfo());
- break;
- case JsonRpcResponse response:
- JsonSerializer.Serialize(writer, response, options.GetTypeInfo());
- break;
- case JsonRpcError error:
- JsonSerializer.Serialize(writer, error, options.GetTypeInfo());
- break;
- default:
- throw new JsonException($"Unknown JSON-RPC message type: {value.GetType()}");
- }
- }
-}
\ No newline at end of file
diff --git a/tests/Common/Utils/TestServerTransport.cs b/tests/Common/Utils/TestServerTransport.cs
index aa01a89..ec27122 100644
--- a/tests/Common/Utils/TestServerTransport.cs
+++ b/tests/Common/Utils/TestServerTransport.cs
@@ -1,7 +1,4 @@
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Protocol.Types;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using System.Text.Json;
using System.Threading.Channels;
diff --git a/tests/Common/Utils/XunitLoggerProvider.cs b/tests/Common/Utils/XunitLoggerProvider.cs
index f66a828..9e77c1f 100644
--- a/tests/Common/Utils/XunitLoggerProvider.cs
+++ b/tests/Common/Utils/XunitLoggerProvider.cs
@@ -1,6 +1,6 @@
-using System.Globalization;
+using Microsoft.Extensions.Logging;
+using System.Globalization;
using System.Text;
-using Microsoft.Extensions.Logging;
namespace ModelContextProtocol.Tests.Utils;
diff --git a/tests/ModelContextProtocol.AspNetCore.Tests/HttpServerIntegrationTests.cs b/tests/ModelContextProtocol.AspNetCore.Tests/HttpServerIntegrationTests.cs
index 1aefb84..ee71753 100644
--- a/tests/ModelContextProtocol.AspNetCore.Tests/HttpServerIntegrationTests.cs
+++ b/tests/ModelContextProtocol.AspNetCore.Tests/HttpServerIntegrationTests.cs
@@ -1,6 +1,5 @@
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Tests.Utils;
namespace ModelContextProtocol.AspNetCore.Tests;
diff --git a/tests/ModelContextProtocol.AspNetCore.Tests/MapMcpSseTests.cs b/tests/ModelContextProtocol.AspNetCore.Tests/MapMcpSseTests.cs
index 602aa0c..ef4277a 100644
--- a/tests/ModelContextProtocol.AspNetCore.Tests/MapMcpSseTests.cs
+++ b/tests/ModelContextProtocol.AspNetCore.Tests/MapMcpSseTests.cs
@@ -1,6 +1,5 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
-using ModelContextProtocol.Client;
namespace ModelContextProtocol.AspNetCore.Tests;
diff --git a/tests/ModelContextProtocol.AspNetCore.Tests/MapMcpStatelessTests.cs b/tests/ModelContextProtocol.AspNetCore.Tests/MapMcpStatelessTests.cs
index 030701c..5552b53 100644
--- a/tests/ModelContextProtocol.AspNetCore.Tests/MapMcpStatelessTests.cs
+++ b/tests/ModelContextProtocol.AspNetCore.Tests/MapMcpStatelessTests.cs
@@ -1,7 +1,4 @@
-using Microsoft.AspNetCore.Builder;
-using Microsoft.Extensions.DependencyInjection;
-
-namespace ModelContextProtocol.AspNetCore.Tests;
+namespace ModelContextProtocol.AspNetCore.Tests;
public class MapMcpStatelessTests(ITestOutputHelper outputHelper) : MapMcpStreamableHttpTests(outputHelper)
{
diff --git a/tests/ModelContextProtocol.AspNetCore.Tests/MapMcpTests.cs b/tests/ModelContextProtocol.AspNetCore.Tests/MapMcpTests.cs
index 36ee4e8..cf49fee 100644
--- a/tests/ModelContextProtocol.AspNetCore.Tests/MapMcpTests.cs
+++ b/tests/ModelContextProtocol.AspNetCore.Tests/MapMcpTests.cs
@@ -3,7 +3,6 @@ using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using ModelContextProtocol.AspNetCore.Tests.Utils;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Transport;
using ModelContextProtocol.Server;
using System.ComponentModel;
using System.Net;
diff --git a/tests/ModelContextProtocol.AspNetCore.Tests/SseIntegrationTests.cs b/tests/ModelContextProtocol.AspNetCore.Tests/SseIntegrationTests.cs
index 340cfda..24acd0b 100644
--- a/tests/ModelContextProtocol.AspNetCore.Tests/SseIntegrationTests.cs
+++ b/tests/ModelContextProtocol.AspNetCore.Tests/SseIntegrationTests.cs
@@ -6,10 +6,8 @@ using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using ModelContextProtocol.AspNetCore.Tests.Utils;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
-using ModelContextProtocol.Utils.Json;
using System.Text.Json.Serialization;
using TestServerWithHosting.Tools;
diff --git a/tests/ModelContextProtocol.AspNetCore.Tests/SseServerIntegrationTestFixture.cs b/tests/ModelContextProtocol.AspNetCore.Tests/SseServerIntegrationTestFixture.cs
index 5553163..1eee020 100644
--- a/tests/ModelContextProtocol.AspNetCore.Tests/SseServerIntegrationTestFixture.cs
+++ b/tests/ModelContextProtocol.AspNetCore.Tests/SseServerIntegrationTestFixture.cs
@@ -1,7 +1,6 @@
using Microsoft.Extensions.Logging;
using ModelContextProtocol.AspNetCore.Tests.Utils;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Transport;
using ModelContextProtocol.Tests.Utils;
using ModelContextProtocol.TestSseServer;
diff --git a/tests/ModelContextProtocol.AspNetCore.Tests/SseServerIntegrationTests.cs b/tests/ModelContextProtocol.AspNetCore.Tests/SseServerIntegrationTests.cs
index 7fbea21..eb89912 100644
--- a/tests/ModelContextProtocol.AspNetCore.Tests/SseServerIntegrationTests.cs
+++ b/tests/ModelContextProtocol.AspNetCore.Tests/SseServerIntegrationTests.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Transport;
+using ModelContextProtocol.Client;
using System.Net;
using System.Text;
diff --git a/tests/ModelContextProtocol.AspNetCore.Tests/StatelessServerIntegrationTests.cs b/tests/ModelContextProtocol.AspNetCore.Tests/StatelessServerIntegrationTests.cs
index 21b9cac..b1b6180 100644
--- a/tests/ModelContextProtocol.AspNetCore.Tests/StatelessServerIntegrationTests.cs
+++ b/tests/ModelContextProtocol.AspNetCore.Tests/StatelessServerIntegrationTests.cs
@@ -1,11 +1,9 @@
-using ModelContextProtocol.Protocol.Transport;
-using System.Text;
+using ModelContextProtocol.Client;
namespace ModelContextProtocol.AspNetCore.Tests;
public class StatelessServerIntegrationTests(SseServerIntegrationTestFixture fixture, ITestOutputHelper testOutputHelper)
: StreamableHttpServerIntegrationTests(fixture, testOutputHelper)
-
{
protected override SseClientTransportOptions ClientTransportOptions => new()
{
diff --git a/tests/ModelContextProtocol.AspNetCore.Tests/StatelessServerTests.cs b/tests/ModelContextProtocol.AspNetCore.Tests/StatelessServerTests.cs
index 5b398b9..2f364be 100644
--- a/tests/ModelContextProtocol.AspNetCore.Tests/StatelessServerTests.cs
+++ b/tests/ModelContextProtocol.AspNetCore.Tests/StatelessServerTests.cs
@@ -2,9 +2,7 @@
using Microsoft.Extensions.DependencyInjection;
using ModelContextProtocol.AspNetCore.Tests.Utils;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using System.Diagnostics;
using System.Net;
diff --git a/tests/ModelContextProtocol.AspNetCore.Tests/StreamableHttpClientConformanceTests.cs b/tests/ModelContextProtocol.AspNetCore.Tests/StreamableHttpClientConformanceTests.cs
index 2d07577..94540f8 100644
--- a/tests/ModelContextProtocol.AspNetCore.Tests/StreamableHttpClientConformanceTests.cs
+++ b/tests/ModelContextProtocol.AspNetCore.Tests/StreamableHttpClientConformanceTests.cs
@@ -4,11 +4,8 @@ using Microsoft.AspNetCore.Http.Json;
using Microsoft.Extensions.DependencyInjection;
using ModelContextProtocol.AspNetCore.Tests.Utils;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
-using ModelContextProtocol.Utils.Json;
using System.Text.Json;
using System.Text.Json.Serialization.Metadata;
diff --git a/tests/ModelContextProtocol.AspNetCore.Tests/StreamableHttpServerConformanceTests.cs b/tests/ModelContextProtocol.AspNetCore.Tests/StreamableHttpServerConformanceTests.cs
index 196b5b6..17b1234 100644
--- a/tests/ModelContextProtocol.AspNetCore.Tests/StreamableHttpServerConformanceTests.cs
+++ b/tests/ModelContextProtocol.AspNetCore.Tests/StreamableHttpServerConformanceTests.cs
@@ -4,11 +4,9 @@ using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Time.Testing;
using Microsoft.Net.Http.Headers;
using ModelContextProtocol.AspNetCore.Tests.Utils;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using ModelContextProtocol.Tests.Utils;
-using ModelContextProtocol.Utils.Json;
using System.Net;
using System.Net.ServerSentEvents;
using System.Text;
diff --git a/tests/ModelContextProtocol.AspNetCore.Tests/StreamableHttpServerIntegrationTests.cs b/tests/ModelContextProtocol.AspNetCore.Tests/StreamableHttpServerIntegrationTests.cs
index bec3825..64505b3 100644
--- a/tests/ModelContextProtocol.AspNetCore.Tests/StreamableHttpServerIntegrationTests.cs
+++ b/tests/ModelContextProtocol.AspNetCore.Tests/StreamableHttpServerIntegrationTests.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Transport;
+using ModelContextProtocol.Client;
using System.Text;
namespace ModelContextProtocol.AspNetCore.Tests;
diff --git a/tests/ModelContextProtocol.TestServer/Program.cs b/tests/ModelContextProtocol.TestServer/Program.cs
index 6be6025..10f2aec 100644
--- a/tests/ModelContextProtocol.TestServer/Program.cs
+++ b/tests/ModelContextProtocol.TestServer/Program.cs
@@ -1,7 +1,5 @@
using Microsoft.Extensions.Logging;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using Serilog;
using System.Collections.Concurrent;
diff --git a/tests/ModelContextProtocol.TestSseServer/Program.cs b/tests/ModelContextProtocol.TestSseServer/Program.cs
index bfd8568..583d687 100644
--- a/tests/ModelContextProtocol.TestSseServer/Program.cs
+++ b/tests/ModelContextProtocol.TestSseServer/Program.cs
@@ -1,7 +1,6 @@
using Microsoft.AspNetCore.Connections;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
-using ModelContextProtocol.Utils.Json;
using Serilog;
using System.Diagnostics;
using System.Text;
diff --git a/tests/ModelContextProtocol.Tests/Client/McpClientExtensionsTests.cs b/tests/ModelContextProtocol.Tests/Client/McpClientExtensionsTests.cs
index adef002..bc1787e 100644
--- a/tests/ModelContextProtocol.Tests/Client/McpClientExtensionsTests.cs
+++ b/tests/ModelContextProtocol.Tests/Client/McpClientExtensionsTests.cs
@@ -2,10 +2,8 @@ using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
-using ModelContextProtocol.Utils.Json;
using Moq;
using System.Text.Json;
using System.Text.Json.Serialization.Metadata;
diff --git a/tests/ModelContextProtocol.Tests/Client/McpClientFactoryTests.cs b/tests/ModelContextProtocol.Tests/Client/McpClientFactoryTests.cs
index c5e7c70..2b8b756 100644
--- a/tests/ModelContextProtocol.Tests/Client/McpClientFactoryTests.cs
+++ b/tests/ModelContextProtocol.Tests/Client/McpClientFactoryTests.cs
@@ -1,9 +1,6 @@
using Microsoft.Extensions.Logging;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Protocol.Types;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using Moq;
using System.IO.Pipelines;
using System.Text.Json;
diff --git a/tests/ModelContextProtocol.Tests/Client/McpClientResourceTemplateTests.cs b/tests/ModelContextProtocol.Tests/Client/McpClientResourceTemplateTests.cs
index e442883..634afa9 100644
--- a/tests/ModelContextProtocol.Tests/Client/McpClientResourceTemplateTests.cs
+++ b/tests/ModelContextProtocol.Tests/Client/McpClientResourceTemplateTests.cs
@@ -1,6 +1,6 @@
using Microsoft.Extensions.DependencyInjection;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using System.Text.Json;
using System.Text.Json.Serialization;
diff --git a/tests/ModelContextProtocol.Tests/ClientIntegrationTestFixture.cs b/tests/ModelContextProtocol.Tests/ClientIntegrationTestFixture.cs
index 3412033..dec5ad0 100644
--- a/tests/ModelContextProtocol.Tests/ClientIntegrationTestFixture.cs
+++ b/tests/ModelContextProtocol.Tests/ClientIntegrationTestFixture.cs
@@ -1,6 +1,5 @@
using Microsoft.Extensions.Logging;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Transport;
using System.Runtime.InteropServices;
namespace ModelContextProtocol.Tests;
diff --git a/tests/ModelContextProtocol.Tests/ClientIntegrationTests.cs b/tests/ModelContextProtocol.Tests/ClientIntegrationTests.cs
index 3e1ac8e..14fd02e 100644
--- a/tests/ModelContextProtocol.Tests/ClientIntegrationTests.cs
+++ b/tests/ModelContextProtocol.Tests/ClientIntegrationTests.cs
@@ -1,10 +1,7 @@
using Microsoft.Extensions.AI;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Tests.Utils;
-using ModelContextProtocol.Utils.Json;
using OpenAI;
using System.Text.Json;
using System.Text.Json.Serialization;
diff --git a/tests/ModelContextProtocol.Tests/ClientServerTestBase.cs b/tests/ModelContextProtocol.Tests/ClientServerTestBase.cs
index c3c4586..326b235 100644
--- a/tests/ModelContextProtocol.Tests/ClientServerTestBase.cs
+++ b/tests/ModelContextProtocol.Tests/ClientServerTestBase.cs
@@ -1,7 +1,7 @@
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Transport;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using ModelContextProtocol.Tests.Utils;
using System.IO.Pipelines;
diff --git a/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsHandlerTests.cs b/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsHandlerTests.cs
index f304f83..45e58fe 100644
--- a/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsHandlerTests.cs
+++ b/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsHandlerTests.cs
@@ -1,7 +1,7 @@
-using ModelContextProtocol.Protocol.Types;
-using ModelContextProtocol.Server;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
+using ModelContextProtocol.Protocol;
+using ModelContextProtocol.Server;
using Moq;
namespace ModelContextProtocol.Tests.Configuration;
diff --git a/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsPromptsTests.cs b/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsPromptsTests.cs
index d0cfd06..501730b 100644
--- a/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsPromptsTests.cs
+++ b/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsPromptsTests.cs
@@ -2,8 +2,7 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using System.ComponentModel;
using System.Text.Json.Serialization;
diff --git a/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsResourcesTests.cs b/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsResourcesTests.cs
index 3512277..e857669 100644
--- a/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsResourcesTests.cs
+++ b/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsResourcesTests.cs
@@ -2,8 +2,7 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using System.ComponentModel;
using System.Threading.Channels;
diff --git a/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsToolsTests.cs b/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsToolsTests.cs
index fd33f1e..010d1b0 100644
--- a/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsToolsTests.cs
+++ b/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsToolsTests.cs
@@ -3,11 +3,8 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
-using ModelContextProtocol.Utils.Json;
using System.Collections.Concurrent;
using System.ComponentModel;
using System.IO.Pipelines;
diff --git a/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsTransportsTests.cs b/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsTransportsTests.cs
index 51663d7..6183c35 100644
--- a/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsTransportsTests.cs
+++ b/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsTransportsTests.cs
@@ -1,6 +1,7 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
-using ModelContextProtocol.Protocol.Transport;
+using ModelContextProtocol.Protocol;
+using ModelContextProtocol.Server;
using Moq;
using System.IO.Pipelines;
diff --git a/tests/ModelContextProtocol.Tests/Configuration/McpServerScopedTests.cs b/tests/ModelContextProtocol.Tests/Configuration/McpServerScopedTests.cs
index 5815a62..ef0fbf1 100644
--- a/tests/ModelContextProtocol.Tests/Configuration/McpServerScopedTests.cs
+++ b/tests/ModelContextProtocol.Tests/Configuration/McpServerScopedTests.cs
@@ -1,7 +1,6 @@
using Microsoft.Extensions.DependencyInjection;
using ModelContextProtocol.Client;
using ModelContextProtocol.Server;
-using ModelContextProtocol.Utils.Json;
using System.Text.Json;
using System.Text.Json.Serialization;
diff --git a/tests/ModelContextProtocol.Tests/DiagnosticTests.cs b/tests/ModelContextProtocol.Tests/DiagnosticTests.cs
index 490b792..116c62a 100644
--- a/tests/ModelContextProtocol.Tests/DiagnosticTests.cs
+++ b/tests/ModelContextProtocol.Tests/DiagnosticTests.cs
@@ -1,5 +1,5 @@
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Transport;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using OpenTelemetry.Trace;
using System.Diagnostics;
diff --git a/tests/ModelContextProtocol.Tests/DockerEverythingServerTests.cs b/tests/ModelContextProtocol.Tests/DockerEverythingServerTests.cs
index d0c5960..acc5290 100644
--- a/tests/ModelContextProtocol.Tests/DockerEverythingServerTests.cs
+++ b/tests/ModelContextProtocol.Tests/DockerEverythingServerTests.cs
@@ -1,6 +1,5 @@
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Transport;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Tests.Utils;
namespace ModelContextProtocol.Tests;
diff --git a/tests/ModelContextProtocol.Tests/GlobalUsings.cs b/tests/ModelContextProtocol.Tests/GlobalUsings.cs
index 6d12962..c802f44 100644
--- a/tests/ModelContextProtocol.Tests/GlobalUsings.cs
+++ b/tests/ModelContextProtocol.Tests/GlobalUsings.cs
@@ -1,2 +1 @@
global using Xunit;
-global using System.Net.Http;
\ No newline at end of file
diff --git a/tests/ModelContextProtocol.Tests/McpJsonUtilitiesTests.cs b/tests/ModelContextProtocol.Tests/McpJsonUtilitiesTests.cs
index 214bbc1..18dc680 100644
--- a/tests/ModelContextProtocol.Tests/McpJsonUtilitiesTests.cs
+++ b/tests/ModelContextProtocol.Tests/McpJsonUtilitiesTests.cs
@@ -1,5 +1,4 @@
-using ModelContextProtocol.Utils.Json;
-using System.Text.Json;
+using System.Text.Json;
namespace ModelContextProtocol.Tests;
diff --git a/tests/ModelContextProtocol.Tests/Protocol/CancellationTests.cs b/tests/ModelContextProtocol.Tests/Protocol/CancellationTests.cs
index ae3f88a..4def279 100644
--- a/tests/ModelContextProtocol.Tests/Protocol/CancellationTests.cs
+++ b/tests/ModelContextProtocol.Tests/Protocol/CancellationTests.cs
@@ -1,6 +1,6 @@
using Microsoft.Extensions.DependencyInjection;
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Messages;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
namespace ModelContextProtocol.Tests;
diff --git a/tests/ModelContextProtocol.Tests/Protocol/ProtocolTypeTests.cs b/tests/ModelContextProtocol.Tests/Protocol/ProtocolTypeTests.cs
index 7821d2a..df224de 100644
--- a/tests/ModelContextProtocol.Tests/Protocol/ProtocolTypeTests.cs
+++ b/tests/ModelContextProtocol.Tests/Protocol/ProtocolTypeTests.cs
@@ -1,5 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using System.Text.Json;
namespace ModelContextProtocol.Tests.Protocol;
diff --git a/tests/ModelContextProtocol.Tests/Protocol/RequestIdTests.cs b/tests/ModelContextProtocol.Tests/Protocol/RequestIdTests.cs
index 10958d2..e426c74 100644
--- a/tests/ModelContextProtocol.Tests/Protocol/RequestIdTests.cs
+++ b/tests/ModelContextProtocol.Tests/Protocol/RequestIdTests.cs
@@ -1,5 +1,4 @@
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Utils.Json;
+using ModelContextProtocol.Protocol;
using System.Text.Json;
namespace ModelContextProtocol.Tests.Protocol;
diff --git a/tests/ModelContextProtocol.Tests/Server/McpServerDelegatesTests.cs b/tests/ModelContextProtocol.Tests/Server/McpServerDelegatesTests.cs
index 31176bc..cb7d48a 100644
--- a/tests/ModelContextProtocol.Tests/Server/McpServerDelegatesTests.cs
+++ b/tests/ModelContextProtocol.Tests/Server/McpServerDelegatesTests.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
namespace ModelContextProtocol.Tests.Server;
diff --git a/tests/ModelContextProtocol.Tests/Server/McpServerLoggingLevelTests.cs b/tests/ModelContextProtocol.Tests/Server/McpServerLoggingLevelTests.cs
index f8ffc95..7cdbdb5 100644
--- a/tests/ModelContextProtocol.Tests/Server/McpServerLoggingLevelTests.cs
+++ b/tests/ModelContextProtocol.Tests/Server/McpServerLoggingLevelTests.cs
@@ -1,8 +1,9 @@
using Microsoft.Extensions.DependencyInjection;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
namespace ModelContextProtocol.Tests.Server;
+
public class McpServerLoggingLevelTests
{
[Fact]
diff --git a/tests/ModelContextProtocol.Tests/Server/McpServerPromptTests.cs b/tests/ModelContextProtocol.Tests/Server/McpServerPromptTests.cs
index 6d1c765..4428cb1 100644
--- a/tests/ModelContextProtocol.Tests/Server/McpServerPromptTests.cs
+++ b/tests/ModelContextProtocol.Tests/Server/McpServerPromptTests.cs
@@ -1,6 +1,6 @@
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using Moq;
using System.ComponentModel;
diff --git a/tests/ModelContextProtocol.Tests/Server/McpServerResourceTests.cs b/tests/ModelContextProtocol.Tests/Server/McpServerResourceTests.cs
index 631e09b..8682a0e 100644
--- a/tests/ModelContextProtocol.Tests/Server/McpServerResourceTests.cs
+++ b/tests/ModelContextProtocol.Tests/Server/McpServerResourceTests.cs
@@ -1,6 +1,6 @@
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using Moq;
using System.Reflection;
diff --git a/tests/ModelContextProtocol.Tests/Server/McpServerTests.cs b/tests/ModelContextProtocol.Tests/Server/McpServerTests.cs
index 4461541..2fd52cb 100644
--- a/tests/ModelContextProtocol.Tests/Server/McpServerTests.cs
+++ b/tests/ModelContextProtocol.Tests/Server/McpServerTests.cs
@@ -1,9 +1,7 @@
using Microsoft.Extensions.AI;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using ModelContextProtocol.Tests.Utils;
-using ModelContextProtocol.Utils.Json;
using System.Reflection;
using System.Text.Json;
using System.Text.Json.Nodes;
diff --git a/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs b/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs
index 71283ef..cb98d9b 100644
--- a/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs
+++ b/tests/ModelContextProtocol.Tests/Server/McpServerToolTests.cs
@@ -1,8 +1,7 @@
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
-using ModelContextProtocol.Protocol.Types;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
-using ModelContextProtocol.Utils.Json;
using Moq;
using System.Reflection;
using System.Text.Json;
diff --git a/tests/ModelContextProtocol.Tests/StdioServerIntegrationTests.cs b/tests/ModelContextProtocol.Tests/StdioServerIntegrationTests.cs
index a28821f..db22ec2 100644
--- a/tests/ModelContextProtocol.Tests/StdioServerIntegrationTests.cs
+++ b/tests/ModelContextProtocol.Tests/StdioServerIntegrationTests.cs
@@ -1,5 +1,6 @@
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Transport;
+using ModelContextProtocol.Protocol;
+using ModelContextProtocol.Server;
using ModelContextProtocol.Tests.Utils;
using System.Diagnostics;
using System.Runtime.InteropServices;
diff --git a/tests/ModelContextProtocol.Tests/Transport/SseClientTransportTests.cs b/tests/ModelContextProtocol.Tests/Transport/SseClientTransportTests.cs
index 4efe5ec..857e496 100644
--- a/tests/ModelContextProtocol.Tests/Transport/SseClientTransportTests.cs
+++ b/tests/ModelContextProtocol.Tests/Transport/SseClientTransportTests.cs
@@ -1,5 +1,5 @@
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
+using ModelContextProtocol.Client;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Tests.Utils;
using System.Net;
diff --git a/tests/ModelContextProtocol.Tests/Transport/SseResponseStreamTransportTests.cs b/tests/ModelContextProtocol.Tests/Transport/SseResponseStreamTransportTests.cs
index 220746c..416d171 100644
--- a/tests/ModelContextProtocol.Tests/Transport/SseResponseStreamTransportTests.cs
+++ b/tests/ModelContextProtocol.Tests/Transport/SseResponseStreamTransportTests.cs
@@ -1,4 +1,4 @@
-using ModelContextProtocol.Protocol.Transport;
+using ModelContextProtocol.Server;
using ModelContextProtocol.Tests.Utils;
using System.IO.Pipelines;
diff --git a/tests/ModelContextProtocol.Tests/Transport/StdioClientTransportTests.cs b/tests/ModelContextProtocol.Tests/Transport/StdioClientTransportTests.cs
index 8aadf95..7a7f39c 100644
--- a/tests/ModelContextProtocol.Tests/Transport/StdioClientTransportTests.cs
+++ b/tests/ModelContextProtocol.Tests/Transport/StdioClientTransportTests.cs
@@ -1,5 +1,4 @@
using ModelContextProtocol.Client;
-using ModelContextProtocol.Protocol.Transport;
using System.Runtime.InteropServices;
namespace ModelContextProtocol.Tests.Transport;
diff --git a/tests/ModelContextProtocol.Tests/Transport/StdioServerTransportTests.cs b/tests/ModelContextProtocol.Tests/Transport/StdioServerTransportTests.cs
index d2efe77..2428747 100644
--- a/tests/ModelContextProtocol.Tests/Transport/StdioServerTransportTests.cs
+++ b/tests/ModelContextProtocol.Tests/Transport/StdioServerTransportTests.cs
@@ -1,9 +1,7 @@
using Microsoft.Extensions.Options;
-using ModelContextProtocol.Protocol.Messages;
-using ModelContextProtocol.Protocol.Transport;
+using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using ModelContextProtocol.Tests.Utils;
-using ModelContextProtocol.Utils.Json;
using System.IO.Pipelines;
using System.Text;
using System.Text.Json;