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