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; }
}