diff --git a/docs/list-of-diagnostics.md b/docs/list-of-diagnostics.md index 573d97fea..43574929b 100644 --- a/docs/list-of-diagnostics.md +++ b/docs/list-of-diagnostics.md @@ -23,4 +23,15 @@ If you use experimental APIs, you will get one of the diagnostics shown below. T | Diagnostic ID | Description | | :------------ | :---------- | -| `MCPEXP001` | MCP experimental APIs including Tasks and Extensions. Tasks provide a mechanism for asynchronous long-running operations that can be polled for status and results (see [MCP Tasks specification](https://modelcontextprotocol.io/specification/draft/basic/utilities/tasks)). Extensions provide a framework for extending the Model Context Protocol while maintaining interoperability (see [SEP-2133](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2133)). | \ No newline at end of file +| `MCPEXP001` | MCP experimental APIs including Tasks and Extensions. Tasks provide a mechanism for asynchronous long-running operations that can be polled for status and results (see [MCP Tasks specification](https://modelcontextprotocol.io/specification/draft/basic/utilities/tasks)). Extensions provide a framework for extending the Model Context Protocol while maintaining interoperability (see [SEP-2133](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2133)). | + +## Obsolete APIs + +Obsolete diagnostic IDs are in the format `MCP9###`. + +When APIs are marked as obsolete, a diagnostic is emitted to warn users that the API will be removed in a future version. Diagnostic IDs are never reused, even after an obsolete API has been removed, to avoid suppressing warnings for different APIs. + +| Diagnostic ID | Status | Description | +| :------------ | :----- | :---------- | +| `MCP9001` | In place | The `EnumSchema` and `LegacyTitledEnumSchema` APIs are deprecated as of specification version 2025-11-25. Use the current schema APIs instead. | +| `MCP9002` | Removed | The `AddXxxFilter` extension methods on `IMcpServerBuilder` (e.g., `AddListToolsFilter`, `AddCallToolFilter`, `AddIncomingMessageFilter`) were superseded by `WithRequestFilters()` and `WithMessageFilters()`. | \ No newline at end of file diff --git a/src/Common/Obsoletions.cs b/src/Common/Obsoletions.cs index d75a2c841..27053df1c 100644 --- a/src/Common/Obsoletions.cs +++ b/src/Common/Obsoletions.cs @@ -23,8 +23,6 @@ internal static class Obsoletions public const string LegacyTitledEnumSchema_Message = "The EnumSchema and LegacyTitledEnumSchema APIs are deprecated as of specification version 2025-11-25 and will be removed in a future major version. See SEP-1330 for more information."; public const string LegacyTitledEnumSchema_Url = "https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1330"; - public const string MessageAndRequestFilter_DiagnosticId = "MCP9002"; - public const string MessageAndRequestFilter_Url = "https://github.com/modelcontextprotocol/csharp-sdk/pull/1308"; - public const string MessageFilter_Message = "Use WithMessageFilters() instead."; - public const string RequestFilter_Message = "Use WithRequestFilters() instead."; + // MCP9002 was used for the AddXxxFilter extension methods on IMcpServerBuilder that were superseded by + // WithMessageFilters() and WithRequestFilters(). The APIs were removed; do not reuse this diagnostic ID. } diff --git a/src/ModelContextProtocol/McpServerBuilderExtensions.cs b/src/ModelContextProtocol/McpServerBuilderExtensions.cs index 6ed498748..a6c5c0bc3 100644 --- a/src/ModelContextProtocol/McpServerBuilderExtensions.cs +++ b/src/ModelContextProtocol/McpServerBuilderExtensions.cs @@ -925,139 +925,6 @@ public static IMcpServerBuilder WithRequestFilters(this IMcpServerBuilder builde return builder; } - #pragma warning disable CS0436 // ObsoleteAttribute polyfill conflicts with framework type on netstandard. - - /// - /// Adds a filter to the list resource templates handler pipeline. - /// - /// The builder instance. - /// The filter function that wraps the handler. - /// The builder provided in . - [Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)] - public static IMcpServerBuilder AddListResourceTemplatesFilter(this IMcpServerBuilder builder, McpRequestFilter filter) => - builder.WithRequestFilters(filters => filters.AddListResourceTemplatesFilter(filter)); - - /// - /// Adds a filter to the list tools handler pipeline. - /// - /// The builder instance. - /// The filter function that wraps the handler. - /// The builder provided in . - [Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)] - public static IMcpServerBuilder AddListToolsFilter(this IMcpServerBuilder builder, McpRequestFilter filter) => - builder.WithRequestFilters(filters => filters.AddListToolsFilter(filter)); - - /// - /// Adds a filter to the call tool handler pipeline. - /// - /// The builder instance. - /// The filter function that wraps the handler. - /// The builder provided in . - [Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)] - public static IMcpServerBuilder AddCallToolFilter(this IMcpServerBuilder builder, McpRequestFilter filter) => - builder.WithRequestFilters(filters => filters.AddCallToolFilter(filter)); - - /// - /// Adds a filter to the list prompts handler pipeline. - /// - /// The builder instance. - /// The filter function that wraps the handler. - /// The builder provided in . - [Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)] - public static IMcpServerBuilder AddListPromptsFilter(this IMcpServerBuilder builder, McpRequestFilter filter) => - builder.WithRequestFilters(filters => filters.AddListPromptsFilter(filter)); - - /// - /// Adds a filter to the get prompt handler pipeline. - /// - /// The builder instance. - /// The filter function that wraps the handler. - /// The builder provided in . - [Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)] - public static IMcpServerBuilder AddGetPromptFilter(this IMcpServerBuilder builder, McpRequestFilter filter) => - builder.WithRequestFilters(filters => filters.AddGetPromptFilter(filter)); - - /// - /// Adds a filter to the list resources handler pipeline. - /// - /// The builder instance. - /// The filter function that wraps the handler. - /// The builder provided in . - [Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)] - public static IMcpServerBuilder AddListResourcesFilter(this IMcpServerBuilder builder, McpRequestFilter filter) => - builder.WithRequestFilters(filters => filters.AddListResourcesFilter(filter)); - - /// - /// Adds a filter to the read resource handler pipeline. - /// - /// The builder instance. - /// The filter function that wraps the handler. - /// The builder provided in . - [Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)] - public static IMcpServerBuilder AddReadResourceFilter(this IMcpServerBuilder builder, McpRequestFilter filter) => - builder.WithRequestFilters(filters => filters.AddReadResourceFilter(filter)); - - /// - /// Adds a filter to the complete handler pipeline. - /// - /// The builder instance. - /// The filter function that wraps the handler. - /// The builder provided in . - [Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)] - public static IMcpServerBuilder AddCompleteFilter(this IMcpServerBuilder builder, McpRequestFilter filter) => - builder.WithRequestFilters(filters => filters.AddCompleteFilter(filter)); - - /// - /// Adds a filter to the subscribe-to-resources handler pipeline. - /// - /// The builder instance. - /// The filter function that wraps the handler. - /// The builder provided in . - [Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)] - public static IMcpServerBuilder AddSubscribeToResourcesFilter(this IMcpServerBuilder builder, McpRequestFilter filter) => - builder.WithRequestFilters(filters => filters.AddSubscribeToResourcesFilter(filter)); - - /// - /// Adds a filter to the unsubscribe-from-resources handler pipeline. - /// - /// The builder instance. - /// The filter function that wraps the handler. - /// The builder provided in . - [Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)] - public static IMcpServerBuilder AddUnsubscribeFromResourcesFilter(this IMcpServerBuilder builder, McpRequestFilter filter) => - builder.WithRequestFilters(filters => filters.AddUnsubscribeFromResourcesFilter(filter)); - - /// - /// Adds a filter to the set logging level handler pipeline. - /// - /// The builder instance. - /// The filter function that wraps the handler. - /// The builder provided in . - [Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)] - public static IMcpServerBuilder AddSetLoggingLevelFilter(this IMcpServerBuilder builder, McpRequestFilter filter) => - builder.WithRequestFilters(filters => filters.AddSetLoggingLevelFilter(filter)); - - /// - /// Adds a filter to intercept all incoming JSON-RPC messages. - /// - /// The builder instance. - /// The filter function that wraps the message handler. - /// The builder provided in . - [Obsolete(Obsoletions.MessageFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)] - public static IMcpServerBuilder AddIncomingMessageFilter(this IMcpServerBuilder builder, McpMessageFilter filter) => - builder.WithMessageFilters(filters => filters.AddIncomingFilter(filter)); - - /// - /// Adds a filter to intercept all outgoing JSON-RPC messages. - /// - /// The builder instance. - /// The filter function that wraps the message handler. - /// The builder provided in . - [Obsolete(Obsoletions.MessageFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)] - public static IMcpServerBuilder AddOutgoingMessageFilter(this IMcpServerBuilder builder, McpMessageFilter filter) => - builder.WithMessageFilters(filters => filters.AddOutgoingFilter(filter)); - - #pragma warning restore CS0436 #endregion #region Transports