Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/ModelContextProtocol.Core/Protocol/ContentBlock.cs
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ private protected ContentBlock()
/// Provides a polymorphic converter for the <see cref="ContentBlock"/> class that doesn't require
/// setting <see cref="JsonSerializerOptions.AllowOutOfOrderMetadataProperties"/> explicitly.
[EditorBrowsable(EditorBrowsableState.Never)]
public class Converter : JsonConverter<ContentBlock>
public sealed class Converter : JsonConverter<ContentBlock>
{
/// <inheritdoc/>
public override ContentBlock? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
Expand Down
24 changes: 5 additions & 19 deletions src/ModelContextProtocol.Core/Protocol/ElicitRequestParams.cs
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public string Mode
public McpTaskMetadata? Task { get; set; }

/// <summary>Represents a request schema used in a form mode elicitation request.</summary>
public class RequestSchema
public sealed class RequestSchema
{
/// <summary>Gets the type of the schema.</summary>
/// <remarks>This value is always "object".</remarks>
Expand Down Expand Up @@ -161,7 +161,7 @@ protected private PrimitiveSchemaDefinition()
/// Provides a polymorphic converter for the <see cref="PrimitiveSchemaDefinition"/> class that doesn't require
/// setting <see cref="JsonSerializerOptions.AllowOutOfOrderMetadataProperties"/> explicitly.
[EditorBrowsable(EditorBrowsableState.Never)]
public class Converter : JsonConverter<PrimitiveSchemaDefinition>
public sealed class Converter : JsonConverter<PrimitiveSchemaDefinition>
{
/// <inheritdoc/>
public override PrimitiveSchemaDefinition? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
Expand Down Expand Up @@ -315,11 +315,9 @@ public class Converter : JsonConverter<PrimitiveSchemaDefinition>
{
if (enumNames is not null)
{
// EnumSchema is deprecated but supported for backward compatibility.
// Use the EnumSchema class, which is an alias for LegacyTitledEnumSchema,
// to ensure backward compatibility with existing code relying on that type.
// LegacyTitledEnumSchema is deprecated but supported for backward compatibility.
#pragma warning disable MCP9001
psd = new EnumSchema
psd = new LegacyTitledEnumSchema
#pragma warning restore MCP9001
{
Enum = enumValues,
Expand Down Expand Up @@ -996,24 +994,12 @@ public override string Type

/// <summary>
/// Represents a legacy schema for an enum type with enumNames.
/// This is a compatibility alias for <see cref="LegacyTitledEnumSchema"/>.
/// </summary>
/// <remarks>
/// This schema is deprecated in favor of <see cref="TitledSingleSelectEnumSchema"/>.
/// </remarks>
[Obsolete(Obsoletions.LegacyTitledEnumSchema_Message, DiagnosticId = Obsoletions.LegacyTitledEnumSchema_DiagnosticId, UrlFormat = Obsoletions.LegacyTitledEnumSchema_Url)]
public sealed class EnumSchema : LegacyTitledEnumSchema
{
}

/// <summary>
/// Represents a legacy schema for an enum type with enumNames.
/// </summary>
/// <remarks>
/// This schema is deprecated in favor of <see cref="TitledSingleSelectEnumSchema"/>.
/// </remarks>
[Obsolete(Obsoletions.LegacyTitledEnumSchema_Message, DiagnosticId = Obsoletions.LegacyTitledEnumSchema_DiagnosticId, UrlFormat = Obsoletions.LegacyTitledEnumSchema_Url)]
public class LegacyTitledEnumSchema : PrimitiveSchemaDefinition
public sealed class LegacyTitledEnumSchema : PrimitiveSchemaDefinition
{
/// <inheritdoc/>
[JsonPropertyName("type")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace ModelContextProtocol.Protocol;
/// but is not serialized as part of the JSON-RPC payload. This includes transport references, execution context,
/// and authenticated user information.
/// </remarks>
public class JsonRpcMessageContext
public sealed class JsonRpcMessageContext
{
/// <summary>
/// Gets or sets the transport the <see cref="JsonRpcMessage"/> was received on or should be sent over.
Expand Down
2 changes: 1 addition & 1 deletion src/ModelContextProtocol.Core/Protocol/ResourceContents.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ private protected ResourceContents()
/// Provides a <see cref="JsonConverter"/> for <see cref="ResourceContents"/>.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public class Converter : JsonConverter<ResourceContents>
public sealed class Converter : JsonConverter<ResourceContents>
{
/// <inheritdoc/>
public override ResourceContents? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
Expand Down
14 changes: 7 additions & 7 deletions tests/ModelContextProtocol.Tests/Protocol/EnumSchemaTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ public void LegacyTitledEnumSchema_Serializes_Correctly()

// Assert
Assert.NotNull(deserialized);
var result = Assert.IsType<ElicitRequestParams.EnumSchema>(deserialized);
var result = Assert.IsType<ElicitRequestParams.LegacyTitledEnumSchema>(deserialized);
Assert.Equal("string", result.Type);
Assert.Equal("Environment", result.Title);
Assert.Equal("Deployment environment", result.Description);
Expand All @@ -309,10 +309,10 @@ public void LegacyTitledEnumSchema_Serializes_Correctly()
}

[Fact]
public void EnumSchema_Serializes_Correctly()
public void LegacyTitledEnumSchema_Direct_Serializes_Correctly()
{
// Arrange
var schema = new ElicitRequestParams.EnumSchema
var schema = new ElicitRequestParams.LegacyTitledEnumSchema
{
Title = "Environment",
Description = "Deployment environment",
Expand All @@ -327,7 +327,7 @@ public void EnumSchema_Serializes_Correctly()

// Assert
Assert.NotNull(deserialized);
var result = Assert.IsType<ElicitRequestParams.EnumSchema>(deserialized);
var result = Assert.IsType<ElicitRequestParams.LegacyTitledEnumSchema>(deserialized);
Assert.Equal("string", result.Type);
Assert.Equal("Environment", result.Title);
Assert.Equal("Deployment environment", result.Description);
Expand All @@ -338,9 +338,9 @@ public void EnumSchema_Serializes_Correctly()
}

[Fact]
public void Enum_WithEnumNames_Deserializes_As_EnumSchema()
public void Enum_WithEnumNames_Deserializes_As_LegacyTitledEnumSchema()
{
// Arrange - JSON with enumNames should deserialize as (deprecated) EnumSchema
// Arrange - JSON with enumNames should deserialize as (deprecated) LegacyTitledEnumSchema
string json = """
{
"type": "string",
Expand All @@ -356,7 +356,7 @@ public void Enum_WithEnumNames_Deserializes_As_EnumSchema()

// Assert
Assert.NotNull(deserialized);
var result = Assert.IsType<ElicitRequestParams.EnumSchema>(deserialized);
var result = Assert.IsType<ElicitRequestParams.LegacyTitledEnumSchema>(deserialized);
Assert.Equal("string", result.Type);
Assert.Equal("Environment", result.Title);
Assert.Equal("Deployment environment", result.Description);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ public static void LegacyTitledEnumSchema_UnknownProperties_AreIgnored()
json,
McpJsonUtilities.DefaultOptions);
Assert.NotNull(result);
var enumSchema = Assert.IsType<ElicitRequestParams.EnumSchema>(result);
var enumSchema = Assert.IsType<ElicitRequestParams.LegacyTitledEnumSchema>(result);
Assert.Equal("string", enumSchema.Type);
Assert.Equal(2, enumSchema.Enum.Count);
Assert.Contains("option1", enumSchema.Enum);
Expand Down