diff --git a/Directory.Packages.props b/Directory.Packages.props
index e6ac8c170..04291f301 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -11,6 +11,7 @@
+
diff --git a/ModelContextProtocol.slnx b/ModelContextProtocol.slnx
index cbc39557e..84d5aca72 100644
--- a/ModelContextProtocol.slnx
+++ b/ModelContextProtocol.slnx
@@ -29,6 +29,7 @@
+
diff --git a/README.md b/README.md
index 6ad5aa89a..073243065 100644
--- a/README.md
+++ b/README.md
@@ -4,6 +4,16 @@
The official C# SDK for the [Model Context Protocol](https://modelcontextprotocol.io/), enabling .NET applications, services, and libraries to implement and interact with MCP clients and servers. Please visit our [API documentation](https://modelcontextprotocol.github.io/csharp-sdk/api/ModelContextProtocol.html) for more details on available functionality.
+## Packages
+
+This SDK consists of three main packages:
+
+- **[ModelContextProtocol](https://www.nuget.org/packages/ModelContextProtocol/absoluteLatest)** [](https://www.nuget.org/packages/ModelContextProtocol/absoluteLatest) - The main package with hosting and dependency injection extensions. This is the right fit for most projects that don't need HTTP server capabilities. This README serves as documentation for this package.
+
+- **[ModelContextProtocol.AspNetCore](https://www.nuget.org/packages/ModelContextProtocol.AspNetCore/absoluteLatest)** [](https://www.nuget.org/packages/ModelContextProtocol.AspNetCore/absoluteLatest) - The library for HTTP-based MCP servers. [Documentation](src/ModelContextProtocol.AspNetCore/README.md)
+
+- **[ModelContextProtocol.Core](https://www.nuget.org/packages/ModelContextProtocol.Core/absoluteLatest)** [](https://www.nuget.org/packages/ModelContextProtocol.Core/absoluteLatest) - For people who only need to use the client or low-level server APIs and want the minimum number of dependencies. [Documentation](src/ModelContextProtocol.Core/README.md)
+
> [!NOTE]
> This project is in preview; breaking changes can be introduced without prior notice.
diff --git a/samples/AspNetCoreSseServer/AspNetCoreSseServer.csproj b/samples/AspNetCoreSseServer/AspNetCoreSseServer.csproj
index 8274f7cdc..59ab49828 100644
--- a/samples/AspNetCoreSseServer/AspNetCoreSseServer.csproj
+++ b/samples/AspNetCoreSseServer/AspNetCoreSseServer.csproj
@@ -8,7 +8,6 @@
-
diff --git a/samples/ChatWithTools/ChatWithTools.csproj b/samples/ChatWithTools/ChatWithTools.csproj
index 13bdafc0c..481b86f5b 100644
--- a/samples/ChatWithTools/ChatWithTools.csproj
+++ b/samples/ChatWithTools/ChatWithTools.csproj
@@ -20,7 +20,7 @@
-
+
diff --git a/samples/QuickstartClient/QuickstartClient.csproj b/samples/QuickstartClient/QuickstartClient.csproj
index b68f15e5f..3b233106f 100644
--- a/samples/QuickstartClient/QuickstartClient.csproj
+++ b/samples/QuickstartClient/QuickstartClient.csproj
@@ -13,7 +13,7 @@
-
+
diff --git a/src/ModelContextProtocol.AspNetCore/HttpMcpServerBuilderExtensions.cs b/src/ModelContextProtocol.AspNetCore/HttpMcpServerBuilderExtensions.cs
index a8a63e49e..0cdc4e37b 100644
--- a/src/ModelContextProtocol.AspNetCore/HttpMcpServerBuilderExtensions.cs
+++ b/src/ModelContextProtocol.AspNetCore/HttpMcpServerBuilderExtensions.cs
@@ -1,4 +1,4 @@
-using Microsoft.Extensions.DependencyInjection.Extensions;
+using Microsoft.Extensions.DependencyInjection.Extensions;
using ModelContextProtocol.AspNetCore;
using ModelContextProtocol.Server;
diff --git a/src/ModelContextProtocol.AspNetCore/ModelContextProtocol.AspNetCore.csproj b/src/ModelContextProtocol.AspNetCore/ModelContextProtocol.AspNetCore.csproj
index 1bc4feb01..7968e23f8 100644
--- a/src/ModelContextProtocol.AspNetCore/ModelContextProtocol.AspNetCore.csproj
+++ b/src/ModelContextProtocol.AspNetCore/ModelContextProtocol.AspNetCore.csproj
@@ -19,6 +19,7 @@
+
diff --git a/src/ModelContextProtocol/AIContentExtensions.cs b/src/ModelContextProtocol.Core/AIContentExtensions.cs
similarity index 100%
rename from src/ModelContextProtocol/AIContentExtensions.cs
rename to src/ModelContextProtocol.Core/AIContentExtensions.cs
diff --git a/src/ModelContextProtocol/Client/AutoDetectingClientSessionTransport.cs b/src/ModelContextProtocol.Core/Client/AutoDetectingClientSessionTransport.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/AutoDetectingClientSessionTransport.cs
rename to src/ModelContextProtocol.Core/Client/AutoDetectingClientSessionTransport.cs
diff --git a/src/ModelContextProtocol/Client/HttpTransportMode.cs b/src/ModelContextProtocol.Core/Client/HttpTransportMode.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/HttpTransportMode.cs
rename to src/ModelContextProtocol.Core/Client/HttpTransportMode.cs
diff --git a/src/ModelContextProtocol/Client/IClientTransport.cs b/src/ModelContextProtocol.Core/Client/IClientTransport.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/IClientTransport.cs
rename to src/ModelContextProtocol.Core/Client/IClientTransport.cs
diff --git a/src/ModelContextProtocol/Client/IMcpClient.cs b/src/ModelContextProtocol.Core/Client/IMcpClient.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/IMcpClient.cs
rename to src/ModelContextProtocol.Core/Client/IMcpClient.cs
diff --git a/src/ModelContextProtocol/Client/McpClient.cs b/src/ModelContextProtocol.Core/Client/McpClient.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/McpClient.cs
rename to src/ModelContextProtocol.Core/Client/McpClient.cs
diff --git a/src/ModelContextProtocol/Client/McpClientExtensions.cs b/src/ModelContextProtocol.Core/Client/McpClientExtensions.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/McpClientExtensions.cs
rename to src/ModelContextProtocol.Core/Client/McpClientExtensions.cs
diff --git a/src/ModelContextProtocol/Client/McpClientFactory.cs b/src/ModelContextProtocol.Core/Client/McpClientFactory.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/McpClientFactory.cs
rename to src/ModelContextProtocol.Core/Client/McpClientFactory.cs
diff --git a/src/ModelContextProtocol/Client/McpClientOptions.cs b/src/ModelContextProtocol.Core/Client/McpClientOptions.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/McpClientOptions.cs
rename to src/ModelContextProtocol.Core/Client/McpClientOptions.cs
diff --git a/src/ModelContextProtocol/Client/McpClientPrompt.cs b/src/ModelContextProtocol.Core/Client/McpClientPrompt.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/McpClientPrompt.cs
rename to src/ModelContextProtocol.Core/Client/McpClientPrompt.cs
diff --git a/src/ModelContextProtocol/Client/McpClientResource.cs b/src/ModelContextProtocol.Core/Client/McpClientResource.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/McpClientResource.cs
rename to src/ModelContextProtocol.Core/Client/McpClientResource.cs
diff --git a/src/ModelContextProtocol/Client/McpClientResourceTemplate.cs b/src/ModelContextProtocol.Core/Client/McpClientResourceTemplate.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/McpClientResourceTemplate.cs
rename to src/ModelContextProtocol.Core/Client/McpClientResourceTemplate.cs
diff --git a/src/ModelContextProtocol/Client/McpClientTool.cs b/src/ModelContextProtocol.Core/Client/McpClientTool.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/McpClientTool.cs
rename to src/ModelContextProtocol.Core/Client/McpClientTool.cs
diff --git a/src/ModelContextProtocol/Client/SseClientSessionTransport.cs b/src/ModelContextProtocol.Core/Client/SseClientSessionTransport.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/SseClientSessionTransport.cs
rename to src/ModelContextProtocol.Core/Client/SseClientSessionTransport.cs
diff --git a/src/ModelContextProtocol/Client/SseClientTransport.cs b/src/ModelContextProtocol.Core/Client/SseClientTransport.cs
similarity index 84%
rename from src/ModelContextProtocol/Client/SseClientTransport.cs
rename to src/ModelContextProtocol.Core/Client/SseClientTransport.cs
index 57789c1cc..3fba349b5 100644
--- a/src/ModelContextProtocol/Client/SseClientTransport.cs
+++ b/src/ModelContextProtocol.Core/Client/SseClientTransport.cs
@@ -57,17 +57,13 @@ public SseClientTransport(SseClientTransportOptions transportOptions, HttpClient
///
public async Task ConnectAsync(CancellationToken cancellationToken = default)
{
- switch (_options.TransportMode)
+ return _options.TransportMode switch
{
- case HttpTransportMode.AutoDetect:
- return new AutoDetectingClientSessionTransport(_options, _httpClient, _loggerFactory, Name);
- case HttpTransportMode.StreamableHttp:
- return new StreamableHttpClientSessionTransport(Name, _options, _httpClient, messageChannel: null, _loggerFactory);
- case HttpTransportMode.Sse:
- return await ConnectSseTransportAsync(cancellationToken).ConfigureAwait(false);
- default:
- throw new InvalidOperationException($"Unsupported transport mode: {_options.TransportMode}");
- }
+ HttpTransportMode.AutoDetect => new AutoDetectingClientSessionTransport(_options, _httpClient, _loggerFactory, Name),
+ HttpTransportMode.StreamableHttp => new StreamableHttpClientSessionTransport(Name, _options, _httpClient, messageChannel: null, _loggerFactory),
+ HttpTransportMode.Sse => await ConnectSseTransportAsync(cancellationToken).ConfigureAwait(false),
+ _ => throw new InvalidOperationException($"Unsupported transport mode: {_options.TransportMode}"),
+ };
}
private async Task ConnectSseTransportAsync(CancellationToken cancellationToken)
diff --git a/src/ModelContextProtocol/Client/SseClientTransportOptions.cs b/src/ModelContextProtocol.Core/Client/SseClientTransportOptions.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/SseClientTransportOptions.cs
rename to src/ModelContextProtocol.Core/Client/SseClientTransportOptions.cs
diff --git a/src/ModelContextProtocol/Client/StdioClientSessionTransport.cs b/src/ModelContextProtocol.Core/Client/StdioClientSessionTransport.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/StdioClientSessionTransport.cs
rename to src/ModelContextProtocol.Core/Client/StdioClientSessionTransport.cs
diff --git a/src/ModelContextProtocol/Client/StdioClientTransport.cs b/src/ModelContextProtocol.Core/Client/StdioClientTransport.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/StdioClientTransport.cs
rename to src/ModelContextProtocol.Core/Client/StdioClientTransport.cs
diff --git a/src/ModelContextProtocol/Client/StdioClientTransportOptions.cs b/src/ModelContextProtocol.Core/Client/StdioClientTransportOptions.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/StdioClientTransportOptions.cs
rename to src/ModelContextProtocol.Core/Client/StdioClientTransportOptions.cs
diff --git a/src/ModelContextProtocol/Client/StreamClientSessionTransport.cs b/src/ModelContextProtocol.Core/Client/StreamClientSessionTransport.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/StreamClientSessionTransport.cs
rename to src/ModelContextProtocol.Core/Client/StreamClientSessionTransport.cs
diff --git a/src/ModelContextProtocol/Client/StreamClientTransport.cs b/src/ModelContextProtocol.Core/Client/StreamClientTransport.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/StreamClientTransport.cs
rename to src/ModelContextProtocol.Core/Client/StreamClientTransport.cs
diff --git a/src/ModelContextProtocol/Client/StreamableHttpClientSessionTransport.cs b/src/ModelContextProtocol.Core/Client/StreamableHttpClientSessionTransport.cs
similarity index 100%
rename from src/ModelContextProtocol/Client/StreamableHttpClientSessionTransport.cs
rename to src/ModelContextProtocol.Core/Client/StreamableHttpClientSessionTransport.cs
diff --git a/src/ModelContextProtocol/CustomizableJsonStringEnumConverter.cs b/src/ModelContextProtocol.Core/CustomizableJsonStringEnumConverter.cs
similarity index 100%
rename from src/ModelContextProtocol/CustomizableJsonStringEnumConverter.cs
rename to src/ModelContextProtocol.Core/CustomizableJsonStringEnumConverter.cs
diff --git a/src/ModelContextProtocol/Diagnostics.cs b/src/ModelContextProtocol.Core/Diagnostics.cs
similarity index 100%
rename from src/ModelContextProtocol/Diagnostics.cs
rename to src/ModelContextProtocol.Core/Diagnostics.cs
diff --git a/src/ModelContextProtocol/IMcpEndpoint.cs b/src/ModelContextProtocol.Core/IMcpEndpoint.cs
similarity index 100%
rename from src/ModelContextProtocol/IMcpEndpoint.cs
rename to src/ModelContextProtocol.Core/IMcpEndpoint.cs
diff --git a/src/ModelContextProtocol/McpEndpoint.cs b/src/ModelContextProtocol.Core/McpEndpoint.cs
similarity index 100%
rename from src/ModelContextProtocol/McpEndpoint.cs
rename to src/ModelContextProtocol.Core/McpEndpoint.cs
diff --git a/src/ModelContextProtocol/McpEndpointExtensions.cs b/src/ModelContextProtocol.Core/McpEndpointExtensions.cs
similarity index 100%
rename from src/ModelContextProtocol/McpEndpointExtensions.cs
rename to src/ModelContextProtocol.Core/McpEndpointExtensions.cs
diff --git a/src/ModelContextProtocol/McpErrorCode.cs b/src/ModelContextProtocol.Core/McpErrorCode.cs
similarity index 100%
rename from src/ModelContextProtocol/McpErrorCode.cs
rename to src/ModelContextProtocol.Core/McpErrorCode.cs
diff --git a/src/ModelContextProtocol/McpException.cs b/src/ModelContextProtocol.Core/McpException.cs
similarity index 100%
rename from src/ModelContextProtocol/McpException.cs
rename to src/ModelContextProtocol.Core/McpException.cs
diff --git a/src/ModelContextProtocol/McpJsonUtilities.cs b/src/ModelContextProtocol.Core/McpJsonUtilities.cs
similarity index 100%
rename from src/ModelContextProtocol/McpJsonUtilities.cs
rename to src/ModelContextProtocol.Core/McpJsonUtilities.cs
diff --git a/src/ModelContextProtocol/McpSession.cs b/src/ModelContextProtocol.Core/McpSession.cs
similarity index 100%
rename from src/ModelContextProtocol/McpSession.cs
rename to src/ModelContextProtocol.Core/McpSession.cs
diff --git a/src/ModelContextProtocol.Core/ModelContextProtocol.Core.csproj b/src/ModelContextProtocol.Core/ModelContextProtocol.Core.csproj
new file mode 100644
index 000000000..e9edb169d
--- /dev/null
+++ b/src/ModelContextProtocol.Core/ModelContextProtocol.Core.csproj
@@ -0,0 +1,46 @@
+
+
+
+ net9.0;net8.0;netstandard2.0
+ true
+ true
+ ModelContextProtocol.Core
+ Core .NET SDK for the Model Context Protocol (MCP)
+ README.md
+ preview
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/ModelContextProtocol/NopProgress.cs b/src/ModelContextProtocol.Core/NopProgress.cs
similarity index 100%
rename from src/ModelContextProtocol/NopProgress.cs
rename to src/ModelContextProtocol.Core/NopProgress.cs
diff --git a/src/ModelContextProtocol/NotificationHandlers.cs b/src/ModelContextProtocol.Core/NotificationHandlers.cs
similarity index 100%
rename from src/ModelContextProtocol/NotificationHandlers.cs
rename to src/ModelContextProtocol.Core/NotificationHandlers.cs
diff --git a/src/ModelContextProtocol/ProcessHelper.cs b/src/ModelContextProtocol.Core/ProcessHelper.cs
similarity index 100%
rename from src/ModelContextProtocol/ProcessHelper.cs
rename to src/ModelContextProtocol.Core/ProcessHelper.cs
diff --git a/src/ModelContextProtocol/ProgressNotificationValue.cs b/src/ModelContextProtocol.Core/ProgressNotificationValue.cs
similarity index 100%
rename from src/ModelContextProtocol/ProgressNotificationValue.cs
rename to src/ModelContextProtocol.Core/ProgressNotificationValue.cs
diff --git a/src/ModelContextProtocol/Protocol/Annotations.cs b/src/ModelContextProtocol.Core/Protocol/Annotations.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/Annotations.cs
rename to src/ModelContextProtocol.Core/Protocol/Annotations.cs
diff --git a/src/ModelContextProtocol/Protocol/Argument.cs b/src/ModelContextProtocol.Core/Protocol/Argument.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/Argument.cs
rename to src/ModelContextProtocol.Core/Protocol/Argument.cs
diff --git a/src/ModelContextProtocol/Protocol/BlobResourceContents.cs b/src/ModelContextProtocol.Core/Protocol/BlobResourceContents.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/BlobResourceContents.cs
rename to src/ModelContextProtocol.Core/Protocol/BlobResourceContents.cs
diff --git a/src/ModelContextProtocol/Protocol/CallToolRequestParams.cs b/src/ModelContextProtocol.Core/Protocol/CallToolRequestParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/CallToolRequestParams.cs
rename to src/ModelContextProtocol.Core/Protocol/CallToolRequestParams.cs
diff --git a/src/ModelContextProtocol/Protocol/CallToolResponse.cs b/src/ModelContextProtocol.Core/Protocol/CallToolResponse.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/CallToolResponse.cs
rename to src/ModelContextProtocol.Core/Protocol/CallToolResponse.cs
diff --git a/src/ModelContextProtocol/Protocol/CancelledNotification.cs b/src/ModelContextProtocol.Core/Protocol/CancelledNotification.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/CancelledNotification.cs
rename to src/ModelContextProtocol.Core/Protocol/CancelledNotification.cs
diff --git a/src/ModelContextProtocol/Protocol/ClientCapabilities.cs b/src/ModelContextProtocol.Core/Protocol/ClientCapabilities.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ClientCapabilities.cs
rename to src/ModelContextProtocol.Core/Protocol/ClientCapabilities.cs
diff --git a/src/ModelContextProtocol/Protocol/CompleteRequestParams.cs b/src/ModelContextProtocol.Core/Protocol/CompleteRequestParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/CompleteRequestParams.cs
rename to src/ModelContextProtocol.Core/Protocol/CompleteRequestParams.cs
diff --git a/src/ModelContextProtocol/Protocol/CompleteResult.cs b/src/ModelContextProtocol.Core/Protocol/CompleteResult.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/CompleteResult.cs
rename to src/ModelContextProtocol.Core/Protocol/CompleteResult.cs
diff --git a/src/ModelContextProtocol/Protocol/Completion.cs b/src/ModelContextProtocol.Core/Protocol/Completion.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/Completion.cs
rename to src/ModelContextProtocol.Core/Protocol/Completion.cs
diff --git a/src/ModelContextProtocol/Protocol/CompletionsCapability.cs b/src/ModelContextProtocol.Core/Protocol/CompletionsCapability.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/CompletionsCapability.cs
rename to src/ModelContextProtocol.Core/Protocol/CompletionsCapability.cs
diff --git a/src/ModelContextProtocol/Protocol/Content.cs b/src/ModelContextProtocol.Core/Protocol/Content.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/Content.cs
rename to src/ModelContextProtocol.Core/Protocol/Content.cs
diff --git a/src/ModelContextProtocol/Protocol/ContextInclusion.cs b/src/ModelContextProtocol.Core/Protocol/ContextInclusion.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ContextInclusion.cs
rename to src/ModelContextProtocol.Core/Protocol/ContextInclusion.cs
diff --git a/src/ModelContextProtocol/Protocol/CreateMessageRequestParams.cs b/src/ModelContextProtocol.Core/Protocol/CreateMessageRequestParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/CreateMessageRequestParams.cs
rename to src/ModelContextProtocol.Core/Protocol/CreateMessageRequestParams.cs
diff --git a/src/ModelContextProtocol/Protocol/CreateMessageResult.cs b/src/ModelContextProtocol.Core/Protocol/CreateMessageResult.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/CreateMessageResult.cs
rename to src/ModelContextProtocol.Core/Protocol/CreateMessageResult.cs
diff --git a/src/ModelContextProtocol/Protocol/ElicitRequestParams.cs b/src/ModelContextProtocol.Core/Protocol/ElicitRequestParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ElicitRequestParams.cs
rename to src/ModelContextProtocol.Core/Protocol/ElicitRequestParams.cs
diff --git a/src/ModelContextProtocol/Protocol/ElicitResult.cs b/src/ModelContextProtocol.Core/Protocol/ElicitResult.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ElicitResult.cs
rename to src/ModelContextProtocol.Core/Protocol/ElicitResult.cs
diff --git a/src/ModelContextProtocol/Protocol/ElicitationCapability.cs b/src/ModelContextProtocol.Core/Protocol/ElicitationCapability.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ElicitationCapability.cs
rename to src/ModelContextProtocol.Core/Protocol/ElicitationCapability.cs
diff --git a/src/ModelContextProtocol/Protocol/EmptyResult.cs b/src/ModelContextProtocol.Core/Protocol/EmptyResult.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/EmptyResult.cs
rename to src/ModelContextProtocol.Core/Protocol/EmptyResult.cs
diff --git a/src/ModelContextProtocol/Protocol/GetPromptRequestParams.cs b/src/ModelContextProtocol.Core/Protocol/GetPromptRequestParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/GetPromptRequestParams.cs
rename to src/ModelContextProtocol.Core/Protocol/GetPromptRequestParams.cs
diff --git a/src/ModelContextProtocol/Protocol/GetPromptResult.cs b/src/ModelContextProtocol.Core/Protocol/GetPromptResult.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/GetPromptResult.cs
rename to src/ModelContextProtocol.Core/Protocol/GetPromptResult.cs
diff --git a/src/ModelContextProtocol/Protocol/ITransport.cs b/src/ModelContextProtocol.Core/Protocol/ITransport.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ITransport.cs
rename to src/ModelContextProtocol.Core/Protocol/ITransport.cs
diff --git a/src/ModelContextProtocol/Protocol/Implementation.cs b/src/ModelContextProtocol.Core/Protocol/Implementation.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/Implementation.cs
rename to src/ModelContextProtocol.Core/Protocol/Implementation.cs
diff --git a/src/ModelContextProtocol/Protocol/InitializeRequestParams.cs b/src/ModelContextProtocol.Core/Protocol/InitializeRequestParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/InitializeRequestParams.cs
rename to src/ModelContextProtocol.Core/Protocol/InitializeRequestParams.cs
diff --git a/src/ModelContextProtocol/Protocol/InitializeResult.cs b/src/ModelContextProtocol.Core/Protocol/InitializeResult.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/InitializeResult.cs
rename to src/ModelContextProtocol.Core/Protocol/InitializeResult.cs
diff --git a/src/ModelContextProtocol/Protocol/JsonRpcError.cs b/src/ModelContextProtocol.Core/Protocol/JsonRpcError.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/JsonRpcError.cs
rename to src/ModelContextProtocol.Core/Protocol/JsonRpcError.cs
diff --git a/src/ModelContextProtocol/Protocol/JsonRpcErrorDetail.cs b/src/ModelContextProtocol.Core/Protocol/JsonRpcErrorDetail.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/JsonRpcErrorDetail.cs
rename to src/ModelContextProtocol.Core/Protocol/JsonRpcErrorDetail.cs
diff --git a/src/ModelContextProtocol/Protocol/JsonRpcMessage.cs b/src/ModelContextProtocol.Core/Protocol/JsonRpcMessage.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/JsonRpcMessage.cs
rename to src/ModelContextProtocol.Core/Protocol/JsonRpcMessage.cs
diff --git a/src/ModelContextProtocol/Protocol/JsonRpcMessageWithId.cs b/src/ModelContextProtocol.Core/Protocol/JsonRpcMessageWithId.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/JsonRpcMessageWithId.cs
rename to src/ModelContextProtocol.Core/Protocol/JsonRpcMessageWithId.cs
diff --git a/src/ModelContextProtocol/Protocol/JsonRpcNotification.cs b/src/ModelContextProtocol.Core/Protocol/JsonRpcNotification.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/JsonRpcNotification.cs
rename to src/ModelContextProtocol.Core/Protocol/JsonRpcNotification.cs
diff --git a/src/ModelContextProtocol/Protocol/JsonRpcRequest.cs b/src/ModelContextProtocol.Core/Protocol/JsonRpcRequest.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/JsonRpcRequest.cs
rename to src/ModelContextProtocol.Core/Protocol/JsonRpcRequest.cs
diff --git a/src/ModelContextProtocol/Protocol/JsonRpcResponse.cs b/src/ModelContextProtocol.Core/Protocol/JsonRpcResponse.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/JsonRpcResponse.cs
rename to src/ModelContextProtocol.Core/Protocol/JsonRpcResponse.cs
diff --git a/src/ModelContextProtocol/Protocol/ListPromptsRequestParams.cs b/src/ModelContextProtocol.Core/Protocol/ListPromptsRequestParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ListPromptsRequestParams.cs
rename to src/ModelContextProtocol.Core/Protocol/ListPromptsRequestParams.cs
diff --git a/src/ModelContextProtocol/Protocol/ListPromptsResult.cs b/src/ModelContextProtocol.Core/Protocol/ListPromptsResult.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ListPromptsResult.cs
rename to src/ModelContextProtocol.Core/Protocol/ListPromptsResult.cs
diff --git a/src/ModelContextProtocol/Protocol/ListResourceTemplatesRequestParams.cs b/src/ModelContextProtocol.Core/Protocol/ListResourceTemplatesRequestParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ListResourceTemplatesRequestParams.cs
rename to src/ModelContextProtocol.Core/Protocol/ListResourceTemplatesRequestParams.cs
diff --git a/src/ModelContextProtocol/Protocol/ListResourceTemplatesResult.cs b/src/ModelContextProtocol.Core/Protocol/ListResourceTemplatesResult.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ListResourceTemplatesResult.cs
rename to src/ModelContextProtocol.Core/Protocol/ListResourceTemplatesResult.cs
diff --git a/src/ModelContextProtocol/Protocol/ListResourcesRequestParams.cs b/src/ModelContextProtocol.Core/Protocol/ListResourcesRequestParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ListResourcesRequestParams.cs
rename to src/ModelContextProtocol.Core/Protocol/ListResourcesRequestParams.cs
diff --git a/src/ModelContextProtocol/Protocol/ListResourcesResult.cs b/src/ModelContextProtocol.Core/Protocol/ListResourcesResult.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ListResourcesResult.cs
rename to src/ModelContextProtocol.Core/Protocol/ListResourcesResult.cs
diff --git a/src/ModelContextProtocol/Protocol/ListRootsRequestParams.cs b/src/ModelContextProtocol.Core/Protocol/ListRootsRequestParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ListRootsRequestParams.cs
rename to src/ModelContextProtocol.Core/Protocol/ListRootsRequestParams.cs
diff --git a/src/ModelContextProtocol/Protocol/ListRootsResult.cs b/src/ModelContextProtocol.Core/Protocol/ListRootsResult.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ListRootsResult.cs
rename to src/ModelContextProtocol.Core/Protocol/ListRootsResult.cs
diff --git a/src/ModelContextProtocol/Protocol/ListToolsRequestParams.cs b/src/ModelContextProtocol.Core/Protocol/ListToolsRequestParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ListToolsRequestParams.cs
rename to src/ModelContextProtocol.Core/Protocol/ListToolsRequestParams.cs
diff --git a/src/ModelContextProtocol/Protocol/ListToolsResult.cs b/src/ModelContextProtocol.Core/Protocol/ListToolsResult.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ListToolsResult.cs
rename to src/ModelContextProtocol.Core/Protocol/ListToolsResult.cs
diff --git a/src/ModelContextProtocol/Protocol/LoggingCapability.cs b/src/ModelContextProtocol.Core/Protocol/LoggingCapability.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/LoggingCapability.cs
rename to src/ModelContextProtocol.Core/Protocol/LoggingCapability.cs
diff --git a/src/ModelContextProtocol/Protocol/LoggingLevel.cs b/src/ModelContextProtocol.Core/Protocol/LoggingLevel.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/LoggingLevel.cs
rename to src/ModelContextProtocol.Core/Protocol/LoggingLevel.cs
diff --git a/src/ModelContextProtocol/Protocol/LoggingMessageNotificationParams.cs b/src/ModelContextProtocol.Core/Protocol/LoggingMessageNotificationParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/LoggingMessageNotificationParams.cs
rename to src/ModelContextProtocol.Core/Protocol/LoggingMessageNotificationParams.cs
diff --git a/src/ModelContextProtocol/Protocol/ModelHint.cs b/src/ModelContextProtocol.Core/Protocol/ModelHint.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ModelHint.cs
rename to src/ModelContextProtocol.Core/Protocol/ModelHint.cs
diff --git a/src/ModelContextProtocol/Protocol/ModelPreferences.cs b/src/ModelContextProtocol.Core/Protocol/ModelPreferences.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ModelPreferences.cs
rename to src/ModelContextProtocol.Core/Protocol/ModelPreferences.cs
diff --git a/src/ModelContextProtocol/Protocol/NotificationMethods.cs b/src/ModelContextProtocol.Core/Protocol/NotificationMethods.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/NotificationMethods.cs
rename to src/ModelContextProtocol.Core/Protocol/NotificationMethods.cs
diff --git a/src/ModelContextProtocol/Protocol/PaginatedRequest.cs b/src/ModelContextProtocol.Core/Protocol/PaginatedRequest.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/PaginatedRequest.cs
rename to src/ModelContextProtocol.Core/Protocol/PaginatedRequest.cs
diff --git a/src/ModelContextProtocol/Protocol/PaginatedResult.cs b/src/ModelContextProtocol.Core/Protocol/PaginatedResult.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/PaginatedResult.cs
rename to src/ModelContextProtocol.Core/Protocol/PaginatedResult.cs
diff --git a/src/ModelContextProtocol/Protocol/PingResult.cs b/src/ModelContextProtocol.Core/Protocol/PingResult.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/PingResult.cs
rename to src/ModelContextProtocol.Core/Protocol/PingResult.cs
diff --git a/src/ModelContextProtocol/Protocol/ProgressNotification.cs b/src/ModelContextProtocol.Core/Protocol/ProgressNotification.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ProgressNotification.cs
rename to src/ModelContextProtocol.Core/Protocol/ProgressNotification.cs
diff --git a/src/ModelContextProtocol/Protocol/ProgressToken.cs b/src/ModelContextProtocol.Core/Protocol/ProgressToken.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ProgressToken.cs
rename to src/ModelContextProtocol.Core/Protocol/ProgressToken.cs
diff --git a/src/ModelContextProtocol/Protocol/Prompt.cs b/src/ModelContextProtocol.Core/Protocol/Prompt.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/Prompt.cs
rename to src/ModelContextProtocol.Core/Protocol/Prompt.cs
diff --git a/src/ModelContextProtocol/Protocol/PromptArgument.cs b/src/ModelContextProtocol.Core/Protocol/PromptArgument.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/PromptArgument.cs
rename to src/ModelContextProtocol.Core/Protocol/PromptArgument.cs
diff --git a/src/ModelContextProtocol/Protocol/PromptMessage.cs b/src/ModelContextProtocol.Core/Protocol/PromptMessage.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/PromptMessage.cs
rename to src/ModelContextProtocol.Core/Protocol/PromptMessage.cs
diff --git a/src/ModelContextProtocol/Protocol/PromptsCapability.cs b/src/ModelContextProtocol.Core/Protocol/PromptsCapability.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/PromptsCapability.cs
rename to src/ModelContextProtocol.Core/Protocol/PromptsCapability.cs
diff --git a/src/ModelContextProtocol/Protocol/ReadResourceRequestParams.cs b/src/ModelContextProtocol.Core/Protocol/ReadResourceRequestParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ReadResourceRequestParams.cs
rename to src/ModelContextProtocol.Core/Protocol/ReadResourceRequestParams.cs
diff --git a/src/ModelContextProtocol/Protocol/ReadResourceResult.cs b/src/ModelContextProtocol.Core/Protocol/ReadResourceResult.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ReadResourceResult.cs
rename to src/ModelContextProtocol.Core/Protocol/ReadResourceResult.cs
diff --git a/src/ModelContextProtocol/Protocol/Reference.cs b/src/ModelContextProtocol.Core/Protocol/Reference.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/Reference.cs
rename to src/ModelContextProtocol.Core/Protocol/Reference.cs
diff --git a/src/ModelContextProtocol/Protocol/RequestId.cs b/src/ModelContextProtocol.Core/Protocol/RequestId.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/RequestId.cs
rename to src/ModelContextProtocol.Core/Protocol/RequestId.cs
diff --git a/src/ModelContextProtocol/Protocol/RequestMethods.cs b/src/ModelContextProtocol.Core/Protocol/RequestMethods.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/RequestMethods.cs
rename to src/ModelContextProtocol.Core/Protocol/RequestMethods.cs
diff --git a/src/ModelContextProtocol/Protocol/RequestParams.cs b/src/ModelContextProtocol.Core/Protocol/RequestParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/RequestParams.cs
rename to src/ModelContextProtocol.Core/Protocol/RequestParams.cs
diff --git a/src/ModelContextProtocol/Protocol/RequestParamsMetadata.cs b/src/ModelContextProtocol.Core/Protocol/RequestParamsMetadata.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/RequestParamsMetadata.cs
rename to src/ModelContextProtocol.Core/Protocol/RequestParamsMetadata.cs
diff --git a/src/ModelContextProtocol/Protocol/Resource.cs b/src/ModelContextProtocol.Core/Protocol/Resource.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/Resource.cs
rename to src/ModelContextProtocol.Core/Protocol/Resource.cs
diff --git a/src/ModelContextProtocol/Protocol/ResourceContents.cs b/src/ModelContextProtocol.Core/Protocol/ResourceContents.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ResourceContents.cs
rename to src/ModelContextProtocol.Core/Protocol/ResourceContents.cs
diff --git a/src/ModelContextProtocol/Protocol/ResourceTemplate.cs b/src/ModelContextProtocol.Core/Protocol/ResourceTemplate.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ResourceTemplate.cs
rename to src/ModelContextProtocol.Core/Protocol/ResourceTemplate.cs
diff --git a/src/ModelContextProtocol/Protocol/ResourceUpdatedNotificationParams.cs b/src/ModelContextProtocol.Core/Protocol/ResourceUpdatedNotificationParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ResourceUpdatedNotificationParams.cs
rename to src/ModelContextProtocol.Core/Protocol/ResourceUpdatedNotificationParams.cs
diff --git a/src/ModelContextProtocol/Protocol/ResourcesCapability.cs b/src/ModelContextProtocol.Core/Protocol/ResourcesCapability.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ResourcesCapability.cs
rename to src/ModelContextProtocol.Core/Protocol/ResourcesCapability.cs
diff --git a/src/ModelContextProtocol/Protocol/Role.cs b/src/ModelContextProtocol.Core/Protocol/Role.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/Role.cs
rename to src/ModelContextProtocol.Core/Protocol/Role.cs
diff --git a/src/ModelContextProtocol/Protocol/Root.cs b/src/ModelContextProtocol.Core/Protocol/Root.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/Root.cs
rename to src/ModelContextProtocol.Core/Protocol/Root.cs
diff --git a/src/ModelContextProtocol/Protocol/RootsCapability.cs b/src/ModelContextProtocol.Core/Protocol/RootsCapability.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/RootsCapability.cs
rename to src/ModelContextProtocol.Core/Protocol/RootsCapability.cs
diff --git a/src/ModelContextProtocol/Protocol/SamplingCapability.cs b/src/ModelContextProtocol.Core/Protocol/SamplingCapability.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/SamplingCapability.cs
rename to src/ModelContextProtocol.Core/Protocol/SamplingCapability.cs
diff --git a/src/ModelContextProtocol/Protocol/SamplingMessage.cs b/src/ModelContextProtocol.Core/Protocol/SamplingMessage.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/SamplingMessage.cs
rename to src/ModelContextProtocol.Core/Protocol/SamplingMessage.cs
diff --git a/src/ModelContextProtocol/Protocol/ServerCapabilities.cs b/src/ModelContextProtocol.Core/Protocol/ServerCapabilities.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ServerCapabilities.cs
rename to src/ModelContextProtocol.Core/Protocol/ServerCapabilities.cs
diff --git a/src/ModelContextProtocol/Protocol/SetLevelRequestParams.cs b/src/ModelContextProtocol.Core/Protocol/SetLevelRequestParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/SetLevelRequestParams.cs
rename to src/ModelContextProtocol.Core/Protocol/SetLevelRequestParams.cs
diff --git a/src/ModelContextProtocol/Protocol/SubscribeRequestParams.cs b/src/ModelContextProtocol.Core/Protocol/SubscribeRequestParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/SubscribeRequestParams.cs
rename to src/ModelContextProtocol.Core/Protocol/SubscribeRequestParams.cs
diff --git a/src/ModelContextProtocol/Protocol/TextResourceContents.cs b/src/ModelContextProtocol.Core/Protocol/TextResourceContents.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/TextResourceContents.cs
rename to src/ModelContextProtocol.Core/Protocol/TextResourceContents.cs
diff --git a/src/ModelContextProtocol/Protocol/Tool.cs b/src/ModelContextProtocol.Core/Protocol/Tool.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/Tool.cs
rename to src/ModelContextProtocol.Core/Protocol/Tool.cs
diff --git a/src/ModelContextProtocol/Protocol/ToolAnnotations.cs b/src/ModelContextProtocol.Core/Protocol/ToolAnnotations.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ToolAnnotations.cs
rename to src/ModelContextProtocol.Core/Protocol/ToolAnnotations.cs
diff --git a/src/ModelContextProtocol/Protocol/ToolsCapability.cs b/src/ModelContextProtocol.Core/Protocol/ToolsCapability.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/ToolsCapability.cs
rename to src/ModelContextProtocol.Core/Protocol/ToolsCapability.cs
diff --git a/src/ModelContextProtocol/Protocol/TransportBase.cs b/src/ModelContextProtocol.Core/Protocol/TransportBase.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/TransportBase.cs
rename to src/ModelContextProtocol.Core/Protocol/TransportBase.cs
diff --git a/src/ModelContextProtocol/Protocol/UnsubscribeRequestParams.cs b/src/ModelContextProtocol.Core/Protocol/UnsubscribeRequestParams.cs
similarity index 100%
rename from src/ModelContextProtocol/Protocol/UnsubscribeRequestParams.cs
rename to src/ModelContextProtocol.Core/Protocol/UnsubscribeRequestParams.cs
diff --git a/src/ModelContextProtocol.Core/README.md b/src/ModelContextProtocol.Core/README.md
new file mode 100644
index 000000000..a6753f259
--- /dev/null
+++ b/src/ModelContextProtocol.Core/README.md
@@ -0,0 +1,112 @@
+# MCP C# SDK Core
+
+[](https://www.nuget.org/packages/ModelContextProtocol.Core/absoluteLatest)
+
+Core .NET SDK for the [Model Context Protocol](https://modelcontextprotocol.io/), enabling .NET applications, services, and libraries to implement and interact with MCP clients and servers. Please visit our [API documentation](https://modelcontextprotocol.github.io/csharp-sdk/api/ModelContextProtocol.html) for more details on available functionality.
+
+> [!NOTE]
+> This project is in preview; breaking changes can be introduced without prior notice.
+
+## About MCP
+
+The Model Context Protocol (MCP) is an open protocol that standardizes how applications provide context to Large Language Models (LLMs). It enables secure integration between LLMs and various data sources and tools.
+
+For more information about MCP:
+
+- [Official Documentation](https://modelcontextprotocol.io/)
+- [Protocol Specification](https://spec.modelcontextprotocol.io/)
+- [GitHub Organization](https://github.com/modelcontextprotocol)
+
+## Installation
+
+To get started, install the core package from NuGet
+
+```
+dotnet add package ModelContextProtocol.Core --prerelease
+```
+
+## Getting Started (Client)
+
+To get started writing a client, the `McpClientFactory.CreateAsync` method is used to instantiate and connect an `IMcpClient`
+to a server. Once you have an `IMcpClient`, you can interact with it, such as to enumerate all available tools and invoke tools.
+
+```csharp
+var clientTransport = new StdioClientTransport(new StdioClientTransportOptions
+{
+ Name = "Everything",
+ Command = "npx",
+ Arguments = ["-y", "@modelcontextprotocol/server-everything"],
+});
+
+var client = await McpClientFactory.CreateAsync(clientTransport);
+
+// Print the list of tools available from the server.
+foreach (var tool in await client.ListToolsAsync())
+{
+ Console.WriteLine($"{tool.Name} ({tool.Description})");
+}
+
+// Execute a tool (this would normally be driven by LLM tool invocations).
+var result = await client.CallToolAsync(
+ "echo",
+ new Dictionary() { ["message"] = "Hello MCP!" },
+ cancellationToken:CancellationToken.None);
+
+// echo always returns one and only one text content object
+Console.WriteLine(result.Content.First(c => c.Type == "text").Text);
+```
+
+Clients can connect to any MCP server, not just ones created using this library. The protocol is designed to be server-agnostic, so you can use this library to connect to any compliant server.
+
+Tools can be easily exposed for immediate use by `IChatClient`s, because `McpClientTool` inherits from `AIFunction`.
+
+```csharp
+// Get available functions.
+IList tools = await client.ListToolsAsync();
+
+// Call the chat client using the tools.
+IChatClient chatClient = ...;
+var response = await chatClient.GetResponseAsync(
+ "your prompt here",
+ new() { Tools = [.. tools] },
+```
+
+## Getting Started (Server)
+
+The core package provides the basic server functionality. Here's an example of creating a simple MCP server without dependency injection:
+
+```csharp
+using ModelContextProtocol.Server;
+using System.ComponentModel;
+
+// Create server options
+var serverOptions = new McpServerOptions();
+
+// Add tools directly
+serverOptions.Capabilities.Tools = new()
+{
+ ListChanged = true,
+ ToolCollection = [
+ McpServerTool.Create((string message) => $"hello {message}", new()
+ {
+ Name = "echo",
+ Description = "Echoes the message back to the client."
+ })
+ ]
+};
+
+// Create and run server with stdio transport
+var server = new McpServer(serverOptions);
+using var stdioTransport = new StdioServerTransport();
+await server.RunAsync(stdioTransport, CancellationToken.None);
+```
+
+For more advanced scenarios with dependency injection, hosting, and automatic tool discovery, see the `ModelContextProtocol` package.
+
+## Acknowledgements
+
+The MCP C# SDK builds upon the excellent work from the [mcpdotnet](https://github.com/ReallyLiri/mcpdotnet) project by [Liri](https://github.com/ReallyLiri). We extend our gratitude for providing a foundational implementation that inspired this SDK.
+
+## License
+
+This project is licensed under the MIT License. See the [LICENSE](../../LICENSE) file for details.
\ No newline at end of file
diff --git a/src/ModelContextProtocol/RequestHandlers.cs b/src/ModelContextProtocol.Core/RequestHandlers.cs
similarity index 100%
rename from src/ModelContextProtocol/RequestHandlers.cs
rename to src/ModelContextProtocol.Core/RequestHandlers.cs
diff --git a/src/ModelContextProtocol/SemaphoreSlimExtensions.cs b/src/ModelContextProtocol.Core/SemaphoreSlimExtensions.cs
similarity index 100%
rename from src/ModelContextProtocol/SemaphoreSlimExtensions.cs
rename to src/ModelContextProtocol.Core/SemaphoreSlimExtensions.cs
diff --git a/src/ModelContextProtocol/Server/AIFunctionMcpServerPrompt.cs b/src/ModelContextProtocol.Core/Server/AIFunctionMcpServerPrompt.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/AIFunctionMcpServerPrompt.cs
rename to src/ModelContextProtocol.Core/Server/AIFunctionMcpServerPrompt.cs
diff --git a/src/ModelContextProtocol/Server/AIFunctionMcpServerResource.cs b/src/ModelContextProtocol.Core/Server/AIFunctionMcpServerResource.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/AIFunctionMcpServerResource.cs
rename to src/ModelContextProtocol.Core/Server/AIFunctionMcpServerResource.cs
diff --git a/src/ModelContextProtocol/Server/AIFunctionMcpServerTool.cs b/src/ModelContextProtocol.Core/Server/AIFunctionMcpServerTool.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/AIFunctionMcpServerTool.cs
rename to src/ModelContextProtocol.Core/Server/AIFunctionMcpServerTool.cs
diff --git a/src/ModelContextProtocol/Server/DelegatingMcpServerPrompt.cs b/src/ModelContextProtocol.Core/Server/DelegatingMcpServerPrompt.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/DelegatingMcpServerPrompt.cs
rename to src/ModelContextProtocol.Core/Server/DelegatingMcpServerPrompt.cs
diff --git a/src/ModelContextProtocol/Server/DelegatingMcpServerResource.cs b/src/ModelContextProtocol.Core/Server/DelegatingMcpServerResource.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/DelegatingMcpServerResource.cs
rename to src/ModelContextProtocol.Core/Server/DelegatingMcpServerResource.cs
diff --git a/src/ModelContextProtocol/Server/DelegatingMcpServerTool.cs b/src/ModelContextProtocol.Core/Server/DelegatingMcpServerTool.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/DelegatingMcpServerTool.cs
rename to src/ModelContextProtocol.Core/Server/DelegatingMcpServerTool.cs
diff --git a/src/ModelContextProtocol/Server/DestinationBoundMcpServer.cs b/src/ModelContextProtocol.Core/Server/DestinationBoundMcpServer.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/DestinationBoundMcpServer.cs
rename to src/ModelContextProtocol.Core/Server/DestinationBoundMcpServer.cs
diff --git a/src/ModelContextProtocol/Server/IMcpServer.cs b/src/ModelContextProtocol.Core/Server/IMcpServer.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/IMcpServer.cs
rename to src/ModelContextProtocol.Core/Server/IMcpServer.cs
diff --git a/src/ModelContextProtocol/Server/IMcpServerPrimitive.cs b/src/ModelContextProtocol.Core/Server/IMcpServerPrimitive.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/IMcpServerPrimitive.cs
rename to src/ModelContextProtocol.Core/Server/IMcpServerPrimitive.cs
diff --git a/src/ModelContextProtocol/Server/McpServer.cs b/src/ModelContextProtocol.Core/Server/McpServer.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/McpServer.cs
rename to src/ModelContextProtocol.Core/Server/McpServer.cs
diff --git a/src/ModelContextProtocol/Server/McpServerExtensions.cs b/src/ModelContextProtocol.Core/Server/McpServerExtensions.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/McpServerExtensions.cs
rename to src/ModelContextProtocol.Core/Server/McpServerExtensions.cs
diff --git a/src/ModelContextProtocol/Server/McpServerFactory.cs b/src/ModelContextProtocol.Core/Server/McpServerFactory.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/McpServerFactory.cs
rename to src/ModelContextProtocol.Core/Server/McpServerFactory.cs
diff --git a/src/ModelContextProtocol/Server/McpServerOptions.cs b/src/ModelContextProtocol.Core/Server/McpServerOptions.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/McpServerOptions.cs
rename to src/ModelContextProtocol.Core/Server/McpServerOptions.cs
diff --git a/src/ModelContextProtocol/Server/McpServerPrimitiveCollection.cs b/src/ModelContextProtocol.Core/Server/McpServerPrimitiveCollection.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/McpServerPrimitiveCollection.cs
rename to src/ModelContextProtocol.Core/Server/McpServerPrimitiveCollection.cs
diff --git a/src/ModelContextProtocol/Server/McpServerPrompt.cs b/src/ModelContextProtocol.Core/Server/McpServerPrompt.cs
similarity index 98%
rename from src/ModelContextProtocol/Server/McpServerPrompt.cs
rename to src/ModelContextProtocol.Core/Server/McpServerPrompt.cs
index 2260617e0..4160fc3fb 100644
--- a/src/ModelContextProtocol/Server/McpServerPrompt.cs
+++ b/src/ModelContextProtocol.Core/Server/McpServerPrompt.cs
@@ -21,8 +21,7 @@ namespace ModelContextProtocol.Server;
///
/// Most commonly, instances are created using the static methods.
/// These methods enable creating an for a method, specified via a or
-/// , and are what are used implicitly by and
-/// . The methods
+/// , and are what are used implicitly by WithPromptsFromAssembly and WithPrompts. The methods
/// create instances capable of working with a large variety of .NET method signatures, automatically handling
/// how parameters are marshaled into the method from the JSON received from the MCP client, and how the return value is marshaled back
/// into the that's then serialized and sent back to the client.
diff --git a/src/ModelContextProtocol/Server/McpServerPromptAttribute.cs b/src/ModelContextProtocol.Core/Server/McpServerPromptAttribute.cs
similarity index 99%
rename from src/ModelContextProtocol/Server/McpServerPromptAttribute.cs
rename to src/ModelContextProtocol.Core/Server/McpServerPromptAttribute.cs
index d47b02c67..8e7fdf050 100644
--- a/src/ModelContextProtocol/Server/McpServerPromptAttribute.cs
+++ b/src/ModelContextProtocol.Core/Server/McpServerPromptAttribute.cs
@@ -11,7 +11,7 @@ namespace ModelContextProtocol.Server;
///
///
/// This attribute is applied to methods that should be exposed as prompts in the Model Context Protocol. When a class
-/// containing methods marked with this attribute is registered with ,
+/// containing methods marked with this attribute is registered with McpServerBuilderExtensions,
/// these methods become available as prompts that can be called by MCP clients.
///
///
diff --git a/src/ModelContextProtocol/Server/McpServerPromptCreateOptions.cs b/src/ModelContextProtocol.Core/Server/McpServerPromptCreateOptions.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/McpServerPromptCreateOptions.cs
rename to src/ModelContextProtocol.Core/Server/McpServerPromptCreateOptions.cs
diff --git a/src/ModelContextProtocol/Server/McpServerPromptTypeAttribute.cs b/src/ModelContextProtocol.Core/Server/McpServerPromptTypeAttribute.cs
similarity index 70%
rename from src/ModelContextProtocol/Server/McpServerPromptTypeAttribute.cs
rename to src/ModelContextProtocol.Core/Server/McpServerPromptTypeAttribute.cs
index 31b524ecb..3f80b3c5a 100644
--- a/src/ModelContextProtocol/Server/McpServerPromptTypeAttribute.cs
+++ b/src/ModelContextProtocol.Core/Server/McpServerPromptTypeAttribute.cs
@@ -9,9 +9,8 @@ namespace ModelContextProtocol.Server;
///
/// This attribute is used to mark a class containing methods that should be automatically
/// discovered and registered as s. When combined with discovery methods like
-/// , it enables automatic registration
-/// of prompts without explicitly listing each prompt class. The attribute is not necessary when a reference
-/// to the type is provided directly to a method like .
+/// WithPromptsFromAssembly, it enables automatic registration of prompts without explicitly listing each prompt class.
+/// The attribute is not necessary when a reference to the type is provided directly to a method like WithPrompts.
///
///
/// Within a class marked with this attribute, individual methods that should be exposed as
diff --git a/src/ModelContextProtocol/Server/McpServerResource.cs b/src/ModelContextProtocol.Core/Server/McpServerResource.cs
similarity index 99%
rename from src/ModelContextProtocol/Server/McpServerResource.cs
rename to src/ModelContextProtocol.Core/Server/McpServerResource.cs
index 346c0329a..e85ec7325 100644
--- a/src/ModelContextProtocol/Server/McpServerResource.cs
+++ b/src/ModelContextProtocol.Core/Server/McpServerResource.cs
@@ -18,7 +18,7 @@ namespace ModelContextProtocol.Server;
///
/// Most commonly, instances are created using the static methods.
/// These methods enable creating an for a method, specified via a or
-/// , and are what are used implicitly by and
+/// , and are what are used implicitly by WithResourcesFromAssembly and
/// . The methods
/// create instances capable of working with a large variety of .NET method signatures, automatically handling
/// how parameters are marshaled into the method from the URI received from the MCP client, and how the return value is marshaled back
diff --git a/src/ModelContextProtocol/Server/McpServerResourceAttribute.cs b/src/ModelContextProtocol.Core/Server/McpServerResourceAttribute.cs
similarity index 99%
rename from src/ModelContextProtocol/Server/McpServerResourceAttribute.cs
rename to src/ModelContextProtocol.Core/Server/McpServerResourceAttribute.cs
index 9c5347c79..5cc7a4efb 100644
--- a/src/ModelContextProtocol/Server/McpServerResourceAttribute.cs
+++ b/src/ModelContextProtocol.Core/Server/McpServerResourceAttribute.cs
@@ -10,7 +10,7 @@ namespace ModelContextProtocol.Server;
///
///
/// This attribute is applied to methods or properties that should be exposed as resources in the Model Context Protocol. When a class
-/// containing methods marked with this attribute is registered with ,
+/// containing methods marked with this attribute is registered with McpServerBuilderExtensions,
/// these methods or properties become available as resources that can be called by MCP clients.
///
///
diff --git a/src/ModelContextProtocol/Server/McpServerResourceCreateOptions.cs b/src/ModelContextProtocol.Core/Server/McpServerResourceCreateOptions.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/McpServerResourceCreateOptions.cs
rename to src/ModelContextProtocol.Core/Server/McpServerResourceCreateOptions.cs
diff --git a/src/ModelContextProtocol/Server/McpServerResourceTypeAttribute.cs b/src/ModelContextProtocol.Core/Server/McpServerResourceTypeAttribute.cs
similarity index 70%
rename from src/ModelContextProtocol/Server/McpServerResourceTypeAttribute.cs
rename to src/ModelContextProtocol.Core/Server/McpServerResourceTypeAttribute.cs
index b73bd081e..e287765cd 100644
--- a/src/ModelContextProtocol/Server/McpServerResourceTypeAttribute.cs
+++ b/src/ModelContextProtocol.Core/Server/McpServerResourceTypeAttribute.cs
@@ -9,9 +9,9 @@ namespace ModelContextProtocol.Server;
///
/// This attribute is used to mark a class containing members that should be automatically
/// discovered and registered as s. When combined with discovery methods like
-/// , it enables automatic registration
-/// of resources without explicitly listing each resource class. The attribute is not necessary when a reference
-/// to the type is provided directly to a method like .
+/// WithResourcesFromAssembly, it enables automatic registration of resources without explicitly listing each
+/// resource class. The attribute is not necessary when a reference to the type is provided directly to a method
+/// like McpServerBuilderExtensions.WithResources.
///
///
/// Within a class marked with this attribute, individual members that should be exposed as
diff --git a/src/ModelContextProtocol/Server/McpServerTool.cs b/src/ModelContextProtocol.Core/Server/McpServerTool.cs
similarity index 98%
rename from src/ModelContextProtocol/Server/McpServerTool.cs
rename to src/ModelContextProtocol.Core/Server/McpServerTool.cs
index f2aa2d021..a4b0cc587 100644
--- a/src/ModelContextProtocol/Server/McpServerTool.cs
+++ b/src/ModelContextProtocol.Core/Server/McpServerTool.cs
@@ -21,8 +21,7 @@ namespace ModelContextProtocol.Server;
///
/// Most commonly, instances are created using the static methods.
/// These methods enable creating an for a method, specified via a or
-/// , and are what are used implicitly by and
-/// . The methods
+/// , and are what are used implicitly by WithToolsFromAssembly and WithTools. The methods
/// create instances capable of working with a large variety of .NET method signatures, automatically handling
/// how parameters are marshaled into the method from the JSON received from the MCP client, and how the return value is marshaled back
/// into the that's then serialized and sent back to the client.
diff --git a/src/ModelContextProtocol/Server/McpServerToolAttribute.cs b/src/ModelContextProtocol.Core/Server/McpServerToolAttribute.cs
similarity index 99%
rename from src/ModelContextProtocol/Server/McpServerToolAttribute.cs
rename to src/ModelContextProtocol.Core/Server/McpServerToolAttribute.cs
index e096a1505..73ee786b5 100644
--- a/src/ModelContextProtocol/Server/McpServerToolAttribute.cs
+++ b/src/ModelContextProtocol.Core/Server/McpServerToolAttribute.cs
@@ -11,7 +11,7 @@ namespace ModelContextProtocol.Server;
///
///
/// This attribute is applied to methods that should be exposed as tools in the Model Context Protocol. When a class
-/// containing methods marked with this attribute is registered with ,
+/// containing methods marked with this attribute is registered with McpServerBuilderExtensions,
/// these methods become available as tools that can be called by MCP clients.
///
///
diff --git a/src/ModelContextProtocol/Server/McpServerToolCreateOptions.cs b/src/ModelContextProtocol.Core/Server/McpServerToolCreateOptions.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/McpServerToolCreateOptions.cs
rename to src/ModelContextProtocol.Core/Server/McpServerToolCreateOptions.cs
diff --git a/src/ModelContextProtocol/Server/McpServerToolTypeAttribute.cs b/src/ModelContextProtocol.Core/Server/McpServerToolTypeAttribute.cs
similarity index 70%
rename from src/ModelContextProtocol/Server/McpServerToolTypeAttribute.cs
rename to src/ModelContextProtocol.Core/Server/McpServerToolTypeAttribute.cs
index 57ffb3d9e..ee13ddc63 100644
--- a/src/ModelContextProtocol/Server/McpServerToolTypeAttribute.cs
+++ b/src/ModelContextProtocol.Core/Server/McpServerToolTypeAttribute.cs
@@ -9,9 +9,8 @@ namespace ModelContextProtocol.Server;
///
/// This attribute is used to mark a class containing methods that should be automatically
/// discovered and registered as s. When combined with discovery methods like
-/// , it enables automatic registration
-/// of tools without explicitly listing each tool class. The attribute is not necessary when a reference
-/// to the type is provided directly to a method like .
+/// WithToolsFromAssembly, it enables automatic registration of tools without explicitly listing each tool
+/// class. The attribute is not necessary when a reference to the type is provided directly to a method like WithTools.
///
///
/// Within a class marked with this attribute, individual methods that should be exposed as
diff --git a/src/ModelContextProtocol/Server/RequestContext.cs b/src/ModelContextProtocol.Core/Server/RequestContext.cs
similarity index 97%
rename from src/ModelContextProtocol/Server/RequestContext.cs
rename to src/ModelContextProtocol.Core/Server/RequestContext.cs
index 7437faea1..ee8d4a348 100644
--- a/src/ModelContextProtocol/Server/RequestContext.cs
+++ b/src/ModelContextProtocol.Core/Server/RequestContext.cs
@@ -8,7 +8,7 @@ namespace ModelContextProtocol.Server;
/// Type of the request parameters specific to each MCP operation.
///
/// The encapsulates all contextual information for handling an MCP request.
-/// This type is typically received as a parameter in handler delegates registered with ,
+/// This type is typically received as a parameter in handler delegates registered with IMcpServerBuilder,
/// and may be injected as parameters into s.
///
public sealed class RequestContext
diff --git a/src/ModelContextProtocol/Server/SseResponseStreamTransport.cs b/src/ModelContextProtocol.Core/Server/SseResponseStreamTransport.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/SseResponseStreamTransport.cs
rename to src/ModelContextProtocol.Core/Server/SseResponseStreamTransport.cs
diff --git a/src/ModelContextProtocol/Server/SseWriter.cs b/src/ModelContextProtocol.Core/Server/SseWriter.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/SseWriter.cs
rename to src/ModelContextProtocol.Core/Server/SseWriter.cs
diff --git a/src/ModelContextProtocol/Server/StdioServerTransport.cs b/src/ModelContextProtocol.Core/Server/StdioServerTransport.cs
similarity index 85%
rename from src/ModelContextProtocol/Server/StdioServerTransport.cs
rename to src/ModelContextProtocol.Core/Server/StdioServerTransport.cs
index df7b0087c..556a31159 100644
--- a/src/ModelContextProtocol/Server/StdioServerTransport.cs
+++ b/src/ModelContextProtocol.Core/Server/StdioServerTransport.cs
@@ -1,5 +1,4 @@
using Microsoft.Extensions.Logging;
-using Microsoft.Extensions.Options;
using ModelContextProtocol.Protocol;
namespace ModelContextProtocol.Server;
@@ -9,17 +8,6 @@ namespace ModelContextProtocol.Server;
///
public sealed class StdioServerTransport : StreamServerTransport
{
- ///
- /// Initializes a new instance of the class.
- ///
- /// The server options.
- /// Optional logger factory used for logging employed by the transport.
- /// is .
- public StdioServerTransport(IOptions serverOptions, ILoggerFactory? loggerFactory = null)
- : this(serverOptions?.Value!, loggerFactory: loggerFactory)
- {
- }
-
///
/// Initializes a new instance of the class.
///
diff --git a/src/ModelContextProtocol/Server/StreamServerTransport.cs b/src/ModelContextProtocol.Core/Server/StreamServerTransport.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/StreamServerTransport.cs
rename to src/ModelContextProtocol.Core/Server/StreamServerTransport.cs
diff --git a/src/ModelContextProtocol/Server/StreamableHttpPostTransport.cs b/src/ModelContextProtocol.Core/Server/StreamableHttpPostTransport.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/StreamableHttpPostTransport.cs
rename to src/ModelContextProtocol.Core/Server/StreamableHttpPostTransport.cs
diff --git a/src/ModelContextProtocol/Server/StreamableHttpServerTransport.cs b/src/ModelContextProtocol.Core/Server/StreamableHttpServerTransport.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/StreamableHttpServerTransport.cs
rename to src/ModelContextProtocol.Core/Server/StreamableHttpServerTransport.cs
diff --git a/src/ModelContextProtocol/TokenProgress.cs b/src/ModelContextProtocol.Core/TokenProgress.cs
similarity index 100%
rename from src/ModelContextProtocol/TokenProgress.cs
rename to src/ModelContextProtocol.Core/TokenProgress.cs
diff --git a/src/ModelContextProtocol/UriTemplate.cs b/src/ModelContextProtocol.Core/UriTemplate.cs
similarity index 100%
rename from src/ModelContextProtocol/UriTemplate.cs
rename to src/ModelContextProtocol.Core/UriTemplate.cs
diff --git a/src/ModelContextProtocol/Configuration/DefaultMcpServerBuilder.cs b/src/ModelContextProtocol/DefaultMcpServerBuilder.cs
similarity index 96%
rename from src/ModelContextProtocol/Configuration/DefaultMcpServerBuilder.cs
rename to src/ModelContextProtocol/DefaultMcpServerBuilder.cs
index d59009176..f94476ae4 100644
--- a/src/ModelContextProtocol/Configuration/DefaultMcpServerBuilder.cs
+++ b/src/ModelContextProtocol/DefaultMcpServerBuilder.cs
@@ -4,8 +4,8 @@ namespace Microsoft.Extensions.DependencyInjection;
///
/// Default implementation of that enables fluent configuration
-/// of the Model Context Protocol (MCP) server. This builder is returned by the
-/// extension method and
+/// of the Model Context Protocol (MCP) server. This builder is returned by the
+/// extension method and
/// provides access to the service collection for registering additional MCP components.
///
internal sealed class DefaultMcpServerBuilder : IMcpServerBuilder
diff --git a/src/ModelContextProtocol/Configuration/IMcpServerBuilder.cs b/src/ModelContextProtocol/IMcpServerBuilder.cs
similarity index 95%
rename from src/ModelContextProtocol/Configuration/IMcpServerBuilder.cs
rename to src/ModelContextProtocol/IMcpServerBuilder.cs
index fde19065a..5ec37eba9 100644
--- a/src/ModelContextProtocol/Configuration/IMcpServerBuilder.cs
+++ b/src/ModelContextProtocol/IMcpServerBuilder.cs
@@ -12,7 +12,7 @@ namespace Microsoft.Extensions.DependencyInjection;
/// and server transports, allowing for comprehensive server configuration through a chain of method calls.
///
///
-/// The builder is obtained from the extension
+/// The builder is obtained from the extension
/// method and provides access to the underlying service collection via the property.
///
///
diff --git a/src/ModelContextProtocol/Configuration/McpServerBuilderExtensions.cs b/src/ModelContextProtocol/McpServerBuilderExtensions.cs
similarity index 98%
rename from src/ModelContextProtocol/Configuration/McpServerBuilderExtensions.cs
rename to src/ModelContextProtocol/McpServerBuilderExtensions.cs
index 95da6b7a9..e7a266d09 100644
--- a/src/ModelContextProtocol/Configuration/McpServerBuilderExtensions.cs
+++ b/src/ModelContextProtocol/McpServerBuilderExtensions.cs
@@ -124,7 +124,7 @@ public static IMcpServerBuilder WithTools(this IMcpServerBuilder builder, IEnume
///
/// This method scans the specified assembly (or the calling assembly if none is provided) for classes
/// marked with the . It then discovers all methods within those
- /// classes that are marked with the and registers them as s
+ /// classes that are marked with the and registers them as s
/// in the 's .
///
///
@@ -264,7 +264,7 @@ public static IMcpServerBuilder WithPrompts(this IMcpServerBuilder builder, IEnu
///
/// This method scans the specified assembly (or the calling assembly if none is provided) for classes
/// marked with the . It then discovers all methods within those
- /// classes that are marked with the and registers them as s
+ /// classes that are marked with the and registers them as s
/// in the 's .
///
///
@@ -399,7 +399,7 @@ public static IMcpServerBuilder WithResources(this IMcpServerBuilder builder, IE
///
/// This method scans the specified assembly (or the calling assembly if none is provided) for classes
/// marked with the . It then discovers all members within those
- /// classes that are marked with the and registers them as s
+ /// classes that are marked with the and registers them as s
/// in the 's .
///
///
@@ -480,7 +480,7 @@ public static IMcpServerBuilder WithListResourceTemplatesHandler(this IMcpServer
///
///
/// This method is typically paired with to provide a complete tools implementation,
- /// where advertises available tools and
+ /// where advertises available tools and
/// executes them when invoked by clients.
///
///
@@ -533,7 +533,7 @@ public static IMcpServerBuilder WithCallToolHandler(this IMcpServerBuilder build
///
///
/// This method is typically paired with to provide a complete prompts implementation,
- /// where advertises available prompts and
+ /// where advertises available prompts and
/// produces them when invoked by clients.
///
///
@@ -608,7 +608,7 @@ public static IMcpServerBuilder WithReadResourceHandler(this IMcpServerBuilder b
/// The builder provided in .
/// is .
///
- /// The completion handler is invoked when clients request suggestions for argument values.
+ /// The completion handler is invoked when clients request suggestions for argument values.
/// This enables auto-complete functionality for both prompt arguments and resource references.
///
public static IMcpServerBuilder WithCompleteHandler(this IMcpServerBuilder builder, Func, CancellationToken, ValueTask> handler)
@@ -731,7 +731,12 @@ public static IMcpServerBuilder WithStdioServerTransport(this IMcpServerBuilder
Throw.IfNull(builder);
AddSingleSessionServerDependencies(builder.Services);
- builder.Services.AddSingleton();
+ builder.Services.AddSingleton(sp =>
+ {
+ var serverOptions = sp.GetRequiredService>();
+ var loggerFactory = sp.GetService();
+ return new StdioServerTransport(serverOptions.Value, loggerFactory);
+ });
return builder;
}
diff --git a/src/ModelContextProtocol/Server/McpServerHandlers.cs b/src/ModelContextProtocol/McpServerHandlers.cs
similarity index 100%
rename from src/ModelContextProtocol/Server/McpServerHandlers.cs
rename to src/ModelContextProtocol/McpServerHandlers.cs
diff --git a/src/ModelContextProtocol/Configuration/McpServerOptionsSetup.cs b/src/ModelContextProtocol/McpServerOptionsSetup.cs
similarity index 97%
rename from src/ModelContextProtocol/Configuration/McpServerOptionsSetup.cs
rename to src/ModelContextProtocol/McpServerOptionsSetup.cs
index 7a8578693..effa41463 100644
--- a/src/ModelContextProtocol/Configuration/McpServerOptionsSetup.cs
+++ b/src/ModelContextProtocol/McpServerOptionsSetup.cs
@@ -1,8 +1,7 @@
using Microsoft.Extensions.Options;
-using ModelContextProtocol;
using ModelContextProtocol.Server;
-namespace Microsoft.Extensions.DependencyInjection;
+namespace ModelContextProtocol;
///
/// Configures the McpServerOptions using addition services from DI.
diff --git a/src/ModelContextProtocol/Configuration/McpServerServiceCollectionExtensions.cs b/src/ModelContextProtocol/McpServerServiceCollectionExtensions.cs
similarity index 97%
rename from src/ModelContextProtocol/Configuration/McpServerServiceCollectionExtensions.cs
rename to src/ModelContextProtocol/McpServerServiceCollectionExtensions.cs
index faf4a3963..d0072002c 100644
--- a/src/ModelContextProtocol/Configuration/McpServerServiceCollectionExtensions.cs
+++ b/src/ModelContextProtocol/McpServerServiceCollectionExtensions.cs
@@ -1,5 +1,6 @@
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Options;
+using ModelContextProtocol;
using ModelContextProtocol.Server;
namespace Microsoft.Extensions.DependencyInjection;
diff --git a/src/ModelContextProtocol/ModelContextProtocol.csproj b/src/ModelContextProtocol/ModelContextProtocol.csproj
index cdb48e14d..746041588 100644
--- a/src/ModelContextProtocol/ModelContextProtocol.csproj
+++ b/src/ModelContextProtocol/ModelContextProtocol.csproj
@@ -5,7 +5,7 @@
true
true
ModelContextProtocol
- .NET SDK for the Model Context Protocol (MCP)
+ .NET SDK for the Model Context Protocol (MCP) with hosting and dependency injection extensions.
README.md
preview
@@ -18,29 +18,20 @@
-
-
-
-
-
-
-
+
+
-
-
-
-
-
+
\ No newline at end of file
diff --git a/src/ModelContextProtocol/Server/SingleSessionMcpServerHostedService.cs b/src/ModelContextProtocol/SingleSessionMcpServerHostedService.cs
similarity index 92%
rename from src/ModelContextProtocol/Server/SingleSessionMcpServerHostedService.cs
rename to src/ModelContextProtocol/SingleSessionMcpServerHostedService.cs
index 6f266ec07..b50e46140 100644
--- a/src/ModelContextProtocol/Server/SingleSessionMcpServerHostedService.cs
+++ b/src/ModelContextProtocol/SingleSessionMcpServerHostedService.cs
@@ -1,6 +1,7 @@
using Microsoft.Extensions.Hosting;
+using ModelContextProtocol.Server;
-namespace ModelContextProtocol.Server;
+namespace ModelContextProtocol;
///
/// Hosted service for a single-session (e.g. stdio) MCP server.
diff --git a/tests/ModelContextProtocol.AspNetCore.Tests/ModelContextProtocol.AspNetCore.Tests.csproj b/tests/ModelContextProtocol.AspNetCore.Tests/ModelContextProtocol.AspNetCore.Tests.csproj
index fd30b71e6..76187ee5a 100644
--- a/tests/ModelContextProtocol.AspNetCore.Tests/ModelContextProtocol.AspNetCore.Tests.csproj
+++ b/tests/ModelContextProtocol.AspNetCore.Tests/ModelContextProtocol.AspNetCore.Tests.csproj
@@ -54,7 +54,7 @@
-
+
diff --git a/tests/ModelContextProtocol.TestServer/ModelContextProtocol.TestServer.csproj b/tests/ModelContextProtocol.TestServer/ModelContextProtocol.TestServer.csproj
index 060732bfc..75de837aa 100644
--- a/tests/ModelContextProtocol.TestServer/ModelContextProtocol.TestServer.csproj
+++ b/tests/ModelContextProtocol.TestServer/ModelContextProtocol.TestServer.csproj
@@ -20,7 +20,7 @@
-
+
diff --git a/tests/ModelContextProtocol.TestSseServer/ModelContextProtocol.TestSseServer.csproj b/tests/ModelContextProtocol.TestSseServer/ModelContextProtocol.TestSseServer.csproj
index 3015fd554..f56d0db9e 100644
--- a/tests/ModelContextProtocol.TestSseServer/ModelContextProtocol.TestSseServer.csproj
+++ b/tests/ModelContextProtocol.TestSseServer/ModelContextProtocol.TestSseServer.csproj
@@ -17,7 +17,7 @@
-
+
diff --git a/tests/ModelContextProtocol.TestSseServer/Program.cs b/tests/ModelContextProtocol.TestSseServer/Program.cs
index 2eb31c21a..379e34fcc 100644
--- a/tests/ModelContextProtocol.TestSseServer/Program.cs
+++ b/tests/ModelContextProtocol.TestSseServer/Program.cs
@@ -43,7 +43,7 @@ private static void ConfigureOptions(McpServerOptions options)
static CreateMessageRequestParams CreateRequestSamplingParams(string context, string uri, int maxTokens = 100)
{
return new CreateMessageRequestParams()
- {
+ {
Messages = [new SamplingMessage()
{
Role = Role.User,
@@ -53,10 +53,10 @@ static CreateMessageRequestParams CreateRequestSamplingParams(string context, st
Text = $"Resource {uri} context: {context}"
}
}],
- SystemPrompt = "You are a helpful test server.",
- MaxTokens = maxTokens,
- Temperature = 0.7f,
- IncludeContext = ContextInclusion.ThisServer
+ SystemPrompt = "You are a helpful test server.",
+ MaxTokens = maxTokens,
+ Temperature = 0.7f,
+ IncludeContext = ContextInclusion.ThisServer
};
}
#endregion
@@ -109,9 +109,9 @@ static CreateMessageRequestParams CreateRequestSamplingParams(string context, st
{
return new ListToolsResult()
{
- Tools =
+ Tools =
[
- new Tool()
+ new Tool()
{
Name = "echo",
Description = "Echoes the input back to the client.",
@@ -171,8 +171,8 @@ static CreateMessageRequestParams CreateRequestSamplingParams(string context, st
}
else if (request.Params.Name == "sampleLLM")
{
- if (request.Params.Arguments is null ||
- !request.Params.Arguments.TryGetValue("prompt", out var prompt) ||
+ if (request.Params.Arguments is null ||
+ !request.Params.Arguments.TryGetValue("prompt", out var prompt) ||
!request.Params.Arguments.TryGetValue("maxTokens", out var maxTokens))
{
throw new McpException("Missing required arguments 'prompt' and 'maxTokens'", McpErrorCode.InvalidParams);
@@ -224,10 +224,10 @@ static CreateMessageRequestParams CreateRequestSamplingParams(string context, st
throw new McpException($"Invalid cursor: '{requestParams.Cursor}'", e, McpErrorCode.InvalidParams);
}
}
-
+
int endIndex = Math.Min(startIndex + pageSize, resources.Count);
string? nextCursor = null;
-
+
if (endIndex < resources.Count)
{
nextCursor = Convert.ToBase64String(Encoding.UTF8.GetBytes(endIndex.ToString()));
@@ -267,9 +267,9 @@ static CreateMessageRequestParams CreateRequestSamplingParams(string context, st
};
}
- ResourceContents? contents = resourceContents.FirstOrDefault(r => r.Uri == request.Params.Uri) ??
+ ResourceContents? contents = resourceContents.FirstOrDefault(r => r.Uri == request.Params.Uri) ??
throw new McpException($"Resource not found: '{request.Params.Uri}'", McpErrorCode.InvalidParams);
-
+
return new ReadResourceResult()
{
Contents = [contents]
diff --git a/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsTransportsTests.cs b/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsTransportsTests.cs
index 6183c35eb..f0dd2116b 100644
--- a/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsTransportsTests.cs
+++ b/tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsTransportsTests.cs
@@ -13,14 +13,13 @@ public class McpServerBuilderExtensionsTransportsTests
public void WithStdioServerTransport_Sets_Transport()
{
var services = new ServiceCollection();
- var builder = new Mock();
- builder.SetupGet(b => b.Services).Returns(services);
+ services.AddMcpServer().WithStdioServerTransport();
- builder.Object.WithStdioServerTransport();
+ var transportServiceType = services.FirstOrDefault(s => s.ServiceType == typeof(ITransport));
+ Assert.NotNull(transportServiceType);
- var transportType = services.FirstOrDefault(s => s.ServiceType == typeof(ITransport));
- Assert.NotNull(transportType);
- Assert.Equal(typeof(StdioServerTransport), transportType.ImplementationType);
+ var serviceProvider = services.BuildServiceProvider();
+ Assert.IsType(serviceProvider.GetRequiredService());
}
[Fact]
diff --git a/tests/ModelContextProtocol.Tests/ModelContextProtocol.Tests.csproj b/tests/ModelContextProtocol.Tests/ModelContextProtocol.Tests.csproj
index b99e2020f..41a3524ca 100644
--- a/tests/ModelContextProtocol.Tests/ModelContextProtocol.Tests.csproj
+++ b/tests/ModelContextProtocol.Tests/ModelContextProtocol.Tests.csproj
@@ -54,7 +54,7 @@
-
+
diff --git a/tests/ModelContextProtocol.Tests/Transport/StdioServerTransportTests.cs b/tests/ModelContextProtocol.Tests/Transport/StdioServerTransportTests.cs
index 242874730..42e5e5052 100644
--- a/tests/ModelContextProtocol.Tests/Transport/StdioServerTransportTests.cs
+++ b/tests/ModelContextProtocol.Tests/Transport/StdioServerTransportTests.cs
@@ -39,7 +39,6 @@ public void Constructor_Throws_For_Null_Options()
{
Assert.Throws("serverName", () => new StdioServerTransport((string)null!));
- Assert.Throws("serverOptions", () => new StdioServerTransport((IOptions)null!));
Assert.Throws("serverOptions", () => new StdioServerTransport((McpServerOptions)null!));
}