Skip to content

Commit 9b2aaed

Browse files
Copilotjeffhandley
andauthored
Remove MCP9002 obsolete APIs and document obsolete diagnostics (#1366)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: jeffhandley <1031940+jeffhandley@users.noreply.github.com>
1 parent ce2a5e4 commit 9b2aaed

File tree

3 files changed

+14
-138
lines changed

3 files changed

+14
-138
lines changed

docs/list-of-diagnostics.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,15 @@ If you use experimental APIs, you will get one of the diagnostics shown below. T
2323

2424
| Diagnostic ID | Description |
2525
| :------------ | :---------- |
26-
| `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)). |
26+
| `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)). |
27+
28+
## Obsolete APIs
29+
30+
Obsolete diagnostic IDs are in the format `MCP9###`.
31+
32+
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.
33+
34+
| Diagnostic ID | Status | Description |
35+
| :------------ | :----- | :---------- |
36+
| `MCP9001` | In place | The `EnumSchema` and `LegacyTitledEnumSchema` APIs are deprecated as of specification version 2025-11-25. Use the current schema APIs instead. |
37+
| `MCP9002` | Removed | The `AddXxxFilter` extension methods on `IMcpServerBuilder` (e.g., `AddListToolsFilter`, `AddCallToolFilter`, `AddIncomingMessageFilter`) were superseded by `WithRequestFilters()` and `WithMessageFilters()`. |

src/Common/Obsoletions.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ internal static class Obsoletions
2323
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.";
2424
public const string LegacyTitledEnumSchema_Url = "https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1330";
2525

26-
public const string MessageAndRequestFilter_DiagnosticId = "MCP9002";
27-
public const string MessageAndRequestFilter_Url = "https://github.com/modelcontextprotocol/csharp-sdk/pull/1308";
28-
public const string MessageFilter_Message = "Use WithMessageFilters() instead.";
29-
public const string RequestFilter_Message = "Use WithRequestFilters() instead.";
26+
// MCP9002 was used for the AddXxxFilter extension methods on IMcpServerBuilder that were superseded by
27+
// WithMessageFilters() and WithRequestFilters(). The APIs were removed; do not reuse this diagnostic ID.
3028
}

src/ModelContextProtocol/McpServerBuilderExtensions.cs

Lines changed: 0 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -925,139 +925,6 @@ public static IMcpServerBuilder WithRequestFilters(this IMcpServerBuilder builde
925925
return builder;
926926
}
927927

928-
#pragma warning disable CS0436 // ObsoleteAttribute polyfill conflicts with framework type on netstandard.
929-
930-
/// <summary>
931-
/// Adds a filter to the list resource templates handler pipeline.
932-
/// </summary>
933-
/// <param name="builder">The builder instance.</param>
934-
/// <param name="filter">The filter function that wraps the handler.</param>
935-
/// <returns>The builder provided in <paramref name="builder"/>.</returns>
936-
[Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)]
937-
public static IMcpServerBuilder AddListResourceTemplatesFilter(this IMcpServerBuilder builder, McpRequestFilter<ListResourceTemplatesRequestParams, ListResourceTemplatesResult> filter) =>
938-
builder.WithRequestFilters(filters => filters.AddListResourceTemplatesFilter(filter));
939-
940-
/// <summary>
941-
/// Adds a filter to the list tools handler pipeline.
942-
/// </summary>
943-
/// <param name="builder">The builder instance.</param>
944-
/// <param name="filter">The filter function that wraps the handler.</param>
945-
/// <returns>The builder provided in <paramref name="builder"/>.</returns>
946-
[Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)]
947-
public static IMcpServerBuilder AddListToolsFilter(this IMcpServerBuilder builder, McpRequestFilter<ListToolsRequestParams, ListToolsResult> filter) =>
948-
builder.WithRequestFilters(filters => filters.AddListToolsFilter(filter));
949-
950-
/// <summary>
951-
/// Adds a filter to the call tool handler pipeline.
952-
/// </summary>
953-
/// <param name="builder">The builder instance.</param>
954-
/// <param name="filter">The filter function that wraps the handler.</param>
955-
/// <returns>The builder provided in <paramref name="builder"/>.</returns>
956-
[Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)]
957-
public static IMcpServerBuilder AddCallToolFilter(this IMcpServerBuilder builder, McpRequestFilter<CallToolRequestParams, CallToolResult> filter) =>
958-
builder.WithRequestFilters(filters => filters.AddCallToolFilter(filter));
959-
960-
/// <summary>
961-
/// Adds a filter to the list prompts handler pipeline.
962-
/// </summary>
963-
/// <param name="builder">The builder instance.</param>
964-
/// <param name="filter">The filter function that wraps the handler.</param>
965-
/// <returns>The builder provided in <paramref name="builder"/>.</returns>
966-
[Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)]
967-
public static IMcpServerBuilder AddListPromptsFilter(this IMcpServerBuilder builder, McpRequestFilter<ListPromptsRequestParams, ListPromptsResult> filter) =>
968-
builder.WithRequestFilters(filters => filters.AddListPromptsFilter(filter));
969-
970-
/// <summary>
971-
/// Adds a filter to the get prompt handler pipeline.
972-
/// </summary>
973-
/// <param name="builder">The builder instance.</param>
974-
/// <param name="filter">The filter function that wraps the handler.</param>
975-
/// <returns>The builder provided in <paramref name="builder"/>.</returns>
976-
[Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)]
977-
public static IMcpServerBuilder AddGetPromptFilter(this IMcpServerBuilder builder, McpRequestFilter<GetPromptRequestParams, GetPromptResult> filter) =>
978-
builder.WithRequestFilters(filters => filters.AddGetPromptFilter(filter));
979-
980-
/// <summary>
981-
/// Adds a filter to the list resources handler pipeline.
982-
/// </summary>
983-
/// <param name="builder">The builder instance.</param>
984-
/// <param name="filter">The filter function that wraps the handler.</param>
985-
/// <returns>The builder provided in <paramref name="builder"/>.</returns>
986-
[Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)]
987-
public static IMcpServerBuilder AddListResourcesFilter(this IMcpServerBuilder builder, McpRequestFilter<ListResourcesRequestParams, ListResourcesResult> filter) =>
988-
builder.WithRequestFilters(filters => filters.AddListResourcesFilter(filter));
989-
990-
/// <summary>
991-
/// Adds a filter to the read resource handler pipeline.
992-
/// </summary>
993-
/// <param name="builder">The builder instance.</param>
994-
/// <param name="filter">The filter function that wraps the handler.</param>
995-
/// <returns>The builder provided in <paramref name="builder"/>.</returns>
996-
[Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)]
997-
public static IMcpServerBuilder AddReadResourceFilter(this IMcpServerBuilder builder, McpRequestFilter<ReadResourceRequestParams, ReadResourceResult> filter) =>
998-
builder.WithRequestFilters(filters => filters.AddReadResourceFilter(filter));
999-
1000-
/// <summary>
1001-
/// Adds a filter to the complete handler pipeline.
1002-
/// </summary>
1003-
/// <param name="builder">The builder instance.</param>
1004-
/// <param name="filter">The filter function that wraps the handler.</param>
1005-
/// <returns>The builder provided in <paramref name="builder"/>.</returns>
1006-
[Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)]
1007-
public static IMcpServerBuilder AddCompleteFilter(this IMcpServerBuilder builder, McpRequestFilter<CompleteRequestParams, CompleteResult> filter) =>
1008-
builder.WithRequestFilters(filters => filters.AddCompleteFilter(filter));
1009-
1010-
/// <summary>
1011-
/// Adds a filter to the subscribe-to-resources handler pipeline.
1012-
/// </summary>
1013-
/// <param name="builder">The builder instance.</param>
1014-
/// <param name="filter">The filter function that wraps the handler.</param>
1015-
/// <returns>The builder provided in <paramref name="builder"/>.</returns>
1016-
[Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)]
1017-
public static IMcpServerBuilder AddSubscribeToResourcesFilter(this IMcpServerBuilder builder, McpRequestFilter<SubscribeRequestParams, EmptyResult> filter) =>
1018-
builder.WithRequestFilters(filters => filters.AddSubscribeToResourcesFilter(filter));
1019-
1020-
/// <summary>
1021-
/// Adds a filter to the unsubscribe-from-resources handler pipeline.
1022-
/// </summary>
1023-
/// <param name="builder">The builder instance.</param>
1024-
/// <param name="filter">The filter function that wraps the handler.</param>
1025-
/// <returns>The builder provided in <paramref name="builder"/>.</returns>
1026-
[Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)]
1027-
public static IMcpServerBuilder AddUnsubscribeFromResourcesFilter(this IMcpServerBuilder builder, McpRequestFilter<UnsubscribeRequestParams, EmptyResult> filter) =>
1028-
builder.WithRequestFilters(filters => filters.AddUnsubscribeFromResourcesFilter(filter));
1029-
1030-
/// <summary>
1031-
/// Adds a filter to the set logging level handler pipeline.
1032-
/// </summary>
1033-
/// <param name="builder">The builder instance.</param>
1034-
/// <param name="filter">The filter function that wraps the handler.</param>
1035-
/// <returns>The builder provided in <paramref name="builder"/>.</returns>
1036-
[Obsolete(Obsoletions.RequestFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)]
1037-
public static IMcpServerBuilder AddSetLoggingLevelFilter(this IMcpServerBuilder builder, McpRequestFilter<SetLevelRequestParams, EmptyResult> filter) =>
1038-
builder.WithRequestFilters(filters => filters.AddSetLoggingLevelFilter(filter));
1039-
1040-
/// <summary>
1041-
/// Adds a filter to intercept all incoming JSON-RPC messages.
1042-
/// </summary>
1043-
/// <param name="builder">The builder instance.</param>
1044-
/// <param name="filter">The filter function that wraps the message handler.</param>
1045-
/// <returns>The builder provided in <paramref name="builder"/>.</returns>
1046-
[Obsolete(Obsoletions.MessageFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)]
1047-
public static IMcpServerBuilder AddIncomingMessageFilter(this IMcpServerBuilder builder, McpMessageFilter filter) =>
1048-
builder.WithMessageFilters(filters => filters.AddIncomingFilter(filter));
1049-
1050-
/// <summary>
1051-
/// Adds a filter to intercept all outgoing JSON-RPC messages.
1052-
/// </summary>
1053-
/// <param name="builder">The builder instance.</param>
1054-
/// <param name="filter">The filter function that wraps the message handler.</param>
1055-
/// <returns>The builder provided in <paramref name="builder"/>.</returns>
1056-
[Obsolete(Obsoletions.MessageFilter_Message, DiagnosticId = Obsoletions.MessageAndRequestFilter_DiagnosticId, UrlFormat = Obsoletions.MessageAndRequestFilter_Url)]
1057-
public static IMcpServerBuilder AddOutgoingMessageFilter(this IMcpServerBuilder builder, McpMessageFilter filter) =>
1058-
builder.WithMessageFilters(filters => filters.AddOutgoingFilter(filter));
1059-
1060-
#pragma warning restore CS0436
1061928
#endregion
1062929

1063930
#region Transports

0 commit comments

Comments
 (0)