using System.ComponentModel; using System.Text.Json.Serialization; using ModelContextProtocol.Client; using ModelContextProtocol.Server; namespace ModelContextProtocol.Protocol; /// /// Represents the capabilities that a client supports. /// /// /// /// Capabilities define the features and functionality that a client can handle when communicating with an MCP server. /// These are advertised to the server during the initialize handshake. /// /// /// See the schema for details. /// /// public sealed class ClientCapabilities { /// /// Gets or sets experimental, non-standard capabilities that the client supports. /// /// /// /// The dictionary allows clients to advertise support for features that are not yet /// standardized in the Model Context Protocol specification. This extension mechanism enables /// future protocol enhancements while maintaining backward compatibility. /// /// /// Values in this dictionary are implementation-specific and should be coordinated between client /// and server implementations. Servers should not assume the presence of any experimental capability /// without checking for it first. /// /// [JsonPropertyName("experimental")] public IDictionary? Experimental { get; set; } /// /// Gets or sets the client's roots capability, which are entry points for resource navigation. /// /// /// /// When is non-, the client indicates that it can respond to /// server requests for listing root URIs. Root URIs serve as entry points for resource navigation in the protocol. /// /// /// The server can use to request the list of /// available roots from the client, which will trigger the client's . /// /// [JsonPropertyName("roots")] public RootsCapability? Roots { get; set; } /// /// Gets or sets the client's sampling capability, which indicates whether the client /// supports issuing requests to an LLM on behalf of the server. /// [JsonPropertyName("sampling")] public SamplingCapability? Sampling { get; set; } /// /// Gets or sets the client's elicitation capability, which indicates whether the client /// supports elicitation of additional information from the user on behalf of the server. /// [JsonPropertyName("elicitation")] public ElicitationCapability? Elicitation { get; set; } }