From add8f8653d807090ac9337eceb92a6dd41089b19 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Wed, 28 May 2025 13:53:11 -0700 Subject: [PATCH 1/4] Add ModelContextProtocol.Hosting package --- Directory.Packages.props | 1 + ModelContextProtocol.sln | 7 +++ .../AspNetCoreSseServer.csproj | 1 - .../EverythingServer/EverythingServer.csproj | 2 +- .../QuickstartWeatherServer.csproj | 2 +- .../TestServerWithHosting.csproj | 2 +- .../HttpMcpServerBuilderExtensions.cs | 2 +- .../ModelContextProtocol.AspNetCore.csproj | 3 +- .../DefaultMcpServerBuilder.cs | 4 +- .../IMcpServerBuilder.cs | 2 +- .../McpServerBuilderExtensions.cs | 20 ++++--- .../McpServerHandlers.cs | 0 .../McpServerOptionsSetup.cs | 3 +- .../McpServerServiceCollectionExtensions.cs | 1 + .../ModelContextProtocol.Hosting.csproj | 37 +++++++++++++ src/ModelContextProtocol.Hosting/README.md | 54 +++++++++++++++++++ .../SingleSessionMcpServerHostedService.cs | 3 +- .../Client/SseClientTransport.cs | 16 +++--- .../ModelContextProtocol.csproj | 2 +- .../Server/McpServerPrompt.cs | 3 +- .../Server/McpServerPromptAttribute.cs | 2 +- .../Server/McpServerPromptTypeAttribute.cs | 5 +- .../Server/McpServerResource.cs | 2 +- .../Server/McpServerResourceAttribute.cs | 2 +- .../Server/McpServerResourceTypeAttribute.cs | 6 +-- .../Server/McpServerTool.cs | 3 +- .../Server/McpServerToolAttribute.cs | 2 +- .../Server/McpServerToolTypeAttribute.cs | 5 +- .../Server/RequestContext.cs | 2 +- .../Server/StdioServerTransport.cs | 12 ----- .../Program.cs | 26 ++++----- ...pServerBuilderExtensionsTransportsTests.cs | 11 ++-- .../Transport/StdioServerTransportTests.cs | 1 - 33 files changed, 164 insertions(+), 80 deletions(-) rename src/{ModelContextProtocol/Configuration => ModelContextProtocol.Hosting}/DefaultMcpServerBuilder.cs (96%) rename src/{ModelContextProtocol/Configuration => ModelContextProtocol.Hosting}/IMcpServerBuilder.cs (95%) rename src/{ModelContextProtocol/Configuration => ModelContextProtocol.Hosting}/McpServerBuilderExtensions.cs (98%) rename src/{ModelContextProtocol/Server => ModelContextProtocol.Hosting}/McpServerHandlers.cs (100%) rename src/{ModelContextProtocol/Configuration => ModelContextProtocol.Hosting}/McpServerOptionsSetup.cs (97%) rename src/{ModelContextProtocol/Configuration => ModelContextProtocol.Hosting}/McpServerServiceCollectionExtensions.cs (97%) create mode 100644 src/ModelContextProtocol.Hosting/ModelContextProtocol.Hosting.csproj create mode 100644 src/ModelContextProtocol.Hosting/README.md rename src/{ModelContextProtocol/Server => ModelContextProtocol.Hosting}/SingleSessionMcpServerHostedService.cs (91%) diff --git a/Directory.Packages.props b/Directory.Packages.props index 6e61a29f..6765c3f9 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -10,6 +10,7 @@ + diff --git a/ModelContextProtocol.sln b/ModelContextProtocol.sln index 0e4fd721..9d77bc36 100644 --- a/ModelContextProtocol.sln +++ b/ModelContextProtocol.sln @@ -54,6 +54,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EverythingServer", "samples EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelContextProtocol.AspNetCore", "src\ModelContextProtocol.AspNetCore\ModelContextProtocol.AspNetCore.csproj", "{37B6A5E0-9995-497D-8B43-3BC6870CC716}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelContextProtocol.Hosting", "src\ModelContextProtocol.Hosting\ModelContextProtocol.Hosting.csproj", "{3F5C7E8A-F123-4D2B-8B9A-1E2F3D4C5B6A}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelContextProtocol.AspNetCore.Tests", "tests\ModelContextProtocol.AspNetCore.Tests\ModelContextProtocol.AspNetCore.Tests.csproj", "{85557BA6-3D29-4C95-A646-2A972B1C2F25}" EndProject Global @@ -106,6 +108,10 @@ Global {37B6A5E0-9995-497D-8B43-3BC6870CC716}.Debug|Any CPU.Build.0 = Debug|Any CPU {37B6A5E0-9995-497D-8B43-3BC6870CC716}.Release|Any CPU.ActiveCfg = Release|Any CPU {37B6A5E0-9995-497D-8B43-3BC6870CC716}.Release|Any CPU.Build.0 = Release|Any CPU + {3F5C7E8A-F123-4D2B-8B9A-1E2F3D4C5B6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3F5C7E8A-F123-4D2B-8B9A-1E2F3D4C5B6A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3F5C7E8A-F123-4D2B-8B9A-1E2F3D4C5B6A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3F5C7E8A-F123-4D2B-8B9A-1E2F3D4C5B6A}.Release|Any CPU.Build.0 = Release|Any CPU {85557BA6-3D29-4C95-A646-2A972B1C2F25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {85557BA6-3D29-4C95-A646-2A972B1C2F25}.Debug|Any CPU.Build.0 = Debug|Any CPU {85557BA6-3D29-4C95-A646-2A972B1C2F25}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -127,6 +133,7 @@ Global {0D1552DC-E6ED-4AAC-5562-12F8352F46AA} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {17B8453F-AB72-99C5-E5EA-D0B065A6AE65} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {37B6A5E0-9995-497D-8B43-3BC6870CC716} = {A2F1F52A-9107-4BF8-8C3F-2F6670E7D0AD} + {3F5C7E8A-F123-4D2B-8B9A-1E2F3D4C5B6A} = {A2F1F52A-9107-4BF8-8C3F-2F6670E7D0AD} {85557BA6-3D29-4C95-A646-2A972B1C2F25} = {2A77AF5C-138A-4EBB-9A13-9205DCD67928} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution diff --git a/samples/AspNetCoreSseServer/AspNetCoreSseServer.csproj b/samples/AspNetCoreSseServer/AspNetCoreSseServer.csproj index 8274f7cd..59ab4982 100644 --- a/samples/AspNetCoreSseServer/AspNetCoreSseServer.csproj +++ b/samples/AspNetCoreSseServer/AspNetCoreSseServer.csproj @@ -8,7 +8,6 @@ - diff --git a/samples/EverythingServer/EverythingServer.csproj b/samples/EverythingServer/EverythingServer.csproj index d5046f7e..5027c122 100644 --- a/samples/EverythingServer/EverythingServer.csproj +++ b/samples/EverythingServer/EverythingServer.csproj @@ -15,7 +15,7 @@ - + diff --git a/samples/QuickstartWeatherServer/QuickstartWeatherServer.csproj b/samples/QuickstartWeatherServer/QuickstartWeatherServer.csproj index dc1108a8..57837912 100644 --- a/samples/QuickstartWeatherServer/QuickstartWeatherServer.csproj +++ b/samples/QuickstartWeatherServer/QuickstartWeatherServer.csproj @@ -13,7 +13,7 @@ - + diff --git a/samples/TestServerWithHosting/TestServerWithHosting.csproj b/samples/TestServerWithHosting/TestServerWithHosting.csproj index 2466a281..42638e43 100644 --- a/samples/TestServerWithHosting/TestServerWithHosting.csproj +++ b/samples/TestServerWithHosting/TestServerWithHosting.csproj @@ -18,7 +18,7 @@ - + diff --git a/src/ModelContextProtocol.AspNetCore/HttpMcpServerBuilderExtensions.cs b/src/ModelContextProtocol.AspNetCore/HttpMcpServerBuilderExtensions.cs index a8a63e49..0cdc4e37 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 1bc4feb0..03ef71c6 100644 --- a/src/ModelContextProtocol.AspNetCore/ModelContextProtocol.AspNetCore.csproj +++ b/src/ModelContextProtocol.AspNetCore/ModelContextProtocol.AspNetCore.csproj @@ -19,8 +19,9 @@ + - + diff --git a/src/ModelContextProtocol/Configuration/DefaultMcpServerBuilder.cs b/src/ModelContextProtocol.Hosting/DefaultMcpServerBuilder.cs similarity index 96% rename from src/ModelContextProtocol/Configuration/DefaultMcpServerBuilder.cs rename to src/ModelContextProtocol.Hosting/DefaultMcpServerBuilder.cs index d5900917..f94476ae 100644 --- a/src/ModelContextProtocol/Configuration/DefaultMcpServerBuilder.cs +++ b/src/ModelContextProtocol.Hosting/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.Hosting/IMcpServerBuilder.cs similarity index 95% rename from src/ModelContextProtocol/Configuration/IMcpServerBuilder.cs rename to src/ModelContextProtocol.Hosting/IMcpServerBuilder.cs index fde19065..5ec37eba 100644 --- a/src/ModelContextProtocol/Configuration/IMcpServerBuilder.cs +++ b/src/ModelContextProtocol.Hosting/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.Hosting/McpServerBuilderExtensions.cs similarity index 98% rename from src/ModelContextProtocol/Configuration/McpServerBuilderExtensions.cs rename to src/ModelContextProtocol.Hosting/McpServerBuilderExtensions.cs index 95da6b7a..9cfbf2bd 100644 --- a/src/ModelContextProtocol/Configuration/McpServerBuilderExtensions.cs +++ b/src/ModelContextProtocol.Hosting/McpServerBuilderExtensions.cs @@ -2,6 +2,7 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using ModelContextProtocol; +using ModelContextProtocol.Hosting; using ModelContextProtocol.Protocol; using ModelContextProtocol.Server; using System.Diagnostics.CodeAnalysis; @@ -124,7 +125,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 +265,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 +400,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 +481,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 +534,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 +609,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 +732,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.Hosting/McpServerHandlers.cs similarity index 100% rename from src/ModelContextProtocol/Server/McpServerHandlers.cs rename to src/ModelContextProtocol.Hosting/McpServerHandlers.cs diff --git a/src/ModelContextProtocol/Configuration/McpServerOptionsSetup.cs b/src/ModelContextProtocol.Hosting/McpServerOptionsSetup.cs similarity index 97% rename from src/ModelContextProtocol/Configuration/McpServerOptionsSetup.cs rename to src/ModelContextProtocol.Hosting/McpServerOptionsSetup.cs index 7a857869..e420aa4f 100644 --- a/src/ModelContextProtocol/Configuration/McpServerOptionsSetup.cs +++ b/src/ModelContextProtocol.Hosting/McpServerOptionsSetup.cs @@ -1,8 +1,7 @@ using Microsoft.Extensions.Options; -using ModelContextProtocol; using ModelContextProtocol.Server; -namespace Microsoft.Extensions.DependencyInjection; +namespace ModelContextProtocol.Hosting; /// /// Configures the McpServerOptions using addition services from DI. diff --git a/src/ModelContextProtocol/Configuration/McpServerServiceCollectionExtensions.cs b/src/ModelContextProtocol.Hosting/McpServerServiceCollectionExtensions.cs similarity index 97% rename from src/ModelContextProtocol/Configuration/McpServerServiceCollectionExtensions.cs rename to src/ModelContextProtocol.Hosting/McpServerServiceCollectionExtensions.cs index faf4a396..4462742c 100644 --- a/src/ModelContextProtocol/Configuration/McpServerServiceCollectionExtensions.cs +++ b/src/ModelContextProtocol.Hosting/McpServerServiceCollectionExtensions.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; +using ModelContextProtocol.Hosting; using ModelContextProtocol.Server; namespace Microsoft.Extensions.DependencyInjection; diff --git a/src/ModelContextProtocol.Hosting/ModelContextProtocol.Hosting.csproj b/src/ModelContextProtocol.Hosting/ModelContextProtocol.Hosting.csproj new file mode 100644 index 00000000..a5106400 --- /dev/null +++ b/src/ModelContextProtocol.Hosting/ModelContextProtocol.Hosting.csproj @@ -0,0 +1,37 @@ + + + + net9.0;net8.0;netstandard2.0 + true + true + ModelContextProtocol.Hosting + Hosting and dependency injection extensions for the C# Model Context Protocol (MCP) SDK. + README.md + preview + + + + true + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/ModelContextProtocol.Hosting/README.md b/src/ModelContextProtocol.Hosting/README.md new file mode 100644 index 00000000..91c93971 --- /dev/null +++ b/src/ModelContextProtocol.Hosting/README.md @@ -0,0 +1,54 @@ +# Hosting extensions for the MCP C# SDK + +[![NuGet preview version](https://img.shields.io/nuget/vpre/ModelContextProtocol.Hosting.svg)](https://www.nuget.org/packages/ModelContextProtocol.Hosting/absoluteLatest) + +Hosting and dependency injection extensions for 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. + +> [!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 package from NuGet + +``` +dotnet new console +dotnet add package ModelContextProtocol.Hosting --prerelease +``` + +## Getting Started + +This package provides hosting and dependency injection extensions for the core ModelContextProtocol package. It includes configuration builders, hosted services, and transport implementations for stdio and stream-based communications. + +```csharp +// Program.cs for a console application +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.DependencyInjection; +using ModelContextProtocol.Server; +using System.ComponentModel; + +var builder = Host.CreateApplicationBuilder(args); +builder.Services.AddMcpServer() + .WithStdioServerTransport() + .WithToolsFromAssembly(); + +var app = builder.Build(); +await app.RunAsync(); + +[McpServerToolType] +public static class EchoTool +{ + [McpServerTool, Description("Echoes the message back to the client.")] + public static string Echo(string message) => $"hello {message}"; +} +``` \ No newline at end of file diff --git a/src/ModelContextProtocol/Server/SingleSessionMcpServerHostedService.cs b/src/ModelContextProtocol.Hosting/SingleSessionMcpServerHostedService.cs similarity index 91% rename from src/ModelContextProtocol/Server/SingleSessionMcpServerHostedService.cs rename to src/ModelContextProtocol.Hosting/SingleSessionMcpServerHostedService.cs index 6f266ec0..70791273 100644 --- a/src/ModelContextProtocol/Server/SingleSessionMcpServerHostedService.cs +++ b/src/ModelContextProtocol.Hosting/SingleSessionMcpServerHostedService.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.Hosting; +using ModelContextProtocol.Server; -namespace ModelContextProtocol.Server; +namespace ModelContextProtocol.Hosting; /// /// Hosted service for a single-session (e.g. stdio) MCP server. diff --git a/src/ModelContextProtocol/Client/SseClientTransport.cs b/src/ModelContextProtocol/Client/SseClientTransport.cs index 57789c1c..3fba349b 100644 --- a/src/ModelContextProtocol/Client/SseClientTransport.cs +++ b/src/ModelContextProtocol/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/ModelContextProtocol.csproj b/src/ModelContextProtocol/ModelContextProtocol.csproj index cdb48e14..41b93635 100644 --- a/src/ModelContextProtocol/ModelContextProtocol.csproj +++ b/src/ModelContextProtocol/ModelContextProtocol.csproj @@ -22,6 +22,7 @@ + @@ -34,7 +35,6 @@ - diff --git a/src/ModelContextProtocol/Server/McpServerPrompt.cs b/src/ModelContextProtocol/Server/McpServerPrompt.cs index 2260617e..4160fc3f 100644 --- a/src/ModelContextProtocol/Server/McpServerPrompt.cs +++ b/src/ModelContextProtocol/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/Server/McpServerPromptAttribute.cs index d47b02c6..8e7fdf05 100644 --- a/src/ModelContextProtocol/Server/McpServerPromptAttribute.cs +++ b/src/ModelContextProtocol/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/McpServerPromptTypeAttribute.cs b/src/ModelContextProtocol/Server/McpServerPromptTypeAttribute.cs index 31b524ec..3f80b3c5 100644 --- a/src/ModelContextProtocol/Server/McpServerPromptTypeAttribute.cs +++ b/src/ModelContextProtocol/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/Server/McpServerResource.cs index 346c0329..e85ec732 100644 --- a/src/ModelContextProtocol/Server/McpServerResource.cs +++ b/src/ModelContextProtocol/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/Server/McpServerResourceAttribute.cs index 9c5347c7..5cc7a4ef 100644 --- a/src/ModelContextProtocol/Server/McpServerResourceAttribute.cs +++ b/src/ModelContextProtocol/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/McpServerResourceTypeAttribute.cs b/src/ModelContextProtocol/Server/McpServerResourceTypeAttribute.cs index b73bd081..e287765c 100644 --- a/src/ModelContextProtocol/Server/McpServerResourceTypeAttribute.cs +++ b/src/ModelContextProtocol/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/Server/McpServerTool.cs index f2aa2d02..a4b0cc58 100644 --- a/src/ModelContextProtocol/Server/McpServerTool.cs +++ b/src/ModelContextProtocol/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/Server/McpServerToolAttribute.cs index e096a150..73ee786b 100644 --- a/src/ModelContextProtocol/Server/McpServerToolAttribute.cs +++ b/src/ModelContextProtocol/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/McpServerToolTypeAttribute.cs b/src/ModelContextProtocol/Server/McpServerToolTypeAttribute.cs index 57ffb3d9..ee13ddc6 100644 --- a/src/ModelContextProtocol/Server/McpServerToolTypeAttribute.cs +++ b/src/ModelContextProtocol/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/Server/RequestContext.cs index 7437faea..ee8d4a34 100644 --- a/src/ModelContextProtocol/Server/RequestContext.cs +++ b/src/ModelContextProtocol/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/StdioServerTransport.cs b/src/ModelContextProtocol/Server/StdioServerTransport.cs index df7b0087..556a3115 100644 --- a/src/ModelContextProtocol/Server/StdioServerTransport.cs +++ b/src/ModelContextProtocol/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/tests/ModelContextProtocol.TestSseServer/Program.cs b/tests/ModelContextProtocol.TestSseServer/Program.cs index 583d6878..ab60dba2 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 6183c35e..f0dd2116 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/Transport/StdioServerTransportTests.cs b/tests/ModelContextProtocol.Tests/Transport/StdioServerTransportTests.cs index 24287473..42e5e505 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!)); } From 8470b8cc511c057de8b0a404e1cb8cfa4cadbfa1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 May 2025 16:36:57 +0000 Subject: [PATCH 2/4] Rename ModelContextProtocol and ModelContextProtocol.Hosting packages - ModelContextProtocol -> ModelContextProtocol.Core: The core package now clearly indicates it provides fundamental MCP functionality without hosting features - ModelContextProtocol.Hosting -> ModelContextProtocol: The main package now includes hosting and dependency injection extensions, making it the primary entry point for most users --- ModelContextProtocol.sln | 4 +- samples/ChatWithTools/ChatWithTools.csproj | 2 +- .../EverythingServer/EverythingServer.csproj | 2 +- .../QuickstartClient/QuickstartClient.csproj | 2 +- .../QuickstartWeatherServer.csproj | 2 +- .../TestServerWithHosting.csproj | 2 +- .../ModelContextProtocol.AspNetCore.csproj | 2 +- .../AIContentExtensions.cs | 0 .../AutoDetectingClientSessionTransport.cs | 0 .../Client/HttpTransportMode.cs | 0 .../Client/IClientTransport.cs | 0 .../Client/IMcpClient.cs | 0 .../Client/McpClient.cs | 0 .../Client/McpClientExtensions.cs | 0 .../Client/McpClientFactory.cs | 0 .../Client/McpClientOptions.cs | 0 .../Client/McpClientPrompt.cs | 0 .../Client/McpClientResource.cs | 0 .../Client/McpClientResourceTemplate.cs | 0 .../Client/McpClientTool.cs | 0 .../Client/SseClientSessionTransport.cs | 0 .../Client/SseClientTransport.cs | 0 .../Client/SseClientTransportOptions.cs | 0 .../Client/StdioClientSessionTransport.cs | 0 .../Client/StdioClientTransport.cs | 0 .../Client/StdioClientTransportOptions.cs | 0 .../Client/StreamClientSessionTransport.cs | 0 .../Client/StreamClientTransport.cs | 0 .../StreamableHttpClientSessionTransport.cs | 0 .../CustomizableJsonStringEnumConverter.cs | 0 .../Diagnostics.cs | 0 .../IMcpEndpoint.cs | 0 .../McpEndpoint.cs | 0 .../McpEndpointExtensions.cs | 0 .../McpErrorCode.cs | 0 .../McpException.cs | 0 .../McpJsonUtilities.cs | 0 .../McpSession.cs | 0 .../ModelContextProtocol.Core.csproj | 46 +++++++ .../NopProgress.cs | 0 .../NotificationHandlers.cs | 0 .../ProcessHelper.cs | 0 .../ProgressNotificationValue.cs | 0 .../Protocol/Annotations.cs | 0 .../Protocol/Argument.cs | 0 .../Protocol/BlobResourceContents.cs | 0 .../Protocol/CallToolRequestParams.cs | 0 .../Protocol/CallToolResponse.cs | 0 .../Protocol/CancelledNotification.cs | 0 .../Protocol/ClientCapabilities.cs | 0 .../Protocol/CompleteRequestParams.cs | 0 .../Protocol/CompleteResult.cs | 0 .../Protocol/Completion.cs | 0 .../Protocol/CompletionsCapability.cs | 0 .../Protocol/Content.cs | 0 .../Protocol/ContextInclusion.cs | 0 .../Protocol/CreateMessageRequestParams.cs | 0 .../Protocol/CreateMessageResult.cs | 0 .../Protocol/EmptyResult.cs | 0 .../Protocol/GetPromptRequestParams.cs | 0 .../Protocol/GetPromptResult.cs | 0 .../Protocol/ITransport.cs | 0 .../Protocol/Implementation.cs | 0 .../Protocol/InitializeRequestParams.cs | 0 .../Protocol/InitializeResult.cs | 0 .../Protocol/JsonRpcError.cs | 0 .../Protocol/JsonRpcErrorDetail.cs | 0 .../Protocol/JsonRpcMessage.cs | 0 .../Protocol/JsonRpcMessageWithId.cs | 0 .../Protocol/JsonRpcNotification.cs | 0 .../Protocol/JsonRpcRequest.cs | 0 .../Protocol/JsonRpcResponse.cs | 0 .../Protocol/ListPromptsRequestParams.cs | 0 .../Protocol/ListPromptsResult.cs | 0 .../ListResourceTemplatesRequestParams.cs | 0 .../Protocol/ListResourceTemplatesResult.cs | 0 .../Protocol/ListResourcesRequestParams.cs | 0 .../Protocol/ListResourcesResult.cs | 0 .../Protocol/ListRootsRequestParams.cs | 0 .../Protocol/ListRootsResult.cs | 0 .../Protocol/ListToolsRequestParams.cs | 0 .../Protocol/ListToolsResult.cs | 0 .../Protocol/LoggingCapability.cs | 0 .../Protocol/LoggingLevel.cs | 0 .../LoggingMessageNotificationParams.cs | 0 .../Protocol/ModelHint.cs | 0 .../Protocol/ModelPreferences.cs | 0 .../Protocol/NotificationMethods.cs | 0 .../Protocol/PaginatedRequest.cs | 0 .../Protocol/PaginatedResult.cs | 0 .../Protocol/PingResult.cs | 0 .../Protocol/ProgressNotification.cs | 0 .../Protocol/ProgressToken.cs | 0 .../Protocol/Prompt.cs | 0 .../Protocol/PromptArgument.cs | 0 .../Protocol/PromptMessage.cs | 0 .../Protocol/PromptsCapability.cs | 0 .../Protocol/ReadResourceRequestParams.cs | 0 .../Protocol/ReadResourceResult.cs | 0 .../Protocol/Reference.cs | 0 .../Protocol/RequestId.cs | 0 .../Protocol/RequestMethods.cs | 0 .../Protocol/RequestParams.cs | 0 .../Protocol/RequestParamsMetadata.cs | 0 .../Protocol/Resource.cs | 0 .../Protocol/ResourceContents.cs | 0 .../Protocol/ResourceTemplate.cs | 0 .../ResourceUpdatedNotificationParams.cs | 0 .../Protocol/ResourcesCapability.cs | 0 .../Protocol/Role.cs | 0 .../Protocol/Root.cs | 0 .../Protocol/RootsCapability.cs | 0 .../Protocol/SamplingCapability.cs | 0 .../Protocol/SamplingMessage.cs | 0 .../Protocol/ServerCapabilities.cs | 0 .../Protocol/SetLevelRequestParams.cs | 0 .../Protocol/SubscribeRequestParams.cs | 0 .../Protocol/TextResourceContents.cs | 0 .../Protocol/Tool.cs | 0 .../Protocol/ToolAnnotations.cs | 0 .../Protocol/ToolsCapability.cs | 0 .../Protocol/TransportBase.cs | 0 .../Protocol/UnsubscribeRequestParams.cs | 0 src/ModelContextProtocol.Core/README.md | 112 ++++++++++++++++++ .../RequestHandlers.cs | 0 .../SemaphoreSlimExtensions.cs | 0 .../Server/AIFunctionMcpServerPrompt.cs | 0 .../Server/AIFunctionMcpServerResource.cs | 0 .../Server/AIFunctionMcpServerTool.cs | 0 .../Server/DelegatingMcpServerPrompt.cs | 0 .../Server/DelegatingMcpServerResource.cs | 0 .../Server/DelegatingMcpServerTool.cs | 0 .../Server/DestinationBoundMcpServer.cs | 0 .../Server/IMcpServer.cs | 0 .../Server/IMcpServerPrimitive.cs | 0 .../Server/McpServer.cs | 0 .../Server/McpServerExtensions.cs | 0 .../Server/McpServerFactory.cs | 0 .../Server/McpServerOptions.cs | 0 .../Server/McpServerPrimitiveCollection.cs | 0 .../Server/McpServerPrompt.cs | 0 .../Server/McpServerPromptAttribute.cs | 0 .../Server/McpServerPromptCreateOptions.cs | 0 .../Server/McpServerPromptTypeAttribute.cs | 0 .../Server/McpServerResource.cs | 0 .../Server/McpServerResourceAttribute.cs | 0 .../Server/McpServerResourceCreateOptions.cs | 0 .../Server/McpServerResourceTypeAttribute.cs | 0 .../Server/McpServerTool.cs | 0 .../Server/McpServerToolAttribute.cs | 0 .../Server/McpServerToolCreateOptions.cs | 0 .../Server/McpServerToolTypeAttribute.cs | 0 .../Server/RequestContext.cs | 0 .../Server/SseResponseStreamTransport.cs | 0 .../Server/SseWriter.cs | 0 .../Server/StdioServerTransport.cs | 0 .../Server/StreamServerTransport.cs | 0 .../Server/StreamableHttpPostTransport.cs | 0 .../Server/StreamableHttpServerTransport.cs | 0 .../TokenProgress.cs | 0 .../UriTemplate.cs | 0 .../ModelContextProtocol.Hosting.csproj | 37 ------ src/ModelContextProtocol.Hosting/README.md | 54 --------- .../DefaultMcpServerBuilder.cs | 0 .../IMcpServerBuilder.cs | 0 .../McpServerBuilderExtensions.cs | 1 - .../McpServerHandlers.cs | 0 .../McpServerOptionsSetup.cs | 2 +- .../McpServerServiceCollectionExtensions.cs | 2 +- .../ModelContextProtocol.csproj | 19 +-- .../SingleSessionMcpServerHostedService.cs | 2 +- ...delContextProtocol.AspNetCore.Tests.csproj | 2 +- .../ModelContextProtocol.TestServer.csproj | 2 +- .../ModelContextProtocol.TestSseServer.csproj | 2 +- .../ModelContextProtocol.Tests.csproj | 2 +- 175 files changed, 178 insertions(+), 121 deletions(-) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/AIContentExtensions.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/AutoDetectingClientSessionTransport.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/HttpTransportMode.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/IClientTransport.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/IMcpClient.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/McpClient.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/McpClientExtensions.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/McpClientFactory.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/McpClientOptions.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/McpClientPrompt.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/McpClientResource.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/McpClientResourceTemplate.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/McpClientTool.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/SseClientSessionTransport.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/SseClientTransport.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/SseClientTransportOptions.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/StdioClientSessionTransport.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/StdioClientTransport.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/StdioClientTransportOptions.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/StreamClientSessionTransport.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/StreamClientTransport.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Client/StreamableHttpClientSessionTransport.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/CustomizableJsonStringEnumConverter.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Diagnostics.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/IMcpEndpoint.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/McpEndpoint.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/McpEndpointExtensions.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/McpErrorCode.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/McpException.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/McpJsonUtilities.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/McpSession.cs (100%) create mode 100644 src/ModelContextProtocol.Core/ModelContextProtocol.Core.csproj rename src/{ModelContextProtocol => ModelContextProtocol.Core}/NopProgress.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/NotificationHandlers.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/ProcessHelper.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/ProgressNotificationValue.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/Annotations.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/Argument.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/BlobResourceContents.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/CallToolRequestParams.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/CallToolResponse.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/CancelledNotification.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ClientCapabilities.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/CompleteRequestParams.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/CompleteResult.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/Completion.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/CompletionsCapability.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/Content.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ContextInclusion.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/CreateMessageRequestParams.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/CreateMessageResult.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/EmptyResult.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/GetPromptRequestParams.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/GetPromptResult.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ITransport.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/Implementation.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/InitializeRequestParams.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/InitializeResult.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/JsonRpcError.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/JsonRpcErrorDetail.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/JsonRpcMessage.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/JsonRpcMessageWithId.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/JsonRpcNotification.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/JsonRpcRequest.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/JsonRpcResponse.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ListPromptsRequestParams.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ListPromptsResult.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ListResourceTemplatesRequestParams.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ListResourceTemplatesResult.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ListResourcesRequestParams.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ListResourcesResult.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ListRootsRequestParams.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ListRootsResult.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ListToolsRequestParams.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ListToolsResult.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/LoggingCapability.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/LoggingLevel.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/LoggingMessageNotificationParams.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ModelHint.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ModelPreferences.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/NotificationMethods.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/PaginatedRequest.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/PaginatedResult.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/PingResult.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ProgressNotification.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ProgressToken.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/Prompt.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/PromptArgument.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/PromptMessage.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/PromptsCapability.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ReadResourceRequestParams.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ReadResourceResult.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/Reference.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/RequestId.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/RequestMethods.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/RequestParams.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/RequestParamsMetadata.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/Resource.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ResourceContents.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ResourceTemplate.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ResourceUpdatedNotificationParams.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ResourcesCapability.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/Role.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/Root.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/RootsCapability.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/SamplingCapability.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/SamplingMessage.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ServerCapabilities.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/SetLevelRequestParams.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/SubscribeRequestParams.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/TextResourceContents.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/Tool.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ToolAnnotations.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/ToolsCapability.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/TransportBase.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Protocol/UnsubscribeRequestParams.cs (100%) create mode 100644 src/ModelContextProtocol.Core/README.md rename src/{ModelContextProtocol => ModelContextProtocol.Core}/RequestHandlers.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/SemaphoreSlimExtensions.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/AIFunctionMcpServerPrompt.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/AIFunctionMcpServerResource.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/AIFunctionMcpServerTool.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/DelegatingMcpServerPrompt.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/DelegatingMcpServerResource.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/DelegatingMcpServerTool.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/DestinationBoundMcpServer.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/IMcpServer.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/IMcpServerPrimitive.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/McpServer.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/McpServerExtensions.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/McpServerFactory.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/McpServerOptions.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/McpServerPrimitiveCollection.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/McpServerPrompt.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/McpServerPromptAttribute.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/McpServerPromptCreateOptions.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/McpServerPromptTypeAttribute.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/McpServerResource.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/McpServerResourceAttribute.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/McpServerResourceCreateOptions.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/McpServerResourceTypeAttribute.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/McpServerTool.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/McpServerToolAttribute.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/McpServerToolCreateOptions.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/McpServerToolTypeAttribute.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/RequestContext.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/SseResponseStreamTransport.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/SseWriter.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/StdioServerTransport.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/StreamServerTransport.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/StreamableHttpPostTransport.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/Server/StreamableHttpServerTransport.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/TokenProgress.cs (100%) rename src/{ModelContextProtocol => ModelContextProtocol.Core}/UriTemplate.cs (100%) delete mode 100644 src/ModelContextProtocol.Hosting/ModelContextProtocol.Hosting.csproj delete mode 100644 src/ModelContextProtocol.Hosting/README.md rename src/{ModelContextProtocol.Hosting => ModelContextProtocol}/DefaultMcpServerBuilder.cs (100%) rename src/{ModelContextProtocol.Hosting => ModelContextProtocol}/IMcpServerBuilder.cs (100%) rename src/{ModelContextProtocol.Hosting => ModelContextProtocol}/McpServerBuilderExtensions.cs (99%) rename src/{ModelContextProtocol.Hosting => ModelContextProtocol}/McpServerHandlers.cs (100%) rename src/{ModelContextProtocol.Hosting => ModelContextProtocol}/McpServerOptionsSetup.cs (98%) rename src/{ModelContextProtocol.Hosting => ModelContextProtocol}/McpServerServiceCollectionExtensions.cs (97%) rename src/{ModelContextProtocol.Hosting => ModelContextProtocol}/SingleSessionMcpServerHostedService.cs (95%) diff --git a/ModelContextProtocol.sln b/ModelContextProtocol.sln index 9d77bc36..261022ac 100644 --- a/ModelContextProtocol.sln +++ b/ModelContextProtocol.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.13.35507.96 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelContextProtocol", "src\ModelContextProtocol\ModelContextProtocol.csproj", "{12260CD2-AFFC-4B2E-8898-F442CAA1FA0F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelContextProtocol.Core", "src\ModelContextProtocol.Core\ModelContextProtocol.Core.csproj", "{12260CD2-AFFC-4B2E-8898-F442CAA1FA0F}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelContextProtocol.Tests", "tests\ModelContextProtocol.Tests\ModelContextProtocol.Tests.csproj", "{FF41F619-833D-4FA2-8C53-04D0A1D5AA61}" EndProject @@ -54,7 +54,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EverythingServer", "samples EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelContextProtocol.AspNetCore", "src\ModelContextProtocol.AspNetCore\ModelContextProtocol.AspNetCore.csproj", "{37B6A5E0-9995-497D-8B43-3BC6870CC716}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelContextProtocol.Hosting", "src\ModelContextProtocol.Hosting\ModelContextProtocol.Hosting.csproj", "{3F5C7E8A-F123-4D2B-8B9A-1E2F3D4C5B6A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelContextProtocol", "src\ModelContextProtocol\ModelContextProtocol.csproj", "{3F5C7E8A-F123-4D2B-8B9A-1E2F3D4C5B6A}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelContextProtocol.AspNetCore.Tests", "tests\ModelContextProtocol.AspNetCore.Tests\ModelContextProtocol.AspNetCore.Tests.csproj", "{85557BA6-3D29-4C95-A646-2A972B1C2F25}" EndProject diff --git a/samples/ChatWithTools/ChatWithTools.csproj b/samples/ChatWithTools/ChatWithTools.csproj index 13bdafc0..481b86f5 100644 --- a/samples/ChatWithTools/ChatWithTools.csproj +++ b/samples/ChatWithTools/ChatWithTools.csproj @@ -20,7 +20,7 @@ - + diff --git a/samples/EverythingServer/EverythingServer.csproj b/samples/EverythingServer/EverythingServer.csproj index 5027c122..d5046f7e 100644 --- a/samples/EverythingServer/EverythingServer.csproj +++ b/samples/EverythingServer/EverythingServer.csproj @@ -15,7 +15,7 @@ - + diff --git a/samples/QuickstartClient/QuickstartClient.csproj b/samples/QuickstartClient/QuickstartClient.csproj index b68f15e5..3b233106 100644 --- a/samples/QuickstartClient/QuickstartClient.csproj +++ b/samples/QuickstartClient/QuickstartClient.csproj @@ -13,7 +13,7 @@ - + diff --git a/samples/QuickstartWeatherServer/QuickstartWeatherServer.csproj b/samples/QuickstartWeatherServer/QuickstartWeatherServer.csproj index 57837912..dc1108a8 100644 --- a/samples/QuickstartWeatherServer/QuickstartWeatherServer.csproj +++ b/samples/QuickstartWeatherServer/QuickstartWeatherServer.csproj @@ -13,7 +13,7 @@ - + diff --git a/samples/TestServerWithHosting/TestServerWithHosting.csproj b/samples/TestServerWithHosting/TestServerWithHosting.csproj index 42638e43..2466a281 100644 --- a/samples/TestServerWithHosting/TestServerWithHosting.csproj +++ b/samples/TestServerWithHosting/TestServerWithHosting.csproj @@ -18,7 +18,7 @@ - + diff --git a/src/ModelContextProtocol.AspNetCore/ModelContextProtocol.AspNetCore.csproj b/src/ModelContextProtocol.AspNetCore/ModelContextProtocol.AspNetCore.csproj index 03ef71c6..7968e23f 100644 --- a/src/ModelContextProtocol.AspNetCore/ModelContextProtocol.AspNetCore.csproj +++ b/src/ModelContextProtocol.AspNetCore/ModelContextProtocol.AspNetCore.csproj @@ -21,7 +21,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 100% rename from src/ModelContextProtocol/Client/SseClientTransport.cs rename to src/ModelContextProtocol.Core/Client/SseClientTransport.cs 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 00000000..e9edb169 --- /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/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 00000000..a6753f25 --- /dev/null +++ b/src/ModelContextProtocol.Core/README.md @@ -0,0 +1,112 @@ +# MCP C# SDK Core + +[![NuGet preview version](https://img.shields.io/nuget/vpre/ModelContextProtocol.Core.svg)](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 100% rename from src/ModelContextProtocol/Server/McpServerPrompt.cs rename to src/ModelContextProtocol.Core/Server/McpServerPrompt.cs diff --git a/src/ModelContextProtocol/Server/McpServerPromptAttribute.cs b/src/ModelContextProtocol.Core/Server/McpServerPromptAttribute.cs similarity index 100% rename from src/ModelContextProtocol/Server/McpServerPromptAttribute.cs rename to src/ModelContextProtocol.Core/Server/McpServerPromptAttribute.cs 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 100% rename from src/ModelContextProtocol/Server/McpServerPromptTypeAttribute.cs rename to src/ModelContextProtocol.Core/Server/McpServerPromptTypeAttribute.cs diff --git a/src/ModelContextProtocol/Server/McpServerResource.cs b/src/ModelContextProtocol.Core/Server/McpServerResource.cs similarity index 100% rename from src/ModelContextProtocol/Server/McpServerResource.cs rename to src/ModelContextProtocol.Core/Server/McpServerResource.cs diff --git a/src/ModelContextProtocol/Server/McpServerResourceAttribute.cs b/src/ModelContextProtocol.Core/Server/McpServerResourceAttribute.cs similarity index 100% rename from src/ModelContextProtocol/Server/McpServerResourceAttribute.cs rename to src/ModelContextProtocol.Core/Server/McpServerResourceAttribute.cs 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 100% rename from src/ModelContextProtocol/Server/McpServerResourceTypeAttribute.cs rename to src/ModelContextProtocol.Core/Server/McpServerResourceTypeAttribute.cs diff --git a/src/ModelContextProtocol/Server/McpServerTool.cs b/src/ModelContextProtocol.Core/Server/McpServerTool.cs similarity index 100% rename from src/ModelContextProtocol/Server/McpServerTool.cs rename to src/ModelContextProtocol.Core/Server/McpServerTool.cs diff --git a/src/ModelContextProtocol/Server/McpServerToolAttribute.cs b/src/ModelContextProtocol.Core/Server/McpServerToolAttribute.cs similarity index 100% rename from src/ModelContextProtocol/Server/McpServerToolAttribute.cs rename to src/ModelContextProtocol.Core/Server/McpServerToolAttribute.cs 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 100% rename from src/ModelContextProtocol/Server/McpServerToolTypeAttribute.cs rename to src/ModelContextProtocol.Core/Server/McpServerToolTypeAttribute.cs diff --git a/src/ModelContextProtocol/Server/RequestContext.cs b/src/ModelContextProtocol.Core/Server/RequestContext.cs similarity index 100% rename from src/ModelContextProtocol/Server/RequestContext.cs rename to src/ModelContextProtocol.Core/Server/RequestContext.cs 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 100% rename from src/ModelContextProtocol/Server/StdioServerTransport.cs rename to src/ModelContextProtocol.Core/Server/StdioServerTransport.cs 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.Hosting/ModelContextProtocol.Hosting.csproj b/src/ModelContextProtocol.Hosting/ModelContextProtocol.Hosting.csproj deleted file mode 100644 index a5106400..00000000 --- a/src/ModelContextProtocol.Hosting/ModelContextProtocol.Hosting.csproj +++ /dev/null @@ -1,37 +0,0 @@ - - - - net9.0;net8.0;netstandard2.0 - true - true - ModelContextProtocol.Hosting - Hosting and dependency injection extensions for the C# Model Context Protocol (MCP) SDK. - README.md - preview - - - - true - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/ModelContextProtocol.Hosting/README.md b/src/ModelContextProtocol.Hosting/README.md deleted file mode 100644 index 91c93971..00000000 --- a/src/ModelContextProtocol.Hosting/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# Hosting extensions for the MCP C# SDK - -[![NuGet preview version](https://img.shields.io/nuget/vpre/ModelContextProtocol.Hosting.svg)](https://www.nuget.org/packages/ModelContextProtocol.Hosting/absoluteLatest) - -Hosting and dependency injection extensions for 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. - -> [!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 package from NuGet - -``` -dotnet new console -dotnet add package ModelContextProtocol.Hosting --prerelease -``` - -## Getting Started - -This package provides hosting and dependency injection extensions for the core ModelContextProtocol package. It includes configuration builders, hosted services, and transport implementations for stdio and stream-based communications. - -```csharp -// Program.cs for a console application -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.DependencyInjection; -using ModelContextProtocol.Server; -using System.ComponentModel; - -var builder = Host.CreateApplicationBuilder(args); -builder.Services.AddMcpServer() - .WithStdioServerTransport() - .WithToolsFromAssembly(); - -var app = builder.Build(); -await app.RunAsync(); - -[McpServerToolType] -public static class EchoTool -{ - [McpServerTool, Description("Echoes the message back to the client.")] - public static string Echo(string message) => $"hello {message}"; -} -``` \ No newline at end of file diff --git a/src/ModelContextProtocol.Hosting/DefaultMcpServerBuilder.cs b/src/ModelContextProtocol/DefaultMcpServerBuilder.cs similarity index 100% rename from src/ModelContextProtocol.Hosting/DefaultMcpServerBuilder.cs rename to src/ModelContextProtocol/DefaultMcpServerBuilder.cs diff --git a/src/ModelContextProtocol.Hosting/IMcpServerBuilder.cs b/src/ModelContextProtocol/IMcpServerBuilder.cs similarity index 100% rename from src/ModelContextProtocol.Hosting/IMcpServerBuilder.cs rename to src/ModelContextProtocol/IMcpServerBuilder.cs diff --git a/src/ModelContextProtocol.Hosting/McpServerBuilderExtensions.cs b/src/ModelContextProtocol/McpServerBuilderExtensions.cs similarity index 99% rename from src/ModelContextProtocol.Hosting/McpServerBuilderExtensions.cs rename to src/ModelContextProtocol/McpServerBuilderExtensions.cs index 9cfbf2bd..e7a266d0 100644 --- a/src/ModelContextProtocol.Hosting/McpServerBuilderExtensions.cs +++ b/src/ModelContextProtocol/McpServerBuilderExtensions.cs @@ -2,7 +2,6 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using ModelContextProtocol; -using ModelContextProtocol.Hosting; using ModelContextProtocol.Protocol; using ModelContextProtocol.Server; using System.Diagnostics.CodeAnalysis; diff --git a/src/ModelContextProtocol.Hosting/McpServerHandlers.cs b/src/ModelContextProtocol/McpServerHandlers.cs similarity index 100% rename from src/ModelContextProtocol.Hosting/McpServerHandlers.cs rename to src/ModelContextProtocol/McpServerHandlers.cs diff --git a/src/ModelContextProtocol.Hosting/McpServerOptionsSetup.cs b/src/ModelContextProtocol/McpServerOptionsSetup.cs similarity index 98% rename from src/ModelContextProtocol.Hosting/McpServerOptionsSetup.cs rename to src/ModelContextProtocol/McpServerOptionsSetup.cs index e420aa4f..effa4146 100644 --- a/src/ModelContextProtocol.Hosting/McpServerOptionsSetup.cs +++ b/src/ModelContextProtocol/McpServerOptionsSetup.cs @@ -1,7 +1,7 @@ using Microsoft.Extensions.Options; using ModelContextProtocol.Server; -namespace ModelContextProtocol.Hosting; +namespace ModelContextProtocol; /// /// Configures the McpServerOptions using addition services from DI. diff --git a/src/ModelContextProtocol.Hosting/McpServerServiceCollectionExtensions.cs b/src/ModelContextProtocol/McpServerServiceCollectionExtensions.cs similarity index 97% rename from src/ModelContextProtocol.Hosting/McpServerServiceCollectionExtensions.cs rename to src/ModelContextProtocol/McpServerServiceCollectionExtensions.cs index 4462742c..d0072002 100644 --- a/src/ModelContextProtocol.Hosting/McpServerServiceCollectionExtensions.cs +++ b/src/ModelContextProtocol/McpServerServiceCollectionExtensions.cs @@ -1,6 +1,6 @@ using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; -using ModelContextProtocol.Hosting; +using ModelContextProtocol; using ModelContextProtocol.Server; namespace Microsoft.Extensions.DependencyInjection; diff --git a/src/ModelContextProtocol/ModelContextProtocol.csproj b/src/ModelContextProtocol/ModelContextProtocol.csproj index 41b93635..74604158 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.Hosting/SingleSessionMcpServerHostedService.cs b/src/ModelContextProtocol/SingleSessionMcpServerHostedService.cs similarity index 95% rename from src/ModelContextProtocol.Hosting/SingleSessionMcpServerHostedService.cs rename to src/ModelContextProtocol/SingleSessionMcpServerHostedService.cs index 70791273..b50e4614 100644 --- a/src/ModelContextProtocol.Hosting/SingleSessionMcpServerHostedService.cs +++ b/src/ModelContextProtocol/SingleSessionMcpServerHostedService.cs @@ -1,7 +1,7 @@ using Microsoft.Extensions.Hosting; using ModelContextProtocol.Server; -namespace ModelContextProtocol.Hosting; +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 fd30b71e..76187ee5 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 060732bf..75de837a 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 3015fd55..f56d0db9 100644 --- a/tests/ModelContextProtocol.TestSseServer/ModelContextProtocol.TestSseServer.csproj +++ b/tests/ModelContextProtocol.TestSseServer/ModelContextProtocol.TestSseServer.csproj @@ -17,7 +17,7 @@ - + diff --git a/tests/ModelContextProtocol.Tests/ModelContextProtocol.Tests.csproj b/tests/ModelContextProtocol.Tests/ModelContextProtocol.Tests.csproj index b99e2020..41a3524c 100644 --- a/tests/ModelContextProtocol.Tests/ModelContextProtocol.Tests.csproj +++ b/tests/ModelContextProtocol.Tests/ModelContextProtocol.Tests.csproj @@ -54,7 +54,7 @@ - + From 2b66813a2a8caccf395463911b9c935578b684a3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 May 2025 19:45:52 +0000 Subject: [PATCH 3/4] Add package overview section to main README with NuGet links and descriptions Co-authored-by: halter73 <54385+halter73@users.noreply.github.com> --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 6ad5aa89..07324306 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)** [![NuGet preview version](https://img.shields.io/nuget/vpre/ModelContextProtocol.svg)](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)** [![NuGet preview version](https://img.shields.io/nuget/vpre/ModelContextProtocol.AspNetCore.svg)](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)** [![NuGet preview version](https://img.shields.io/nuget/vpre/ModelContextProtocol.Core.svg)](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. From 23adb940251a1904d350ff9aec3902e1aa927ac4 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Mon, 2 Jun 2025 15:11:14 -0700 Subject: [PATCH 4/4] Add ModelContextProtocol.Core to slnx --- ModelContextProtocol.slnx | 1 + 1 file changed, 1 insertion(+) diff --git a/ModelContextProtocol.slnx b/ModelContextProtocol.slnx index cbc39557..84d5aca7 100644 --- a/ModelContextProtocol.slnx +++ b/ModelContextProtocol.slnx @@ -29,6 +29,7 @@ +